GTAGS
/examples/librados/.libs/
/examples/librados/librados_hello_world
-/examples/librados/librados_hello_world_c
Requires: librados2 = %{version}-%{release}
Requires: librbd1 = %{version}-%{release}
Requires: libcephfs1 = %{version}-%{release}
-BuildRequires: lttng-ust-devel
%description -n ceph-test
This package contains Ceph benchmarks and test tools.
%{_bindir}/ceph-monstore-tool
%{_bindir}/ceph-osdomap-tool
%{_bindir}/ceph-kvstore-tool
-%{_mandir}/man8/rbd-replay.8*
-%{_mandir}/man8/rbd-replay-prep.8*
-%{_bindir}/rbd-replay
-%{_bindir}/rbd-replay-prep
%files -n libcephfs_jni1
%defattr(-,root,root,-)
AC_CHECK_TYPES([__u8, __s8, __u16, __s16, __u32, __s32, __u64, __s64, __le16,
__be16, __le32, __be32, __le64, __be64], [], [], [[#include <linux/types.h>]])
-
-AC_ARG_WITH([lttng],
- [AS_HELP_STRING([--with-lttng], [Trace with LTTng])])
-AS_IF([test "x$with_lttng" = "xno"], [use_lttng=no],
- [test "x$with_lttng" = "xyes"], [use_lttng=yes],
- [AC_CHECK_HEADERS([lttng/tracepoint.h], [use_lttng=yes], [use_lttng=no])])
-AM_CONDITIONAL([WITH_LTTNG], test x"$use_lttng" = x"yes")
-AM_COND_IF([WITH_LTTNG], [
- AC_DEFINE([WITH_LTTNG], [1], [Define if you want to use LTTng])
-
- AC_CHECK_HEADER([lttng/tracepoint.h], [],
- AC_MSG_ERROR([lttng/tracepoint.h not found (liblttng-ust-dev)]))
-
- AC_CHECK_PROG([LTTNG_GEN_TP_CHECK], [lttng-gen-tp], [yes])
- if test x"$LTTNG_GEN_TP_CHECK" != "xyes"; then
- AC_MSG_FAILURE([lttng-gen-tp not found])
- fi
- AC_SUBST([LTTNG_GEN_TP_PROG], [lttng-gen-tp])
-
- AC_MSG_CHECKING([if time_t is an integer])
- AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <time.h>]], [[
- struct {
- unsigned int time_t_is_integer: ((time_t) 1.5 == 1) ? 1 : -1;
- } x;
- return 0;
- ]])], [
- AC_MSG_RESULT([yes])
- ], [
- AC_MSG_RESULT([no])
- AC_MSG_FAILURE([time_t is not an integer. We assume this for tracing.])
- ])
-
- AC_MSG_CHECKING([if time_t fits in uint64_t])
- AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <time.h>
- #include <inttypes.h>]], [[
- struct {
- unsigned int time_t_fits_in_uin64_t: (sizeof(time_t) <= sizeof(uint64_t)) ? 1 : -1;
- } x;
- return 0;
- ]])], [
- AC_MSG_RESULT([yes])
- ], [
- AC_MSG_RESULT([no])
- AC_MSG_FAILURE([time_t is larger than uint64_t. We assume it can be cast to uint64_t, for tracing.])
- ])
-], [
- AC_DEFINE([tracepoint(...)], [], [LTTng is disabled, so define this macro to be nothing.])
-])
-
-
# Checks for typedefs, structures, and compiler characteristics.
#AC_HEADER_STDBOOL
#AC_C_CONST
src/ocf/ceph
src/ocf/rbd
src/java/Makefile
- src/tracing/Makefile
man/Makefile
ceph.spec])
AC_OUTPUT
usr/bin/ceph-osdomap-tool
usr/bin/ceph-kvstore-tool
usr/share/java/libcephfs-test.jar
-usr/bin/rbd-replay
-usr/bin/rbd-replay-prep
-usr/share/man/man8/rbd-replay.8
-usr/share/man/man8/rbd-replay-prep.8
libleveldb-dev,
libnss3-dev,
libsnappy-dev,
- liblttng-ust-dev,
libtool,
libudev-dev,
libxml2-dev,
extraopts += --without-libatomic-ops
endif
-ifeq ($(shell dpkg-vendor --derives-from ubuntu && echo yes),yes)
- codename = $(shell lsb_release -a | sed -rn 's/Codename:\s([^\s]*)/\1/p')
- ifeq ($(codename),trusty)
- extraopts += --without-lttng
- endif
-endif
-
configure: configure-stamp
configure-stamp:
dh_testdir
+++ /dev/null
-====================================================================================
- rbd-replay-prep -- prepare captured rados block device (RBD) workloads for replay
-====================================================================================
-
-.. program:: rbd-replay-prep
-
-Synopsis
-========
-
-| **rbd-replay-prep** [ --window *seconds* ] *trace_dir* *replay_file*
-
-
-Description
-===========
-
-**rbd-replay-prep** processes raw rados block device (RBD) traces to prepare them for **rbd-replay**.
-
-
-Options
-=======
-
-.. option:: --window seconds
-
- Requests further apart than 'seconds' seconds are assumed to be independent.
-
-
-Examples
-========
-
-To prepare workload1-trace for replay::
-
- rbd-replay-prep workload1-trace/ust/uid/1000/64-bit workload1
-
-
-Availability
-============
-
-**rbd-replay-prep** is part of the Ceph distributed storage system. Please refer to
-the Ceph documentation at http://ceph.com/docs for more information.
-
-
-See also
-========
-
-:doc:`rbd-replay <rbd-replay>`\(8),
-:doc:`rbd <rbd>`\(8)
+++ /dev/null
-=========================================================
- rbd-replay -- replay rados block device (RBD) workloads
-=========================================================
-
-.. program:: rbd-replay
-
-Synopsis
-========
-
-| **rbd-replay** [ *options* ] *replay_file*
-
-
-Description
-===========
-
-**rbd-replay** is a utility for replaying rados block device (RBD) workloads.
-
-
-Options
-=======
-
-.. option:: -c ceph.conf, --conf ceph.conf
-
- Use ceph.conf configuration file instead of the default /etc/ceph/ceph.conf to
- determine monitor addresses during startup.
-
-.. option:: -p pool, --pool pool
-
- Interact with the given pool. Defaults to 'rbd'.
-
-.. option:: --latency-multiplier
-
- Multiplies inter-request latencies. Default: 1.
-
-.. option:: --read-only
-
- Only replay non-destructive requests.
-
-.. option:: --map-image rule
-
- Add a rule to map image names in the trace to image names in the replay cluster.
- A rule of image1@snap1=image2@snap2 would map snap1 of image1 to snap2 of image2.
-
-
-Examples
-========
-
-To replay workload1 as fast as possible::
-
- rbd-replay --latency-multiplier=0 workload1
-
-To replay workload1 but use test_image instead of prod_image::
-
- rbd-replay --map-image=prod_image=test_image workload1
-
-
-Availability
-============
-
-**rbd-replay** is part of the Ceph distributed storage system. Please refer to
-the Ceph documentation at http://ceph.com/docs for more information.
-
-
-See also
-========
-
-:doc:`rbd-replay-prep <rbd-replay-prep>`\(8),
-:doc:`rbd <rbd>`\(8)
-all: librados_hello_world librados_hello_world_c
-
-librados_hello_world: hello_world.cc
- g++ -g -c hello_world.cc -o hello_world.o $(CFLAGS)
- g++ -g hello_world.o -lrados -o librados_hello_world $(LDFLAGS)
-
-librados_hello_world_c: hello_world_c.c
- cc -g -c hello_world_c.c -o hello_world_c.o $(CFLAGS)
- cc -g hello_world_c.o -lrados -o librados_hello_world_c $(LDFLAGS)
-
+all: hello_world.cc
+ g++ -g -c hello_world.cc -o hello_world.o
+ g++ -g hello_world.o -lrados -o librados_hello_world
clean:
- rm hello_world.o librados_hello_world
- rm hello_world_c.o librados_hello_world_c
+ rm hello_world.o librados_hello_world
\ No newline at end of file
+++ /dev/null
-// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
-// vim: ts=8 sw=2 smarttab
-/*
- * Ceph - scalable distributed file system
- *
- * 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.
- * Copyright 2013 Inktank
- */
-
-// install the librados-dev package to get this
-#include <rados/librados.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-int main(int argc, const char **argv)
-{
- int ret = 0;
-
- // we will use all of these below
- const char *pool_name = "hello_world_pool";
- const char* hello = "hello world!";
- const char* object_name = "hello_object";
- rados_ioctx_t io_ctx = NULL;
- int pool_created = 0;
-
- // first, we create a Rados object and initialize it
- rados_t rados = NULL;
- {
- ret = rados_create(&rados, "admin"); // just use the client.admin keyring
- if (ret < 0) { // let's handle any error that might have come back
- printf("couldn't initialize rados! error %d\n", ret);
- ret = EXIT_FAILURE;
- goto out;
- } else {
- printf("we just set up a rados cluster object\n");
- }
- }
-
- /*
- * Now we need to get the rados object its config info. It can
- * parse argv for us to find the id, monitors, etc, so let's just
- * use that.
- */
- {
- ret = rados_conf_parse_argv(rados, argc, argv);
- if (ret < 0) {
- // This really can't happen, but we need to check to be a good citizen.
- printf("failed to parse config options! error %d\n", ret);
- ret = EXIT_FAILURE;
- goto out;
- } else {
- printf("we just parsed our config options\n");
- // We also want to apply the config file if the user specified
- // one, and conf_parse_argv won't do that for us.
- int i;
- for (i = 0; i < argc; ++i) {
- if ((strcmp(argv[i], "-c") == 0) || (strcmp(argv[i], "--conf") == 0)) {
- ret = rados_conf_read_file(rados, argv[i+1]);
- if (ret < 0) {
- // This could fail if the config file is malformed, but it'd be hard.
- printf("failed to parse config file %s! error %d\n", argv[i+1], ret);
- ret = EXIT_FAILURE;
- goto out;
- }
- break;
- }
- }
- }
- }
-
- /*
- * next, we actually connect to the cluster
- */
- {
- ret = rados_connect(rados);
- if (ret < 0) {
- printf("couldn't connect to cluster! error %d\n", ret);
- ret = EXIT_FAILURE;
- goto out;
- } else {
- printf("we just connected to the rados cluster\n");
- }
- }
-
- /*
- * let's create our own pool instead of scribbling over real data.
- * Note that this command creates pools with default PG counts specified
- * by the monitors, which may not be appropriate for real use -- it's fine
- * for testing, though.
- */
- {
- ret = rados_pool_create(rados, pool_name);
- if (ret < 0) {
- printf("couldn't create pool! error %d\n", ret);
- return EXIT_FAILURE;
- } else {
- printf("we just created a new pool named %s\n", pool_name);
- }
- pool_created = 1;
- }
-
- /*
- * create an "IoCtx" which is used to do IO to a pool
- */
- {
- ret = rados_ioctx_create(rados, pool_name, &io_ctx);
- if (ret < 0) {
- printf("couldn't set up ioctx! error %d\n", ret);
- ret = EXIT_FAILURE;
- goto out;
- } else {
- printf("we just created an ioctx for our pool\n");
- }
- }
-
- /*
- * now let's do some IO to the pool! We'll write "hello world!" to a
- * new object.
- */
- {
- /*
- * now that we have the data to write, let's send it to an object.
- * We'll use the synchronous interface for simplicity.
- */
- ret = rados_write_full(io_ctx, object_name, hello, strlen(hello));
- if (ret < 0) {
- printf("couldn't write object! error %d\n", ret);
- ret = EXIT_FAILURE;
- goto out;
- } else {
- printf("we just wrote new object %s, with contents '%s'\n", object_name, hello);
- }
- }
-
- /*
- * now let's read that object back! Just for fun, we'll do it using
- * async IO instead of synchronous. (This would be more useful if we
- * wanted to send off multiple reads at once; see
- * http://ceph.com/docs/master/rados/api/librados/#asychronous-io )
- */
- {
- int read_len = 4194304; // this is way more than we need
- char* read_buf = malloc(read_len + 1); // add one for the terminating 0 we'll add later
- if (!read_buf) {
- printf("couldn't allocate read buffer\n");
- ret = EXIT_FAILURE;
- goto out;
- }
- // allocate the completion from librados
- rados_completion_t read_completion;
- ret = rados_aio_create_completion(NULL, NULL, NULL, &read_completion);
- if (ret < 0) {
- printf("couldn't create completion! error %d\n", ret);
- ret = EXIT_FAILURE;
- free(read_buf);
- goto out;
- } else {
- printf("we just created a new completion\n");
- }
- // send off the request.
- ret = rados_aio_read(io_ctx, object_name, read_completion, read_buf, read_len, 0);
- if (ret < 0) {
- printf("couldn't start read object! error %d\n", ret);
- ret = EXIT_FAILURE;
- free(read_buf);
- rados_aio_release(read_completion);
- goto out;
- }
- // wait for the request to complete, and check that it succeeded.
- rados_aio_wait_for_complete(read_completion);
- ret = rados_aio_get_return_value(read_completion);
- if (ret < 0) {
- printf("couldn't read object! error %d\n", ret);
- ret = EXIT_FAILURE;
- free(read_buf);
- rados_aio_release(read_completion);
- goto out;
- } else {
- read_buf[ret] = 0; // null-terminate the string
- printf("we read our object %s, and got back %d bytes with contents\n%s\n", object_name, ret, read_buf);
- }
-
- free(read_buf);
- rados_aio_release(read_completion);
- }
-
- /*
- * We can also use xattrs that go alongside the object.
- */
- {
- const char* version = "1";
- ret = rados_setxattr(io_ctx, object_name, "version", version, strlen(version));
- if (ret < 0) {
- printf("failed to set xattr version entry! error %d\n", ret);
- ret = EXIT_FAILURE;
- goto out;
- } else {
- printf("we set the xattr 'version' on our object!\n");
- }
- }
-
- /*
- * And if we want to be really cool, we can do multiple things in a single
- * atomic operation. For instance, we can update the contents of our object
- * and set the version at the same time.
- */
- {
- const char* content = "v2";
- rados_write_op_t write_op = rados_create_write_op();
- if (!write_op) {
- printf("failed to allocate write op\n");
- ret = EXIT_FAILURE;
- goto out;
- }
- rados_write_op_write_full(write_op, content, strlen(content));
- const char* version = "2";
- rados_write_op_setxattr(write_op, "version", version, strlen(version));
- ret = rados_write_op_operate(write_op, io_ctx, object_name, NULL, 0);
- if (ret < 0) {
- printf("failed to do compound write! error %d\n", ret);
- ret = EXIT_FAILURE;
- rados_release_write_op(write_op);
- goto out;
- } else {
- printf("we overwrote our object %s with contents\n%s\n", object_name, content);
- }
- rados_release_write_op(write_op);
- }
-
- /*
- * And to be even cooler, we can make sure that the object looks the
- * way we expect before doing the write! Notice how this attempt fails
- * because the xattr differs.
- */
- {
- rados_write_op_t failed_write_op = rados_create_write_op();
- if (!failed_write_op) {
- printf("failed to allocate write op\n");
- ret = EXIT_FAILURE;
- goto out;
- }
- const char* content = "v2";
- const char* version = "2";
- const char* old_version = "1";
- rados_write_op_cmpxattr(failed_write_op, "version", LIBRADOS_CMPXATTR_OP_EQ, old_version, strlen(old_version));
- rados_write_op_write_full(failed_write_op, content, strlen(content));
- rados_write_op_setxattr(failed_write_op, "version", version, strlen(version));
- ret = rados_write_op_operate(failed_write_op, io_ctx, object_name, NULL, 0);
- if (ret < 0) {
- printf("we just failed a write because the xattr wasn't as specified\n");
- } else {
- printf("we succeeded on writing despite an xattr comparison mismatch!\n");
- ret = EXIT_FAILURE;
- rados_release_write_op(failed_write_op);
- goto out;
- }
- rados_release_write_op(failed_write_op);
-
- /*
- * Now let's do the update with the correct xattr values so it
- * actually goes through
- */
- content = "v3";
- old_version = "2";
- version = "3";
- rados_write_op_t update_op = rados_create_write_op();
- if (!failed_write_op) {
- printf("failed to allocate write op\n");
- ret = EXIT_FAILURE;
- goto out;
- }
- rados_write_op_cmpxattr(update_op, "version", LIBRADOS_CMPXATTR_OP_EQ, old_version, strlen(old_version));
- rados_write_op_write_full(update_op, content, strlen(content));
- rados_write_op_setxattr(update_op, "version", version, strlen(version));
- ret = rados_write_op_operate(update_op, io_ctx, object_name, NULL, 0);
- if (ret < 0) {
- printf("failed to do a compound write update! error %d\n", ret);
- ret = EXIT_FAILURE;
- rados_release_write_op(update_op);
- goto out;
- } else {
- printf("we overwrote our object %s following an xattr test with contents\n%s\n", object_name, content);
- }
- rados_release_write_op(update_op);
- }
-
- ret = EXIT_SUCCESS;
-
- out:
- if (io_ctx) {
- rados_ioctx_destroy(io_ctx);
- }
-
- if (pool_created) {
- /*
- * And now we're done, so let's remove our pool and then
- * shut down the connection gracefully.
- */
- int delete_ret = rados_pool_delete(rados, pool_name);
- if (delete_ret < 0) {
- // be careful not to
- printf("We failed to delete our test pool!\n");
- ret = EXIT_FAILURE;
- }
- }
-
- rados_shutdown(rados);
-
- return ret;
-}
+++ /dev/null
-/*.log
-/replayer
-/traces
+++ /dev/null
-#!/bin/bash
-
-pool=rbd
-image=my-image
-size=10G
-export LD_LIBRARY_PATH=../../src/.libs
-#qemu-img create -f raw rbd:$pool/$image:conf=../../src/ceph.conf $size
-qemu-img convert linux-0.2.img -O raw rbd:$pool/$image:conf=../../src/ceph.conf
+++ /dev/null
-#!/bin/bash
-
-lttng create
-lttng enable-event -u 'librbd:*'
-lttng add-context -u -t pthread_id
-lttng start
-../../src/rbd-replay --conf=../../src/ceph.conf replay.bin "$@" | tee replay.log
-lttng stop
-lttng view > replay-trace.log
+++ /dev/null
-#!/bin/bash
-
-../../src/rbd-replay-prep traces/ust/uid/10002/64-bit replay.bin
+++ /dev/null
-#!/bin/bash
-
-mkdir -p traces
-lttng create -o traces librbd
-lttng enable-event -u 'librbd:*'
-lttng add-context -u -t pthread_id
-lttng start
-LD_LIBRARY_PATH=../../src/.libs/ qemu-system-i386 -m 1024 rbd:rbd/my-image:conf=../../src/ceph.conf
-lttng stop
-lttng view > trace.log
ceph-rest-api.8 \
ceph-rbdnamer.8 \
ceph-post-file.8 \
- rbd-fuse.8 \
- rbd-replay.8 \
- rbd-replay-prep.8
+ rbd-fuse.8
+++ /dev/null
-.\" Man page generated from reStructuredText.
-.
-.TH "RBD-REPLAY-PREP" "8" "August 11, 2014" "dev" "Ceph"
-.SH NAME
-rbd-replay-prep \- prepare captured rados block device (RBD) workloads for replay
-.
-.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
-..
-.
-.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
-\fBrbd\-replay\-prep\fP [ \-\-window \fIseconds\fP ] \fItrace_dir\fP \fIreplay_file\fP
-.fi
-.sp
-.SH DESCRIPTION
-.sp
-\fBrbd\-replay\-prep\fP processes raw rados block device (RBD) traces to prepare them for \fBrbd\-replay\fP\&.
-.SH OPTIONS
-.INDENT 0.0
-.TP
-.B \-\-window seconds
-Requests further apart than \(aqseconds\(aq seconds are assumed to be independent.
-.UNINDENT
-.SH EXAMPLES
-.sp
-To prepare workload1\-trace for replay:
-.INDENT 0.0
-.INDENT 3.5
-.sp
-.nf
-.ft C
-rbd\-replay\-prep workload1\-trace/ust/uid/1000/64\-bit workload1
-.ft P
-.fi
-.UNINDENT
-.UNINDENT
-.SH AVAILABILITY
-.sp
-\fBrbd\-replay\-prep\fP is part of the Ceph distributed storage system. Please refer to
-the Ceph documentation at \fI\%http://ceph.com/docs\fP for more information.
-.SH SEE ALSO
-.sp
-\fBrbd\-replay\fP(8),
-\fBrbd\fP(8)
-.SH COPYRIGHT
-2010-2014, Inktank Storage, Inc. and contributors. Licensed under Creative Commons BY-SA
-.\" Generated by docutils manpage writer.
-.
+++ /dev/null
-.\" Man page generated from reStructuredText.
-.
-.TH "RBD-REPLAY" "8" "August 07, 2014" "dev" "Ceph"
-.SH NAME
-rbd-replay \- replay rados block device (RBD) workloads
-.
-.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
-..
-.
-.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
-\fBrbd\-replay\fP [ \fIoptions\fP ] \fIreplay_file\fP
-.fi
-.sp
-.SH DESCRIPTION
-.sp
-\fBrbd\-replay\fP is a utility for replaying rados block device (RBD) workloads.
-.SH OPTIONS
-.INDENT 0.0
-.TP
-.B \-c ceph.conf, \-\-conf ceph.conf
-Use ceph.conf configuration file instead of the default /etc/ceph/ceph.conf to
-determine monitor addresses during startup.
-.UNINDENT
-.INDENT 0.0
-.TP
-.B \-p pool, \-\-pool pool
-Interact with the given pool. Defaults to \(aqrbd\(aq.
-.UNINDENT
-.INDENT 0.0
-.TP
-.B \-\-latency\-multiplier
-Multiplies inter\-request latencies. Default: 1.
-.UNINDENT
-.INDENT 0.0
-.TP
-.B \-\-read\-only
-Only replay non\-destructive requests.
-.UNINDENT
-.INDENT 0.0
-.TP
-.B \-\-map\-image rule
-Add a rule to map image names in the trace to image names in the replay cluster.
-A rule of image1@snap1=image2@snap2 would map snap1 of image1 to snap2 of image2.
-.UNINDENT
-.SH EXAMPLES
-.sp
-To replay workload1 as fast as possible:
-.INDENT 0.0
-.INDENT 3.5
-.sp
-.nf
-.ft C
-rbd\-replay \-\-latency\-multiplier=0 workload1
-.ft P
-.fi
-.UNINDENT
-.UNINDENT
-.sp
-To replay workload1 but use test_image instead of prod_image:
-.INDENT 0.0
-.INDENT 3.5
-.sp
-.nf
-.ft C
-rbd\-replay \-\-map\-image=prod_image=test_image workload1
-.ft P
-.fi
-.UNINDENT
-.UNINDENT
-.SH AVAILABILITY
-.sp
-\fBrbd\-replay\fP is part of the Ceph distributed storage system. Please refer to
-the Ceph documentation at \fI\%http://ceph.com/docs\fP for more information.
-.SH SEE ALSO
-.sp
-\fBceph\fP(8),
-\fBrbd\fP(8)
-.SH COPYRIGHT
-2010-2014, Inktank Storage, Inc. and contributors. Licensed under Creative Commons BY-SA
-.\" Generated by docutils manpage writer.
-.
/radosgw-admin
/rbd
/rbd-fuse
-/rbd-replay
-/rbd-replay-prep
/rest-bench
/sample.fetch_config
/TAGS
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
include Makefile-env.am
-SUBDIRS += ocf java tracing
-DIST_SUBDIRS += gtest ocf libs3 java tracing
+SUBDIRS += ocf java
+DIST_SUBDIRS += gtest ocf libs3 java
include rgw/Makefile.am
include cls/Makefile.am
include key_value_store/Makefile.am
-include rbd_replay/Makefile.am
include test/Makefile.am
include tools/Makefile.am
check-local:
$(srcdir)/test/encoding/readable.sh ../ceph-object-corpus
-if WITH_LTTNG
-# TODO: If we're running the parallel test harness (the preferred harness), this should be AM_TESTS_ENVIRONMENT instead.
-# See: https://www.gnu.org/software/automake/manual/html_node/Scripts_002dbased-Testsuites.html
-# I don't see the serial-tests Automake option anywhere, but my AM_TESTS_ENVIRONMENT was being ignored.
-TESTS_ENVIRONMENT = LD_PRELOAD=liblttng-ust-fork.so; export LD_PRELOAD; echo "LD_PRELOAD=$${LD_PRELOAD}";
-endif
# base targets
}
void Mutex::Lock(bool no_lockdep) {
- utime_t start;
- int r;
-
if (lockdep && g_lockdep && !no_lockdep) _will_lock();
if (TryLock()) {
- goto out;
+ return;
}
+ utime_t start;
if (logger && cct && cct->_conf->mutex_perf_counter)
start = ceph_clock_now(cct);
- r = pthread_mutex_lock(&_m);
+ int r = pthread_mutex_lock(&_m);
if (logger && cct && cct->_conf->mutex_perf_counter)
logger->tinc(l_mutex_wait,
ceph_clock_now(cct) - start);
assert(r == 0);
if (lockdep && g_lockdep) _locked();
_post_lock();
-
-out:
- ;
-}
-
-void Mutex::Unlock() {
- _pre_unlock();
- if (lockdep && g_lockdep) _will_unlock();
- int r = pthread_mutex_unlock(&_m);
- assert(r == 0);
}
assert(nlock == 0);
}
}
- void Unlock();
+ void Unlock() {
+ _pre_unlock();
+ if (lockdep && g_lockdep) _will_unlock();
+ int r = pthread_mutex_unlock(&_m);
+ assert(r == 0);
+ }
friend class Cond;
throw FailedAssertion(bt);
}
- void __ceph_assertf_fail(const char *assertion, const char *file, int line, const char *func, const char* msg, ...)
- {
- ostringstream tss;
- tss << ceph_clock_now(g_assert_context);
-
- class BufAppender {
- public:
- BufAppender(char* buf, int size) : bufptr(buf), remaining(size) {
- }
-
- void printf(const char * format, ...) {
- va_list args;
- va_start(args, format);
- this->vprintf(format, args);
- va_end(args);
- }
-
- void vprintf(const char * format, va_list args) {
- int n = vsnprintf(bufptr, remaining, format, args);
- if (n >= 0) {
- if (n < remaining) {
- remaining -= n;
- bufptr += n;
- } else {
- remaining = 0;
- }
- }
- }
-
- private:
- char* bufptr;
- int remaining;
- };
-
- char buf[8096];
- BufAppender ba(buf, sizeof(buf));
- BackTrace *bt = new BackTrace(1);
- ba.printf("%s: In function '%s' thread %llx time %s\n"
- "%s: %d: FAILED assert(%s)\n",
- file, func, (unsigned long long)pthread_self(), tss.str().c_str(),
- file, line, assertion);
- ba.printf("Assertion details: ");
- va_list args;
- va_start(args, msg);
- ba.vprintf(msg, args);
- va_end(args);
- ba.printf("\n");
- dout_emergency(buf);
-
- // TODO: get rid of this memory allocation.
- ostringstream oss;
- bt->print(oss);
- dout_emergency(oss.str());
-
- dout_emergency(" NOTE: a copy of the executable, or `objdump -rdS <executable>` "
- "is needed to interpret this.\n");
-
- if (g_assert_context) {
- lderr(g_assert_context) << buf << std::endl;
- bt->print(*_dout);
- *_dout << " NOTE: a copy of the executable, or `objdump -rdS <executable>` "
- << "is needed to interpret this.\n" << dendl;
-
- g_assert_context->_log->dump_recent();
- }
-
- throw FailedAssertion(bt);
- }
-
void __ceph_assert_warn(const char *assertion, const char *file,
int line, const char *func)
{
SUBSYS(objecter, 0, 1)
SUBSYS(rados, 0, 5)
SUBSYS(rbd, 0, 5)
-SUBSYS(rbd_replay, 0, 5)
SUBSYS(journaler, 0, 5)
SUBSYS(objectcacher, 0, 5)
SUBSYS(client, 0, 5)
extern void register_assert_context(CephContext *cct);
extern void __ceph_assert_fail(const char *assertion, const char *file, int line, const char *function)
__attribute__ ((__noreturn__));
-extern void __ceph_assertf_fail(const char *assertion, const char *file, int line, const char *function, const char* msg, ...)
- __attribute__ ((__noreturn__));
extern void __ceph_assert_warn(const char *assertion, const char *file, int line, const char *function);
#define ceph_assert(expr) \
? __CEPH_ASSERT_VOID_CAST (0) \
: __ceph_assert_fail (__STRING(expr), __FILE__, __LINE__, __CEPH_ASSERT_FUNCTION))
-// Named by analogy with printf. Along with an expression, takes a format
-// string and parameters which are printed if the assertion fails.
-#define assertf(expr, ...) \
- ((expr) \
- ? __CEPH_ASSERT_VOID_CAST (0) \
- : __ceph_assertf_fail (__STRING(expr), __FILE__, __LINE__, __CEPH_ASSERT_FUNCTION, __VA_ARGS__))
RBD();
~RBD();
- // This must be dynamically allocated with new, and
- // must be released with release().
- // Do not use delete.
struct AioCompletion {
void *pc;
AioCompletion(void *cb_arg, callback_t complete_cb);
librados_la_CXXFLAGS = ${AM_CXXFLAGS}
LIBRADOS_DEPS += libcls_lock_client.la $(LIBOSDC) $(LIBCOMMON)
-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
if LINUX
#include <list>
#include <stdexcept>
-#ifdef WITH_LTTNG
-#include "tracing/librados.h"
-#endif
-
using std::string;
using std::map;
using std::set;
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;
+ return rados_create_common(pcluster, "ceph", &iparams);
}
// as above, but
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
CephInitParameters iparams(CEPH_ENTITY_TYPE_CLIENT);
- if (!name || !iparams.name.from_str(name)) {
- tracepoint(librados, rados_create2_exit, -EINVAL, *pcluster);
+ if (!name || !iparams.name.from_str(name))
return -EINVAL;
- }
- int retval = rados_create_common(pcluster, clustername, &iparams);
- tracepoint(librados, rados_create2_exit, retval, *pcluster);
- return retval;
+ return rados_create_common(pcluster, clustername, &iparams);
}
/* This function is intended for use by Ceph daemons. These daemons have
*/
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_;
librados::RadosClient *radosp = new librados::RadosClient(cct);
*pcluster = (void *)radosp;
- int retval = 0;
- tracepoint(librados, rados_create_with_context_exit, retval, *pcluster);
- return retval;
+ return 0;
}
extern "C" rados_config_t rados_cct(rados_t cluster)
{
- tracepoint(librados, rados_cct_enter, cluster);
librados::RadosClient *client = (librados::RadosClient *)cluster;
- rados_config_t retval = (rados_config_t)client->cct;
- tracepoint(librados, rados_cct_exit, retval);
- return retval;
+ return (rados_config_t)client->cct;
}
extern "C" int rados_connect(rados_t cluster)
{
- tracepoint(librados, rados_connect_enter, cluster);
librados::RadosClient *client = (librados::RadosClient *)cluster;
- int retval = client->connect();
- tracepoint(librados, rados_connect_exit, retval);
- return retval;
+ return client->connect();
}
extern "C" void rados_shutdown(rados_t cluster)
{
- tracepoint(librados, rados_shutdown_enter, cluster);
librados::RadosClient *radosp = (librados::RadosClient *)cluster;
radosp->shutdown();
delete radosp;
- tracepoint(librados, rados_shutdown_exit);
}
extern "C" uint64_t rados_get_instance_id(rados_t cluster)
{
- tracepoint(librados, rados_get_instance_id_enter, cluster);
librados::RadosClient *client = (librados::RadosClient *)cluster;
- uint64_t retval = client->get_instance_id();
- tracepoint(librados, rados_get_instance_id_exit, retval);
- return retval;
+ return client->get_instance_id();
}
extern "C" void rados_version(int *major, int *minor, int *extra)
{
- tracepoint(librados, rados_version_enter, major, minor, extra);
if (major)
*major = LIBRADOS_VER_MAJOR;
if (minor)
*minor = LIBRADOS_VER_MINOR;
if (extra)
*extra = LIBRADOS_VER_EXTRA;
- tracepoint(librados, rados_version_exit, LIBRADOS_VER_MAJOR, LIBRADOS_VER_MINOR, LIBRADOS_VER_EXTRA);
}
// -- config --
extern "C" int rados_conf_read_file(rados_t cluster, const char *path_list)
{
- tracepoint(librados, rados_conf_read_file_enter, cluster, path_list);
librados::RadosClient *client = (librados::RadosClient *)cluster;
md_config_t *conf = client->cct->_conf;
std::deque<std::string> parse_errors;
int ret = conf->parse_config_files(path_list, &parse_errors, NULL, 0);
- if (ret) {
- tracepoint(librados, rados_conf_read_file_exit, ret);
+ if (ret)
return ret;
- }
conf->parse_env(); // environment variables override
conf->apply_changes(NULL);
complain_about_parse_errors(client->cct, &parse_errors);
- int retval = 0;
- tracepoint(librados, rados_conf_read_file_exit, retval);
- return retval;
+ return 0;
}
extern "C" int rados_conf_parse_argv(rados_t cluster, int argc, const char **argv)
{
- tracepoint(librados, rados_conf_parse_argv_enter, cluster, argc);
- int i;
- for(i = 0; i < argc; i++) {
- tracepoint(librados, rados_conf_parse_argv_arg, argv[i]);
- }
librados::RadosClient *client = (librados::RadosClient *)cluster;
md_config_t *conf = client->cct->_conf;
vector<const char*> args;
argv_to_vec(argc, argv, args);
int ret = conf->parse_argv(args);
- if (ret) {
- tracepoint(librados, rados_conf_parse_argv_exit, ret);
+ if (ret)
return ret;
- }
conf->apply_changes(NULL);
- int retval = 0;
- tracepoint(librados, rados_conf_parse_argv_exit, retval);
- return retval;
+ return 0;
}
// like above, but return the remainder of argv to contain remaining
const char **argv,
const char **remargv)
{
- tracepoint(librados, rados_conf_parse_argv_remainder_enter, cluster, argc);
- unsigned int i;
- for(i = 0; i < (unsigned int) argc; i++) {
- tracepoint(librados, rados_conf_parse_argv_remainder_arg, argv[i]);
- }
librados::RadosClient *client = (librados::RadosClient *)cluster;
md_config_t *conf = client->cct->_conf;
vector<const char*> args;
for (int i=0; i<argc; i++)
args.push_back(argv[i]);
int ret = conf->parse_argv(args);
- if (ret) {
- tracepoint(librados, rados_conf_parse_argv_remainder_exit, ret);
+ if (ret)
return ret;
- }
conf->apply_changes(NULL);
assert(args.size() <= (unsigned int)argc);
+ unsigned int i;
for (i = 0; i < (unsigned int)argc; ++i) {
if (i < args.size())
remargv[i] = args[i];
else
remargv[i] = (const char *)NULL;
- tracepoint(librados, rados_conf_parse_argv_remainder_remarg, remargv[i]);
}
- int retval = 0;
- tracepoint(librados, rados_conf_parse_argv_remainder_exit, retval);
- return retval;
+ return 0;
}
extern "C" int rados_conf_parse_env(rados_t cluster, const char *env)
{
- tracepoint(librados, rados_conf_parse_env_enter, cluster, env);
librados::RadosClient *client = (librados::RadosClient *)cluster;
md_config_t *conf = client->cct->_conf;
vector<const char*> args;
env_to_vec(args, env);
int ret = conf->parse_argv(args);
- if (ret) {
- tracepoint(librados, rados_conf_parse_env_exit, ret);
+ if (ret)
return ret;
- }
conf->apply_changes(NULL);
- int retval = 0;
- tracepoint(librados, rados_conf_parse_env_exit, retval);
- return retval;
+ return 0;
}
extern "C" int rados_conf_set(rados_t cluster, const char *option, const char *value)
{
- tracepoint(librados, rados_conf_set_enter, cluster, option, value);
librados::RadosClient *client = (librados::RadosClient *)cluster;
md_config_t *conf = client->cct->_conf;
int ret = conf->set_val(option, value);
- if (ret) {
- tracepoint(librados, rados_conf_set_exit, ret);
+ if (ret)
return ret;
- }
conf->apply_changes(NULL);
- int retval = 0;
- tracepoint(librados, rados_conf_set_exit, retval);
- return retval;
+ return 0;
}
/* cluster info */
extern "C" int rados_cluster_stat(rados_t cluster, rados_cluster_stat_t *result)
{
- tracepoint(librados, rados_cluster_stat_enter, cluster);
librados::RadosClient *client = (librados::RadosClient *)cluster;
ceph_statfs stats;
result->kb_used = stats.kb_used;
result->kb_avail = stats.kb_avail;
result->num_objects = stats.num_objects;
- tracepoint(librados, rados_cluster_stat_exit, r, result->kb, result->kb_used, result->kb_avail, result->num_objects);
return r;
}
extern "C" int rados_conf_get(rados_t cluster, const char *option, char *buf, size_t len)
{
- tracepoint(librados, rados_conf_get_enter, cluster, option, len);
char *tmp = buf;
librados::RadosClient *client = (librados::RadosClient *)cluster;
md_config_t *conf = client->cct->_conf;
- int retval = conf->get_val(option, &tmp, len);
- tracepoint(librados, rados_conf_get_exit, retval, retval ? "" : option);
- return retval;
+ return conf->get_val(option, &tmp, len);
}
extern "C" int64_t rados_pool_lookup(rados_t cluster, const char *name)
{
- tracepoint(librados, rados_pool_lookup_enter, cluster, name);
librados::RadosClient *radosp = (librados::RadosClient *)cluster;
- int64_t retval = radosp->lookup_pool(name);
- tracepoint(librados, rados_pool_lookup_exit, retval);
- return retval;
+ return radosp->lookup_pool(name);
}
extern "C" int rados_pool_reverse_lookup(rados_t cluster, int64_t id,
char *buf, size_t maxlen)
{
- tracepoint(librados, rados_pool_reverse_lookup_enter, cluster, id, maxlen);
librados::RadosClient *radosp = (librados::RadosClient *)cluster;
std::string name;
int r = radosp->pool_get_name(id, &name);
- if (r < 0) {
- tracepoint(librados, rados_pool_reverse_lookup_exit, r, "");
+ if (r < 0)
return r;
- }
- if (name.length() >= maxlen) {
- tracepoint(librados, rados_pool_reverse_lookup_exit, -ERANGE, "");
+ if (name.length() >= maxlen)
return -ERANGE;
- }
strcpy(buf, name.c_str());
- int retval = name.length();
- tracepoint(librados, rados_pool_reverse_lookup_exit, retval, buf);
- return retval;
+ return name.length();
}
extern "C" int rados_cluster_fsid(rados_t cluster, char *buf,
size_t maxlen)
{
- tracepoint(librados, rados_cluster_fsid_enter, cluster, maxlen);
librados::RadosClient *radosp = (librados::RadosClient *)cluster;
std::string fsid;
radosp->get_fsid(&fsid);
- if (fsid.length() >= maxlen) {
- tracepoint(librados, rados_cluster_fsid_exit, -ERANGE, "");
+ if (fsid.length() >= maxlen)
return -ERANGE;
- }
strcpy(buf, fsid.c_str());
- int retval = fsid.length();
- tracepoint(librados, rados_cluster_fsid_exit, retval, buf);
- return retval;
+ return fsid.length();
}
extern "C" int rados_wait_for_latest_osdmap(rados_t cluster)
{
- tracepoint(librados, rados_wait_for_latest_osdmap_enter, cluster);
librados::RadosClient *radosp = (librados::RadosClient *)cluster;
- int retval = radosp->wait_for_latest_osdmap();
- tracepoint(librados, rados_wait_for_latest_osdmap_exit, retval);
- return retval;
+ return radosp->wait_for_latest_osdmap();
}
extern "C" int rados_pool_list(rados_t cluster, char *buf, size_t len)
{
- tracepoint(librados, rados_pool_list_enter, cluster, len);
librados::RadosClient *client = (librados::RadosClient *)cluster;
std::list<std::string> pools;
int r = client->pool_list(pools);
- if (r < 0) {
- tracepoint(librados, rados_pool_list_exit, r);
+ if (r < 0)
return r;
- }
- if (len > 0 && !buf) {
- tracepoint(librados, rados_pool_list_exit, -EINVAL);
+ if (len > 0 && !buf)
return -EINVAL;
- }
char *b = buf;
if (b)
int rl = i->length() + 1;
if (len < (unsigned)rl)
break;
- const char* pool = i->c_str();
- tracepoint(librados, rados_pool_list_pool, pool);
- strncat(b, pool, rl);
+ strncat(b, i->c_str(), rl);
needed += rl;
len -= rl;
b += rl;
int rl = i->length() + 1;
needed += rl;
}
- int retval = needed + 1;
- tracepoint(librados, rados_pool_list_exit, retval);
- return retval;
+ return needed + 1;
}
static void do_out_buffer(bufferlist& outbl, char **outbuf, size_t *outbuflen)
extern "C" int rados_ping_monitor(rados_t cluster, const char *mon_id,
char **outstr, size_t *outstrlen)
{
- tracepoint(librados, rados_ping_monitor_enter, cluster, mon_id);
librados::RadosClient *client = (librados::RadosClient *)cluster;
string str;
- if (!mon_id) {
- tracepoint(librados, rados_ping_monitor_exit, -EINVAL, NULL, NULL);
+ if (!mon_id)
return -EINVAL;
- }
int ret = client->ping_monitor(mon_id, &str);
if (ret == 0 && !str.empty() && outstr && outstrlen) {
do_out_buffer(str, outstr, outstrlen);
}
- tracepoint(librados, rados_ping_monitor_exit, ret, ret < 0 ? NULL : outstr, ret < 0 ? NULL : outstrlen);
return ret;
}
char **outbuf, size_t *outbuflen,
char **outs, size_t *outslen)
{
- tracepoint(librados, rados_mon_command_enter, cluster, cmdlen, inbuf, inbuflen);
librados::RadosClient *client = (librados::RadosClient *)cluster;
bufferlist inbl;
bufferlist outbl;
string outstring;
vector<string> cmdvec;
- for (size_t i = 0; i < cmdlen; i++) {
- tracepoint(librados, rados_mon_command_cmd, cmd[i]);
+ for (size_t i = 0; i < cmdlen; i++)
cmdvec.push_back(cmd[i]);
- }
inbl.append(inbuf, inbuflen);
int ret = client->mon_command(cmdvec, inbl, &outbl, &outstring);
do_out_buffer(outbl, outbuf, outbuflen);
do_out_buffer(outstring, outs, outslen);
- tracepoint(librados, rados_mon_command_exit, ret, outbuf, outbuflen, outs, outslen);
return ret;
}
char **outbuf, size_t *outbuflen,
char **outs, size_t *outslen)
{
- tracepoint(librados, rados_mon_command_target_enter, cluster, name, cmdlen, inbuf, inbuflen);
librados::RadosClient *client = (librados::RadosClient *)cluster;
bufferlist inbl;
bufferlist outbl;
rank = -1;
}
- for (size_t i = 0; i < cmdlen; i++) {
- tracepoint(librados, rados_mon_command_target_cmd, cmd[i]);
+ for (size_t i = 0; i < cmdlen; i++)
cmdvec.push_back(cmd[i]);
- }
inbl.append(inbuf, inbuflen);
int ret;
do_out_buffer(outbl, outbuf, outbuflen);
do_out_buffer(outstring, outs, outslen);
- tracepoint(librados, rados_mon_command_target_exit, ret, outbuf, outbuflen, outs, outslen);
return ret;
}
char **outbuf, size_t *outbuflen,
char **outs, size_t *outslen)
{
- tracepoint(librados, rados_osd_command_enter, cluster, osdid, cmdlen, inbuf, inbuflen);
librados::RadosClient *client = (librados::RadosClient *)cluster;
bufferlist inbl;
bufferlist outbl;
string outstring;
vector<string> cmdvec;
- for (size_t i = 0; i < cmdlen; i++) {
- tracepoint(librados, rados_osd_command_cmd, cmd[i]);
+ for (size_t i = 0; i < cmdlen; i++)
cmdvec.push_back(cmd[i]);
- }
inbl.append(inbuf, inbuflen);
int ret = client->osd_command(osdid, cmdvec, inbl, &outbl, &outstring);
do_out_buffer(outbl, outbuf, outbuflen);
do_out_buffer(outstring, outs, outslen);
- tracepoint(librados, rados_osd_command_exit, ret, outbuf, outbuflen, outs, outslen);
return ret;
}
char **outbuf, size_t *outbuflen,
char **outs, size_t *outslen)
{
- tracepoint(librados, rados_pg_command_enter, cluster, pgstr, cmdlen, inbuf, inbuflen);
librados::RadosClient *client = (librados::RadosClient *)cluster;
bufferlist inbl;
bufferlist outbl;
pg_t pgid;
vector<string> cmdvec;
- for (size_t i = 0; i < cmdlen; i++) {
- tracepoint(librados, rados_pg_command_cmd, cmd[i]);
+ for (size_t i = 0; i < cmdlen; i++)
cmdvec.push_back(cmd[i]);
- }
inbl.append(inbuf, inbuflen);
if (!pgid.parse(pgstr))
do_out_buffer(outbl, outbuf, outbuflen);
do_out_buffer(outstring, outs, outslen);
- tracepoint(librados, rados_pg_command_exit, ret, outbuf, outbuflen, outs, outslen);
return ret;
}
extern "C" void rados_buffer_free(char *buf)
{
- tracepoint(librados, rados_buffer_free_enter, buf);
if (buf)
free(buf);
- tracepoint(librados, rados_buffer_free_exit);
}
extern "C" int rados_monitor_log(rados_t cluster, const char *level, rados_log_callback_t cb, void *arg)
{
- tracepoint(librados, rados_monitor_log_enter, cluster, level, cb, arg);
librados::RadosClient *client = (librados::RadosClient *)cluster;
- int retval = client->monitor_log(level, cb, arg);
- tracepoint(librados, rados_monitor_log_exit, retval);
- return retval;
+ return client->monitor_log(level, cb, arg);
}
extern "C" int rados_ioctx_create(rados_t cluster, const char *name, rados_ioctx_t *io)
{
- tracepoint(librados, rados_ioctx_create_enter, cluster, name);
librados::RadosClient *client = (librados::RadosClient *)cluster;
librados::IoCtxImpl *ctx;
int r = client->create_ioctx(name, &ctx);
- if (r < 0) {
- tracepoint(librados, rados_ioctx_create_exit, r, NULL);
+ if (r < 0)
return r;
- }
*io = ctx;
ctx->get();
- int retval = 0;
- tracepoint(librados, rados_ioctx_create_exit, retval, ctx);
- return retval;
+ return 0;
}
extern "C" void rados_ioctx_destroy(rados_ioctx_t io)
{
- tracepoint(librados, rados_ioctx_destroy_enter, io);
librados::IoCtxImpl *ctx = (librados::IoCtxImpl *)io;
ctx->put();
- tracepoint(librados, rados_ioctx_destroy_exit);
}
extern "C" int rados_ioctx_pool_stat(rados_ioctx_t io, struct rados_pool_stat_t *stats)
{
- tracepoint(librados, rados_ioctx_pool_stat_enter, io);
librados::IoCtxImpl *io_ctx_impl = (librados::IoCtxImpl *)io;
list<string> ls;
ls.push_back(io_ctx_impl->pool_name);
map<string, ::pool_stat_t> rawresult;
int err = io_ctx_impl->client->get_pool_stats(ls, rawresult);
- if (err) {
- tracepoint(librados, rados_ioctx_pool_stat_exit, err, stats);
+ if (err)
return err;
- }
::pool_stat_t& r = rawresult[io_ctx_impl->pool_name];
stats->num_kb = SHIFT_ROUND_UP(r.stats.sum.num_bytes, 10);
stats->num_rd_kb = r.stats.sum.num_rd_kb;
stats->num_wr = r.stats.sum.num_wr;
stats->num_wr_kb = r.stats.sum.num_wr_kb;
- int retval = 0;
- tracepoint(librados, rados_ioctx_pool_stat_exit, retval, stats);
- return retval;
+ return 0;
}
extern "C" rados_config_t rados_ioctx_cct(rados_ioctx_t io)
{
- tracepoint(librados, rados_ioctx_cct_enter, io);
librados::IoCtxImpl *ctx = (librados::IoCtxImpl *)io;
- rados_config_t retval = (rados_config_t)ctx->client->cct;
- tracepoint(librados, rados_ioctx_cct_exit, retval);
- return retval;
+ return (rados_config_t)ctx->client->cct;
}
extern "C" void rados_ioctx_snap_set_read(rados_ioctx_t io, rados_snap_t seq)
{
- tracepoint(librados, rados_ioctx_snap_set_read_enter, io, seq);
librados::IoCtxImpl *ctx = (librados::IoCtxImpl *)io;
ctx->set_snap_read((snapid_t)seq);
- tracepoint(librados, rados_ioctx_snap_set_read_exit);
}
extern "C" int rados_ioctx_selfmanaged_snap_set_write_ctx(rados_ioctx_t io,
rados_snap_t seq, rados_snap_t *snaps, int num_snaps)
{
- tracepoint(librados, rados_ioctx_selfmanaged_snap_set_write_ctx_enter, io, seq, snaps, num_snaps);
librados::IoCtxImpl *ctx = (librados::IoCtxImpl *)io;
vector<snapid_t> snv;
snv.resize(num_snaps);
- for (int i=0; i<num_snaps; i++) {
+ for (int i=0; i<num_snaps; i++)
snv[i] = (snapid_t)snaps[i];
- }
- int retval = ctx->set_snap_write_context((snapid_t)seq, snv);
- tracepoint(librados, rados_ioctx_selfmanaged_snap_set_write_ctx_exit, retval);
- return retval;
+ return ctx->set_snap_write_context((snapid_t)seq, snv);
}
extern "C" int rados_write(rados_ioctx_t io, const char *o, const char *buf, size_t len, uint64_t off)
{
- tracepoint(librados, rados_write_enter, io, o, buf, len, off);
librados::IoCtxImpl *ctx = (librados::IoCtxImpl *)io;
object_t oid(o);
bufferlist bl;
bl.append(buf, len);
- int retval = ctx->write(oid, bl, len, off);
- tracepoint(librados, rados_write_exit, retval);
- return retval;
+ return ctx->write(oid, bl, len, off);
}
extern "C" int rados_append(rados_ioctx_t io, const char *o, const char *buf, size_t len)
{
- tracepoint(librados, rados_append_enter, io, o, buf, len);
librados::IoCtxImpl *ctx = (librados::IoCtxImpl *)io;
object_t oid(o);
bufferlist bl;
bl.append(buf, len);
- int retval = ctx->append(oid, bl, len);
- tracepoint(librados, rados_append_exit, retval);
- return retval;
+ return ctx->append(oid, bl, len);
}
extern "C" int rados_write_full(rados_ioctx_t io, const char *o, const char *buf, size_t len)
{
- tracepoint(librados, rados_write_full_enter, io, o, buf, len);
librados::IoCtxImpl *ctx = (librados::IoCtxImpl *)io;
object_t oid(o);
bufferlist bl;
bl.append(buf, len);
- int retval = ctx->write_full(oid, bl);
- tracepoint(librados, rados_write_full_exit, retval);
- return retval;
+ return ctx->write_full(oid, bl);
}
extern "C" int rados_clone_range(rados_ioctx_t io, const char *dst, uint64_t dst_off,
const char *src, uint64_t src_off, size_t len)
{
- tracepoint(librados, rados_clone_range_enter, io, dst, dst_off, src, src_off, len);
librados::IoCtxImpl *ctx = (librados::IoCtxImpl *)io;
object_t dst_oid(dst), src_oid(src);
- int retval = ctx->clone_range(dst_oid, dst_off, src_oid, src_off, len);
- tracepoint(librados, rados_clone_range_exit, retval);
- return retval;
+ return ctx->clone_range(dst_oid, dst_off, src_oid, src_off, len);
}
extern "C" int rados_trunc(rados_ioctx_t io, const char *o, uint64_t size)
{
- tracepoint(librados, rados_trunc_enter, io, o, size);
librados::IoCtxImpl *ctx = (librados::IoCtxImpl *)io;
object_t oid(o);
- int retval = ctx->trunc(oid, size);
- tracepoint(librados, rados_trunc_exit, retval);
- return retval;
+ return ctx->trunc(oid, size);
}
extern "C" int rados_remove(rados_ioctx_t io, const char *o)
{
- tracepoint(librados, rados_remove_enter, io, o);
librados::IoCtxImpl *ctx = (librados::IoCtxImpl *)io;
object_t oid(o);
- int retval = ctx->remove(oid);
- tracepoint(librados, rados_remove_exit, retval);
- return retval;
+ return ctx->remove(oid);
}
extern "C" int rados_read(rados_ioctx_t io, const char *o, char *buf, size_t len, uint64_t off)
{
- tracepoint(librados, rados_read_enter, io, o, buf, len, off);
librados::IoCtxImpl *ctx = (librados::IoCtxImpl *)io;
int ret;
object_t oid(o);
ret = ctx->read(oid, bl, len, off);
if (ret >= 0) {
- if (bl.length() > len) {
- tracepoint(librados, rados_read_exit, -ERANGE, NULL);
+ if (bl.length() > len)
return -ERANGE;
- }
if (bl.c_str() != buf)
bl.copy(0, bl.length(), buf);
ret = bl.length(); // hrm :/
}
- tracepoint(librados, rados_read_exit, ret, buf);
return ret;
}
extern "C" uint64_t rados_get_last_version(rados_ioctx_t io)
{
- tracepoint(librados, rados_get_last_version_enter, io);
librados::IoCtxImpl *ctx = (librados::IoCtxImpl *)io;
- uint64_t retval = ctx->last_version();
- tracepoint(librados, rados_get_last_version_exit, retval);
- return retval;
+ return ctx->last_version();
}
extern "C" int rados_pool_create(rados_t cluster, const char *name)
{
- tracepoint(librados, rados_pool_create_enter, cluster, name);
librados::RadosClient *radosp = (librados::RadosClient *)cluster;
string sname(name);
- int retval = radosp->pool_create(sname);
- tracepoint(librados, rados_pool_create_exit, retval);
- return retval;
+ return radosp->pool_create(sname);
}
extern "C" int rados_pool_create_with_auid(rados_t cluster, const char *name,
uint64_t auid)
{
- tracepoint(librados, rados_pool_create_with_auid_enter, cluster, name, auid);
librados::RadosClient *radosp = (librados::RadosClient *)cluster;
string sname(name);
- int retval = radosp->pool_create(sname, auid);
- tracepoint(librados, rados_pool_create_with_auid_exit, retval);
- return retval;
+ return radosp->pool_create(sname, auid);
}
extern "C" int rados_pool_create_with_crush_rule(rados_t cluster, const char *name,
__u8 crush_rule_num)
{
- tracepoint(librados, rados_pool_create_with_crush_rule_enter, cluster, name, crush_rule_num);
librados::RadosClient *radosp = (librados::RadosClient *)cluster;
string sname(name);
- int retval = radosp->pool_create(sname, 0, crush_rule_num);
- tracepoint(librados, rados_pool_create_with_crush_rule_exit, retval);
- return retval;
+ return radosp->pool_create(sname, 0, crush_rule_num);
}
extern "C" int rados_pool_create_with_all(rados_t cluster, const char *name,
uint64_t auid, __u8 crush_rule_num)
{
- tracepoint(librados, rados_pool_create_with_all_enter, cluster, name, auid, crush_rule_num);
librados::RadosClient *radosp = (librados::RadosClient *)cluster;
string sname(name);
- int retval = radosp->pool_create(sname, auid, crush_rule_num);
- tracepoint(librados, rados_pool_create_with_all_exit, retval);
- return retval;
+ return radosp->pool_create(sname, auid, crush_rule_num);
}
extern "C" int rados_pool_delete(rados_t cluster, const char *pool_name)
{
- tracepoint(librados, rados_pool_delete_enter, cluster, pool_name);
librados::RadosClient *client = (librados::RadosClient *)cluster;
- int retval = client->pool_delete(pool_name);
- tracepoint(librados, rados_pool_delete_exit, retval);
- return retval;
+ return client->pool_delete(pool_name);
}
extern "C" int rados_ioctx_pool_set_auid(rados_ioctx_t io, uint64_t auid)
{
- tracepoint(librados, rados_ioctx_pool_set_auid_enter, io, auid);
librados::IoCtxImpl *ctx = (librados::IoCtxImpl *)io;
- int retval = ctx->pool_change_auid(auid);
- tracepoint(librados, rados_ioctx_pool_set_auid_exit, retval);
- return retval;
+ return ctx->pool_change_auid(auid);
}
extern "C" int rados_ioctx_pool_get_auid(rados_ioctx_t io, uint64_t *auid)
{
- tracepoint(librados, rados_ioctx_pool_get_auid_enter, io);
librados::IoCtxImpl *ctx = (librados::IoCtxImpl *)io;
- int retval = ctx->client->pool_get_auid(ctx->get_id(), (unsigned long long *)auid);
- tracepoint(librados, rados_ioctx_pool_get_auid_exit, retval, *auid);
- return retval;
+ return ctx->client->pool_get_auid(ctx->get_id(), (unsigned long long *)auid);
}
extern "C" int rados_ioctx_pool_requires_alignment(rados_ioctx_t io)
{
- tracepoint(librados, rados_ioctx_pool_requires_alignment_enter, io);
librados::IoCtxImpl *ctx = (librados::IoCtxImpl *)io;
- int retval = ctx->client->pool_requires_alignment(ctx->get_id());
- tracepoint(librados, rados_ioctx_pool_requires_alignment_exit, retval);
- return retval;
+ return ctx->client->pool_requires_alignment(ctx->get_id());
}
extern "C" uint64_t rados_ioctx_pool_required_alignment(rados_ioctx_t io)
{
- tracepoint(librados, rados_ioctx_pool_required_alignment_enter, io);
librados::IoCtxImpl *ctx = (librados::IoCtxImpl *)io;
- uint64_t retval = ctx->client->pool_required_alignment(ctx->get_id());
- tracepoint(librados, rados_ioctx_pool_required_alignment_exit, retval);
- return retval;
+ return ctx->client->pool_required_alignment(ctx->get_id());
}
extern "C" void rados_ioctx_locator_set_key(rados_ioctx_t io, const char *key)
{
- tracepoint(librados, rados_ioctx_locator_set_key_enter, io, key);
librados::IoCtxImpl *ctx = (librados::IoCtxImpl *)io;
if (key)
ctx->oloc.key = key;
else
ctx->oloc.key = "";
- tracepoint(librados, rados_ioctx_locator_set_key_exit);
}
extern "C" void rados_ioctx_set_namespace(rados_ioctx_t io, const char *nspace)
{
- tracepoint(librados, rados_ioctx_set_namespace_enter, io, nspace);
librados::IoCtxImpl *ctx = (librados::IoCtxImpl *)io;
if (nspace)
ctx->oloc.nspace = nspace;
else
ctx->oloc.nspace = "";
- tracepoint(librados, rados_ioctx_set_namespace_exit);
}
extern "C" rados_t rados_ioctx_get_cluster(rados_ioctx_t io)
{
- tracepoint(librados, rados_ioctx_get_cluster_enter, io);
librados::IoCtxImpl *ctx = (librados::IoCtxImpl *)io;
- rados_t retval = (rados_t)ctx->client;
- tracepoint(librados, rados_ioctx_get_cluster_exit, retval);
- return retval;
+ return (rados_t)ctx->client;
}
extern "C" int64_t rados_ioctx_get_id(rados_ioctx_t io)
{
- tracepoint(librados, rados_ioctx_get_id_enter, io);
librados::IoCtxImpl *ctx = (librados::IoCtxImpl *)io;
- int64_t retval = ctx->get_id();
- tracepoint(librados, rados_ioctx_get_id_exit, retval);
- return retval;
+ return ctx->get_id();
}
extern "C" int rados_ioctx_get_pool_name(rados_ioctx_t io, char *s, unsigned maxlen)
{
- tracepoint(librados, rados_ioctx_get_pool_name_enter, io, maxlen);
librados::IoCtxImpl *ctx = (librados::IoCtxImpl *)io;
- if (ctx->pool_name.length() >= maxlen) {
- tracepoint(librados, rados_ioctx_get_pool_name_exit, -ERANGE, "");
+ if (ctx->pool_name.length() >= maxlen)
return -ERANGE;
- }
strcpy(s, ctx->pool_name.c_str());
- int retval = ctx->pool_name.length();
- tracepoint(librados, rados_ioctx_get_pool_name_exit, retval, s);
- return retval;
+ return ctx->pool_name.length();
}
// snaps
extern "C" int rados_ioctx_snap_create(rados_ioctx_t io, const char *snapname)
{
- tracepoint(librados, rados_ioctx_snap_create_enter, io, snapname);
librados::IoCtxImpl *ctx = (librados::IoCtxImpl *)io;
- int retval = ctx->snap_create(snapname);
- tracepoint(librados, rados_ioctx_snap_create_exit, retval);
- return retval;
+ return ctx->snap_create(snapname);
}
extern "C" int rados_ioctx_snap_remove(rados_ioctx_t io, const char *snapname)
{
- tracepoint(librados, rados_ioctx_snap_remove_enter, io, snapname);
librados::IoCtxImpl *ctx = (librados::IoCtxImpl *)io;
- int retval = ctx->snap_remove(snapname);
- tracepoint(librados, rados_ioctx_snap_remove_exit, retval);
- return retval;
+ return ctx->snap_remove(snapname);
}
extern "C" int rados_ioctx_snap_rollback(rados_ioctx_t io, const char *oid,
const char *snapname)
{
- tracepoint(librados, rados_ioctx_snap_rollback_enter, io, oid, snapname);
librados::IoCtxImpl *ctx = (librados::IoCtxImpl *)io;
- int retval = ctx->rollback(oid, snapname);
- tracepoint(librados, rados_ioctx_snap_rollback_exit, retval);
- return retval;
+ return ctx->rollback(oid, snapname);
}
// Deprecated name kept for backward compatibility
extern "C" int rados_ioctx_selfmanaged_snap_create(rados_ioctx_t io,
uint64_t *snapid)
{
- tracepoint(librados, rados_ioctx_selfmanaged_snap_create_enter, io);
librados::IoCtxImpl *ctx = (librados::IoCtxImpl *)io;
- int retval = ctx->selfmanaged_snap_create(snapid);
- tracepoint(librados, rados_ioctx_selfmanaged_snap_create_exit, retval, *snapid);
- return retval;
+ return ctx->selfmanaged_snap_create(snapid);
}
extern "C" int rados_ioctx_selfmanaged_snap_remove(rados_ioctx_t io,
uint64_t snapid)
{
- tracepoint(librados, rados_ioctx_selfmanaged_snap_remove_enter, io, snapid);
librados::IoCtxImpl *ctx = (librados::IoCtxImpl *)io;
- int retval = ctx->selfmanaged_snap_remove(snapid);
- tracepoint(librados, rados_ioctx_selfmanaged_snap_remove_exit, retval);
- return retval;
+ return ctx->selfmanaged_snap_remove(snapid);
}
extern "C" int rados_ioctx_selfmanaged_snap_rollback(rados_ioctx_t io,
const char *oid,
uint64_t snapid)
{
- tracepoint(librados, rados_ioctx_selfmanaged_snap_rollback_enter, io, oid, snapid);
librados::IoCtxImpl *ctx = (librados::IoCtxImpl *)io;
- int retval = ctx->selfmanaged_snap_rollback_object(oid, ctx->snapc, snapid);
- tracepoint(librados, rados_ioctx_selfmanaged_snap_rollback_exit, retval);
- return retval;
+ return ctx->selfmanaged_snap_rollback_object(oid, ctx->snapc, snapid);
}
extern "C" int rados_ioctx_snap_list(rados_ioctx_t io, rados_snap_t *snaps,
int maxlen)
{
- tracepoint(librados, rados_ioctx_snap_list_enter, io, maxlen);
librados::IoCtxImpl *ctx = (librados::IoCtxImpl *)io;
vector<uint64_t> snapvec;
int r = ctx->snap_list(&snapvec);
- if (r < 0) {
- tracepoint(librados, rados_ioctx_snap_list_exit, r, snaps, 0);
+ if (r < 0)
return r;
- }
if ((int)snapvec.size() <= maxlen) {
- for (unsigned i=0; i<snapvec.size(); i++) {
+ for (unsigned i=0; i<snapvec.size(); i++)
snaps[i] = snapvec[i];
- }
- int retval = snapvec.size();
- tracepoint(librados, rados_ioctx_snap_list_exit, retval, snaps, retval);
- return retval;
+ return snapvec.size();
}
- int retval = -ERANGE;
- tracepoint(librados, rados_ioctx_snap_list_exit, retval, snaps, 0);
- return retval;
+ return -ERANGE;
}
extern "C" int rados_ioctx_snap_lookup(rados_ioctx_t io, const char *name,
rados_snap_t *id)
{
- tracepoint(librados, rados_ioctx_snap_lookup_enter, io, name);
librados::IoCtxImpl *ctx = (librados::IoCtxImpl *)io;
- int retval = ctx->snap_lookup(name, (uint64_t *)id);
- tracepoint(librados, rados_ioctx_snap_lookup_exit, retval, *id);
- return retval;
+ return ctx->snap_lookup(name, (uint64_t *)id);
}
extern "C" int rados_ioctx_snap_get_name(rados_ioctx_t io, rados_snap_t id,
char *name, int maxlen)
{
- tracepoint(librados, rados_ioctx_snap_get_name_enter, io, id, maxlen);
librados::IoCtxImpl *ctx = (librados::IoCtxImpl *)io;
std::string sname;
int r = ctx->snap_get_name(id, &sname);
- if (r < 0) {
- tracepoint(librados, rados_ioctx_snap_get_name_exit, r, "");
+ if (r < 0)
return r;
- }
- if ((int)sname.length() >= maxlen) {
- int retval = -ERANGE;
- tracepoint(librados, rados_ioctx_snap_get_name_exit, retval, "");
- return retval;
- }
+ if ((int)sname.length() >= maxlen)
+ return -ERANGE;
strncpy(name, sname.c_str(), maxlen);
- int retval = 0;
- tracepoint(librados, rados_ioctx_snap_get_name_exit, retval, name);
- return retval;
+ return 0;
}
extern "C" int rados_ioctx_snap_get_stamp(rados_ioctx_t io, rados_snap_t id, time_t *t)
{
- tracepoint(librados, rados_ioctx_snap_get_stamp_enter, io, id);
librados::IoCtxImpl *ctx = (librados::IoCtxImpl *)io;
- int retval = ctx->snap_get_stamp(id, t);
- tracepoint(librados, rados_ioctx_snap_get_stamp_exit, retval, *t);
- return retval;
+ return ctx->snap_get_stamp(id, t);
}
extern "C" int rados_getxattr(rados_ioctx_t io, const char *o, const char *name,
char *buf, size_t len)
{
- tracepoint(librados, rados_getxattr_enter, io, o, name, len);
librados::IoCtxImpl *ctx = (librados::IoCtxImpl *)io;
int ret;
object_t oid(o);
bufferlist bl;
ret = ctx->getxattr(oid, name, bl);
if (ret >= 0) {
- if (bl.length() > len) {
- tracepoint(librados, rados_getxattr_exit, -ERANGE, buf, 0);
+ if (bl.length() > len)
return -ERANGE;
- }
bl.copy(0, bl.length(), buf);
ret = bl.length();
}
- tracepoint(librados, rados_getxattr_exit, ret, buf, ret);
return ret;
}
extern "C" int rados_getxattrs(rados_ioctx_t io, const char *oid,
rados_xattrs_iter_t *iter)
{
- tracepoint(librados, rados_getxattrs_enter, io, oid);
librados::RadosXattrsIter *it = new librados::RadosXattrsIter();
- if (!it) {
- tracepoint(librados, rados_getxattrs_exit, -ENOMEM, NULL);
+ if (!it)
return -ENOMEM;
- }
librados::IoCtxImpl *ctx = (librados::IoCtxImpl *)io;
object_t obj(oid);
int ret = ctx->getxattrs(obj, it->attrset);
if (ret) {
delete it;
- tracepoint(librados, rados_getxattrs_exit, ret, NULL);
return ret;
}
it->i = it->attrset.begin();
librados::RadosXattrsIter **iret = (librados::RadosXattrsIter**)iter;
*iret = it;
*iter = it;
- tracepoint(librados, rados_getxattrs_exit, 0, *iter);
return 0;
}
extern "C" int rados_getxattrs_next(rados_xattrs_iter_t iter,
const char **name, const char **val, size_t *len)
{
- tracepoint(librados, rados_getxattrs_next_enter, iter);
librados::RadosXattrsIter *it = static_cast<librados::RadosXattrsIter*>(iter);
if (it->i == it->attrset.end()) {
*name = NULL;
*val = NULL;
*len = 0;
- tracepoint(librados, rados_getxattrs_next_exit, 0, NULL, NULL, 0);
return 0;
}
free(it->val);
bufferlist &bl(it->i->second);
size_t bl_len = bl.length();
it->val = (char*)malloc(bl_len);
- if (!it->val) {
- tracepoint(librados, rados_getxattrs_next_exit, -ENOMEM, *name, NULL, 0);
+ if (!it->val)
return -ENOMEM;
- }
memcpy(it->val, bl.c_str(), bl_len);
*val = it->val;
*len = bl_len;
++it->i;
- tracepoint(librados, rados_getxattrs_next_exit, 0, *name, *val, *len);
return 0;
}
extern "C" void rados_getxattrs_end(rados_xattrs_iter_t iter)
{
- tracepoint(librados, rados_getxattrs_end_enter, iter);
librados::RadosXattrsIter *it = static_cast<librados::RadosXattrsIter*>(iter);
delete it;
- tracepoint(librados, rados_getxattrs_end_exit);
}
extern "C" int rados_setxattr(rados_ioctx_t io, const char *o, const char *name, const char *buf, size_t len)
{
- tracepoint(librados, rados_setxattr_enter, io, o, name, buf, len);
librados::IoCtxImpl *ctx = (librados::IoCtxImpl *)io;
object_t oid(o);
bufferlist bl;
bl.append(buf, len);
- int retval = ctx->setxattr(oid, name, bl);
- tracepoint(librados, rados_setxattr_exit, retval);
- return retval;
+ return ctx->setxattr(oid, name, bl);
}
extern "C" int rados_rmxattr(rados_ioctx_t io, const char *o, const char *name)
{
- tracepoint(librados, rados_rmxattr_enter, io, o, name);
librados::IoCtxImpl *ctx = (librados::IoCtxImpl *)io;
object_t oid(o);
- int retval = ctx->rmxattr(oid, name);
- tracepoint(librados, rados_rmxattr_exit, retval);
- return retval;
+ return ctx->rmxattr(oid, name);
}
extern "C" int rados_stat(rados_ioctx_t io, const char *o, uint64_t *psize, time_t *pmtime)
{
- tracepoint(librados, rados_stat_enter, io, o);
librados::IoCtxImpl *ctx = (librados::IoCtxImpl *)io;
object_t oid(o);
- int retval = ctx->stat(oid, psize, pmtime);
- tracepoint(librados, rados_stat_exit, retval, psize, pmtime);
- return retval;
+ return ctx->stat(oid, psize, pmtime);
}
extern "C" int rados_tmap_update(rados_ioctx_t io, const char *o, const char *cmdbuf, size_t cmdbuflen)
{
- tracepoint(librados, rados_tmap_update_enter, io, o, cmdbuf, cmdbuflen);
librados::IoCtxImpl *ctx = (librados::IoCtxImpl *)io;
object_t oid(o);
bufferlist cmdbl;
cmdbl.append(cmdbuf, cmdbuflen);
- int retval = ctx->tmap_update(oid, cmdbl);
- tracepoint(librados, rados_tmap_update_exit, retval);
- return retval;
+ return ctx->tmap_update(oid, cmdbl);
}
extern "C" int rados_tmap_put(rados_ioctx_t io, const char *o, const char *buf, size_t buflen)
{
- tracepoint(librados, rados_tmap_put_enter, io, o, buf, buflen);
librados::IoCtxImpl *ctx = (librados::IoCtxImpl *)io;
object_t oid(o);
bufferlist bl;
bl.append(buf, buflen);
- int retval = ctx->tmap_put(oid, bl);
- tracepoint(librados, rados_tmap_put_exit, retval);
- return retval;
+ return ctx->tmap_put(oid, bl);
}
extern "C" int rados_tmap_get(rados_ioctx_t io, const char *o, char *buf, size_t buflen)
{
- tracepoint(librados, rados_tmap_get_enter, io, o, buflen);
librados::IoCtxImpl *ctx = (librados::IoCtxImpl *)io;
object_t oid(o);
bufferlist bl;
int r = ctx->tmap_get(oid, bl);
- if (r < 0) {
- tracepoint(librados, rados_tmap_get_exit, r, buf, 0);
+ if (r < 0)
return r;
- }
- if (bl.length() > buflen) {
- tracepoint(librados, rados_tmap_get_exit, -ERANGE, buf, 0);
+ if (bl.length() > buflen)
return -ERANGE;
- }
bl.copy(0, bl.length(), buf);
- int retval = bl.length();
- tracepoint(librados, rados_tmap_get_exit, retval, buf, retval);
- return retval;
+ return bl.length();
}
extern "C" int rados_tmap_to_omap(rados_ioctx_t io, const char *o, bool nullok)
{
- tracepoint(librados, rados_tmap_to_omap_enter, io, o, nullok);
librados::IoCtxImpl *ctx = (librados::IoCtxImpl *)io;
object_t oid(o);
- int retval = ctx->tmap_to_omap(oid, nullok);
- tracepoint(librados, rados_tmap_to_omap_exit, retval);
- return retval;
+ return ctx->tmap_to_omap(oid, nullok);
}
extern "C" int rados_exec(rados_ioctx_t io, const char *o, const char *cls, const char *method,
const char *inbuf, size_t in_len, char *buf, size_t out_len)
{
- tracepoint(librados, rados_exec_enter, io, o, cls, method, inbuf, in_len, out_len);
librados::IoCtxImpl *ctx = (librados::IoCtxImpl *)io;
object_t oid(o);
bufferlist inbl, outbl;
ret = ctx->exec(oid, cls, method, inbl, outbl);
if (ret >= 0) {
if (outbl.length()) {
- if (outbl.length() > out_len) {
- tracepoint(librados, rados_exec_exit, -ERANGE, buf, 0);
+ if (outbl.length() > out_len)
return -ERANGE;
- }
outbl.copy(0, outbl.length(), buf);
ret = outbl.length(); // hrm :/
}
}
- tracepoint(librados, rados_exec_exit, ret, buf, ret);
return ret;
}
extern "C" int rados_objects_list_open(rados_ioctx_t io, rados_list_ctx_t *listh)
{
- tracepoint(librados, rados_objects_list_open_enter, io);
librados::IoCtxImpl *ctx = (librados::IoCtxImpl *)io;
Objecter::ListContext *h = new Objecter::ListContext;
h->pool_id = ctx->poolid;
h->pool_snap_seq = ctx->snap_seq;
h->nspace = ctx->oloc.nspace;
*listh = (void *)new librados::ObjListCtx(ctx, h);
- int retval = 0;
- tracepoint(librados, rados_objects_list_open_exit, retval, *listh);
- return retval;
+ return 0;
}
extern "C" void rados_objects_list_close(rados_list_ctx_t h)
{
- tracepoint(librados, rados_objects_list_close_enter, h);
librados::ObjListCtx *lh = (librados::ObjListCtx *)h;
delete lh;
- tracepoint(librados, rados_objects_list_close_exit);
}
extern "C" uint32_t rados_objects_list_seek(rados_list_ctx_t listctx,
uint32_t pos)
{
- tracepoint(librados, rados_objects_list_seek_enter, listctx, pos);
librados::ObjListCtx *lh = (librados::ObjListCtx *)listctx;
uint32_t r = lh->ctx->list_seek(lh->lc, pos);
- tracepoint(librados, rados_objects_list_seek_exit, r);
return r;
}
extern "C" uint32_t rados_objects_list_get_pg_hash_position(
rados_list_ctx_t listctx)
{
- tracepoint(librados, rados_objects_list_get_pg_hash_position_enter, listctx);
librados::ObjListCtx *lh = (librados::ObjListCtx *)listctx;
- uint32_t retval = lh->lc->get_pg_hash_position();
- tracepoint(librados, rados_objects_list_get_pg_hash_position_exit, retval);
- return retval;
+ return lh->lc->get_pg_hash_position();
}
extern "C" int rados_objects_list_next(rados_list_ctx_t listctx, const char **entry, const char **key)
{
- tracepoint(librados, rados_objects_list_next_enter, listctx);
librados::ObjListCtx *lh = (librados::ObjListCtx *)listctx;
Objecter::ListContext *h = lh->lc;
if (h->list.empty()) {
int ret = lh->ctx->list(lh->lc, RADOS_LIST_MAX_ENTRIES);
- if (ret < 0) {
- tracepoint(librados, rados_objects_list_next_exit, ret, NULL, NULL);
+ if (ret < 0)
return ret;
- }
- if (h->list.empty()) {
- tracepoint(librados, rados_objects_list_next_exit, -ENOENT, NULL, NULL);
+ if (h->list.empty())
return -ENOENT;
- }
}
*entry = h->list.front().first.name.c_str();
else
*key = NULL;
}
- int retval = 0;
- tracepoint(librados, rados_objects_list_next_exit, 0, *entry, key);
- return retval;
+ return 0;
}
rados_callback_t cb_safe,
rados_completion_t *pc)
{
- tracepoint(librados, rados_aio_create_completion_enter, cb_arg, cb_complete, cb_safe);
librados::AioCompletionImpl *c = new librados::AioCompletionImpl;
if (cb_complete)
c->set_complete_callback(cb_arg, cb_complete);
if (cb_safe)
c->set_safe_callback(cb_arg, cb_safe);
*pc = c;
- int retval = 0;
- tracepoint(librados, rados_aio_create_completion_exit, retval, *pc);
- return retval;
+ return 0;
}
extern "C" int rados_aio_wait_for_complete(rados_completion_t c)
{
- tracepoint(librados, rados_aio_wait_for_complete_enter, c);
- int retval = ((librados::AioCompletionImpl*)c)->wait_for_complete();
- tracepoint(librados, rados_aio_wait_for_complete_exit, retval);
- return retval;
+ return ((librados::AioCompletionImpl*)c)->wait_for_complete();
}
extern "C" int rados_aio_wait_for_safe(rados_completion_t c)
{
- tracepoint(librados, rados_aio_wait_for_safe_enter, c);
- int retval = ((librados::AioCompletionImpl*)c)->wait_for_safe();
- tracepoint(librados, rados_aio_wait_for_safe_exit, retval);
- return retval;
+ return ((librados::AioCompletionImpl*)c)->wait_for_safe();
}
extern "C" int rados_aio_is_complete(rados_completion_t c)
{
- tracepoint(librados, rados_aio_is_complete_enter, c);
- int retval = ((librados::AioCompletionImpl*)c)->is_complete();
- tracepoint(librados, rados_aio_is_complete_exit, retval);
- return retval;
+ return ((librados::AioCompletionImpl*)c)->is_complete();
}
extern "C" int rados_aio_is_safe(rados_completion_t c)
{
- tracepoint(librados, rados_aio_is_safe_enter, c);
- int retval = ((librados::AioCompletionImpl*)c)->is_safe();
- tracepoint(librados, rados_aio_is_safe_exit, retval);
- return retval;
+ return ((librados::AioCompletionImpl*)c)->is_safe();
}
extern "C" int rados_aio_wait_for_complete_and_cb(rados_completion_t c)
{
- tracepoint(librados, rados_aio_wait_for_complete_and_cb_enter, c);
- int retval = ((librados::AioCompletionImpl*)c)->wait_for_complete_and_cb();
- tracepoint(librados, rados_aio_wait_for_complete_and_cb_exit, retval);
- return retval;
+ return ((librados::AioCompletionImpl*)c)->wait_for_complete_and_cb();
}
extern "C" int rados_aio_wait_for_safe_and_cb(rados_completion_t c)
{
- tracepoint(librados, rados_aio_wait_for_safe_and_cb_enter, c);
- int retval = ((librados::AioCompletionImpl*)c)->wait_for_safe_and_cb();
- tracepoint(librados, rados_aio_wait_for_safe_and_cb_exit, retval);
- return retval;
+ return ((librados::AioCompletionImpl*)c)->wait_for_safe_and_cb();
}
extern "C" int rados_aio_is_complete_and_cb(rados_completion_t c)
{
- tracepoint(librados, rados_aio_is_complete_and_cb_enter, c);
- int retval = ((librados::AioCompletionImpl*)c)->is_complete_and_cb();
- tracepoint(librados, rados_aio_is_complete_and_cb_exit, retval);
- return retval;
+ return ((librados::AioCompletionImpl*)c)->is_complete_and_cb();
}
extern "C" int rados_aio_is_safe_and_cb(rados_completion_t c)
{
- tracepoint(librados, rados_aio_is_safe_and_cb_enter, c);
- int retval = ((librados::AioCompletionImpl*)c)->is_safe_and_cb();
- tracepoint(librados, rados_aio_is_safe_and_cb_exit, retval);
- return retval;
+ return ((librados::AioCompletionImpl*)c)->is_safe_and_cb();
}
extern "C" int rados_aio_get_return_value(rados_completion_t c)
{
- tracepoint(librados, rados_aio_get_return_value_enter, c);
- int retval = ((librados::AioCompletionImpl*)c)->get_return_value();
- tracepoint(librados, rados_aio_get_return_value_exit, retval);
- return retval;
+ return ((librados::AioCompletionImpl*)c)->get_return_value();
}
extern "C" uint64_t rados_aio_get_version(rados_completion_t c)
{
- tracepoint(librados, rados_aio_get_version_enter, c);
- uint64_t retval = ((librados::AioCompletionImpl*)c)->get_version();
- tracepoint(librados, rados_aio_get_version_exit, retval);
- return retval;
+ return ((librados::AioCompletionImpl*)c)->get_version();
}
extern "C" void rados_aio_release(rados_completion_t c)
{
- tracepoint(librados, rados_aio_release_enter, c);
((librados::AioCompletionImpl*)c)->put();
- tracepoint(librados, rados_aio_release_exit);
}
extern "C" int rados_aio_read(rados_ioctx_t io, const char *o,
rados_completion_t completion,
char *buf, size_t len, uint64_t off)
{
- tracepoint(librados, rados_aio_read_enter, io, o, completion, len, off);
librados::IoCtxImpl *ctx = (librados::IoCtxImpl *)io;
object_t oid(o);
- int retval = ctx->aio_read(oid, (librados::AioCompletionImpl*)completion,
+ return ctx->aio_read(oid, (librados::AioCompletionImpl*)completion,
buf, len, off, ctx->snap_seq);
- tracepoint(librados, rados_aio_read_exit, retval);
- return retval;
}
extern "C" int rados_aio_write(rados_ioctx_t io, const char *o,
rados_completion_t completion,
const char *buf, size_t len, uint64_t off)
{
- tracepoint(librados, rados_aio_write_enter, io, o, completion, buf, len, off);
librados::IoCtxImpl *ctx = (librados::IoCtxImpl *)io;
object_t oid(o);
bufferlist bl;
bl.append(buf, len);
- int retval = ctx->aio_write(oid, (librados::AioCompletionImpl*)completion,
+ return ctx->aio_write(oid, (librados::AioCompletionImpl*)completion,
bl, len, off);
- tracepoint(librados, rados_aio_write_exit, retval);
- return retval;
}
extern "C" int rados_aio_append(rados_ioctx_t io, const char *o,
rados_completion_t completion,
const char *buf, size_t len)
{
- tracepoint(librados, rados_aio_append_enter, io, o, completion, buf, len);
librados::IoCtxImpl *ctx = (librados::IoCtxImpl *)io;
object_t oid(o);
bufferlist bl;
bl.append(buf, len);
- int retval = ctx->aio_append(oid, (librados::AioCompletionImpl*)completion,
+ return ctx->aio_append(oid, (librados::AioCompletionImpl*)completion,
bl, len);
- tracepoint(librados, rados_aio_append_exit, retval);
- return retval;
}
extern "C" int rados_aio_write_full(rados_ioctx_t io, const char *o,
rados_completion_t completion,
const char *buf, size_t len)
{
- tracepoint(librados, rados_aio_write_full_enter, io, o, completion, buf, len);
librados::IoCtxImpl *ctx = (librados::IoCtxImpl *)io;
object_t oid(o);
bufferlist bl;
bl.append(buf, len);
- int retval = ctx->aio_write_full(oid, (librados::AioCompletionImpl*)completion, bl);
- tracepoint(librados, rados_aio_write_full_exit, retval);
- return retval;
+ return ctx->aio_write_full(oid, (librados::AioCompletionImpl*)completion, bl);
}
extern "C" int rados_aio_remove(rados_ioctx_t io, const char *o,
rados_completion_t completion)
{
- tracepoint(librados, rados_aio_remove_enter, io, o, completion);
librados::IoCtxImpl *ctx = (librados::IoCtxImpl *)io;
object_t oid(o);
- int retval = ctx->aio_remove(oid, (librados::AioCompletionImpl*)completion);
- tracepoint(librados, rados_aio_remove_exit, retval);
- return retval;
+ return ctx->aio_remove(oid, (librados::AioCompletionImpl*)completion);
}
extern "C" int rados_aio_flush_async(rados_ioctx_t io,
rados_completion_t completion)
{
- tracepoint(librados, rados_aio_flush_async_enter, io, completion);
librados::IoCtxImpl *ctx = (librados::IoCtxImpl *)io;
ctx->flush_aio_writes_async((librados::AioCompletionImpl*)completion);
- int retval = 0;
- tracepoint(librados, rados_aio_flush_async_exit, retval);
- return retval;
+ return 0;
}
extern "C" int rados_aio_flush(rados_ioctx_t io)
{
- tracepoint(librados, rados_aio_flush_enter, io);
librados::IoCtxImpl *ctx = (librados::IoCtxImpl *)io;
ctx->flush_aio_writes();
- int retval = 0;
- tracepoint(librados, rados_aio_flush_exit, retval);
- return retval;
+ return 0;
}
extern "C" int rados_aio_stat(rados_ioctx_t io, const char *o,
rados_completion_t completion,
uint64_t *psize, time_t *pmtime)
{
- tracepoint(librados, rados_aio_stat_enter, io, o, completion);
librados::IoCtxImpl *ctx = (librados::IoCtxImpl *)io;
object_t oid(o);
- int retval = ctx->aio_stat(oid, (librados::AioCompletionImpl*)completion,
+ return ctx->aio_stat(oid, (librados::AioCompletionImpl*)completion,
psize, pmtime);
- tracepoint(librados, rados_aio_stat_exit, retval);
- return retval;
}
int rados_watch(rados_ioctx_t io, const char *o, uint64_t ver, uint64_t *handle,
rados_watchcb_t watchcb, void *arg)
{
- tracepoint(librados, rados_watch_enter, io, o, ver, watchcb, arg);
uint64_t *cookie = handle;
librados::IoCtxImpl *ctx = (librados::IoCtxImpl *)io;
object_t oid(o);
C_WatchCB *wc = new C_WatchCB(watchcb, arg);
- int retval = ctx->watch(oid, ver, cookie, wc);
- tracepoint(librados, rados_watch_exit, retval, *handle);
- return retval;
+ return ctx->watch(oid, ver, cookie, wc);
}
int rados_unwatch(rados_ioctx_t io, const char *o, uint64_t handle)
{
- tracepoint(librados, rados_unwatch_enter, io, o, handle);
uint64_t cookie = handle;
librados::IoCtxImpl *ctx = (librados::IoCtxImpl *)io;
object_t oid(o);
- int retval = ctx->unwatch(oid, cookie);
- tracepoint(librados, rados_unwatch_exit, retval);
- return retval;
+ return ctx->unwatch(oid, cookie);
}
int rados_notify(rados_ioctx_t io, const char *o, uint64_t ver, const char *buf, int buf_len)
{
- tracepoint(librados, rados_notify_enter, io, o, ver, buf, buf_len);
librados::IoCtxImpl *ctx = (librados::IoCtxImpl *)io;
object_t oid(o);
bufferlist bl;
memcpy(p.c_str(), buf, buf_len);
bl.push_back(p);
}
- int retval = ctx->notify(oid, ver, bl);
- tracepoint(librados, rados_notify_exit, retval);
- return retval;
+ return ctx->notify(oid, ver, bl);
}
extern "C" int rados_set_alloc_hint(rados_ioctx_t io, const char *o,
uint64_t expected_object_size,
uint64_t expected_write_size)
{
- tracepoint(librados, rados_set_alloc_hint_enter, io, o, expected_object_size, expected_write_size);
librados::IoCtxImpl *ctx = (librados::IoCtxImpl *)io;
object_t oid(o);
- int retval = ctx->set_alloc_hint(oid, expected_object_size, expected_write_size);
- tracepoint(librados, rados_set_alloc_hint_exit, retval);
- return retval;
+ return ctx->set_alloc_hint(oid, expected_object_size, expected_write_size);
}
extern "C" int rados_lock_exclusive(rados_ioctx_t io, const char * o,
const char * desc, struct timeval * duration,
uint8_t flags)
{
- tracepoint(librados, rados_lock_exclusive_enter, io, o, name, cookie, desc, duration, flags);
librados::IoCtx ctx;
librados::IoCtx::from_rados_ioctx_t(io, ctx);
- int retval = ctx.lock_exclusive(o, name, cookie, desc, duration, flags);
- tracepoint(librados, rados_lock_exclusive_exit, retval);
- return retval;
+ return ctx.lock_exclusive(o, name, cookie, desc, duration, flags);
}
extern "C" int rados_lock_shared(rados_ioctx_t io, const char * o,
const char * tag, const char * desc,
struct timeval * duration, uint8_t flags)
{
- tracepoint(librados, rados_lock_shared_enter, io, o, name, cookie, tag, desc, duration, flags);
librados::IoCtx ctx;
librados::IoCtx::from_rados_ioctx_t(io, ctx);
- int retval = ctx.lock_shared(o, name, cookie, tag, desc, duration, flags);
- tracepoint(librados, rados_lock_shared_exit, retval);
- return retval;
+ return ctx.lock_shared(o, name, cookie, tag, desc, duration, flags);
}
extern "C" int rados_unlock(rados_ioctx_t io, const char *o, const char *name,
const char *cookie)
{
- tracepoint(librados, rados_unlock_enter, io, o, name, cookie);
librados::IoCtx ctx;
librados::IoCtx::from_rados_ioctx_t(io, ctx);
- int retval = ctx.unlock(o, name, cookie);
- tracepoint(librados, rados_unlock_exit, retval);
- return retval;
+ return ctx.unlock(o, name, cookie);
+
}
extern "C" ssize_t rados_list_lockers(rados_ioctx_t io, const char *o,
char *cookies, size_t *cookies_len,
char *addrs, size_t *addrs_len)
{
- tracepoint(librados, rados_list_lockers_enter, io, o, name, *tag_len, *clients_len, *cookies_len, *addrs_len);
librados::IoCtx ctx;
librados::IoCtx::from_rados_ioctx_t(io, ctx);
std::string name_str = name;
int tmp_exclusive;
std::list<librados::locker_t> lockers;
int r = ctx.list_lockers(oid, name_str, &tmp_exclusive, &tag_str, &lockers);
- if (r < 0) {
- tracepoint(librados, rados_list_lockers_exit, r, *exclusive, "", *tag_len, *clients_len, *cookies_len, *addrs_len);
+ if (r < 0)
return r;
- }
size_t clients_total = 0;
size_t cookies_total = 0;
*cookies_len = cookies_total;
*addrs_len = addrs_total;
*tag_len = tag_str.length() + 1;
- if (too_short) {
- tracepoint(librados, rados_list_lockers_exit, -ERANGE, *exclusive, "", *tag_len, *clients_len, *cookies_len, *addrs_len);
+ if (too_short)
return -ERANGE;
- }
strcpy(tag, tag_str.c_str());
char *clients_p = clients;
char *addrs_p = addrs;
for (it = lockers.begin(); it != lockers.end(); ++it) {
strcpy(clients_p, it->client.c_str());
- strcpy(cookies_p, it->cookie.c_str());
- strcpy(addrs_p, it->address.c_str());
- tracepoint(librados, rados_list_lockers_locker, clients_p, cookies_p, addrs_p);
clients_p += it->client.length() + 1;
+ strcpy(cookies_p, it->cookie.c_str());
cookies_p += it->cookie.length() + 1;
+ strcpy(addrs_p, it->address.c_str());
addrs_p += it->address.length() + 1;
}
if (tmp_exclusive)
else
*exclusive = 0;
- int retval = lockers.size();
- tracepoint(librados, rados_list_lockers_exit, retval, *exclusive, tag, *tag_len, *clients_len, *cookies_len, *addrs_len);
- return retval;
+ return lockers.size();
}
extern "C" int rados_break_lock(rados_ioctx_t io, const char *o,
const char *name, const char *client,
const char *cookie)
{
- tracepoint(librados, rados_break_lock_enter, io, o, name, client, cookie);
librados::IoCtx ctx;
librados::IoCtx::from_rados_ioctx_t(io, ctx);
- int retval = ctx.break_lock(o, name, client, cookie);
- tracepoint(librados, rados_break_lock_exit, retval);
- return retval;
+ return ctx.break_lock(o, name, client, cookie);
}
extern "C" rados_write_op_t rados_create_write_op()
{
- tracepoint(librados, rados_create_write_op_enter);
- rados_write_op_t retval = new (std::nothrow)::ObjectOperation;
- tracepoint(librados, rados_create_write_op_exit, retval);
- return retval;
+ return new (std::nothrow)::ObjectOperation;
}
extern "C" void rados_release_write_op(rados_write_op_t write_op)
{
- tracepoint(librados, rados_release_write_op_enter, write_op);
delete (::ObjectOperation*)write_op;
- tracepoint(librados, rados_release_write_op_exit);
}
extern "C" void rados_write_op_set_flags(rados_write_op_t write_op, int flags)
{
- tracepoint(librados, rados_write_op_set_flags_enter, write_op, flags);
set_op_flags((::ObjectOperation *)write_op, flags);
- tracepoint(librados, rados_write_op_set_flags_exit);
}
extern "C" void rados_write_op_assert_exists(rados_write_op_t write_op)
{
- tracepoint(librados, rados_write_op_assert_exists_enter, write_op);
((::ObjectOperation *)write_op)->stat(NULL, (utime_t *)NULL, NULL);
- tracepoint(librados, rados_write_op_assert_exists_exit);
}
extern "C" void rados_write_op_cmpxattr(rados_write_op_t write_op,
const char *value,
size_t value_len)
{
- tracepoint(librados, rados_write_op_cmpxattr_enter, write_op, name, comparison_operator, value, value_len);
bufferlist bl;
bl.append(value, value_len);
((::ObjectOperation *)write_op)->cmpxattr(name,
comparison_operator,
CEPH_OSD_CMPXATTR_MODE_STRING,
bl);
- tracepoint(librados, rados_write_op_cmpxattr_exit);
}
static void rados_c_omap_cmp(ObjectOperation *op,
size_t val_len,
int *prval)
{
- tracepoint(librados, rados_write_op_omap_cmp_enter, write_op, key, comparison_operator, val, val_len, prval);
rados_c_omap_cmp((::ObjectOperation *)write_op, key, comparison_operator,
val, val_len, prval);
- tracepoint(librados, rados_write_op_omap_cmp_exit);
}
extern "C" void rados_write_op_setxattr(rados_write_op_t write_op,
const char *value,
size_t value_len)
{
- tracepoint(librados, rados_write_op_setxattr_enter, write_op, name, value, value_len);
bufferlist bl;
bl.append(value, value_len);
((::ObjectOperation *)write_op)->setxattr(name, bl);
- tracepoint(librados, rados_write_op_setxattr_exit);
}
extern "C" void rados_write_op_rmxattr(rados_write_op_t write_op,
const char *name)
{
- tracepoint(librados, rados_write_op_rmxattr_enter, write_op, name);
bufferlist bl;
((::ObjectOperation *)write_op)->rmxattr(name);
- tracepoint(librados, rados_write_op_rmxattr_exit);
}
extern "C" void rados_write_op_create(rados_write_op_t write_op,
int exclusive,
const char* category)
{
- tracepoint(librados, rados_write_op_create_enter, write_op, exclusive, category);
::ObjectOperation *oo = (::ObjectOperation *) write_op;
if(category) {
oo->create(exclusive, category);
} else {
oo->create(!!exclusive);
}
- tracepoint(librados, rados_write_op_create_exit);
}
extern "C" void rados_write_op_write(rados_write_op_t write_op,
size_t len,
uint64_t offset)
{
- tracepoint(librados, rados_write_op_write_enter, write_op, buffer, len, offset);
bufferlist bl;
bl.append(buffer,len);
((::ObjectOperation *)write_op)->write(offset, bl);
- tracepoint(librados, rados_write_op_write_exit);
}
extern "C" void rados_write_op_write_full(rados_write_op_t write_op,
const char *buffer,
size_t len)
{
- tracepoint(librados, rados_write_op_write_full_enter, write_op, buffer, len);
bufferlist bl;
bl.append(buffer,len);
((::ObjectOperation *)write_op)->write_full(bl);
- tracepoint(librados, rados_write_op_write_full_exit);
}
extern "C" void rados_write_op_append(rados_write_op_t write_op,
const char *buffer,
size_t len)
{
- tracepoint(librados, rados_write_op_append_enter, write_op, buffer, len);
bufferlist bl;
bl.append(buffer,len);
((::ObjectOperation *)write_op)->append(bl);
- tracepoint(librados, rados_write_op_append_exit);
}
extern "C" void rados_write_op_remove(rados_write_op_t write_op)
{
- tracepoint(librados, rados_write_op_remove_enter, write_op);
((::ObjectOperation *)write_op)->remove();
- tracepoint(librados, rados_write_op_remove_exit);
}
extern "C" void rados_write_op_truncate(rados_write_op_t write_op,
uint64_t offset)
{
- tracepoint(librados, rados_write_op_truncate_enter, write_op, offset);
((::ObjectOperation *)write_op)->truncate(offset);
- tracepoint(librados, rados_write_op_truncate_exit);
}
extern "C" void rados_write_op_zero(rados_write_op_t write_op,
uint64_t offset,
uint64_t len)
{
- tracepoint(librados, rados_write_op_zero_enter, write_op, offset, len);
((::ObjectOperation *)write_op)->zero(offset, len);
- tracepoint(librados, rados_write_op_zero_exit);
}
extern "C" void rados_write_op_exec(rados_write_op_t write_op,
size_t in_len,
int *prval)
{
- tracepoint(librados, rados_write_op_exec_enter, write_op, cls, method, in_buf, in_len, prval);
bufferlist inbl;
inbl.append(in_buf, in_len);
((::ObjectOperation *)write_op)->call(cls, method, inbl, NULL, NULL, prval);
- tracepoint(librados, rados_write_op_exec_exit);
}
extern "C" void rados_write_op_omap_set(rados_write_op_t write_op,
const size_t *lens,
size_t num)
{
- tracepoint(librados, rados_write_op_omap_set_enter, write_op, num);
std::map<std::string, bufferlist> entries;
for (size_t i = 0; i < num; ++i) {
- tracepoint(librados, rados_write_op_omap_set_entry, keys[i], vals[i], lens[i]);
bufferlist bl(lens[i]);
bl.append(vals[i], lens[i]);
entries[keys[i]] = bl;
}
((::ObjectOperation *)write_op)->omap_set(entries);
- tracepoint(librados, rados_write_op_omap_set_exit);
}
extern "C" void rados_write_op_omap_rm_keys(rados_write_op_t write_op,
char const* const* keys,
size_t keys_len)
{
- tracepoint(librados, rados_write_op_omap_rm_keys_enter, write_op, keys_len);
- for(size_t i = 0; i < keys_len; i++) {
- tracepoint(librados, rados_write_op_omap_rm_keys_entry, keys[i]);
- }
std::set<std::string> to_remove(keys, keys + keys_len);
((::ObjectOperation *)write_op)->omap_rm_keys(to_remove);
- tracepoint(librados, rados_write_op_omap_rm_keys_exit);
}
extern "C" void rados_write_op_omap_clear(rados_write_op_t write_op)
{
- tracepoint(librados, rados_write_op_omap_clear_enter, write_op);
((::ObjectOperation *)write_op)->omap_clear();
- tracepoint(librados, rados_write_op_omap_clear_exit);
}
extern "C" void rados_write_op_set_alloc_hint(rados_write_op_t write_op,
uint64_t expected_object_size,
uint64_t expected_write_size)
{
- tracepoint(librados, rados_write_op_set_alloc_hint_enter, write_op, expected_object_size, expected_write_size);
((::ObjectOperation *)write_op)->set_alloc_hint(expected_object_size,
expected_write_size);
- tracepoint(librados, rados_write_op_set_alloc_hint_exit);
}
extern "C" int rados_write_op_operate(rados_write_op_t write_op,
time_t *mtime,
int flags)
{
- tracepoint(librados, rados_write_op_operate_enter, write_op, io, oid, mtime, flags);
object_t obj(oid);
::ObjectOperation *oo = (::ObjectOperation *) write_op;
librados::IoCtxImpl *ctx = (librados::IoCtxImpl *)io;
- int retval = ctx->operate(obj, oo, mtime, flags);
- tracepoint(librados, rados_write_op_operate_exit, retval);
- return retval;
+ return ctx->operate(obj, oo, mtime, flags);
}
extern "C" int rados_aio_write_op_operate(rados_write_op_t write_op,
time_t *mtime,
int flags)
{
- tracepoint(librados, rados_aio_write_op_operate_enter, write_op, io, completion, oid, mtime, flags);
object_t obj(oid);
::ObjectOperation *oo = (::ObjectOperation *) write_op;
librados::IoCtxImpl *ctx = (librados::IoCtxImpl *)io;
librados::AioCompletionImpl *c = (librados::AioCompletionImpl*)completion;
- int retval = ctx->aio_operate(obj, oo, c, ctx->snapc, flags);
- tracepoint(librados, rados_aio_write_op_operate_exit, retval);
- return retval;
+ return ctx->aio_operate(obj, oo, c, ctx->snapc, flags);
}
extern "C" rados_read_op_t rados_create_read_op()
{
- tracepoint(librados, rados_create_read_op_enter);
- rados_read_op_t retval = new (std::nothrow)::ObjectOperation;
- tracepoint(librados, rados_create_read_op_exit, retval);
- return retval;
+ return new (std::nothrow)::ObjectOperation;
}
extern "C" void rados_release_read_op(rados_read_op_t read_op)
{
- tracepoint(librados, rados_release_read_op_enter, read_op);
delete (::ObjectOperation *)read_op;
- tracepoint(librados, rados_release_read_op_exit);
}
extern "C" void rados_read_op_set_flags(rados_read_op_t read_op, int flags)
{
- tracepoint(librados, rados_read_op_set_flags_enter, read_op, flags);
set_op_flags((::ObjectOperation *)read_op, flags);
- tracepoint(librados, rados_read_op_set_flags_exit);
}
extern "C" void rados_read_op_assert_exists(rados_read_op_t read_op)
{
- tracepoint(librados, rados_read_op_assert_exists_enter, read_op);
((::ObjectOperation *)read_op)->stat(NULL, (utime_t *)NULL, NULL);
- tracepoint(librados, rados_read_op_assert_exists_exit);
}
extern "C" void rados_read_op_cmpxattr(rados_read_op_t read_op,
const char *value,
size_t value_len)
{
- tracepoint(librados, rados_read_op_cmpxattr_enter, read_op, name, comparison_operator, value, value_len);
bufferlist bl;
bl.append(value, value_len);
((::ObjectOperation *)read_op)->cmpxattr(name,
comparison_operator,
CEPH_OSD_CMPXATTR_MODE_STRING,
bl);
- tracepoint(librados, rados_read_op_cmpxattr_exit);
}
extern "C" void rados_read_op_omap_cmp(rados_read_op_t read_op,
size_t val_len,
int *prval)
{
- tracepoint(librados, rados_read_op_omap_cmp_enter, read_op, key, comparison_operator, val, val_len, prval);
rados_c_omap_cmp((::ObjectOperation *)read_op, key, comparison_operator,
val, val_len, prval);
- tracepoint(librados, rados_read_op_omap_cmp_exit);
}
extern "C" void rados_read_op_stat(rados_read_op_t read_op,
time_t *pmtime,
int *prval)
{
- tracepoint(librados, rados_read_op_stat_enter, read_op, psize, pmtime, prval);
((::ObjectOperation *)read_op)->stat(psize, pmtime, prval);
- tracepoint(librados, rados_read_op_stat_exit);
}
class C_bl_to_buf : public Context {
size_t *bytes_read,
int *prval)
{
- tracepoint(librados, rados_read_op_read_enter, read_op, offset, len, buf, bytes_read, prval);
C_bl_to_buf *ctx = new C_bl_to_buf(buf, len, bytes_read, prval);
ctx->out_bl.push_back(buffer::create_static(len, buf));
((::ObjectOperation *)read_op)->read(offset, len, &ctx->out_bl, prval, ctx);
- tracepoint(librados, rados_read_op_read_exit);
}
class C_out_buffer : public Context {
size_t *out_len,
int *prval)
{
- tracepoint(librados, rados_read_op_exec_enter, read_op, cls, method, in_buf, in_len, out_buf, out_len, prval);
bufferlist inbl;
inbl.append(in_buf, in_len);
C_out_buffer *ctx = new C_out_buffer(out_buf, out_len);
((::ObjectOperation *)read_op)->call(cls, method, inbl, &ctx->out_bl, ctx,
prval);
- tracepoint(librados, rados_read_op_exec_exit);
}
extern "C" void rados_read_op_exec_user_buf(rados_read_op_t read_op,
size_t *used_len,
int *prval)
{
- tracepoint(librados, rados_read_op_exec_user_buf_enter, read_op, cls, method, in_buf, in_len, out_buf, out_len, used_len, prval);
C_bl_to_buf *ctx = new C_bl_to_buf(out_buf, out_len, used_len, prval);
bufferlist inbl;
inbl.append(in_buf, in_len);
((::ObjectOperation *)read_op)->call(cls, method, inbl, &ctx->out_bl, ctx,
prval);
- tracepoint(librados, rados_read_op_exec_user_buf_exit);
}
struct RadosOmapIter {
rados_xattrs_iter_t *iter,
int *prval)
{
- tracepoint(librados, rados_read_op_getxattrs_enter, read_op, prval);
librados::RadosXattrsIter *xattrs_iter = new librados::RadosXattrsIter;
((::ObjectOperation *)read_op)->getxattrs(&xattrs_iter->attrset, prval);
((::ObjectOperation *)read_op)->add_handler(new C_XattrsIter(xattrs_iter));
*iter = xattrs_iter;
- tracepoint(librados, rados_read_op_getxattrs_exit, *iter);
}
extern "C" void rados_read_op_omap_get_vals(rados_read_op_t read_op,
rados_omap_iter_t *iter,
int *prval)
{
- tracepoint(librados, rados_read_op_omap_get_vals_enter, read_op, start_after, filter_prefix, max_return, prval);
RadosOmapIter *omap_iter = new RadosOmapIter;
const char *start = start_after ? start_after : "";
const char *filter = filter_prefix ? filter_prefix : "";
prval);
((::ObjectOperation *)read_op)->add_handler(new C_OmapIter(omap_iter));
*iter = omap_iter;
- tracepoint(librados, rados_read_op_omap_get_vals_exit, *iter);
}
struct C_OmapKeysIter : public Context {
rados_omap_iter_t *iter,
int *prval)
{
- tracepoint(librados, rados_read_op_omap_get_keys_enter, read_op, start_after, max_return, prval);
RadosOmapIter *omap_iter = new RadosOmapIter;
C_OmapKeysIter *ctx = new C_OmapKeysIter(omap_iter);
((::ObjectOperation *)read_op)->omap_get_keys(start_after ? start_after : "",
max_return, &ctx->keys, prval);
((::ObjectOperation *)read_op)->add_handler(ctx);
*iter = omap_iter;
- tracepoint(librados, rados_read_op_omap_get_keys_exit, *iter);
}
extern "C" void rados_read_op_omap_get_vals_by_keys(rados_read_op_t read_op,
rados_omap_iter_t *iter,
int *prval)
{
- tracepoint(librados, rados_read_op_omap_get_vals_by_keys_enter, read_op, keys, keys_len, iter, prval);
std::set<std::string> to_get(keys, keys + keys_len);
RadosOmapIter *omap_iter = new RadosOmapIter;
prval);
((::ObjectOperation *)read_op)->add_handler(new C_OmapIter(omap_iter));
*iter = omap_iter;
- tracepoint(librados, rados_read_op_omap_get_vals_by_keys_exit, *iter);
}
extern "C" int rados_omap_get_next(rados_omap_iter_t iter,
char **val,
size_t *len)
{
- tracepoint(librados, rados_omap_get_next_enter, iter);
RadosOmapIter *it = (RadosOmapIter *)iter;
if (it->i == it->values.end()) {
*key = NULL;
*val = NULL;
*len = 0;
- int retval = 0;
- tracepoint(librados, rados_omap_get_next_exit, retval, key, val, len);
- return retval;
+ return 0;
}
if (key)
*key = (char*)it->i->first.c_str();
if (len)
*len = it->i->second.length();
++it->i;
- int retval = 0;
- tracepoint(librados, rados_omap_get_next_exit, retval, key, val, len);
- return retval;
+ return 0;
}
extern "C" void rados_omap_get_end(rados_omap_iter_t iter)
{
- tracepoint(librados, rados_omap_get_end_enter, iter);
RadosOmapIter *it = (RadosOmapIter *)iter;
delete it;
- tracepoint(librados, rados_omap_get_end_exit);
}
extern "C" int rados_read_op_operate(rados_read_op_t read_op,
const char *oid,
int flags)
{
- tracepoint(librados, rados_read_op_operate_enter, read_op, io, oid, flags);
object_t obj(oid);
librados::IoCtxImpl *ctx = (librados::IoCtxImpl *)io;
- int retval = ctx->operate_read(obj, (::ObjectOperation *)read_op, NULL, flags);
- tracepoint(librados, rados_read_op_operate_exit, retval);
- return retval;
+ return ctx->operate_read(obj, (::ObjectOperation *)read_op, NULL, flags);
}
extern "C" int rados_aio_read_op_operate(rados_read_op_t read_op,
const char *oid,
int flags)
{
- tracepoint(librados, rados_aio_read_op_operate_enter, read_op, io, completion, oid, flags);
object_t obj(oid);
librados::IoCtxImpl *ctx = (librados::IoCtxImpl *)io;
librados::AioCompletionImpl *c = (librados::AioCompletionImpl*)completion;
- int retval = ctx->aio_operate_read(obj, (::ObjectOperation *)read_op,
+ return ctx->aio_operate_read(obj, (::ObjectOperation *)read_op,
c, flags, NULL);
- tracepoint(librados, rados_aio_read_op_operate_exit, retval);
- return retval;
}
#include "librbd/AioCompletion.h"
-#ifdef WITH_LTTNG
-#include "tracing/librbd.h"
-#endif
-
#define dout_subsys ceph_subsys_rbd
#undef dout_prefix
#define dout_prefix *_dout << "librbd::AioCompletion: "
lock.Unlock();
}
- int AioCompletion::wait_for_complete() {
- tracepoint(librbd, aio_wait_for_complete_enter, this);
- lock.Lock();
- while (!done)
- cond.Wait(lock);
- lock.Unlock();
- tracepoint(librbd, aio_wait_for_complete_exit, 0);
- return 0;
- }
-
void AioCompletion::finalize(CephContext *cct, ssize_t rval)
{
ldout(cct, 20) << "AioCompletion::finalize() " << (void*)this << " rval " << rval << " read_buf " << (void*)read_buf
}
}
- void AioCompletion::complete() {
- tracepoint(librbd, aio_complete_enter, this, rval);
- utime_t elapsed;
- assert(lock.is_locked());
- elapsed = ceph_clock_now(ictx->cct) - start_time;
- switch (aio_type) {
- case AIO_TYPE_READ:
- ictx->perfcounter->tinc(l_librbd_aio_rd_latency, elapsed); break;
- case AIO_TYPE_WRITE:
- ictx->perfcounter->tinc(l_librbd_aio_wr_latency, elapsed); break;
- case AIO_TYPE_DISCARD:
- ictx->perfcounter->tinc(l_librbd_aio_discard_latency, elapsed); break;
- case AIO_TYPE_FLUSH:
- ictx->perfcounter->tinc(l_librbd_aio_flush_latency, elapsed); break;
- default:
- lderr(ictx->cct) << "completed invalid aio_type: " << aio_type << dendl;
- break;
- }
- if (complete_cb) {
- complete_cb(rbd_comp, complete_arg);
- }
- done = true;
- cond.Signal();
- tracepoint(librbd, aio_complete_exit);
- }
-
void AioCompletion::complete_request(CephContext *cct, ssize_t r)
{
ldout(cct, 20) << "AioCompletion::complete_request() "
put_unlock();
}
- bool AioCompletion::is_complete() {
- tracepoint(librbd, aio_is_complete_enter, this);
- bool done;
- {
- Mutex::Locker l(lock);
- done = this->done;
- }
- tracepoint(librbd, aio_is_complete_exit, done);
- return done;
- }
-
- ssize_t AioCompletion::get_return_value() {
- tracepoint(librbd, aio_get_return_value_enter, this);
- lock.Lock();
- ssize_t r = rval;
- lock.Unlock();
- tracepoint(librbd, aio_get_return_value_exit, r);
- return r;
- }
-
void C_AioRead::finish(int r)
{
ldout(m_cct, 10) << "C_AioRead::finish() " << this << " r = " << r << dendl;
~AioCompletion() {
}
- int wait_for_complete();
+ int wait_for_complete() {
+ lock.Lock();
+ while (!done)
+ cond.Wait(lock);
+ lock.Unlock();
+ return 0;
+ }
void add_request() {
lock.Lock();
start_time = ceph_clock_now(ictx->cct);
}
- void complete();
+ void complete() {
+ utime_t elapsed;
+ assert(lock.is_locked());
+ elapsed = ceph_clock_now(ictx->cct) - start_time;
+ switch (aio_type) {
+ case AIO_TYPE_READ:
+ ictx->perfcounter->tinc(l_librbd_aio_rd_latency, elapsed); break;
+ case AIO_TYPE_WRITE:
+ ictx->perfcounter->tinc(l_librbd_aio_wr_latency, elapsed); break;
+ case AIO_TYPE_DISCARD:
+ ictx->perfcounter->tinc(l_librbd_aio_discard_latency, elapsed); break;
+ case AIO_TYPE_FLUSH:
+ ictx->perfcounter->tinc(l_librbd_aio_flush_latency, elapsed); break;
+ default:
+ lderr(ictx->cct) << "completed invalid aio_type: " << aio_type << dendl;
+ break;
+ }
+ if (complete_cb) {
+ complete_cb(rbd_comp, complete_arg);
+ }
+ done = true;
+ cond.Signal();
+ }
void set_complete_cb(void *cb_arg, callback_t cb) {
complete_cb = cb;
void complete_request(CephContext *cct, ssize_t r);
- bool is_complete();
+ bool is_complete() {
+ Mutex::Locker l(lock);
+ return done;
+ }
- ssize_t get_return_value();
+ ssize_t get_return_value() {
+ lock.Lock();
+ ssize_t r = rval;
+ lock.Unlock();
+ return r;
+ }
void get() {
lock.Lock();
$(LIBRADOS) $(LIBOSDC) \
libcls_rbd_client.la 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_LDFLAGS += -export-symbols-regex '^rbd_.*'
ldout(cct, 20) << "resize " << ictx << " " << ictx->size << " -> "
<< size << dendl;
- if (ictx->read_only) {
+ if (ictx->read_only)
return -EROFS;
- }
int r = ictx_check(ictx);
- if (r < 0) {
+ if (r < 0)
return r;
- }
RWLock::WLocker l(ictx->md_lock);
if (size < ictx->size && ictx->object_cacher) {
// need to invalidate since we're deleting objects, and
// ObjectCacher doesn't track non-existent objects
r = ictx->invalidate_cache();
- if (r < 0) {
+ if (r < 0)
return r;
- }
}
resize_helper(ictx, size, prog_ctx);
uint64_t mylen = len;
int r = clip_io(ictx, off, &mylen);
- if (r < 0) {
+ if (r < 0)
return r;
- }
Context *ctx = new C_SafeCond(&mylock, &cond, &done, &ret);
AioCompletion *c = aio_create_completion_internal(ctx, rbd_ctx_cb);
cond.Wait(mylock);
mylock.Unlock();
- if (ret < 0) {
+ if (ret < 0)
return ret;
- }
elapsed = ceph_clock_now(ictx->cct) - start_time;
ictx->perfcounter->tinc(l_librbd_wr_latency, elapsed);
cond.Wait(mylock);
mylock.Unlock();
- if (ret < 0) {
+ if (ret < 0)
return ret;
- }
elapsed = ceph_clock_now(ictx->cct) - start_time;
ictx->perfcounter->inc(l_librbd_discard_latency, elapsed);
ldout(cct, 20) << "aio_flush " << ictx << " completion " << c << dendl;
int r = ictx_check(ictx);
- if (r < 0) {
+ if (r < 0)
return r;
- }
ictx->user_flushed();
ldout(cct, 20) << "flush " << ictx << dendl;
int r = ictx_check(ictx);
- if (r < 0) {
+ if (r < 0)
return r;
- }
ictx->user_flushed();
r = _flush(ictx);
ldout(cct, 20) << "invalidate_cache " << ictx << dendl;
int r = ictx_check(ictx);
- if (r < 0) {
+ if (r < 0)
return r;
- }
RWLock::WLocker l(ictx->md_lock);
- r = ictx->invalidate_cache();
- return r;
+ return ictx->invalidate_cache();
}
int aio_write(ImageCtx *ictx, uint64_t off, size_t len, const char *buf,
<< len << " buf = " << (void*)buf << dendl;
int r = ictx_check(ictx);
- if (r < 0) {
+ if (r < 0)
return r;
- }
uint64_t mylen = len;
r = clip_io(ictx, off, &mylen);
- if (r < 0) {
+ if (r < 0)
return r;
- }
ictx->snap_lock.get_read();
snapid_t snap_id = ictx->snap_id;
ictx->parent_lock.put_read();
ictx->snap_lock.put_read();
- if (snap_id != CEPH_NOSNAP || ictx->read_only) {
+ if (snap_id != CEPH_NOSNAP || ictx->read_only)
return -EROFS;
- }
ldout(cct, 20) << " parent overlap " << overlap << dendl;
<< len << dendl;
int r = ictx_check(ictx);
- if (r < 0) {
+ if (r < 0)
return r;
- }
r = clip_io(ictx, off, &len);
- if (r < 0) {
+ if (r < 0)
return r;
- }
// TODO: check for snap
ictx->snap_lock.get_read();
ictx->parent_lock.put_read();
ictx->snap_lock.put_read();
- if (snap_id != CEPH_NOSNAP || ictx->read_only) {
+ if (snap_id != CEPH_NOSNAP || ictx->read_only)
return -EROFS;
- }
// map
vector<ObjectExtent> extents;
ldout(ictx->cct, 20) << "aio_read " << ictx << " completion " << c << " " << image_extents << dendl;
int r = ictx_check(ictx);
- if (r < 0) {
+ if (r < 0)
return r;
- }
ictx->snap_lock.get_read();
snap_t snap_id = ictx->snap_id;
++p) {
uint64_t len = p->second;
r = clip_io(ictx, p->first, &len);
- if (r < 0) {
+ if (r < 0)
return r;
- }
if (len == 0)
continue;
#include <string>
#include <vector>
-#ifdef WITH_LTTNG
-#include "tracing/librbd.h"
-#endif
-
#define dout_subsys ceph_subsys_rbd
#undef dout_prefix
#define dout_prefix *_dout << "librbd: "
const char *snap_name)
{
ImageCtx *ictx = new 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);
int r = librbd::open_image(ictx);
- if (r < 0) {
- tracepoint(librbd, open_image_exit, r);
+ if (r < 0)
return r;
- }
image.ctx = (image_ctx_t) ictx;
- tracepoint(librbd, open_image_exit, 0);
return 0;
}
const char *snap_name)
{
ImageCtx *ictx = new 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);
int r = librbd::open_image(ictx);
- if (r < 0) {
- tracepoint(librbd, open_image_exit, r);
+ if (r < 0)
return r;
- }
image.ctx = (image_ctx_t) ictx;
- tracepoint(librbd, open_image_exit, 0);
return 0;
}
int RBD::create(IoCtx& io_ctx, const char *name, uint64_t size, int *order)
{
- 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);
- return r;
+ return librbd::create(io_ctx, name, size, order);
}
int RBD::create2(IoCtx& io_ctx, const char *name, uint64_t size,
uint64_t features, int *order)
{
- 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);
- return r;
+ return librbd::create(io_ctx, name, size, false, features, order, 0, 0);
}
int RBD::create3(IoCtx& io_ctx, const char *name, uint64_t size,
uint64_t features, int *order, uint64_t stripe_unit,
uint64_t stripe_count)
{
- 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,
+ return librbd::create(io_ctx, name, size, false, features, order,
stripe_unit, stripe_count);
- tracepoint(librbd, create3_exit, r, *order);
- return r;
}
int RBD::clone(IoCtx& p_ioctx, const char *p_name, const char *p_snap_name,
int RBD::remove(IoCtx& io_ctx, const char *name)
{
- 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);
- tracepoint(librbd, remove_exit, r);
return r;
}
int RBD::remove_with_progress(IoCtx& io_ctx, const char *name,
ProgressContext& pctx)
{
- 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);
return r;
}
int RBD::rename(IoCtx& src_io_ctx, const char *srcname, const char *destname)
{
- 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);
return r;
}
{
if (ctx) {
ImageCtx *ictx = (ImageCtx *)ctx;
- tracepoint(librbd, close_image_enter, ictx, ictx->name.c_str(), ictx->id.c_str());
close_image(ictx);
- tracepoint(librbd, close_image_exit);
}
}
int Image::resize(uint64_t size)
{
ImageCtx *ictx = (ImageCtx *)ctx;
- tracepoint(librbd, resize_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), ictx->read_only, size);
librbd::NoOpProgressContext prog_ctx;
- int r = librbd::resize(ictx, size, prog_ctx);
- tracepoint(librbd, resize_exit, r);
- return r;
+ return librbd::resize(ictx, size, prog_ctx);
}
int Image::resize_with_progress(uint64_t size, librbd::ProgressContext& pctx)
{
ImageCtx *ictx = (ImageCtx *)ctx;
- tracepoint(librbd, resize_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), ictx->read_only, size);
- int r = librbd::resize(ictx, size, pctx);
- tracepoint(librbd, resize_exit, r);
- return r;
+ return librbd::resize(ictx, size, pctx);
}
int Image::stat(image_info_t& info, size_t infosize)
int Image::copy(IoCtx& dest_io_ctx, const char *destname)
{
ImageCtx *ictx = (ImageCtx *)ctx;
- tracepoint(librbd, copy_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), ictx->read_only, destname);
librbd::NoOpProgressContext prog_ctx;
- int r = librbd::copy(ictx, dest_io_ctx, destname, prog_ctx);
- tracepoint(librbd, copy_exit, r);
- return r;
+ return librbd::copy(ictx, dest_io_ctx, destname, prog_ctx);
}
int Image::copy2(Image& dest)
{
ImageCtx *srcctx = (ImageCtx *)ctx;
ImageCtx *destctx = (ImageCtx *)dest.ctx;
- tracepoint(librbd, copy2_enter, srcctx, srcctx->name.c_str(), srcctx->snap_name.c_str(), srcctx->read_only, destctx, destctx->name.c_str(), destctx->snap_name.c_str(), destctx->read_only);
librbd::NoOpProgressContext prog_ctx;
- int r = librbd::copy(srcctx, destctx, prog_ctx);
- tracepoint(librbd, copy2_exit, r);
- return r;
+ return librbd::copy(srcctx, destctx, prog_ctx);
}
int Image::copy_with_progress(IoCtx& dest_io_ctx, const char *destname,
librbd::ProgressContext &pctx)
{
ImageCtx *ictx = (ImageCtx *)ctx;
- tracepoint(librbd, copy_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), ictx->read_only, destname);
- int r = librbd::copy(ictx, dest_io_ctx, destname, pctx);
- tracepoint(librbd, copy_exit, r);
- return r;
+ return librbd::copy(ictx, dest_io_ctx, destname, pctx);
}
int Image::copy_with_progress2(Image& dest, librbd::ProgressContext &pctx)
{
ImageCtx *srcctx = (ImageCtx *)ctx;
ImageCtx *destctx = (ImageCtx *)dest.ctx;
- tracepoint(librbd, copy2_enter, srcctx, srcctx->name.c_str(), srcctx->snap_name.c_str(), srcctx->read_only, destctx, destctx->name.c_str(), destctx->snap_name.c_str(), destctx->read_only);
- int r = librbd::copy(srcctx, destctx, pctx);
- tracepoint(librbd, copy2_exit, r);
- return r;
+ return librbd::copy(srcctx, destctx, pctx);
}
int Image::flatten()
ssize_t Image::read(uint64_t ofs, size_t len, bufferlist& bl)
{
ImageCtx *ictx = (ImageCtx *)ctx;
- tracepoint(librbd, read_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), ictx->read_only, ofs, len);
bufferptr ptr(len);
bl.push_back(ptr);
- int r = librbd::read(ictx, ofs, len, bl.c_str());
- tracepoint(librbd, read_exit, r);
- return r;
+ return librbd::read(ictx, ofs, len, bl.c_str());
}
int64_t Image::read_iterate(uint64_t ofs, size_t len,
ssize_t Image::write(uint64_t ofs, size_t len, bufferlist& bl)
{
ImageCtx *ictx = (ImageCtx *)ctx;
- tracepoint(librbd, write_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), ictx->read_only, ofs, len, bl.length() < len ? NULL : bl.c_str());
- if (bl.length() < len) {
- tracepoint(librbd, write_exit, -EINVAL);
+ if (bl.length() < len)
return -EINVAL;
- }
- int r = librbd::write(ictx, ofs, len, bl.c_str());
- tracepoint(librbd, write_exit, r);
- return r;
+ return librbd::write(ictx, ofs, len, bl.c_str());
}
int Image::discard(uint64_t ofs, uint64_t len)
{
ImageCtx *ictx = (ImageCtx *)ctx;
- tracepoint(librbd, discard_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), ictx->read_only, ofs, len);
- int r = librbd::discard(ictx, ofs, len);
- tracepoint(librbd, discard_exit, r);
- return r;
+ return librbd::discard(ictx, ofs, len);
}
int Image::aio_write(uint64_t off, size_t len, bufferlist& bl,
RBD::AioCompletion *c)
{
ImageCtx *ictx = (ImageCtx *)ctx;
- tracepoint(librbd, aio_write_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), ictx->read_only, off, len, bl.length() < len ? NULL : bl.c_str(), c->pc);
- if (bl.length() < len) {
- tracepoint(librbd, aio_write_exit, -EINVAL);
+ if (bl.length() < len)
return -EINVAL;
- }
- int r = librbd::aio_write(ictx, off, len, bl.c_str(),
+ return librbd::aio_write(ictx, off, len, bl.c_str(),
(librbd::AioCompletion *)c->pc);
- tracepoint(librbd, aio_write_exit, r);
- return r;
}
int Image::aio_discard(uint64_t off, uint64_t len, RBD::AioCompletion *c)
{
ImageCtx *ictx = (ImageCtx *)ctx;
- tracepoint(librbd, aio_discard_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), ictx->read_only, off, len, c->pc);
- int r = librbd::aio_discard(ictx, off, len, (librbd::AioCompletion *)c->pc);
- tracepoint(librbd, aio_discard_exit, r);
- return r;
+ return librbd::aio_discard(ictx, off, len, (librbd::AioCompletion *)c->pc);
}
int Image::aio_read(uint64_t off, size_t len, bufferlist& bl,
RBD::AioCompletion *c)
{
ImageCtx *ictx = (ImageCtx *)ctx;
- tracepoint(librbd, aio_read_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), ictx->read_only, off, len, bl.c_str(), c->pc);
ldout(ictx->cct, 10) << "Image::aio_read() buf=" << (void *)bl.c_str() << "~"
<< (void *)(bl.c_str() + len - 1) << dendl;
- int r = librbd::aio_read(ictx, off, len, NULL, &bl, (librbd::AioCompletion *)c->pc);
- tracepoint(librbd, aio_read_exit, r);
- return r;
+ return librbd::aio_read(ictx, off, len, NULL, &bl, (librbd::AioCompletion *)c->pc);
}
int Image::flush()
{
ImageCtx *ictx = (ImageCtx *)ctx;
- tracepoint(librbd, flush_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), ictx->read_only);
- int r = librbd::flush(ictx);
- tracepoint(librbd, flush_exit, r);
- return r;
+ return librbd::flush(ictx);
}
int Image::aio_flush(RBD::AioCompletion *c)
{
ImageCtx *ictx = (ImageCtx *)ctx;
- tracepoint(librbd, aio_flush_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), ictx->read_only, c->pc);
- int r = librbd::aio_flush(ictx, (librbd::AioCompletion *)c->pc);
- tracepoint(librbd, aio_flush_exit, r);
- return r;
+ return librbd::aio_flush(ictx, (librbd::AioCompletion *)c->pc);
}
int Image::invalidate_cache()
{
ImageCtx *ictx = (ImageCtx *)ctx;
- tracepoint(librbd, invalidate_cache_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), ictx->read_only);
- int r = librbd::invalidate_cache(ictx);
- tracepoint(librbd, invalidate_cache_exit, r);
- return r;
+ return librbd::invalidate_cache(ictx);
}
} // namespace librbd
{
librados::IoCtx io_ctx;
librados::IoCtx::from_rados_ioctx_t(p, 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);
- return r;
+ return librbd::create(io_ctx, name, size, order);
}
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);
- 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);
- return r;
+ return librbd::create(io_ctx, name, size, false, features, order, 0, 0);
}
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);
- 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,
+ return librbd::create(io_ctx, name, size, false, features, order,
stripe_unit, stripe_count);
- tracepoint(librbd, create3_exit, r, *order);
- return r;
}
extern "C" int rbd_clone(rados_ioctx_t p_ioctx, const char *p_name,
{
librados::IoCtx io_ctx;
librados::IoCtx::from_rados_ioctx_t(p, 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);
- tracepoint(librbd, remove_exit, r);
- return r;
+ return librbd::remove(io_ctx, name, prog_ctx);
}
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);
- 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);
- tracepoint(librbd, remove_exit, r);
- return r;
+ return librbd::remove(io_ctx, name, prog_ctx);
}
extern "C" int rbd_copy(rbd_image_t image, rados_ioctx_t dest_p,
{
librados::IoCtx src_io_ctx;
librados::IoCtx::from_rados_ioctx_t(src_p, 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);
- return r;
+ return librbd::rename(src_io_ctx, srcname, destname);
}
extern "C" int rbd_open(rados_ioctx_t p, const char *name, rbd_image_t *image,
librados::IoCtx::from_rados_ioctx_t(p, 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);
int r = librbd::open_image(ictx);
if (r >= 0)
*image = (rbd_image_t)ictx;
- tracepoint(librbd, open_image_exit, r);
return r;
}
librados::IoCtx::from_rados_ioctx_t(p, 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);
int r = librbd::open_image(ictx);
if (r >= 0)
*image = (rbd_image_t)ictx;
- tracepoint(librbd, open_image_exit, r);
return r;
}
extern "C" int rbd_close(rbd_image_t image)
{
librbd::ImageCtx *ctx = (librbd::ImageCtx *)image;
- tracepoint(librbd, close_image_enter, ctx, ctx->name.c_str(), ctx->id.c_str());
librbd::close_image(ctx);
- tracepoint(librbd, close_image_exit);
return 0;
}
extern "C" int rbd_resize(rbd_image_t image, uint64_t size)
{
librbd::ImageCtx *ictx = (librbd::ImageCtx *)image;
- tracepoint(librbd, resize_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), ictx->read_only, size);
librbd::NoOpProgressContext prog_ctx;
- int r = librbd::resize(ictx, size, prog_ctx);
- tracepoint(librbd, resize_exit, r);
- return r;
+ return librbd::resize(ictx, size, prog_ctx);
}
extern "C" int rbd_resize_with_progress(rbd_image_t image, uint64_t size,
librbd_progress_fn_t cb, void *cbdata)
{
librbd::ImageCtx *ictx = (librbd::ImageCtx *)image;
- tracepoint(librbd, resize_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), ictx->read_only, size);
librbd::CProgressContext prog_ctx(cb, cbdata);
- int r = librbd::resize(ictx, size, prog_ctx);
- tracepoint(librbd, resize_exit, r);
- return r;
+ return librbd::resize(ictx, size, prog_ctx);
}
extern "C" int rbd_stat(rbd_image_t image, rbd_image_info_t *info,
char *buf)
{
librbd::ImageCtx *ictx = (librbd::ImageCtx *)image;
- tracepoint(librbd, read_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), ictx->read_only, ofs, len);
- int r = librbd::read(ictx, ofs, len, buf);
- tracepoint(librbd, read_exit, r);
- return r;
+ return librbd::read(ictx, ofs, len, buf);
}
extern "C" int64_t rbd_read_iterate(rbd_image_t image, uint64_t ofs, size_t len,
const char *buf)
{
librbd::ImageCtx *ictx = (librbd::ImageCtx *)image;
- tracepoint(librbd, write_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), ictx->read_only, ofs, len, buf);
- int r = librbd::write(ictx, ofs, len, buf);
- tracepoint(librbd, write_exit, r);
- return r;
+ return librbd::write(ictx, ofs, len, buf);
}
extern "C" int rbd_discard(rbd_image_t image, uint64_t ofs, uint64_t len)
{
librbd::ImageCtx *ictx = (librbd::ImageCtx *)image;
- tracepoint(librbd, discard_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), ictx->read_only, ofs, len);
- int r = librbd::discard(ictx, ofs, len);
- tracepoint(librbd, discard_exit, r);
- return r;
+ return librbd::discard(ictx, ofs, len);
}
extern "C" int rbd_aio_create_completion(void *cb_arg,
{
librbd::ImageCtx *ictx = (librbd::ImageCtx *)image;
librbd::RBD::AioCompletion *comp = (librbd::RBD::AioCompletion *)c;
- tracepoint(librbd, aio_write_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), ictx->read_only, off, len, buf, comp->pc);
- int r = librbd::aio_write(ictx, off, len, buf,
+ return librbd::aio_write(ictx, off, len, buf,
(librbd::AioCompletion *)comp->pc);
- tracepoint(librbd, aio_write_exit, r);
- return r;
}
extern "C" int rbd_aio_discard(rbd_image_t image, uint64_t off, uint64_t len,
{
librbd::ImageCtx *ictx = (librbd::ImageCtx *)image;
librbd::RBD::AioCompletion *comp = (librbd::RBD::AioCompletion *)c;
- tracepoint(librbd, aio_discard_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), ictx->read_only, off, len, comp->pc);
- int r = librbd::aio_discard(ictx, off, len, (librbd::AioCompletion *)comp->pc);
- tracepoint(librbd, aio_discard_exit, r);
- return r;
+ return librbd::aio_discard(ictx, off, len, (librbd::AioCompletion *)comp->pc);
}
extern "C" int rbd_aio_read(rbd_image_t image, uint64_t off, size_t len,
{
librbd::ImageCtx *ictx = (librbd::ImageCtx *)image;
librbd::RBD::AioCompletion *comp = (librbd::RBD::AioCompletion *)c;
- tracepoint(librbd, aio_read_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), ictx->read_only, off, len, buf, comp->pc);
- int r = librbd::aio_read(ictx, off, len, buf, NULL,
+ return librbd::aio_read(ictx, off, len, buf, NULL,
(librbd::AioCompletion *)comp->pc);
- tracepoint(librbd, aio_read_exit, r);
- return r;
}
extern "C" int rbd_flush(rbd_image_t image)
{
librbd::ImageCtx *ictx = (librbd::ImageCtx *)image;
- tracepoint(librbd, flush_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), ictx->read_only);
- int r = librbd::flush(ictx);
- tracepoint(librbd, flush_exit, r);
- return r;
+ return librbd::flush(ictx);
}
extern "C" int rbd_aio_flush(rbd_image_t image, rbd_completion_t c)
{
librbd::ImageCtx *ictx = (librbd::ImageCtx *)image;
librbd::RBD::AioCompletion *comp = (librbd::RBD::AioCompletion *)c;
- tracepoint(librbd, aio_flush_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), ictx->read_only, comp->pc);
- int r = librbd::aio_flush(ictx, (librbd::AioCompletion *)comp->pc);
- tracepoint(librbd, aio_flush_exit, r);
- return r;
+ return librbd::aio_flush(ictx, (librbd::AioCompletion *)comp->pc);
}
extern "C" int rbd_invalidate_cache(rbd_image_t image)
{
librbd::ImageCtx *ictx = (librbd::ImageCtx *)image;
- tracepoint(librbd, invalidate_cache_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), ictx->read_only);
- int r = librbd::invalidate_cache(ictx);
- tracepoint(librbd, invalidate_cache_exit, r);
- return r;
+ return librbd::invalidate_cache(ictx);
}
extern "C" int rbd_aio_is_complete(rbd_completion_t c)
#include "common/config.h"
-#ifdef WITH_LTTNG
-#include "tracing/objectstore.h"
-#endif
-
#define dout_subsys ceph_subsys_filestore
#undef dout_prefix
#define dout_prefix *_dout << "filestore(" << basedir << ") "
dout(5) << "queue_transactions new " << *osr << "/" << osr->parent << dendl;
}
- // used to include osr information in tracepoints during transaction apply
- for (list<ObjectStore::Transaction*>::iterator i = tls.begin(); i != tls.end(); ++i) {
- (*i)->set_osr(osr);
- }
-
if (journal && journal->is_writeable() && !m_filestore_journal_trailing) {
Op *o = build_op(tls, onreadable, onreadable_sync, osd_op);
op_queue_reserve_throttle(o, handle);
{
dout(10) << "_do_transaction on " << &t << dendl;
- const char *osr_name = t.get_osr() ? ((OpSequencer*)t.get_osr())->get_name().c_str() : "<NULL>";
-
Transaction::iterator i = t.begin();
SequencerPosition spos(op_seq, trans_num, 0);
{
coll_t cid = i.decode_cid();
ghobject_t oid = i.decode_oid();
- tracepoint(objectstore, touch_enter, osr_name);
if (_check_replay_guard(cid, oid, spos) > 0)
r = _touch(cid, oid);
- tracepoint(objectstore, touch_exit, r);
}
break;
bool replica = i.get_replica();
bufferlist bl;
i.decode_bl(bl);
- tracepoint(objectstore, write_enter, osr_name, off, len);
if (_check_replay_guard(cid, oid, spos) > 0)
r = _write(cid, oid, off, len, bl, replica);
- tracepoint(objectstore, write_exit, r);
}
break;
ghobject_t oid = i.decode_oid();
uint64_t off = i.decode_length();
uint64_t len = i.decode_length();
- tracepoint(objectstore, zero_enter, osr_name, off, len);
if (_check_replay_guard(cid, oid, spos) > 0)
r = _zero(cid, oid, off, len);
- tracepoint(objectstore, zero_exit, r);
}
break;
coll_t cid = i.decode_cid();
ghobject_t oid = i.decode_oid();
uint64_t off = i.decode_length();
- tracepoint(objectstore, truncate_enter, osr_name, off);
if (_check_replay_guard(cid, oid, spos) > 0)
r = _truncate(cid, oid, off);
- tracepoint(objectstore, truncate_exit, r);
}
break;
{
coll_t cid = i.decode_cid();
ghobject_t oid = i.decode_oid();
- tracepoint(objectstore, remove_enter, osr_name);
if (_check_replay_guard(cid, oid, spos) > 0)
r = _remove(cid, oid, spos);
- tracepoint(objectstore, remove_exit, r);
}
break;
string name = i.decode_attrname();
bufferlist bl;
i.decode_bl(bl);
- tracepoint(objectstore, setattr_enter, osr_name);
if (_check_replay_guard(cid, oid, spos) > 0) {
map<string, bufferptr> to_set;
to_set[name] = bufferptr(bl.c_str(), bl.length());
dout(0) << " ENOSPC on setxattr on " << cid << "/" << oid
<< " name " << name << " size " << bl.length() << dendl;
}
- tracepoint(objectstore, setattr_exit, r);
}
break;
ghobject_t oid = i.decode_oid();
map<string, bufferptr> aset;
i.decode_attrset(aset);
- tracepoint(objectstore, setattrs_enter, osr_name);
if (_check_replay_guard(cid, oid, spos) > 0)
r = _setattrs(cid, oid, aset, spos);
- tracepoint(objectstore, setattrs_exit, r);
if (r == -ENOSPC)
dout(0) << " ENOSPC on setxattrs on " << cid << "/" << oid << dendl;
}
coll_t cid = i.decode_cid();
ghobject_t oid = i.decode_oid();
string name = i.decode_attrname();
- tracepoint(objectstore, rmattr_enter, osr_name);
if (_check_replay_guard(cid, oid, spos) > 0)
r = _rmattr(cid, oid, name.c_str(), spos);
- tracepoint(objectstore, rmattr_exit, r);
}
break;
{
coll_t cid = i.decode_cid();
ghobject_t oid = i.decode_oid();
- tracepoint(objectstore, rmattrs_enter, osr_name);
if (_check_replay_guard(cid, oid, spos) > 0)
r = _rmattrs(cid, oid, spos);
- tracepoint(objectstore, rmattrs_exit, r);
}
break;
coll_t cid = i.decode_cid();
ghobject_t oid = i.decode_oid();
ghobject_t noid = i.decode_oid();
- tracepoint(objectstore, clone_enter, osr_name);
r = _clone(cid, oid, noid, spos);
- tracepoint(objectstore, clone_exit, r);
}
break;
ghobject_t noid = i.decode_oid();
uint64_t off = i.decode_length();
uint64_t len = i.decode_length();
- tracepoint(objectstore, clone_range_enter, osr_name, len);
r = _clone_range(cid, oid, noid, off, len, off, spos);
- tracepoint(objectstore, clone_range_exit, r);
}
break;
uint64_t srcoff = i.decode_length();
uint64_t len = i.decode_length();
uint64_t dstoff = i.decode_length();
- tracepoint(objectstore, clone_range2_enter, osr_name, len);
r = _clone_range(cid, oid, noid, srcoff, len, dstoff, spos);
- tracepoint(objectstore, clone_range2_exit, r);
}
break;
case Transaction::OP_MKCOLL:
{
coll_t cid = i.decode_cid();
- tracepoint(objectstore, mkcoll_enter, osr_name);
if (_check_replay_guard(cid, spos) > 0)
r = _create_collection(cid, spos);
- tracepoint(objectstore, mkcoll_exit, r);
}
break;
case Transaction::OP_RMCOLL:
{
coll_t cid = i.decode_cid();
- tracepoint(objectstore, rmcoll_enter, osr_name);
if (_check_replay_guard(cid, spos) > 0)
r = _destroy_collection(cid);
- tracepoint(objectstore, rmcoll_exit, r);
}
break;
coll_t ncid = i.decode_cid();
coll_t ocid = i.decode_cid();
ghobject_t oid = i.decode_oid();
- tracepoint(objectstore, coll_add_enter);
r = _collection_add(ncid, ocid, oid, spos);
- tracepoint(objectstore, coll_add_exit, r);
}
break;
{
coll_t cid = i.decode_cid();
ghobject_t oid = i.decode_oid();
- tracepoint(objectstore, coll_remove_enter, osr_name);
if (_check_replay_guard(cid, oid, spos) > 0)
r = _remove(cid, oid, spos);
- tracepoint(objectstore, coll_remove_exit, r);
}
break;
coll_t ocid = i.decode_cid();
coll_t ncid = i.decode_cid();
ghobject_t oid = i.decode_oid();
- tracepoint(objectstore, coll_move_enter);
r = _collection_add(ocid, ncid, oid, spos);
if (r == 0 &&
(_check_replay_guard(ocid, oid, spos) > 0))
r = _remove(ocid, oid, spos);
- tracepoint(objectstore, coll_move_exit, r);
}
break;
ghobject_t oldoid = i.decode_oid();
coll_t newcid = i.decode_cid();
ghobject_t newoid = i.decode_oid();
- tracepoint(objectstore, coll_move_rename_enter);
r = _collection_move_rename(oldcid, oldoid, newcid, newoid, spos);
- tracepoint(objectstore, coll_move_rename_exit, r);
}
break;
string name = i.decode_attrname();
bufferlist bl;
i.decode_bl(bl);
- tracepoint(objectstore, coll_setattr_enter, osr_name);
if (_check_replay_guard(cid, spos) > 0)
r = _collection_setattr(cid, name.c_str(), bl.c_str(), bl.length());
- tracepoint(objectstore, coll_setattr_exit, r);
}
break;
{
coll_t cid = i.decode_cid();
string name = i.decode_attrname();
- tracepoint(objectstore, coll_rmattr_enter, osr_name);
if (_check_replay_guard(cid, spos) > 0)
r = _collection_rmattr(cid, name.c_str());
- tracepoint(objectstore, coll_rmattr_exit, r);
}
break;
case Transaction::OP_STARTSYNC:
- tracepoint(objectstore, startsync_enter, osr_name);
_start_sync();
- tracepoint(objectstore, startsync_exit);
break;
case Transaction::OP_COLL_RENAME:
{
coll_t cid(i.decode_cid());
coll_t ncid(i.decode_cid());
- tracepoint(objectstore, coll_rename_enter, osr_name);
r = _collection_rename(cid, ncid, spos);
- tracepoint(objectstore, coll_rename_exit, r);
}
break;
{
coll_t cid(i.decode_cid());
ghobject_t oid = i.decode_oid();
- tracepoint(objectstore, omap_clear_enter, osr_name);
r = _omap_clear(cid, oid, spos);
- tracepoint(objectstore, omap_clear_exit, r);
}
break;
case Transaction::OP_OMAP_SETKEYS:
ghobject_t oid = i.decode_oid();
map<string, bufferlist> aset;
i.decode_attrset(aset);
- tracepoint(objectstore, omap_setkeys_enter, osr_name);
r = _omap_setkeys(cid, oid, aset, spos);
- tracepoint(objectstore, omap_setkeys_exit, r);
}
break;
case Transaction::OP_OMAP_RMKEYS:
ghobject_t oid = i.decode_oid();
set<string> keys;
i.decode_keyset(keys);
- tracepoint(objectstore, omap_rmkeys_enter, osr_name);
r = _omap_rmkeys(cid, oid, keys, spos);
- tracepoint(objectstore, omap_rmkeys_exit, r);
}
break;
case Transaction::OP_OMAP_RMKEYRANGE:
string first, last;
first = i.decode_key();
last = i.decode_key();
- tracepoint(objectstore, omap_rmkeyrange_enter, osr_name);
r = _omap_rmkeyrange(cid, oid, first, last, spos);
- tracepoint(objectstore, omap_rmkeyrange_exit, r);
}
break;
case Transaction::OP_OMAP_SETHEADER:
ghobject_t oid = i.decode_oid();
bufferlist bl;
i.decode_bl(bl);
- tracepoint(objectstore, omap_setheader_enter, osr_name);
r = _omap_setheader(cid, oid, bl, spos);
- tracepoint(objectstore, omap_setheader_exit, r);
}
break;
case Transaction::OP_SPLIT_COLLECTION:
uint32_t bits(i.decode_u32());
uint32_t rem(i.decode_u32());
coll_t dest(i.decode_cid());
- tracepoint(objectstore, split_coll_enter, osr_name);
r = _split_collection_create(cid, bits, rem, dest, spos);
- tracepoint(objectstore, split_coll_exit, r);
}
break;
case Transaction::OP_SPLIT_COLLECTION2:
uint32_t bits(i.decode_u32());
uint32_t rem(i.decode_u32());
coll_t dest(i.decode_cid());
- tracepoint(objectstore, split_coll2_enter, osr_name);
r = _split_collection(cid, bits, rem, dest, spos);
- tracepoint(objectstore, split_coll2_exit, r);
}
break;
ghobject_t oid = i.decode_oid();
uint64_t expected_object_size = i.decode_length();
uint64_t expected_write_size = i.decode_length();
- tracepoint(objectstore, setallochint_enter, osr_name);
if (_check_replay_guard(cid, oid, spos) > 0)
r = _set_alloc_hint(cid, oid, expected_object_size,
expected_write_size);
- tracepoint(objectstore, setallochint_exit, r);
}
break;
bool FileStore::exists(coll_t cid, const ghobject_t& oid)
{
- tracepoint(objectstore, exists_enter, cid.c_str());
struct stat st;
- bool retval = stat(cid, oid, &st) == 0;
- tracepoint(objectstore, exists_exit, retval);
- return retval;
+ if (stat(cid, oid, &st) == 0)
+ return true;
+ else
+ return false;
}
int FileStore::stat(
coll_t cid, const ghobject_t& oid, struct stat *st, bool allow_eio)
{
- tracepoint(objectstore, stat_enter, cid.c_str());
int r = lfn_stat(cid, oid, st);
assert(allow_eio || !m_filestore_fail_eio || r != -EIO);
if (r < 0) {
debug_mdata_eio(oid)) {
return -EIO;
} else {
- tracepoint(objectstore, stat_exit, r);
return r;
}
}
bool allow_eio)
{
int got;
- tracepoint(objectstore, read_enter, cid.c_str(), offset, len);
dout(15) << "read " << cid << "/" << oid << " " << offset << "~" << len << dendl;
debug_data_eio(oid)) {
return -EIO;
} else {
- tracepoint(objectstore, read_exit, got);
return got;
}
}
uint64_t offset, size_t len,
bufferlist& bl)
{
- tracepoint(objectstore, fiemap_enter, cid.c_str(), offset, len);
-
if (!backend->has_fiemap() || len <= (size_t)m_filestore_fiemap_threshold) {
map<uint64_t, uint64_t> m;
m[offset] = len;
dout(10) << "fiemap " << cid << "/" << oid << " " << offset << "~" << len << " = " << r << " num_extents=" << exomap.size() << " " << exomap << dendl;
assert(!m_filestore_fail_eio || r != -EIO);
- tracepoint(objectstore, fiemap_exit, r);
return r;
}
int FileStore::getattr(coll_t cid, const ghobject_t& oid, const char *name, bufferptr &bp)
{
- tracepoint(objectstore, getattr_enter, cid.c_str());
dout(15) << "getattr " << cid << "/" << oid << " '" << name << "'" << dendl;
FDRef fd;
int r = lfn_open(cid, oid, false, &fd);
debug_mdata_eio(oid)) {
return -EIO;
} else {
- tracepoint(objectstore, getattr_exit, r);
return r;
}
}
int FileStore::getattrs(coll_t cid, const ghobject_t& oid, map<string,bufferptr>& aset)
{
- tracepoint(objectstore, getattrs_enter, cid.c_str());
set<string> omap_attrs;
map<string, bufferlist> omap_aset;
Index index;
debug_mdata_eio(oid)) {
return -EIO;
} else {
- tracepoint(objectstore, getattrs_exit, r);
return r;
}
}
int FileStore::list_collections(vector<coll_t>& ls)
{
- tracepoint(objectstore, list_collections_enter);
dout(10) << "list_collections" << dendl;
char fn[PATH_MAX];
::closedir(dir);
assert(!m_filestore_fail_eio || r != -EIO);
- tracepoint(objectstore, list_collections_exit, r);
return r;
}
int FileStore::collection_stat(coll_t c, struct stat *st)
{
- tracepoint(objectstore, collection_stat_enter, c.c_str());
char fn[PATH_MAX];
get_cdir(c, fn, sizeof(fn));
dout(15) << "collection_stat " << fn << dendl;
r = -errno;
dout(10) << "collection_stat " << fn << " = " << r << dendl;
assert(!m_filestore_fail_eio || r != -EIO);
- tracepoint(objectstore, collection_stat_exit, r);
return r;
}
bool FileStore::collection_exists(coll_t c)
{
- tracepoint(objectstore, collection_exists_enter, c.c_str());
struct stat st;
- bool ret = collection_stat(c, &st) == 0;
- tracepoint(objectstore, collection_exists_exit, ret);
- return ret;
+ return collection_stat(c, &st) == 0;
}
bool FileStore::collection_empty(coll_t c)
{
- tracepoint(objectstore, collection_empty_enter, c.c_str());
dout(15) << "collection_empty " << c << dendl;
Index index;
int r = get_index(c, &index);
assert(!m_filestore_fail_eio || r != -EIO);
return false;
}
- bool ret = ls.empty();
- tracepoint(objectstore, collection_empty_exit, ret);
return ls.empty();
}
int FileStore::collection_list_range(coll_t c, ghobject_t start, ghobject_t end,
snapid_t seq, vector<ghobject_t> *ls)
{
- tracepoint(objectstore, collection_list_range_enter, c.c_str());
bool done = false;
ghobject_t next = start;
}
}
- tracepoint(objectstore, collection_list_range_exit, 0);
return 0;
}
int min, int max, snapid_t seq,
vector<ghobject_t> *ls, ghobject_t *next)
{
- tracepoint(objectstore, collection_list_partial_enter, c.c_str());
dout(10) << "collection_list_partial: " << c << dendl;
Index index;
int r = get_index(c, &index);
}
if (ls)
dout(20) << "objects: " << *ls << dendl;
- tracepoint(objectstore, collection_list_partial_exit, 0);
return 0;
}
int FileStore::collection_list(coll_t c, vector<ghobject_t>& ls)
{
- tracepoint(objectstore, collection_list_enter, c.c_str());
Index index;
int r = get_index(c, &index);
if (r < 0)
r = index->collection_list(&ls);
assert(!m_filestore_fail_eio || r != -EIO);
- tracepoint(objectstore, collection_list_exit, r);
return r;
}
bufferlist *header,
map<string, bufferlist> *out)
{
- tracepoint(objectstore, omap_get_enter, c.c_str());
dout(15) << __func__ << " " << c << "/" << hoid << dendl;
Index index;
int r = get_index(c, &index);
assert(!m_filestore_fail_eio || r != -EIO);
return r;
}
- tracepoint(objectstore, omap_get_exit, 0);
return 0;
}
bufferlist *bl,
bool allow_eio)
{
- tracepoint(objectstore, omap_get_header_enter, c.c_str());
dout(15) << __func__ << " " << c << "/" << hoid << dendl;
Index index;
int r = get_index(c, &index);
assert(allow_eio || !m_filestore_fail_eio || r != -EIO);
return r;
}
- tracepoint(objectstore, omap_get_header_exit, 0);
return 0;
}
int FileStore::omap_get_keys(coll_t c, const ghobject_t &hoid, set<string> *keys)
{
- tracepoint(objectstore, omap_get_keys_enter, c.c_str());
dout(15) << __func__ << " " << c << "/" << hoid << dendl;
Index index;
int r = get_index(c, &index);
assert(!m_filestore_fail_eio || r != -EIO);
return r;
}
- tracepoint(objectstore, omap_get_keys_exit, 0);
return 0;
}
const set<string> &keys,
map<string, bufferlist> *out)
{
- tracepoint(objectstore, omap_get_values_enter, c.c_str());
dout(15) << __func__ << " " << c << "/" << hoid << dendl;
Index index;
int r = get_index(c, &index);
assert(!m_filestore_fail_eio || r != -EIO);
return r;
}
- tracepoint(objectstore, omap_get_values_exit, 0);
return 0;
}
const set<string> &keys,
set<string> *out)
{
- tracepoint(objectstore, omap_check_keys_enter, c.c_str());
dout(15) << __func__ << " " << c << "/" << hoid << dendl;
Index index;
assert(!m_filestore_fail_eio || r != -EIO);
return r;
}
- tracepoint(objectstore, omap_check_keys_exit, 0);
return 0;
}
ObjectMap::ObjectMapIterator FileStore::get_omap_iterator(coll_t c,
const ghobject_t &hoid)
{
- tracepoint(objectstore, get_omap_iterator, c.c_str());
dout(15) << __func__ << " " << c << "/" << hoid << dendl;
Index index;
int r = get_index(c, &index);
libos_la_CXXFLAGS = ${AM_CXXFLAGS}
libos_la_LIBADD = $(LIBOS_TYPES)
-if WITH_LTTNG
-libos_la_LIBADD += $(LIBOS_TP)
-endif
-
noinst_LTLIBRARIES += libos.la
noinst_HEADERS += \
bool use_pool_override;
bool replica;
bool tolerate_collection_add_enoent;
- void *osr; // NULL on replay
list<Context *> on_applied;
list<Context *> on_commit;
return ops;
}
- void set_osr(void *s) {
- osr = s;
- }
-
- void *get_osr() {
- return osr;
- }
-
/**
* iterator
*
ops(0), pad_unused_bytes(0), largest_data_len(0), largest_data_off(0), largest_data_off_in_tbl(0),
sobject_encoding(false), pool_override(-1), use_pool_override(false),
replica(false),
- tolerate_collection_add_enoent(false), osr(NULL) {}
+ tolerate_collection_add_enoent(false) {}
Transaction(bufferlist::iterator &dp) :
ops(0), pad_unused_bytes(0), largest_data_len(0), largest_data_off(0), largest_data_off_in_tbl(0),
sobject_encoding(false), pool_override(-1), use_pool_override(false),
replica(false),
- tolerate_collection_add_enoent(false), osr(NULL) {
+ tolerate_collection_add_enoent(false) {
decode(dp);
}
ops(0), pad_unused_bytes(0), largest_data_len(0), largest_data_off(0), largest_data_off_in_tbl(0),
sobject_encoding(false), pool_override(-1), use_pool_override(false),
replica(false),
- tolerate_collection_add_enoent(false), osr(NULL) {
+ tolerate_collection_add_enoent(false) {
bufferlist::iterator dp = nbl.begin();
decode(dp);
}
libosd_la_CXXFLAGS = ${AM_CXXFLAGS}
libosd_la_LIBADD = $(LIBOSDC) $(LIBOS) $(LIBOSD_TYPES) $(LIBOS_TYPES)
-if WITH_LTTNG
-libosd_la_LIBADD += $(LIBOSD_TP)
-endif
noinst_LTLIBRARIES += libosd.la
noinst_HEADERS += \
#include "include/assert.h"
#include "common/config.h"
-#ifdef WITH_LTTNG
-#include "tracing/osd.h"
-#endif
-
#define dout_subsys ceph_subsys_osd
#undef dout_prefix
#define dout_prefix _prefix(_dout, whoami, get_osdmap_epoch())
return;
}
OpRequestRef op = op_tracker.create_request<OpRequest>(m);
- {
- osd_reqid_t reqid = op->get_reqid();
- tracepoint(osd, ms_fast_dispatch, reqid.name._type,
- reqid.name._num, reqid.tid, reqid.inc);
- }
OSDMapRef nextmap = service.get_nextmap_reserved();
Session *session = static_cast<Session*>(m->get_connection()->get_priv());
assert(session);
sdata->pg_for_processing.erase(&*(item.first));
}
- // osd:opwq_process marks the point at which an operation has been dequeued
- // and will begin to be handled by a worker thread.
- {
- osd_reqid_t reqid = op->get_reqid();
- tracepoint(osd, opwq_process_start, reqid.name._type,
- reqid.name._num, reqid.tid, reqid.inc);
- }
-
lgeneric_subdout(osd->cct, osd, 30) << "dequeue status: ";
Formatter *f = new_formatter("json");
f->open_object_section("q");
*_dout << dendl;
osd->dequeue_op(item.first, op, tp_handle);
-
- {
- osd_reqid_t reqid = op->get_reqid();
- tracepoint(osd, opwq_process_finish, reqid.name._type,
- reqid.name._num, reqid.tid, reqid.inc);
- }
-
(item.first)->unlock();
+
}
void OSD::ShardedOpWQ::_enqueue(pair<PGRef, OpRequestRef> item) {
#include "include/assert.h"
#include "osd/osd_types.h"
-#ifdef WITH_LTTNG
-#include "tracing/oprequest.h"
-#endif
OpRequest::OpRequest(Message *req, OpTracker *tracker) :
bool OpRequest::need_class_write_cap() {
return check_rmw(CEPH_OSD_RMW_FLAG_CLASS_WRITE);
}
-
-void OpRequest::set_rmw_flags(int flags) {
- int old_rmw_flags = rmw_flags;
- rmw_flags |= flags;
- tracepoint(oprequest, set_rmw_flags, reqid.name._type,
- reqid.name._num, reqid.tid, reqid.inc,
- flags, old_rmw_flags, rmw_flags);
-}
-
-void OpRequest::set_read() { set_rmw_flags(CEPH_OSD_RMW_FLAG_READ); }
-void OpRequest::set_write() { set_rmw_flags(CEPH_OSD_RMW_FLAG_WRITE); }
-void OpRequest::set_class_read() { set_rmw_flags(CEPH_OSD_RMW_FLAG_CLASS_READ); }
-void OpRequest::set_class_write() { set_rmw_flags(CEPH_OSD_RMW_FLAG_CLASS_WRITE); }
-void OpRequest::set_pg_op() { set_rmw_flags(CEPH_OSD_RMW_FLAG_PGOP); }
-void OpRequest::set_cache() { set_rmw_flags(CEPH_OSD_RMW_FLAG_CACHE); }
-
-void OpRequest::mark_flag_point(uint8_t flag, string s) {
- uint8_t old_flags = hit_flag_points;
- mark_event(s);
- current = s;
- hit_flag_points |= flag;
- latest_flag_point = flag;
- tracepoint(oprequest, mark_flag_point, reqid.name._type,
- reqid.name._num, reqid.tid, reqid.inc, rmw_flags,
- flag, s.c_str(), old_flags, hit_flag_points);
-}
+void OpRequest::set_read() { rmw_flags |= CEPH_OSD_RMW_FLAG_READ; }
+void OpRequest::set_write() { rmw_flags |= CEPH_OSD_RMW_FLAG_WRITE; }
+void OpRequest::set_class_read() { rmw_flags |= CEPH_OSD_RMW_FLAG_CLASS_READ; }
+void OpRequest::set_class_write() { rmw_flags |= CEPH_OSD_RMW_FLAG_CLASS_WRITE; }
+void OpRequest::set_pg_op() { rmw_flags |= CEPH_OSD_RMW_FLAG_PGOP; }
+void OpRequest::set_cache() { rmw_flags |= CEPH_OSD_RMW_FLAG_CACHE; }
}
void mark_queued_for_pg() {
- mark_flag_point(flag_queued_for_pg, "queued_for_pg");
+ mark_event("queued_for_pg");
+ current = "queued for pg";
+ hit_flag_points |= flag_queued_for_pg;
+ latest_flag_point = flag_queued_for_pg;
}
void mark_reached_pg() {
- mark_flag_point(flag_reached_pg, "reached_pg");
+ mark_event("reached_pg");
+ current = "reached pg";
+ hit_flag_points |= flag_reached_pg;
+ latest_flag_point = flag_reached_pg;
}
void mark_delayed(string s) {
- mark_flag_point(flag_delayed, s);
+ mark_event(s);
+ current = s;
+ hit_flag_points |= flag_delayed;
+ latest_flag_point = flag_delayed;
}
void mark_started() {
- mark_flag_point(flag_started, "started");
+ mark_event("started");
+ current = "started";
+ hit_flag_points |= flag_started;
+ latest_flag_point = flag_started;
}
void mark_sub_op_sent(string s) {
- mark_flag_point(flag_sub_op_sent, s);
+ mark_event(s);
+ current = s;
+ hit_flag_points |= flag_sub_op_sent;
+ latest_flag_point = flag_sub_op_sent;
}
void mark_commit_sent() {
- mark_flag_point(flag_commit_sent, "commit_sent");
+ mark_event("commit_sent");
+ current = "commit sent";
+ hit_flag_points |= flag_commit_sent;
+ latest_flag_point = flag_commit_sent;
}
utime_t get_dequeued_time() const {
}
typedef ceph::shared_ptr<OpRequest> Ref;
-
-private:
- void set_rmw_flags(int flags);
- void mark_flag_point(uint8_t flag, string s);
};
typedef OpRequest::Ref OpRequestRef;
#include "messages/MOSDSubOpReply.h"
#include "common/BackTrace.h"
-#ifdef WITH_LTTNG
-#include "tracing/pg.h"
-#endif
-
#include <sstream>
#define dout_subsys ceph_subsys_osd
return;
}
osd->op_wq.queue(make_pair(PGRef(this), op));
- {
- // after queue() to include any locking costs
- osd_reqid_t reqid = op->get_reqid();
- tracepoint(pg, queue_op, reqid.name._type,
- reqid.name._num, reqid.tid, reqid.inc, op->rmw_flags);
- }
}
void PG::replay_queued_ops()
#include "json_spirit/json_spirit_reader.h"
#include "include/assert.h" // json_spirit clobbers it
-#ifdef WITH_LTTNG
-#include "tracing/osd.h"
-#endif
-
#define dout_subsys ceph_subsys_osd
#define DOUT_PREFIX_ARGS this, osd->whoami, get_osdmap()
#undef dout_prefix
p->second->ondisk_read_lock();
}
- {
- osd_reqid_t reqid = ctx->op->get_reqid();
- tracepoint(osd, prepare_tx_enter, reqid.name._type,
- reqid.name._num, reqid.tid, reqid.inc);
- }
-
int result = prepare_transaction(ctx);
- {
- osd_reqid_t reqid = ctx->op->get_reqid();
- tracepoint(osd, prepare_tx_exit, reqid.name._type,
- reqid.name._num, reqid.tid, reqid.inc);
- }
-
if (op->may_read()) {
dout(10) << " dropping ondisk_read_lock" << dendl;
obc->ondisk_read_unlock();
}
};
-template<typename V>
-static string list_keys(const map<string, V>& m) {
- string s;
- for (typename map<string, V>::const_iterator itr = m.begin(); itr != m.end(); ++itr) {
- if (!s.empty()) {
- s.push_back(',');
- }
- s.append(itr->first);
- }
- return s;
-}
-
-template<typename T>
-static string list_entries(const T& m) {
- string s;
- for (typename T::const_iterator itr = m.begin(); itr != m.end(); ++itr) {
- if (!s.empty()) {
- s.push_back(',');
- }
- s.append(*itr);
- }
- return s;
-}
-
int ReplicatedPG::do_osd_ops(OpContext *ctx, vector<OSDOp>& ops)
{
int result = 0;
for (vector<OSDOp>::iterator p = ops.begin(); p != ops.end(); ++p, ctx->current_osd_subop_num++) {
OSDOp& osd_op = *p;
ceph_osd_op& op = osd_op.op;
-
- // TODO: check endianness (__le32 vs uint32_t, etc.)
- // The fields in ceph_osd_op are little-endian (according to the definition in rados.h),
- // but the code in this function seems to treat them as native-endian. What should the
- // tracepoints do?
- tracepoint(osd, do_osd_op_pre, soid.oid.name.c_str(), soid.snap.val, op.op, ceph_osd_op_name(op.op), op.flags);
-
+
dout(10) << "do_osd_op " << osd_op << dendl;
bufferlist::iterator bp = osd_op.indata.begin();
{
__u32 seq = oi.truncate_seq;
uint64_t size = oi.size;
- tracepoint(osd, do_osd_op_pre_read, soid.oid.name.c_str(), soid.snap.val, size, seq, op.extent.offset, op.extent.length, op.extent.truncate_size, op.extent.truncate_seq);
bool trimmed_read = false;
// are we beyond truncate_size?
if ( (seq < op.extent.truncate_seq) &&
/* map extents */
case CEPH_OSD_OP_MAPEXT:
- tracepoint(osd, do_osd_op_pre_mapext, soid.oid.name.c_str(), soid.snap.val, op.extent.offset, op.extent.length);
if (pool.info.require_rollback()) {
result = -EOPNOTSUPP;
break;
/* 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;
break;
osd_op.indata.hexdump(*_dout);
*_dout << dendl;
result = -EINVAL;
- tracepoint(osd, do_osd_op_pre_call, soid.oid.name.c_str(), soid.snap.val, "???", "???");
break;
}
- tracepoint(osd, do_osd_op_pre_call, soid.oid.name.c_str(), soid.snap.val, cname.c_str(), mname.c_str());
ClassHandler::ClassData *cls;
result = osd->class_handler->open_class(cname, &cls);
case CEPH_OSD_OP_STAT:
// note: stat does not require RD
{
- tracepoint(osd, do_osd_op_pre_stat, soid.oid.name.c_str(), soid.snap.val);
-
if (obs.exists && !oi.is_whiteout()) {
::encode(oi.size, osd_op.outdata);
::encode(oi.mtime, osd_op.outdata);
case CEPH_OSD_OP_ISDIRTY:
++ctx->num_read;
{
- tracepoint(osd, do_osd_op_pre_isdirty, soid.oid.name.c_str(), soid.snap.val);
bool is_dirty = obs.oi.is_dirty();
::encode(is_dirty, osd_op.outdata);
ctx->delta_stats.num_rd++;
case CEPH_OSD_OP_UNDIRTY:
++ctx->num_write;
{
- tracepoint(osd, do_osd_op_pre_undirty, soid.oid.name.c_str(), soid.snap.val);
if (oi.is_dirty()) {
ctx->undirty = true; // see make_writeable()
ctx->modify = true;
case CEPH_OSD_OP_CACHE_TRY_FLUSH:
++ctx->num_write;
{
- tracepoint(osd, do_osd_op_pre_try_flush, soid.oid.name.c_str(), soid.snap.val);
if (ctx->lock_to_release != OpContext::NONE) {
dout(10) << "cache-try-flush without SKIPRWLOCKS flag set" << dendl;
result = -EINVAL;
case CEPH_OSD_OP_CACHE_FLUSH:
++ctx->num_write;
{
- tracepoint(osd, do_osd_op_pre_cache_flush, soid.oid.name.c_str(), soid.snap.val);
if (ctx->lock_to_release == OpContext::NONE) {
dout(10) << "cache-flush with SKIPRWLOCKS flag set" << dendl;
result = -EINVAL;
case CEPH_OSD_OP_CACHE_EVICT:
++ctx->num_write;
{
- tracepoint(osd, do_osd_op_pre_cache_evict, soid.oid.name.c_str(), soid.snap.val);
if (pool.info.cache_mode == pg_pool_t::CACHEMODE_NONE) {
result = -EINVAL;
break;
{
string aname;
bp.copy(op.xattr.name_len, aname);
- tracepoint(osd, do_osd_op_pre_getxattr, soid.oid.name.c_str(), soid.snap.val, aname.c_str());
string name = "_" + aname;
int r = getattr_maybe_cache(
ctx->obc,
case CEPH_OSD_OP_GETXATTRS:
++ctx->num_read;
{
- tracepoint(osd, do_osd_op_pre_getxattrs, soid.oid.name.c_str(), soid.snap.val);
map<string, bufferlist> out;
result = getattrs_maybe_cache(
ctx->obc,
{
string aname;
bp.copy(op.xattr.name_len, aname);
- tracepoint(osd, do_osd_op_pre_cmpxattr, soid.oid.name.c_str(), soid.snap.val, aname.c_str());
string name = "_" + aname;
name[op.xattr.name_len + 1] = 0;
++ctx->num_read;
{
uint64_t ver = op.watch.ver;
- tracepoint(osd, do_osd_op_pre_assert_ver, soid.oid.name.c_str(), soid.snap.val, ver);
if (!ver)
result = -EINVAL;
else if (ver < oi.user_version)
case CEPH_OSD_OP_LIST_WATCHERS:
++ctx->num_read;
{
- tracepoint(osd, do_osd_op_pre_list_watchers, soid.oid.name.c_str(), soid.snap.val);
obj_list_watch_response_t resp;
map<pair<uint64_t, entity_name_t>, watch_info_t>::const_iterator oi_iter;
case CEPH_OSD_OP_LIST_SNAPS:
++ctx->num_read;
{
- tracepoint(osd, do_osd_op_pre_list_snaps, soid.oid.name.c_str(), soid.snap.val);
obj_list_snap_response_t resp;
if (!ssc) {
++ctx->num_read;
{
uint64_t ver = op.assert_ver.ver;
- tracepoint(osd, do_osd_op_pre_assert_src_version, soid.oid.name.c_str(), soid.snap.val, ver);
if (!ver)
result = -EINVAL;
else if (ver < src_obc->obs.oi.user_version)
case CEPH_OSD_OP_NOTIFY:
++ctx->num_read;
{
- uint32_t ver; // obsolete
+ uint32_t ver;
uint32_t timeout;
bufferlist bl;
} catch (const buffer::error &e) {
timeout = 0;
}
- tracepoint(osd, do_osd_op_pre_notify, soid.oid.name.c_str(), soid.snap.val, timeout);
if (!timeout)
timeout = cct->_conf->osd_default_notify_timeout;
uint64_t watch_cookie = 0;
::decode(notify_id, bp);
::decode(watch_cookie, bp);
- tracepoint(osd, do_osd_op_pre_notify_ack, soid.oid.name.c_str(), soid.snap.val, notify_id, watch_cookie, "Y");
OpContext::NotifyAck ack(notify_id, watch_cookie);
ctx->notify_acks.push_back(ack);
} catch (const buffer::error &e) {
- tracepoint(osd, do_osd_op_pre_notify_ack, soid.oid.name.c_str(), soid.snap.val, op.watch.cookie, 0, "N");
OpContext::NotifyAck ack(
// op.watch.cookie is actually the notify_id for historical reasons
op.watch.cookie
case CEPH_OSD_OP_SETALLOCHINT:
++ctx->num_write;
{
- tracepoint(osd, do_osd_op_pre_setallochint, soid.oid.name.c_str(), soid.snap.val, op.alloc_hint.expected_object_size, op.alloc_hint.expected_write_size);
if (!obs.exists) {
ctx->mod_desc.create();
t->touch(soid);
case CEPH_OSD_OP_WRITE:
++ctx->num_write;
{ // write
- __u32 seq = oi.truncate_seq;
- tracepoint(osd, do_osd_op_pre_write, soid.oid.name.c_str(), soid.snap.val, oi.size, seq, op.extent.offset, op.extent.length, op.extent.truncate_size, op.extent.truncate_seq);
if (op.extent.length != osd_op.indata.length()) {
result = -EINVAL;
break;
}
}
+ __u32 seq = oi.truncate_seq;
if (seq && (seq > op.extent.truncate_seq) &&
(op.extent.offset + op.extent.length > oi.size)) {
// old write, arrived after trimtrunc
case CEPH_OSD_OP_WRITEFULL:
++ctx->num_write;
{ // write full object
- tracepoint(osd, do_osd_op_pre_writefull, soid.oid.name.c_str(), soid.snap.val, oi.size, op.extent.offset, op.extent.length);
-
if (op.extent.length != osd_op.indata.length()) {
result = -EINVAL;
break;
case CEPH_OSD_OP_ROLLBACK :
++ctx->num_write;
- tracepoint(osd, do_osd_op_pre_rollback, soid.oid.name.c_str(), soid.snap.val);
result = _rollback_to(ctx, op);
break;
case CEPH_OSD_OP_ZERO:
- tracepoint(osd, do_osd_op_pre_zero, soid.oid.name.c_str(), soid.snap.val, op.extent.offset, op.extent.length);
if (pool.info.require_rollback()) {
result = -EOPNOTSUPP;
break;
case CEPH_OSD_OP_CREATE:
++ctx->num_write;
{
- tracepoint(osd, do_osd_op_pre_create, soid.oid.name.c_str(), soid.snap.val);
int flags = le32_to_cpu(op.flags);
if (obs.exists && !oi.is_whiteout() &&
(flags & CEPH_OSD_OP_FLAG_EXCL)) {
// falling through
case CEPH_OSD_OP_TRUNCATE:
- tracepoint(osd, do_osd_op_pre_truncate, 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;
break;
case CEPH_OSD_OP_DELETE:
++ctx->num_write;
- tracepoint(osd, do_osd_op_pre_delete, soid.oid.name.c_str(), soid.snap.val);
if (ctx->obc->obs.oi.watchers.size()) {
// Cannot delete an object with watchers
result = -EBUSY;
break;
case CEPH_OSD_OP_CLONERANGE:
- tracepoint(osd, do_osd_op_pre_clonerange, soid.oid.name.c_str(), soid.snap.val, op.clonerange.offset, op.clonerange.length, op.clonerange.src_offset);
ctx->mod_desc.mark_unrollbackable();
if (pool.info.require_rollback()) {
result = -EOPNOTSUPP;
case CEPH_OSD_OP_WATCH:
++ctx->num_write;
{
- tracepoint(osd, do_osd_op_pre_watch, soid.oid.name.c_str(), soid.snap.val, op.watch.cookie, op.watch.flag);
if (!obs.exists) {
result = -ENOENT;
break;
{
if (cct->_conf->osd_max_attr_size > 0 &&
op.xattr.value_len > cct->_conf->osd_max_attr_size) {
- tracepoint(osd, do_osd_op_pre_setxattr, soid.oid.name.c_str(), soid.snap.val, "???");
result = -EFBIG;
break;
}
}
string aname;
bp.copy(op.xattr.name_len, aname);
- tracepoint(osd, do_osd_op_pre_setxattr, soid.oid.name.c_str(), soid.snap.val, aname.c_str());
string name = "_" + aname;
if (pool.info.require_rollback()) {
map<string, boost::optional<bufferlist> > to_set;
{
string aname;
bp.copy(op.xattr.name_len, aname);
- tracepoint(osd, do_osd_op_pre_rmxattr, soid.oid.name.c_str(), soid.snap.val, aname.c_str());
string name = "_" + aname;
if (pool.info.require_rollback()) {
map<string, boost::optional<bufferlist> > to_set;
// -- fancy writers --
case CEPH_OSD_OP_APPEND:
{
- tracepoint(osd, do_osd_op_pre_append, 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);
// just do it inline; this works because we are happy to execute
// fancy op on replicas as well.
vector<OSDOp> nops(1);
break;
case CEPH_OSD_OP_STARTSYNC:
- tracepoint(osd, do_osd_op_pre_startsync, soid.oid.name.c_str(), soid.snap.val);
t->nop();
break;
// -- trivial map --
case CEPH_OSD_OP_TMAPGET:
- tracepoint(osd, do_osd_op_pre_tmapget, soid.oid.name.c_str(), soid.snap.val);
if (pool.info.require_rollback()) {
result = -EOPNOTSUPP;
break;
break;
case CEPH_OSD_OP_TMAPPUT:
- tracepoint(osd, do_osd_op_pre_tmapput, soid.oid.name.c_str(), soid.snap.val);
if (pool.info.require_rollback()) {
result = -EOPNOTSUPP;
break;
break;
case CEPH_OSD_OP_TMAPUP:
- tracepoint(osd, do_osd_op_pre_tmapup, soid.oid.name.c_str(), soid.snap.val);
if (pool.info.require_rollback()) {
result = -EOPNOTSUPP;
break;
case CEPH_OSD_OP_TMAP2OMAP:
++ctx->num_write;
- tracepoint(osd, do_osd_op_pre_tmap2omap, soid.oid.name.c_str(), soid.snap.val);
result = do_tmap2omap(ctx, op.tmap2omap.flags);
break;
}
catch (buffer::error& e) {
result = -EINVAL;
- tracepoint(osd, do_osd_op_pre_omapgetkeys, soid.oid.name.c_str(), soid.snap.val, "???", 0);
goto fail;
}
- tracepoint(osd, do_osd_op_pre_omapgetkeys, soid.oid.name.c_str(), soid.snap.val, start_after.c_str(), max_return);
set<string> out_set;
if (!pool.info.require_rollback()) {
}
catch (buffer::error& e) {
result = -EINVAL;
- tracepoint(osd, do_osd_op_pre_omapgetvals, soid.oid.name.c_str(), soid.snap.val, "???", 0, "???");
goto fail;
}
- tracepoint(osd, do_osd_op_pre_omapgetvals, soid.oid.name.c_str(), soid.snap.val, start_after.c_str(), max_return, filter_prefix.c_str());
map<string, bufferlist> out_set;
if (!pool.info.require_rollback()) {
break;
case CEPH_OSD_OP_OMAPGETHEADER:
- tracepoint(osd, do_osd_op_pre_omapgetheader, soid.oid.name.c_str(), soid.snap.val);
if (pool.info.require_rollback()) {
// return empty header
break;
}
catch (buffer::error& e) {
result = -EINVAL;
- tracepoint(osd, do_osd_op_pre_omapgetvalsbykeys, soid.oid.name.c_str(), soid.snap.val, "???");
goto fail;
}
- tracepoint(osd, do_osd_op_pre_omapgetvalsbykeys, soid.oid.name.c_str(), soid.snap.val, list_entries(keys_to_get).c_str());
map<string, bufferlist> out;
if (!pool.info.require_rollback()) {
osd->store->omap_get_values(coll, soid, keys_to_get, &out);
{
if (!obs.exists || oi.is_whiteout()) {
result = -ENOENT;
- tracepoint(osd, do_osd_op_pre_omap_cmp, soid.oid.name.c_str(), soid.snap.val, "???");
break;
}
map<string, pair<bufferlist, int> > assertions;
}
catch (buffer::error& e) {
result = -EINVAL;
- tracepoint(osd, do_osd_op_pre_omap_cmp, soid.oid.name.c_str(), soid.snap.val, "???");
goto fail;
}
- tracepoint(osd, do_osd_op_pre_omap_cmp, soid.oid.name.c_str(), soid.snap.val, list_keys(assertions).c_str());
map<string, bufferlist> out;
case CEPH_OSD_OP_OMAPSETVALS:
if (pool.info.require_rollback()) {
result = -EOPNOTSUPP;
- tracepoint(osd, do_osd_op_pre_omapsetvals, soid.oid.name.c_str(), soid.snap.val, "???");
break;
}
ctx->mod_desc.mark_unrollbackable();
}
catch (buffer::error& e) {
result = -EINVAL;
- tracepoint(osd, do_osd_op_pre_omapsetvals, soid.oid.name.c_str(), soid.snap.val, "???");
goto fail;
}
- tracepoint(osd, do_osd_op_pre_omapsetvals, soid.oid.name.c_str(), soid.snap.val, list_keys(to_set).c_str());
dout(20) << "setting vals: " << dendl;
for (map<string, bufferlist>::iterator i = to_set.begin();
i != to_set.end();
break;
case CEPH_OSD_OP_OMAPSETHEADER:
- tracepoint(osd, do_osd_op_pre_omapsetheader, soid.oid.name.c_str(), soid.snap.val);
if (pool.info.require_rollback()) {
result = -EOPNOTSUPP;
break;
break;
case CEPH_OSD_OP_OMAPCLEAR:
- tracepoint(osd, do_osd_op_pre_omapclear, soid.oid.name.c_str(), soid.snap.val);
if (pool.info.require_rollback()) {
result = -EOPNOTSUPP;
break;
case CEPH_OSD_OP_OMAPRMKEYS:
if (pool.info.require_rollback()) {
result = -EOPNOTSUPP;
- tracepoint(osd, do_osd_op_pre_omaprmkeys, soid.oid.name.c_str(), soid.snap.val, "???");
break;
}
ctx->mod_desc.mark_unrollbackable();
{
if (!obs.exists || oi.is_whiteout()) {
result = -ENOENT;
- tracepoint(osd, do_osd_op_pre_omaprmkeys, soid.oid.name.c_str(), soid.snap.val, "???");
break;
}
t->touch(soid);
}
catch (buffer::error& e) {
result = -EINVAL;
- tracepoint(osd, do_osd_op_pre_omaprmkeys, soid.oid.name.c_str(), soid.snap.val, "???");
goto fail;
}
- tracepoint(osd, do_osd_op_pre_omaprmkeys, soid.oid.name.c_str(), soid.snap.val, list_entries(to_rm).c_str());
t->omap_rmkeys(soid, to_rm);
ctx->delta_stats.num_wr++;
}
case CEPH_OSD_OP_COPY_GET_CLASSIC:
++ctx->num_read;
- tracepoint(osd, do_osd_op_pre_copy_get_classic, soid.oid.name.c_str(), soid.snap.val);
result = fill_in_copy_get(ctx, bp, osd_op, ctx->obc, true);
if (result == -EINVAL)
goto fail;
case CEPH_OSD_OP_COPY_GET:
++ctx->num_read;
- tracepoint(osd, do_osd_op_pre_copy_get, soid.oid.name.c_str(), soid.snap.val);
result = fill_in_copy_get(ctx, bp, osd_op, ctx->obc, false);
if (result == -EINVAL)
goto fail;
}
catch (buffer::error& e) {
result = -EINVAL;
- tracepoint(osd,
- do_osd_op_pre_copy_from,
- soid.oid.name.c_str(),
- soid.snap.val,
- "???",
- 0,
- "???",
- "???",
- 0,
- src_snapid,
- src_version);
goto fail;
}
- tracepoint(osd,
- do_osd_op_pre_copy_from,
- soid.oid.name.c_str(),
- soid.snap.val,
- src_name.name.c_str(),
- src_oloc.pool,
- src_oloc.key.c_str(),
- src_oloc.nspace.c_str(),
- src_oloc.hash,
- src_snapid,
- src_version);
if (!ctx->copy_cb) {
// start
pg_t raw_pg;
break;
default:
- tracepoint(osd, do_osd_op_pre_unknown, soid.oid.name.c_str(), soid.snap.val, op.op, ceph_osd_op_name(op.op));
dout(1) << "unrecognized osd op " << op.op
<< " " << ceph_osd_op_name(op.op)
<< dendl;
fail:
osd_op.rval = result;
- tracepoint(osd, do_osd_op_post, soid.oid.name.c_str(), soid.snap.val, op.op, ceph_osd_op_name(op.op), op.flags, result);
if (result < 0 && (op.flags & CEPH_OSD_OP_FLAG_FAILOK))
result = 0;
+++ /dev/null
-// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
-// vim: ts=8 sw=2 smarttab
-
-#ifndef _INCLUDED_BOUNDED_BUFFER_HPP
-#define _INCLUDED_BOUNDED_BUFFER_HPP
-
-#include <boost/bind.hpp>
-#include <boost/circular_buffer.hpp>
-#include <boost/thread/condition.hpp>
-#include <boost/thread/mutex.hpp>
-
-// Taken from http://www.boost.org/doc/libs/1_55_0/libs/circular_buffer/example/circular_buffer_bound_example.cpp
-template <class T>
-class BoundedBuffer {
-public:
- typedef boost::circular_buffer<T> container_type;
- typedef typename container_type::size_type size_type;
- typedef typename container_type::value_type value_type;
- typedef typename boost::call_traits<value_type>::param_type param_type;
-
- explicit BoundedBuffer(size_type capacity) : m_unread(0), m_container(capacity) {
- }
-
- void push_front(typename boost::call_traits<value_type>::param_type item) {
- // `param_type` represents the "best" way to pass a parameter of type `value_type` to a method.
- boost::mutex::scoped_lock lock(m_mutex);
- m_not_full.wait(lock, boost::bind(&BoundedBuffer<value_type>::is_not_full, this));
- m_container.push_front(item);
- ++m_unread;
- lock.unlock();
- m_not_empty.notify_one();
- }
-
- void pop_back(value_type* pItem) {
- boost::mutex::scoped_lock lock(m_mutex);
- m_not_empty.wait(lock, boost::bind(&BoundedBuffer<value_type>::is_not_empty, this));
- *pItem = m_container[--m_unread];
- lock.unlock();
- m_not_full.notify_one();
- }
-
-private:
- BoundedBuffer(const BoundedBuffer&); // Disabled copy constructor.
- BoundedBuffer& operator= (const BoundedBuffer&); // Disabled assign operator.
-
- bool is_not_empty() const {
- return m_unread > 0;
- }
- bool is_not_full() const {
- return m_unread < m_container.capacity();
- }
-
- size_type m_unread;
- container_type m_container;
- boost::mutex m_mutex;
- boost::condition m_not_empty;
- boost::condition m_not_full;
-};
-
-#endif
+++ /dev/null
-// -*- 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();
-}
+++ /dev/null
-// -*- 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 {
-
-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
+++ /dev/null
-// -*- 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 "ImageNameMap.hpp"
-
-
-using namespace std;
-using namespace rbd_replay;
-
-
-bool ImageNameMap::parse_mapping(string mapping_string, Mapping *mapping) const {
- string fields[2];
- int field = 0;
- for (size_t i = 0, n = mapping_string.length(); i < n; i++) {
- char c = mapping_string[i];
- switch (c) {
- case '\\':
- if (i != n - 1 && mapping_string[i + 1] == '=') {
- i++;
- fields[field].push_back('=');
- } else {
- fields[field].push_back('\\');
- }
- break;
- case '=':
- if (field == 1) {
- return false;
- }
- field = 1;
- break;
- default:
- fields[field].push_back(c);
- }
- }
- if (field == 0) {
- return false;
- }
- if (!mapping->first.parse(fields[0])) {
- return false;
- }
- if (!mapping->second.parse(fields[1])) {
- return false;
- }
- return true;
-}
-
-void ImageNameMap::add_mapping(const Mapping& mapping) {
- m_map.insert(mapping);
-}
-
-rbd_loc ImageNameMap::map(const rbd_loc& name) const {
- std::map<rbd_loc, rbd_loc>::const_iterator p(m_map.find(name));
- if (p == m_map.end()) {
- return name;
- } else {
- return p->second;
- }
-}
+++ /dev/null
-// -*- 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_IMAGENAMEMAP_HPP
-#define _INCLUDED_RBD_REPLAY_IMAGENAMEMAP_HPP
-
-#include <map>
-#include <string>
-#include "rbd_loc.hpp"
-
-namespace rbd_replay {
-
-class ImageNameMap {
-public:
- typedef std::pair<rbd_loc, rbd_loc> Mapping;
-
- bool parse_mapping(std::string mapping_string, Mapping *mapping) const;
-
- void add_mapping(const Mapping& mapping);
-
- rbd_loc map(const rbd_loc& name) const;
-
-private:
- std::map<rbd_loc, rbd_loc> m_map;
-};
-
-}
-
-#endif
+++ /dev/null
-# librbd_replay_la exists only to help with unit tests
-librbd_replay_la_SOURCES = rbd_replay/actions.cc \
- rbd_replay/Deser.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) \
- $(LIBRADOS) \
- $(CEPH_GLOBAL)
-noinst_LTLIBRARIES += librbd_replay.la
-noinst_HEADERS += rbd_replay/BoundedBuffer.hpp \
- rbd_replay/actions.hpp \
- rbd_replay/Deser.hpp \
- rbd_replay/ImageNameMap.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_SOURCES = rbd_replay/rbd-replay.cc
-rbd_replay_LDADD = $(LIBRBD) \
- $(LIBRADOS) \
- $(CEPH_GLOBAL) \
- librbd_replay.la
-
-if LINUX
-bin_PROGRAMS += rbd-replay
-endif #LINUX
-
-# TODO: See if we need any new dependencies
-rbd_replay_prep_SOURCES = rbd_replay/rbd-replay-prep.cc
-rbd_replay_prep_LDADD = $(LIBRBD) \
- $(LIBRADOS) \
- $(CEPH_GLOBAL) \
- librbd_replay.la \
- -lbabeltrace \
- -lbabeltrace-ctf \
- -lboost_date_time
-bin_PROGRAMS += rbd-replay-prep
+++ /dev/null
-// -*- 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 "PendingIO.hpp"
-#include "rbd_replay_debug.hpp"
-
-
-using namespace std;
-using namespace rbd_replay;
-
-extern "C"
-void pending_io_callback(librbd::completion_t cb, void *arg) {
- PendingIO *io = (PendingIO*)arg;
- io->completed(cb);
-}
-
-PendingIO::PendingIO(action_id_t id,
- ActionCtx &worker)
- : m_id(id),
- m_completion(new librbd::RBD::AioCompletion(this, pending_io_callback)),
- m_worker(worker) {
- }
-
-PendingIO::~PendingIO() {
- m_completion->release();
-}
-
-void PendingIO::completed(librbd::completion_t cb) {
- dout(ACTION_LEVEL) << "Completed pending IO #" << m_id << dendl;
- ssize_t r = m_completion->get_return_value();
- assertf(r >= 0, "id = %d, r = %d", m_id, r);
- m_worker.remove_pending(shared_from_this());
-}
+++ /dev/null
-// -*- 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_PENDINGIO_HPP
-#define _INCLUDED_RBD_REPLAY_PENDINGIO_HPP
-
-#include <boost/enable_shared_from_this.hpp>
-#include "actions.hpp"
-
-namespace rbd_replay {
-
-class PendingIO : public boost::enable_shared_from_this<PendingIO> {
-public:
- typedef boost::shared_ptr<PendingIO> ptr;
-
- PendingIO(action_id_t id,
- ActionCtx &worker);
-
- ~PendingIO();
-
- void completed(librbd::completion_t cb);
-
- action_id_t id() const {
- return m_id;
- }
-
- ceph::bufferlist &bufferlist() {
- return m_bl;
- }
-
- librbd::RBD::AioCompletion &completion() {
- return *m_completion;
- }
-
-private:
- const action_id_t m_id;
- ceph::bufferlist m_bl;
- librbd::RBD::AioCompletion *m_completion;
- ActionCtx &m_worker;
-};
-
-}
-
-#endif
+++ /dev/null
-// -*- 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 "Replayer.hpp"
-#include <boost/foreach.hpp>
-#include <boost/thread/thread.hpp>
-#include <fstream>
-#include "global/global_context.h"
-#include "rbd_replay_debug.hpp"
-
-
-using namespace std;
-using namespace rbd_replay;
-
-
-Worker::Worker(Replayer &replayer)
- : m_replayer(replayer),
- m_buffer(100),
- m_done(false) {
-}
-
-void Worker::start() {
- m_thread = boost::shared_ptr<boost::thread>(new boost::thread(boost::bind(&Worker::run, this)));
-}
-
-// Should only be called by StopThreadAction
-void Worker::stop() {
- m_done = true;
-}
-
-void Worker::join() {
- m_thread->join();
-}
-
-void Worker::send(Action::ptr action) {
- assert(action);
- m_buffer.push_front(action);
-}
-
-void Worker::add_pending(PendingIO::ptr io) {
- assert(io);
- boost::mutex::scoped_lock lock(m_pending_ios_mutex);
- assertf(m_pending_ios.count(io->id()) == 0, "id = %d", io->id());
- m_pending_ios[io->id()] = io;
-}
-
-void Worker::run() {
- dout(THREAD_LEVEL) << "Worker thread started" << dendl;
- while (!m_done) {
- Action::ptr action;
- m_buffer.pop_back(&action);
- m_replayer.wait_for_actions(action->predecessors());
- action->perform(*this);
- m_replayer.set_action_complete(action->id());
- }
- {
- boost::mutex::scoped_lock lock(m_pending_ios_mutex);
- bool first_time = true;
- while (!m_pending_ios.empty()) {
- if (!first_time) {
- dout(THREAD_LEVEL) << "Worker thread trying to stop, still waiting for " << m_pending_ios.size() << " pending IOs to complete:" << dendl;
- pair<action_id_t, PendingIO::ptr> p;
- BOOST_FOREACH(p, m_pending_ios) {
- dout(THREAD_LEVEL) << "> " << p.first << dendl;
- }
- }
- m_pending_ios_empty.timed_wait(lock, boost::posix_time::seconds(1));
- first_time = false;
- }
- }
- dout(THREAD_LEVEL) << "Worker thread stopped" << dendl;
-}
-
-
-void Worker::remove_pending(PendingIO::ptr io) {
- assert(io);
- m_replayer.set_action_complete(io->id());
- boost::mutex::scoped_lock lock(m_pending_ios_mutex);
- size_t num_erased = m_pending_ios.erase(io->id());
- assertf(num_erased == 1, "id = %d", io->id());
- if (m_pending_ios.empty()) {
- m_pending_ios_empty.notify_all();
- }
-}
-
-
-librbd::Image* Worker::get_image(imagectx_id_t imagectx_id) {
- return m_replayer.get_image(imagectx_id);
-}
-
-
-void Worker::put_image(imagectx_id_t imagectx_id, librbd::Image* image) {
- assert(image);
- m_replayer.put_image(imagectx_id, image);
-}
-
-
-void Worker::erase_image(imagectx_id_t imagectx_id) {
- m_replayer.erase_image(imagectx_id);
-}
-
-
-librbd::RBD* Worker::rbd() {
- return m_replayer.get_rbd();
-}
-
-
-librados::IoCtx* Worker::ioctx() {
- return m_replayer.get_ioctx();
-}
-
-void Worker::set_action_complete(action_id_t id) {
- m_replayer.set_action_complete(id);
-}
-
-bool Worker::readonly() const {
- return m_replayer.readonly();
-}
-
-rbd_loc Worker::map_image_name(string image_name, string snap_name) const {
- return m_replayer.image_name_map().map(rbd_loc("", image_name, snap_name));
-}
-
-
-Replayer::Replayer(int num_action_trackers)
- : m_pool_name("rbd"),
- m_num_action_trackers(num_action_trackers),
- m_action_trackers(new action_tracker_d[m_num_action_trackers]) {
- assertf(num_action_trackers > 0, "num_action_trackers = %d", num_action_trackers);
-}
-
-Replayer::~Replayer() {
- delete[] m_action_trackers;
-}
-
-Replayer::action_tracker_d &Replayer::tracker_for(action_id_t id) {
- return m_action_trackers[id % m_num_action_trackers];
-}
-
-void Replayer::run(const std::string replay_file) {
- {
- librados::Rados rados;
- rados.init(NULL);
- int r = rados.init_with_context(g_ceph_context);
- if (r) {
- cerr << "Unable to read conf file: " << r << std::endl;
- goto out;
- }
- r = rados.connect();
- if (r) {
- cerr << "Unable to connect to Rados: " << 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;
- 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);
- }
-
- Deser deser(input);
- while (true) {
- Action::ptr action = Action::read_from(deser);
- if (!action) {
- break;
- }
- if (action->is_start_thread()) {
- Worker *worker = new Worker(*this);
- workers[action->thread_id()] = worker;
- worker->start();
- } else {
- workers[action->thread_id()]->send(action);
- }
- }
-
- dout(THREAD_LEVEL) << "Waiting for workers to die" << dendl;
- pair<thread_id_t, Worker*> w;
- BOOST_FOREACH(w, workers) {
- w.second->join();
- delete w.second;
- }
- clear_images();
- delete m_rbd;
- m_rbd = NULL;
- }
- out2:
- delete m_ioctx;
- m_ioctx = NULL;
- }
- out:
- ;
-}
-
-
-librbd::Image* Replayer::get_image(imagectx_id_t imagectx_id) {
- boost::shared_lock<boost::shared_mutex> lock(m_images_mutex);
- return m_images[imagectx_id];
-}
-
-void Replayer::put_image(imagectx_id_t imagectx_id, librbd::Image *image) {
- assert(image);
- boost::unique_lock<boost::shared_mutex> lock(m_images_mutex);
- assert(m_images.count(imagectx_id) == 0);
- m_images[imagectx_id] = image;
-}
-
-void Replayer::erase_image(imagectx_id_t imagectx_id) {
- boost::unique_lock<boost::shared_mutex> lock(m_images_mutex);
- delete m_images[imagectx_id];
- m_images.erase(imagectx_id);
-}
-
-void Replayer::set_action_complete(action_id_t id) {
- dout(DEPGRAPH_LEVEL) << "ActionTracker::set_complete(" << id << ")" << dendl;
- boost::system_time now(boost::get_system_time());
- action_tracker_d &tracker = tracker_for(id);
- boost::unique_lock<boost::shared_mutex> lock(tracker.mutex);
- assert(tracker.actions.count(id) == 0);
- tracker.actions[id] = now;
- tracker.condition.notify_all();
-}
-
-bool Replayer::is_action_complete(action_id_t id) {
- action_tracker_d &tracker = tracker_for(id);
- boost::shared_lock<boost::shared_mutex> lock(tracker.mutex);
- return tracker.actions.count(id) > 0;
-}
-
-void Replayer::wait_for_actions(const vector<dependency_d> &deps) {
- boost::posix_time::ptime release_time(boost::posix_time::neg_infin);
- BOOST_FOREACH(const dependency_d &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);
- boost::shared_lock<boost::shared_mutex> lock(tracker.mutex);
- bool first_time = true;
- while (tracker.actions.count(dep.id) == 0) {
- if (!first_time) {
- dout(DEPGRAPH_LEVEL) << "Still waiting for " << dep.id << dendl;
- }
- tracker.condition.timed_wait(lock, boost::posix_time::seconds(1));
- first_time = false;
- }
- boost::system_time action_completed_time(tracker.actions[dep.id]);
- lock.unlock();
- boost::system_time end_time(boost::get_system_time());
- long long micros = (end_time - start_time).total_microseconds();
- dout(DEPGRAPH_LEVEL) << "Finished waiting for " << dep.id << " after " << micros << " microseconds" << dendl;
- // Apparently the nanoseconds constructor is optional:
- // http://www.boost.org/doc/libs/1_46_0/doc/html/date_time/details.html#compile_options
- boost::system_time sub_release_time(action_completed_time + boost::posix_time::microseconds(dep.time_delta * m_latency_multiplier / 1000));
- if (sub_release_time > release_time) {
- release_time = sub_release_time;
- }
- }
- if (release_time > boost::get_system_time()) {
- dout(SLEEP_LEVEL) << "Sleeping for " << (release_time - boost::get_system_time()).total_microseconds() << " microseconds" << dendl;
- boost::this_thread::sleep(release_time);
- }
-}
-
-void Replayer::clear_images() {
- boost::unique_lock<boost::shared_mutex> lock(m_images_mutex);
- pair<imagectx_id_t, librbd::Image*> p;
- BOOST_FOREACH(p, m_images) {
- delete p.second;
- }
- m_images.clear();
-}
-
-void Replayer::set_latency_multiplier(float f) {
- assertf(f >= 0, "f = %f", f);
- m_latency_multiplier = f;
-}
-
-bool Replayer::readonly() const {
- return m_readonly;
-}
-
-void Replayer::set_readonly(bool readonly) {
- m_readonly = readonly;
-}
-
-string Replayer::pool_name() const {
- return m_pool_name;
-}
-
-void Replayer::set_pool_name(string pool_name) {
- m_pool_name = pool_name;
-}
+++ /dev/null
-// -*- 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_REPLAYER_HPP
-#define _INCLUDED_RBD_REPLAY_REPLAYER_HPP
-
-#include <boost/thread/mutex.hpp>
-#include <boost/thread/shared_mutex.hpp>
-#include "BoundedBuffer.hpp"
-#include "ImageNameMap.hpp"
-#include "PendingIO.hpp"
-
-namespace rbd_replay {
-
-class Replayer;
-
-class Worker : public ActionCtx {
-public:
- explicit Worker(Replayer &replayer);
-
- void start();
-
- // Should only be called by StopThreadAction
- void stop();
-
- void join();
-
- void send(Action::ptr action);
-
- void add_pending(PendingIO::ptr io);
-
- void remove_pending(PendingIO::ptr io);
-
- librbd::Image* get_image(imagectx_id_t imagectx_id);
-
- void put_image(imagectx_id_t imagectx_id, librbd::Image* image);
-
- void erase_image(imagectx_id_t imagectx_id);
-
- librbd::RBD* rbd();
-
- librados::IoCtx* ioctx();
-
- void set_action_complete(action_id_t id);
-
- bool readonly() const;
-
- rbd_loc map_image_name(std::string image_name, std::string snap_name) const;
-
-private:
- void run();
-
- Replayer &m_replayer;
- BoundedBuffer<Action::ptr> m_buffer;
- boost::shared_ptr<boost::thread> m_thread;
- std::map<action_id_t, PendingIO::ptr> m_pending_ios;
- boost::mutex m_pending_ios_mutex;
- boost::condition m_pending_ios_empty;
- bool m_done;
-};
-
-
-class Replayer {
-public:
- Replayer(int num_action_trackers);
-
- ~Replayer();
-
- void run(const std::string replay_file);
-
- librbd::RBD* get_rbd() {
- return m_rbd;
- }
-
- librados::IoCtx* get_ioctx() {
- return m_ioctx;
- }
-
- librbd::Image* get_image(imagectx_id_t imagectx_id);
-
- void put_image(imagectx_id_t imagectx_id, librbd::Image *image);
-
- void erase_image(imagectx_id_t imagectx_id);
-
- void set_action_complete(action_id_t id);
-
- bool is_action_complete(action_id_t id);
-
- void wait_for_actions(const std::vector<dependency_d> &deps);
-
- std::string pool_name() const;
-
- void set_pool_name(std::string pool_name);
-
- void set_latency_multiplier(float f);
-
- bool readonly() const;
-
- void set_readonly(bool readonly);
-
- void set_image_name_map(const ImageNameMap &map) {
- m_image_name_map = map;
- }
-
- const ImageNameMap &image_name_map() const {
- return m_image_name_map;
- }
-
-private:
- struct action_tracker_d {
- // Maps an action ID to the time the action completed
- std::map<action_id_t, boost::system_time> actions;
- boost::shared_mutex mutex;
- boost::condition condition;
- };
-
- void clear_images();
-
- action_tracker_d &tracker_for(action_id_t id);
-
- // Disallow assignment and copying
- Replayer(const Replayer& rhs);
- const Replayer& operator=(const Replayer& rhs);
-
- librbd::RBD* m_rbd;
- librados::IoCtx* m_ioctx;
- std::string m_pool_name;
- float m_latency_multiplier;
- bool m_readonly;
- ImageNameMap m_image_name_map;
-
- std::map<imagectx_id_t, librbd::Image*> m_images;
- boost::shared_mutex m_images_mutex;
-
- // Actions are hashed across the trackers by ID.
- // Number of trackers should probably be larger than the number of cores and prime.
- // Should definitely be odd.
- const int m_num_action_trackers;
- action_tracker_d* m_action_trackers;
-};
-
-}
-
-#endif
+++ /dev/null
-// -*- 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);
-}
+++ /dev/null
-// -*- 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 {
-
-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
+++ /dev/null
-// -*- 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 "actions.hpp"
-#include <boost/foreach.hpp>
-#include <cstdlib>
-#include "PendingIO.hpp"
-#include "rbd_replay_debug.hpp"
-
-
-using namespace rbd_replay;
-using namespace std;
-
-
-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() {
-}
-
-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));
- }
- 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);
- }
-}
-
-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;
- }
- return o << "]";
-}
-
-std::ostream& rbd_replay::operator<<(std::ostream& o, const Action& a) {
- return a.dump(o);
-}
-
-
-std::ostream& DummyAction::dump(std::ostream& o) const {
- o << "DummyAction[";
- dump_action_fields(o);
- return o << "]";
-}
-
-
-StartThreadAction::StartThreadAction(Action &src)
- : Action(src) {
-}
-
-void StartThreadAction::perform(ActionCtx &ctx) {
- cerr << "StartThreadAction should never actually be performed" << std::endl;
- exit(1);
-}
-
-bool StartThreadAction::is_start_thread() {
- return true;
-}
-
-Action::ptr StartThreadAction::read_from(Action &src, Deser &d) {
- return Action::ptr(new StartThreadAction(src));
-}
-
-std::ostream& StartThreadAction::dump(std::ostream& o) const {
- o << "StartThreadAction[";
- dump_action_fields(o);
- return o << "]";
-}
-
-
-StopThreadAction::StopThreadAction(Action &src)
- : Action(src) {
-}
-
-void StopThreadAction::perform(ActionCtx &ctx) {
- dout(ACTION_LEVEL) << "Performing " << *this << dendl;
- 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);
- 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());
- 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);
- PendingIO::ptr io(new PendingIO(pending_io_id(), worker));
- worker.add_pending(io);
- ssize_t r = image->read(m_offset, m_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);
- PendingIO::ptr io(new PendingIO(pending_io_id(), worker));
- uint64_t remaining = m_length;
- while (remaining > 0) {
- uint64_t n = std::min(remaining, fake_data.length());
- io->bufferlist().append(fake_data.data(), n);
- remaining -= n;
- }
- worker.add_pending(io);
- if (worker.readonly()) {
- worker.remove_pending(io);
- } else {
- int r = image->aio_write(m_offset, m_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);
- PendingIO::ptr io(new PendingIO(pending_io_id(), worker));
- worker.add_pending(io);
- io->bufferlist().append_zero(m_length);
- if (!worker.readonly()) {
- ssize_t r = image->write(m_offset, m_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));
- int r;
- if (m_readonly || 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
- << "' (mapped to '" << name.str()
- << "') and readonly " << m_readonly
- << ": (" << -r << ") " << strerror(-r) << std::endl;
- exit(1);
- }
- worker.put_image(m_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.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 << "]";
-}
+++ /dev/null
-// -*- 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_ACTIONS_HPP
-#define _INCLUDED_RBD_REPLAY_ACTIONS_HPP
-
-#include <boost/shared_ptr.hpp>
-#include "include/rbd/librbd.hpp"
-#include "Deser.hpp"
-#include "rbd_loc.hpp"
-
-namespace rbd_replay {
-
-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;
-
-struct dependency_d {
- action_id_t id;
-
- uint64_t time_delta;
-
- 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;
-
-
-class ActionCtx {
-public:
- virtual ~ActionCtx() {
- }
-
- virtual librbd::Image* get_image(imagectx_id_t imagectx_id) = 0;
-
- virtual void put_image(imagectx_id_t imagectx_id, librbd::Image* image) = 0;
-
- virtual void erase_image(imagectx_id_t imagectx_id) = 0;
-
- virtual librbd::RBD* rbd() = 0;
-
- virtual librados::IoCtx* ioctx() = 0;
-
- virtual void add_pending(boost::shared_ptr<PendingIO> io) = 0;
-
- virtual bool readonly() const = 0;
-
- virtual void remove_pending(boost::shared_ptr<PendingIO> io) = 0;
-
- virtual void set_action_complete(action_id_t id) = 0;
-
- virtual void stop() = 0;
-
- virtual rbd_loc map_image_name(std::string image_name, std::string snap_name) const = 0;
-};
-
-
-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 void perform(ActionCtx &ctx) = 0;
-
- action_id_t pending_io_id() {
- return m_id + 1;
- }
-
- // There's probably a better way to do this, but oh well.
- virtual bool is_start_thread() {
- return false;
- }
-
- action_id_t id() const {
- return m_id;
- }
-
- thread_id_t thread_id() const {
- return m_thread_id;
- }
-
- const std::vector<dependency_d>& predecessors() const {
- return m_predecessors;
- }
-
- static ptr read_from(Deser &d);
-
-protected:
- std::ostream& dump_action_fields(std::ostream& o) const;
-
-private:
- friend std::ostream& operator<<(std::ostream&, const Action&);
-
- virtual std::ostream& dump(std::ostream& o) const = 0;
-
- 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;
-};
-
-std::ostream& operator<<(std::ostream& o, const Action& a);
-
-
-class DummyAction : public Action {
-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) {
- }
-
- 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;
-};
-
-
-class AioReadAction : public Action {
-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);
-
-private:
- std::ostream& dump(std::ostream& o) const;
-
- imagectx_id_t m_imagectx_id;
- uint64_t m_offset;
- uint64_t m_length;
-};
-
-
-class ReadAction : public Action {
-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);
-
-private:
- std::ostream& dump(std::ostream& o) const;
-
- imagectx_id_t m_imagectx_id;
- uint64_t m_offset;
- uint64_t m_length;
-};
-
-
-class AioWriteAction : public Action {
-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);
-
-private:
- std::ostream& dump(std::ostream& o) const;
-
- imagectx_id_t m_imagectx_id;
- uint64_t m_offset;
- uint64_t m_length;
-};
-
-
-class WriteAction : public Action {
-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);
-
-private:
- std::ostream& dump(std::ostream& o) const;
-
- imagectx_id_t m_imagectx_id;
- uint64_t m_offset;
- uint64_t m_length;
-};
-
-
-class OpenImageAction : public Action {
-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);
-
-private:
- std::ostream& dump(std::ostream& o) const;
-
- imagectx_id_t m_imagectx_id;
- std::string m_name;
- std::string m_snap_name;
- bool m_readonly;
-};
-
-
-class CloseImageAction : public Action {
-public:
- CloseImageAction(Action &src,
- imagectx_id_t imagectx_id);
-
- void perform(ActionCtx &ctx);
-
- static Action::ptr read_from(Action &src, Deser &d);
-
-private:
- std::ostream& dump(std::ostream& o) const;
-
- imagectx_id_t m_imagectx_id;
-};
-
-
-class StartThreadAction : public Action {
-public:
- explicit StartThreadAction(Action &src);
-
- void perform(ActionCtx &ctx);
-
- bool is_start_thread();
-
- static Action::ptr read_from(Action &src, Deser &d);
-
-private:
- std::ostream& dump(std::ostream& o) const;
-};
-
-}
-
-#endif
+++ /dev/null
-// -*- 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.
- *
- */
-
-// 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 <babeltrace/babeltrace.h>
-#include <babeltrace/ctf/events.h>
-#include <babeltrace/ctf/iterator.h>
-#include <cstdlib>
-#include <string>
-#include <assert.h>
-#include <iostream>
-#include <fstream>
-#include <boost/thread/thread.hpp>
-#include "actions.hpp"
-#include "Ser.hpp"
-
-using namespace std;
-using namespace rbd_replay;
-
-// Allows us to easily expose all the functions to make debugging easier.
-#define STATIC static
-
-class IO;
-
-typedef set<boost::shared_ptr<IO> > io_set_t;
-
-typedef map<action_id_t, boost::shared_ptr<IO> > io_map_t;
-
-STATIC void batch_unreachable_from(const io_set_t& deps, const io_set_t& base, io_set_t* unreachable);
-
-class IO : public boost::enable_shared_from_this<IO> {
-public:
- typedef boost::shared_ptr<IO> ptr;
-
- typedef boost::weak_ptr<IO> weak_ptr;
-
- IO(action_id_t ionum,
- uint64_t start_time,
- thread_id_t thread_id,
- ptr prev)
- : m_ionum(ionum),
- m_start_time(start_time),
- m_dependencies(io_set_t()),
- m_completion(weak_ptr()),
- m_num_successors(0),
- m_thread_id(thread_id),
- m_prev(prev) {
- }
-
- virtual ~IO() {
- }
-
- uint64_t start_time() const {
- return m_start_time;
- }
-
- io_set_t& dependencies() {
- return m_dependencies;
- }
-
- const io_set_t& dependencies() const {
- return m_dependencies;
- }
-
- void 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);
- }
- }
- batch_unreachable_from(deps, base, &m_dependencies);
- }
-
- uint64_t num_completion_successors() const {
- ptr c(m_completion.lock());
- return c ? c->m_num_successors : 0;
- }
-
- void write_to(Ser& out, io_type iotype) const;
-
- virtual void write_to(Ser& out) const = 0;
-
- virtual bool is_completion() const {
- return false;
- }
-
- void set_ionum(action_id_t ionum) {
- m_ionum = ionum;
- }
-
- action_id_t ionum() const {
- 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;
- }
-
- void write_debug_base(ostream& out, string iotype);
-
- virtual void write_debug(ostream& out) = 0;
-
- // The result must be stored somewhere, or else m_completion will expire
- ptr create_completion(uint64_t start_time, thread_id_t thread_id);
-
-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;
-};
-
-ostream& operator<<(ostream& out, IO::ptr io) {
- io->write_debug(out);
- return out;
-}
-
-class Thread {
-public:
- typedef boost::shared_ptr<Thread> ptr;
-
- Thread(thread_id_t id,
- uint64_t window)
- : m_id(id),
- m_window(window),
- m_pending_io(IO::ptr()),
- m_latest_io(IO::ptr()),
- m_max_ts(0) {
- }
-
- void insert_ts(uint64_t ts) {
- if (m_max_ts == 0 || ts > m_max_ts) {
- m_max_ts = ts;
- }
- }
-
- uint64_t max_ts() const {
- return m_max_ts;
- }
-
- void issued_io(IO::ptr io, const map<thread_id_t, ptr>& threads) {
- 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);
- }
- }
- }
- io->add_dependencies(latest_ios);
- m_latest_io = io;
- m_pending_io = io;
- }
-
- thread_id_t id() const {
- return m_id;
- }
-
- IO::ptr pending_io() {
- return m_pending_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;
-};
-
-void IO::write_debug_base(ostream& out, string type) {
- out << m_ionum << ": " << m_start_time / 1000000.0 << ": " << type << ", thread = " << m_thread_id << ", deps = {";
- bool first = true;
- for (io_set_t::iterator itr = m_dependencies.begin(), end = m_dependencies.end(); itr != end; ++itr) {
- if (first) {
- first = false;
- } else {
- out << ", ";
- }
- out << (*itr)->m_ionum << ": " << m_start_time - (*itr)->m_start_time;
- }
- out << "}, num_successors = " << m_num_successors << ", numCompletionSuccessors = " << num_completion_successors();
-}
-
-class StartThreadIO : public IO {
-public:
- StartThreadIO(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 {
- IO::write_to(out, IO_START_THREAD);
- }
-
- void write_debug(ostream& out) {
- write_debug_base(out, "start thread");
- }
-};
-
-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()) {
- }
-
- void write_to(Ser& out) const {
- IO::write_to(out, IO_STOP_THREAD);
- }
-
- void write_debug(ostream& out) {
- write_debug_base(out, "stop thread");
- }
-};
-
-class ReadIO : public IO {
-public:
- ReadIO(action_id_t ionum,
- uint64_t start_time,
- thread_id_t thread_id,
- IO::ptr prev,
- imagectx_id_t imagectx,
- uint64_t offset,
- uint64_t length)
- : IO(ionum, start_time, thread_id, prev),
- m_imagectx(imagectx),
- m_offset(offset),
- m_length(length) {
- }
-
- void 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 write_debug(ostream& out) {
- write_debug_base(out, "read");
- out << ", imagectx=" << m_imagectx << ", offset=" << m_offset << ", length=" << m_length << "]";
- }
-
-private:
- imagectx_id_t m_imagectx;
- uint64_t m_offset;
- uint64_t m_length;
-};
-
-class WriteIO : public IO {
-public:
- WriteIO(action_id_t ionum,
- uint64_t start_time,
- thread_id_t thread_id,
- IO::ptr prev,
- imagectx_id_t imagectx,
- uint64_t offset,
- uint64_t length)
- : IO(ionum, start_time, thread_id, prev),
- m_imagectx(imagectx),
- m_offset(offset),
- m_length(length) {
- }
-
- void 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 write_debug(ostream& out) {
- write_debug_base(out, "write");
- out << ", imagectx=" << m_imagectx << ", offset=" << m_offset << ", length=" << m_length << "]";
- }
-
-private:
- imagectx_id_t m_imagectx;
- uint64_t m_offset;
- uint64_t m_length;
-};
-
-class AioReadIO : public IO {
-public:
- AioReadIO(action_id_t ionum,
- uint64_t start_time,
- thread_id_t thread_id,
- IO::ptr prev,
- imagectx_id_t imagectx,
- uint64_t offset,
- uint64_t length)
- : IO(ionum, start_time, thread_id, prev),
- m_imagectx(imagectx),
- m_offset(offset),
- m_length(length) {
- }
-
- void 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 write_debug(ostream& out) {
- write_debug_base(out, "aio read");
- out << ", imagectx=" << m_imagectx << ", offset=" << m_offset << ", length=" << m_length << "]";
- }
-private:
- imagectx_id_t m_imagectx;
- uint64_t m_offset;
- uint64_t m_length;
-};
-
-class AioWriteIO : public IO {
-public:
- AioWriteIO(action_id_t ionum,
- uint64_t start_time,
- thread_id_t thread_id,
- IO::ptr prev,
- imagectx_id_t imagectx,
- uint64_t offset,
- uint64_t length)
- : IO(ionum, start_time, thread_id, prev),
- m_imagectx(imagectx),
- m_offset(offset),
- m_length(length) {
- }
-
- void 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 write_debug(ostream& out) {
- write_debug_base(out, "aio write");
- out << ", imagectx=" << m_imagectx << ", offset=" << m_offset << ", length=" << m_length << "]";
- }
-
-private:
- imagectx_id_t m_imagectx;
- uint64_t m_offset;
- uint64_t m_length;
-};
-
-class OpenImageIO : public IO {
-public:
- OpenImageIO(action_id_t ionum,
- uint64_t start_time,
- thread_id_t thread_id,
- IO::ptr prev,
- imagectx_id_t imagectx,
- const string& name,
- const string& snap_name,
- bool readonly)
- : IO(ionum, start_time, thread_id, prev),
- m_imagectx(imagectx),
- m_name(name),
- m_snap_name(snap_name),
- m_readonly(readonly) {
- }
-
- void 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);
- }
-
- imagectx_id_t imagectx() const {
- return m_imagectx;
- }
-
- void write_debug(ostream& out) {
- write_debug_base(out, "open image");
- out << ", imagectx=" << m_imagectx << ", name='" << m_name << "', snap_name='" << m_snap_name << "', readonly=" << m_readonly;
- }
-
-private:
- imagectx_id_t m_imagectx;
- string m_name;
- string m_snap_name;
- bool m_readonly;
-};
-
-class CloseImageIO : public IO {
-public:
- CloseImageIO(action_id_t ionum,
- uint64_t start_time,
- thread_id_t thread_id,
- IO::ptr prev,
- imagectx_id_t imagectx)
- : IO(ionum, start_time, thread_id, prev),
- m_imagectx(imagectx) {
- }
-
- void write_to(Ser& out) const {
- IO::write_to(out, IO_CLOSE_IMAGE);
- out.write_uint64_t(m_imagectx);
- }
-
- imagectx_id_t imagectx() const {
- return m_imagectx;
- }
-
- void write_debug(ostream& out) {
- write_debug_base(out, "close image");
- out << ", imagectx=" << m_imagectx;
- }
-
-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(ostream& out) {
- write_debug_base(out, "completion");
- }
-};
-
-STATIC bool compare_io_ptrs_by_start_time(IO::ptr p1, IO::ptr p2) {
- return p1->start_time() < p2->start_time();
-}
-
-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;
-}
-
-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();
-}
-
-// TODO: Add unit tests
-// Anything in 'deps' which is not reachable from 'base' is added to 'unreachable'
-STATIC void 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);
- }
-}
-
-STATIC void usage(string prog) {
- cout << "Usage: " << prog << " [ --window <seconds> ] <trace-input> <replay-output>" << endl;
-}
-
-__attribute__((noreturn)) STATIC void usage_exit(string prog, string msg) {
- cerr << msg << endl;
- usage(prog);
- exit(1);
-}
-
-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>()) {
- }
-
- void run(vector<string> args) {
- string input_file_name;
- string output_file_name;
- bool got_input = false;
- bool got_output = false;
- for (int i = 1, nargs = args.size(); i < nargs; i++) {
- const string& arg(args[i]);
- if (arg == "--window") {
- if (i == nargs - 1) {
- usage_exit(args[0], "--window requires an argument");
- }
- 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 == "-h" || arg == "--help") {
- usage(args[0]);
- exit(0);
- } else if (arg.find("-") == 0) {
- usage_exit(args[0], "Unrecognized argument: " + arg);
- } else if (!got_input) {
- input_file_name = arg;
- got_input = true;
- } else if (!got_output) {
- output_file_name = arg;
- got_output = true;
- } else {
- usage_exit(args[0], "Too many arguments");
- }
- }
- if (!got_output) {
- usage_exit(args[0], "Not enough arguments");
- }
-
- struct bt_context *ctx = bt_context_create();
- int trace_handle = bt_context_add_trace(ctx,
- input_file_name.c_str(), // path
- "ctf", // format
- NULL, // packet_seek
- NULL, // stream_list
- NULL); // metadata
- assertf(trace_handle >= 0, "trace_handle = %d", trace_handle);
-
- uint64_t start_time_ns = bt_trace_handle_get_timestamp_begin(ctx, trace_handle, BT_CLOCK_REAL);
- assert(start_time_ns != -1ULL);
-
- struct bt_ctf_iter *itr = bt_ctf_iter_create(ctx,
- NULL, // begin_pos
- NULL); // end_pos
- assert(itr);
-
- struct bt_iter *bt_itr = bt_ctf_get_iter(itr);
-
- uint64_t trace_start = 0;
- struct bt_ctf_event *evt;
- bool first = true;
- while(true) {
- evt = bt_ctf_iter_read_event(itr);
- if(!evt) {
- break;
- }
- uint64_t ts = bt_ctf_get_timestamp(evt);
- assert(ts != -1ULL);
-
- if (first) {
- trace_start = ts;
- first = false;
- }
- 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);
-
- int r = bt_iter_next(bt_itr);
- assert(!r);
- }
-
- bt_ctf_iter_destroy(itr);
-
- insert_thread_stops();
-
- 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);
- }
- }
-
- 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);
- }
- 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) {
- 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);
- }
- }
-
- void process_event(uint64_t ts, struct bt_ctf_event *evt) {
- 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);
- const struct bt_definition *scope_fields = bt_ctf_get_top_level_scope(evt,
- BT_EVENT_FIELDS);
- assert(scope_fields);
-
- const struct bt_definition *pthread_id_field = bt_ctf_get_field(evt, scope_context, "pthread_id");
- assert(pthread_id_field);
- 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);
- }
- thread->insert_ts(ts);
-
- class FieldLookup {
- public:
- FieldLookup(struct bt_ctf_event *evt,
- const struct bt_definition *scope)
- : m_evt(evt),
- m_scope(scope) {
- }
-
- 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);
- 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);
- 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);
- 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);
- 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);
- 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);
- return val;
- }
-
- private:
- struct bt_ctf_event *m_evt;
- const struct bt_definition *m_scope;
- } fields(evt, scope_fields);
-
- if (strcmp(event_name, "librbd:read_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");
- imagectx_id_t imagectx = fields.uint64("imagectx");
- action_id_t ionum = next_id();
- IO::ptr io(new OpenImageIO(ionum, ts, threadID, thread->pending_io(), imagectx, name, snap_name, readonly));
- 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_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()));
- 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());
- } 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()));
- assert(io);
- m_open_images.erase(io->imagectx());
- } 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) {
- 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);
- 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);
- } 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) {
- string name(fields.string("name"));
- string snap_name(fields.string("snap_name"));
- bool readonly = fields.int64("read_only");
- uint64_t completion = fields.uint64("completion");
- 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 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);
- m_pending_ios[completion] = io;
- } else if (strcmp(event_name, "librbd:aio_write_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("len");
- uint64_t completion = fields.uint64("completion");
- imagectx_id_t imagectx = fields.uint64("imagectx");
- require_image(ts, thread, imagectx, name, snap_name, readonly);
- 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);
- m_pending_ios[completion] = io;
- } else if (strcmp(event_name, "librbd:aio_complete_enter") == 0) {
- uint64_t completion = fields.uint64("completion");
- map<uint64_t, IO::ptr>::iterator itr = m_pending_ios.find(completion);
- 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);
- }
- }
-
- // cout << ts << "\t" << event_name << "\tthreadID = " << threadID << endl;
- }
-
- action_id_t next_id() {
- action_id_t id = m_io_count;
- m_io_count += 2;
- return id;
- }
-
- 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) {
- m_recent_completions.erase(itr++);
- } else {
- ++itr;
- }
- }
- m_recent_completions.insert(io);
- }
-
- void require_image(uint64_t ts,
- Thread::ptr thread,
- imagectx_id_t imagectx,
- const string& name,
- const string& snap_name,
- bool readonly) {
- assert(thread);
- if (m_open_images.count(imagectx) > 0) {
- return;
- }
- action_id_t ionum = next_id();
- IO::ptr io(new OpenImageIO(ionum, ts - 2, thread->id(), thread->pending_io(), imagectx, name, snap_name, 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);
- m_open_images.insert(imagectx);
- }
-
- uint64_t m_window;
- map<thread_id_t, Thread::ptr> m_threads;
- 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;
-};
-
-int main(int argc, char** argv) {
- vector<string> args;
- for (int i = 0; i < argc; i++) {
- args.push_back(string(argv[i]));
- }
-
- Processor p;
- p.run(args);
-}
+++ /dev/null
-// -*- 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 <vector>
-#include <boost/thread.hpp>
-#include "common/ceph_argparse.h"
-#include "global/global_init.h"
-#include "Replayer.hpp"
-#include "rbd_replay_debug.hpp"
-#include "ImageNameMap.hpp"
-
-
-using namespace std;
-using namespace rbd_replay;
-
-
-static const char* get_remainder(const char *string, const char *prefix) {
- while (*prefix) {
- if (*prefix++ != *string++) {
- return NULL;
- }
- }
- return string;
-}
-
-static void usage(const char* program) {
- cout << "Usage: " << program << " --conf=<config_file> <replay_file>" << std::endl;
- cout << "Options:" << std::endl;
- cout << " -p, --pool-name <pool> Name of the pool to use. Default: rbd" << std::endl;
- cout << " --latency-multiplier <float> Multiplies inter-request latencies. Default: 1" << std::endl;
- cout << " --read-only Only perform non-destructive operations." << std::endl;
- cout << " --map-image <rule> Add a rule to map image names in the trace to" << std::endl;
- cout << " image names in the replay cluster." << std::endl;
- cout << std::endl;
- cout << "Image mapping rules:" << std::endl;
- cout << "A rule of image1@snap1=image2@snap2 would map snap1 of image1 to snap2 of" << std::endl;
- cout << "image2." << std::endl;
-}
-
-int main(int argc, const char **argv) {
- vector<const char*> args;
-
- argv_to_vec(argc, argv, args);
- env_to_vec(args);
- global_init(NULL, args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY, 0);
-
- std::vector<const char*>::iterator i;
- string pool_name = "rbd";
- float latency_multiplier = 1;
- bool readonly = false;
- ImageNameMap image_name_map;
- std::string val;
- std::ostringstream err;
- for (i = args.begin(); i != args.end(); ) {
- if (ceph_argparse_double_dash(args, i)) {
- break;
- } else if (ceph_argparse_witharg(args, i, &val, "-p", "--pool", (char*)NULL)) {
- pool_name = val;
- } else if (ceph_argparse_withfloat(args, i, &latency_multiplier, &err, "--latency-multiplier",
- (char*)NULL)) {
- if (!err.str().empty()) {
- cerr << err.str() << std::endl;
- return 1;
- }
- } else if (ceph_argparse_flag(args, i, "--read-only", (char*)NULL)) {
- readonly = true;
- } else if (ceph_argparse_witharg(args, i, &val, "--map-image", (char*)NULL)) {
- ImageNameMap::Mapping mapping;
- if (image_name_map.parse_mapping(val, &mapping)) {
- image_name_map.add_mapping(mapping);
- } else {
- cerr << "Unable to parse mapping string: '" << val << "'" << std::endl;
- return 1;
- }
- } else if (ceph_argparse_flag(args, i, "-h", "--help", (char*)NULL)) {
- usage(argv[0]);
- return 0;
- } else if (get_remainder(*i, "-")) {
- cerr << "Unrecognized argument: " << *i << std::endl;
- return 1;
- } else {
- ++i;
- }
- }
-
- common_init_finish(g_ceph_context);
-
- string replay_file;
- if (!args.empty()) {
- replay_file = args[0];
- }
-
- if (replay_file.empty()) {
- cerr << "No replay file specified." << std::endl;
- return 1;
- }
-
- unsigned int nthreads = boost::thread::hardware_concurrency();
- Replayer replayer(2 * nthreads + 1);
- replayer.set_latency_multiplier(latency_multiplier);
- replayer.set_pool_name(pool_name);
- replayer.set_readonly(readonly);
- replayer.set_image_name_map(image_name_map);
- replayer.run(replay_file);
-}
+++ /dev/null
-// -*- 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 "rbd_loc.hpp"
-#include "include/assert.h"
-
-
-using namespace std;
-using namespace rbd_replay;
-
-
-rbd_loc::rbd_loc() {
-}
-
-rbd_loc::rbd_loc(string pool, string image, string snap)
- : pool(pool),
- image(image),
- snap(snap) {
-}
-
-bool rbd_loc::parse(string name_string) {
- int field = 0;
- string fields[3];
- bool read_slash = false;
- bool read_at = false;
- for (size_t i = 0, n = name_string.length(); i < n; i++) {
- char c = name_string[i];
- switch (c) {
- case '/':
- if (read_slash || read_at) {
- return false;
- }
- assert(field == 0);
- field++;
- read_slash = true;
- break;
- case '@':
- if (read_at) {
- return false;
- }
- assert(field < 2);
- field++;
- read_at = true;
- break;
- case '\\':
- if (i == n - 1) {
- return false;
- }
- fields[field].push_back(name_string[++i]);
- break;
- default:
- fields[field].push_back(c);
- }
- }
-
- if (read_slash) {
- pool = fields[0];
- image = fields[1];
- // note that if read_at is false, then fields[2] is the empty string,
- // so this is still correct
- snap = fields[2];
- } else {
- pool = "";
- image = fields[0];
- // note that if read_at is false, then fields[1] is the empty string,
- // so this is still correct
- snap = fields[1];
- }
- return true;
-}
-
-
-static void write(const string &in, string *out) {
- for (size_t i = 0, n = in.length(); i < n; i++) {
- char c = in[i];
- if (c == '@' || c == '/' || c == '\\') {
- out->push_back('\\');
- }
- out->push_back(c);
- }
-}
-
-string rbd_loc::str() const {
- string out;
- if (!pool.empty()) {
- write(pool, &out);
- out.push_back('/');
- }
- write(image, &out);
- if (!snap.empty()) {
- out.push_back('@');
- write(snap, &out);
- }
- return out;
-}
-
-int rbd_loc::compare(const rbd_loc& rhs) const {
- int c = pool.compare(rhs.pool);
- if (c) {
- return c;
- }
- c = image.compare(rhs.image);
- if (c) {
- return c;
- }
- c = snap.compare(rhs.snap);
- if (c) {
- return c;
- }
- return 0;
-}
-
-bool rbd_loc::operator==(const rbd_loc& rhs) const {
- return compare(rhs) == 0;
-}
-
-bool rbd_loc::operator<(const rbd_loc& rhs) const {
- return compare(rhs) < 0;
-}
+++ /dev/null
-// -*- 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_RBD_LOC_HPP
-#define _INCLUDED_RBD_REPLAY_RBD_LOC_HPP
-
-#include <string>
-
-namespace rbd_replay {
-
-struct rbd_loc {
- rbd_loc();
-
- rbd_loc(std::string pool, std::string image, std::string snap);
-
- bool parse(std::string name_string);
-
- std::string str() const;
-
- int compare(const rbd_loc& rhs) const;
-
- bool operator==(const rbd_loc& rhs) const;
-
- bool operator<(const rbd_loc& rhs) const;
-
- std::string pool;
-
- std::string image;
-
- std::string snap;
-};
-
-}
-
-#endif
+++ /dev/null
-// -*- 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_DEBUG_H
-#define _INCLUDED_RBD_REPLAY_DEBUG_H
-
-#include "common/debug.h"
-#include "include/assert.h"
-
-namespace rbd_replay {
-
-static const int ACTION_LEVEL = 11;
-static const int DEPGRAPH_LEVEL = 12;
-static const int SLEEP_LEVEL = 13;
-static const int THREAD_LEVEL = 10;
-
-}
-
-#define dout_subsys ceph_subsys_rbd_replay
-#undef dout_prefix
-#define dout_prefix *_dout << "rbd_replay: "
-
-#endif
unittest_on_exit_LDADD = $(PTHREAD_LIBS)
check_PROGRAMS += unittest_on_exit
-unittest_rbd_replay_SOURCES = test/test_rbd_replay.cc
-unittest_rbd_replay_LDADD = $(LIBRBD) \
- $(LIBRADOS) \
- $(CEPH_GLOBAL) \
- -lboost_regex \
- librbd_replay.la \
- $(UNITTEST_LDADD)
-unittest_rbd_replay_CXXFLAGS = $(UNITTEST_CXXFLAGS)
-check_PROGRAMS += unittest_rbd_replay
-
-
check_SCRIPTS += test/pybind/test_ceph_argparse.py
if WITH_RADOSGW
SRCDIR_ABS="$(readlink -f "$SRCDIR")"
BUILDDIR_ABS="$(readlink -f "$BUILDDIR")"
-FAKE_HOME="$BUILDDIR_ABS/fake_home"
-mkdir -p "$FAKE_HOME"
# cram doesn't like seeing the same foo.t basename twice on the same
# run, so run it once per directory
CCACHE_DIR="$CCACHE_DIR" \
CC="$CC" \
CXX="$CXX" \
- HOME="$FAKE_HOME" \
"$SRCDIR/run-cli-tests-maybe-unset-ccache" \
"$CRAM_BIN" -v "$@" --error-dir="$BUILDDIR/cli/$toolname" -- "$tool"/*.t; then
FAILED=1
+++ /dev/null
-// -*- 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 "common/escape.h"
-#include "gtest/gtest.h"
-#include <stdint.h>
-#include <boost/foreach.hpp>
-#include "rbd_replay/Deser.hpp"
-#include "rbd_replay/ImageNameMap.hpp"
-#include "rbd_replay/rbd_loc.hpp"
-
-
-using rbd_replay::ImageNameMap;
-using rbd_replay::rbd_loc;
-
-std::ostream& operator<<(std::ostream& o, const rbd_loc& name) {
- return o << "('" << name.pool << "', '" << name.image << "', '" << name.snap << "')";
-}
-
-static void add_mapping(ImageNameMap *map, std::string mapping_string) {
- ImageNameMap::Mapping mapping;
- if (!map->parse_mapping(mapping_string, &mapping)) {
- ASSERT_TRUE(false) << "Failed to parse mapping string '" << mapping_string << "'";
- }
- map->add_mapping(mapping);
-}
-
-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");
- add_mapping(&m, "a\\=b@c=h@i");
- add_mapping(&m, "a@b\\=c=j@k");
- add_mapping(&m, "a\\@b@c=d@e");
- add_mapping(&m, "a@b\\@c=f@g");
- add_mapping(&m, "image@snap_1=image_1");
- ImageNameMap::Mapping mapping;
- EXPECT_FALSE(m.parse_mapping("bad=@@@", &mapping));
- EXPECT_FALSE(m.parse_mapping("bad==stuff", &mapping));
- EXPECT_EQ(rbd_loc("", "y", "x"), m.map(rbd_loc("", "x", "y")));
- EXPECT_EQ(rbd_loc("", "h", "i"), m.map(rbd_loc("", "a=b", "c")));
- EXPECT_EQ(rbd_loc("", "j", "k"), m.map(rbd_loc("", "a", "b=c")));
- EXPECT_EQ(rbd_loc("", "d", "e"), m.map(rbd_loc("", "a@b", "c")));
- EXPECT_EQ(rbd_loc("", "f", "g"), m.map(rbd_loc("", "a", "b@c")));
- EXPECT_EQ(rbd_loc("", "image_1", ""), m.map(rbd_loc("", "image", "snap_1")));
-}
-
-TEST(RBDReplay, rbd_loc_str) {
- EXPECT_EQ("", rbd_loc("", "", "").str());
- EXPECT_EQ("a/", rbd_loc("a", "", "").str());
- EXPECT_EQ("b", rbd_loc("", "b", "").str());
- EXPECT_EQ("a/b", rbd_loc("a", "b", "").str());
- EXPECT_EQ("@c", rbd_loc("", "", "c").str());
- EXPECT_EQ("a/@c", rbd_loc("a", "", "c").str());
- EXPECT_EQ("b@c", rbd_loc("", "b", "c").str());
- EXPECT_EQ("a/b@c", rbd_loc("a", "b", "c").str());
- EXPECT_EQ("a\\@x/b\\@y@c\\@z", rbd_loc("a@x", "b@y", "c@z").str());
- EXPECT_EQ("a\\/x/b\\/y@c\\/z", rbd_loc("a/x", "b/y", "c/z").str());
- EXPECT_EQ("a\\\\x/b\\\\y@c\\\\z", rbd_loc("a\\x", "b\\y", "c\\z").str());
-}
-
-TEST(RBDReplay, rbd_loc_parse) {
- rbd_loc m("x", "y", "z");
-
- EXPECT_TRUE(m.parse(""));
- EXPECT_EQ("", m.pool);
- EXPECT_EQ("", m.image);
- EXPECT_EQ("", m.snap);
-
- EXPECT_TRUE(m.parse("a/"));
- EXPECT_EQ("a", m.pool);
- EXPECT_EQ("", m.image);
- EXPECT_EQ("", m.snap);
-
- EXPECT_TRUE(m.parse("b"));
- EXPECT_EQ("", m.pool);
- EXPECT_EQ("b", m.image);
- EXPECT_EQ("", m.snap);
-
- EXPECT_TRUE(m.parse("a/b"));
- EXPECT_EQ("a", m.pool);
- EXPECT_EQ("b", m.image);
- EXPECT_EQ("", m.snap);
-
- EXPECT_TRUE(m.parse("@c"));
- EXPECT_EQ("", m.pool);
- EXPECT_EQ("", m.image);
- EXPECT_EQ("c", m.snap);
-
- EXPECT_TRUE(m.parse("a/@c"));
- EXPECT_EQ("a", m.pool);
- EXPECT_EQ("", m.image);
- EXPECT_EQ("c", m.snap);
-
- EXPECT_TRUE(m.parse("b@c"));
- EXPECT_EQ("", m.pool);
- EXPECT_EQ("b", m.image);
- EXPECT_EQ("c", m.snap);
-
- EXPECT_TRUE(m.parse("a/b@c"));
- EXPECT_EQ("a", m.pool);
- EXPECT_EQ("b", m.image);
- EXPECT_EQ("c", m.snap);
-
- EXPECT_TRUE(m.parse("a\\@x/b\\@y@c\\@z"));
- EXPECT_EQ("a@x", m.pool);
- EXPECT_EQ("b@y", m.image);
- EXPECT_EQ("c@z", m.snap);
-
- EXPECT_TRUE(m.parse("a\\/x/b\\/y@c\\/z"));
- EXPECT_EQ("a/x", m.pool);
- EXPECT_EQ("b/y", m.image);
- EXPECT_EQ("c/z", m.snap);
-
- EXPECT_TRUE(m.parse("a\\\\x/b\\\\y@c\\\\z"));
- EXPECT_EQ("a\\x", m.pool);
- EXPECT_EQ("b\\y", m.image);
- EXPECT_EQ("c\\z", m.snap);
-
- EXPECT_FALSE(m.parse("a@b@c"));
- EXPECT_FALSE(m.parse("a/b/c"));
- EXPECT_FALSE(m.parse("a@b/c"));
-}
+++ /dev/null
-EXTRA_DIST = tracing-common.h
-
-%.c %.h: %.tp
- $(LTTNG_GEN_TP_PROG) $< -o $*.c -o $*.h
-
-dist_noinst_DATA = \
- librados.tp \
- librbd.tp \
- oprequest.tp \
- osd.tp \
- pg.tp \
- objectstore.tp
-
-nodist_libosd_tp_la_SOURCES = \
- oprequest.c \
- oprequest.h \
- osd.c \
- osd.h \
- pg.h \
- pg.c
-libosd_tp_la_LIBADD = -llttng-ust -ldl
-libosd_tp_la_CPPFLAGS = -DTRACEPOINT_PROBE_DYNAMIC_LINKAGE
-libosd_tp_la_LDFLAGS =
-
-nodist_librados_tp_la_SOURCES = \
- librados.c \
- 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 =
-
-nodist_librbd_tp_la_SOURCES = \
- librbd.c \
- 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 =
-
-nodist_libos_tp_la_SOURCES = \
- objectstore.c \
- 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 =
-
-noinst_LTLIBRARIES = \
- libosd_tp.la \
- librados_tp.la \
- librbd_tp.la \
- libos_tp.la
-
-BUILT_SOURCES = \
- librados.h \
- librbd.h \
- oprequest.h \
- osd.h \
- pg.h \
- objectstore.h
-
-CLEANFILES = \
- $(nodist_libosd_tp_la_SOURCES) \
- $(nodist_librados_tp_la_SOURCES) \
- $(nodist_librbd_tp_la_SOURCES) \
- $(nodist_libos_tp_la_SOURCES)
+++ /dev/null
-Installation
-============
-
-The LTTng libraries that ship with Ubuntu 12.04 have been very buggy, and the
-generated header files using `lttng-gen-tp` have needed to be fixed just to
-compile in the Ceph tree. The packages available in Ubuntu 14.04 seem to work
-alright, and for older versions please install LTTng from the LTTng PPA.
-
- https://launchpad.net/~lttng/+archive/ppa
-
-Then install as normal
-
- apt-get install lttng-tools liblttng-ust-dev
-
-Add/Update Provider
-================
-
-## Create tracepoint definition file
-
-Add tracepoint definitions for the provider into a `.tp` file. Documentation
-on defining a tracepoint can be found in `man lttng-ust`. By convention files
-are named according to the logical sub-system they correspond to (e.g.
-`mutex.tp`, `pg.tp`). Place the `.tp` file into the `src/tracing` directory
-and modify the automake file `src/tracing/Makefile.am` accordingly.
+++ /dev/null
-#include "tracing/tracing-common.h"
-#include "include/rados/librados.h"
-
-TRACEPOINT_EVENT(librados, rados_create_enter,
- TP_ARGS(
- const char*, id),
- TP_FIELDS(
- ceph_ctf_string(id, id)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_create_exit,
- TP_ARGS(
- int, retval,
- rados_t, cluster),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- ctf_integer_hex(rados_t, cluster, cluster)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_create2_enter,
- TP_ARGS(
- const char*, clustername,
- const char*, name,
- uint64_t, flags),
- TP_FIELDS(
- ceph_ctf_string(clustername, clustername)
- ceph_ctf_string(name, name)
- ctf_integer_hex(uint64_t, flags, flags)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_create2_exit,
- TP_ARGS(
- int, retval,
- rados_t, cluster),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- ctf_integer_hex(rados_t, cluster, cluster)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_create_with_context_enter,
- TP_ARGS(
- rados_config_t, cct),
- TP_FIELDS(
- ctf_integer_hex(rados_config_t, cct, cct)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_create_with_context_exit,
- TP_ARGS(
- int, retval,
- rados_t, cluster),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- ctf_integer_hex(rados_t, cluster, cluster)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_cct_enter,
- TP_ARGS(
- rados_t, cluster),
- TP_FIELDS(
- ctf_integer_hex(rados_t, cluster, cluster)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_cct_exit,
- TP_ARGS(
- rados_config_t, retval),
- TP_FIELDS(
- ctf_integer_hex(rados_config_t, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_connect_enter,
- TP_ARGS(
- rados_t, cluster),
- TP_FIELDS(
- ctf_integer_hex(rados_t, cluster, cluster)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_connect_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_shutdown_enter,
- TP_ARGS(
- rados_t, cluster),
- TP_FIELDS(
- ctf_integer_hex(rados_t, cluster, cluster)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_shutdown_exit,
- TP_ARGS(),
- TP_FIELDS()
-)
-
-TRACEPOINT_EVENT(librados, rados_get_instance_id_enter,
- TP_ARGS(
- rados_t, cluster),
- TP_FIELDS(
- ctf_integer_hex(rados_t, cluster, cluster)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_get_instance_id_exit,
- TP_ARGS(
- uint64_t, retval),
- TP_FIELDS(
- ctf_integer(uint64_t, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_version_enter,
- TP_ARGS(
- int*, pmajor,
- int*, pminor,
- int*, pextra),
- TP_FIELDS(
- ctf_integer_hex(int*, pmajor, pmajor)
- ctf_integer_hex(int*, pminor, pminor)
- ctf_integer_hex(int*, pextra, pextra)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_version_exit,
- TP_ARGS(
- int, major,
- int, minor,
- int, extra),
- TP_FIELDS(
- ctf_integer(int, major, major)
- ctf_integer(int, minor, minor)
- ctf_integer(int, extra, extra)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_conf_read_file_enter,
- TP_ARGS(
- rados_t, cluster,
- const char*, path_list),
- TP_FIELDS(
- ctf_integer_hex(rados_t, cluster, cluster)
- ceph_ctf_string(path_list, path_list)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_conf_read_file_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_conf_parse_argv_enter,
- TP_ARGS(
- rados_t, cluster,
- int, argc),
- TP_FIELDS(
- ctf_integer_hex(rados_t, cluster, cluster)
- ctf_integer(int, argc, argc)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_conf_parse_argv_arg,
- TP_ARGS(
- const char*, arg),
- TP_FIELDS(
- ceph_ctf_string(arg, arg)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_conf_parse_argv_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_conf_parse_argv_remainder_enter,
- TP_ARGS(
- rados_t, cluster,
- int, argc),
- TP_FIELDS(
- ctf_integer_hex(rados_t, cluster, cluster)
- ctf_integer(int, argc, argc)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_conf_parse_argv_remainder_arg,
- TP_ARGS(
- const char*, arg),
- TP_FIELDS(
- ceph_ctf_string(arg, arg)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_conf_parse_argv_remainder_remarg,
- TP_ARGS(
- const char*, remarg),
- TP_FIELDS(
- ceph_ctf_string(remarg, remarg)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_conf_parse_argv_remainder_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_conf_parse_env_enter,
- TP_ARGS(
- rados_t, cluster,
- const char*, env),
- TP_FIELDS(
- ctf_integer_hex(rados_t, cluster, cluster)
- ctf_string(env, env)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_conf_parse_env_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_conf_set_enter,
- TP_ARGS(
- rados_t, cluster,
- const char*, option,
- const char*, value),
- TP_FIELDS(
- ctf_integer_hex(rados_t, cluster, cluster)
- ceph_ctf_string(option, option)
- ceph_ctf_string(value, value)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_conf_set_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_cluster_stat_enter,
- TP_ARGS(
- rados_t, cluster),
- TP_FIELDS(
- ctf_integer_hex(rados_t, cluster, cluster)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_cluster_stat_exit,
- TP_ARGS(
- int, retval,
- uint64_t, kb,
- uint64_t, kb_used,
- uint64_t, kb_avail,
- uint64_t, num_objects),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- ctf_integer(uint64_t, kb, kb)
- ctf_integer(uint64_t, kb_used, kb_used)
- ctf_integer(uint64_t, kb_avail, kb_avail)
- ctf_integer(uint64_t, num_objects, num_objects)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_conf_get_enter,
- TP_ARGS(
- rados_t, cluster,
- const char*, option,
- size_t, len),
- TP_FIELDS(
- ctf_integer_hex(rados_t, cluster, cluster)
- ctf_string(option, option)
- ctf_integer(size_t, len, len)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_conf_get_exit,
- TP_ARGS(
- int, retval,
- const char*, value),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- ctf_string(value, value)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_pool_lookup_enter,
- TP_ARGS(
- rados_t, cluster,
- const char*, name),
- TP_FIELDS(
- ctf_integer_hex(rados_t, cluster, cluster)
- ctf_string(name, name)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_pool_lookup_exit,
- TP_ARGS(
- int64_t, retval),
- TP_FIELDS(
- ctf_integer(int64_t, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_pool_reverse_lookup_enter,
- TP_ARGS(
- rados_t, cluster,
- int64_t, id,
- size_t, maxlen),
- TP_FIELDS(
- ctf_integer_hex(rados_t, cluster, cluster)
- ctf_integer(int64_t, id, id)
- ctf_integer(size_t, maxlen, maxlen)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_pool_reverse_lookup_exit,
- TP_ARGS(
- int, retval,
- const char*, name),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- ctf_string(name, name)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_cluster_fsid_enter,
- TP_ARGS(
- rados_t, cluster,
- size_t, maxlen),
- TP_FIELDS(
- ctf_integer_hex(rados_t, cluster, cluster)
- ctf_integer(size_t, maxlen, maxlen)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_cluster_fsid_exit,
- TP_ARGS(
- int, retval,
- const char*, fsid),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- ctf_string(fsid, fsid)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_wait_for_latest_osdmap_enter,
- TP_ARGS(
- rados_t, cluster),
- TP_FIELDS(
- ctf_integer_hex(rados_t, cluster, cluster)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_wait_for_latest_osdmap_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_pool_list_enter,
- TP_ARGS(
- rados_t, cluster,
- size_t, maxlen),
- TP_FIELDS(
- ctf_integer_hex(rados_t, cluster, cluster)
- ctf_integer(size_t, maxlen, maxlen)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_pool_list_pool,
- TP_ARGS(
- const char*, buf),
- TP_FIELDS(
- ctf_string(buf, buf)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_pool_list_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_ping_monitor_enter,
- TP_ARGS(
- rados_t, cluster,
- const char*, mon_id),
- TP_FIELDS(
- ctf_integer_hex(rados_t, cluster, cluster)
- ctf_string(mon_id, mon_id)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_ping_monitor_exit,
- TP_ARGS(
- int, retval,
- char const* const*, buf,
- size_t*, len),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- ceph_ctf_sequencep(unsigned char, buf, buf, size_t, len)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_mon_command_enter,
- TP_ARGS(
- rados_t, cluster,
- size_t, cmdlen,
- const char*, inbuf,
- size_t, inbuflen),
- TP_FIELDS(
- ctf_integer_hex(rados_t, cluster, cluster)
- ctf_integer(size_t, cmdlen, cmdlen)
- ceph_ctf_sequence(unsigned char, inbuf, inbuf, size_t, inbuflen)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_mon_command_cmd,
- TP_ARGS(
- const char*, cmd),
- TP_FIELDS(
- ctf_string(cmd, cmd)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_mon_command_exit,
- TP_ARGS(
- int, retval,
- char**, outbuf,
- size_t*, outbuflen,
- char**, outs,
- size_t*, outslen),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- ceph_ctf_stringp(outs, outs)
- ceph_ctf_sequencep(unsigned char, outbuf, outbuf, size_t, outbuflen)
- ceph_ctf_integerp(size_t, outslen, outslen)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_mon_command_target_enter,
- TP_ARGS(
- rados_t, cluster,
- const char*, name,
- size_t, cmdlen,
- const char*, inbuf,
- size_t, inbuflen),
- TP_FIELDS(
- ctf_integer_hex(rados_t, cluster, cluster)
- ctf_string(name, name)
- ctf_integer(size_t, cmdlen, cmdlen)
- ceph_ctf_sequence(unsigned char, inbuf, inbuf, size_t, inbuflen)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_mon_command_target_cmd,
- TP_ARGS(
- const char*, cmd),
- TP_FIELDS(
- ctf_string(cmd, cmd)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_mon_command_target_exit,
- TP_ARGS(
- int, retval,
- char**, outbuf,
- size_t*, outbuflen,
- char**, outs,
- size_t*, outslen),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- ceph_ctf_stringp(outs, outs)
- ceph_ctf_sequencep(unsigned char, outbuf, outbuf, size_t, outbuflen)
- ceph_ctf_integerp(size_t, outslen, outslen)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_osd_command_enter,
- TP_ARGS(
- rados_t, cluster,
- int, osdid,
- size_t, cmdlen,
- const char*, inbuf,
- size_t, inbuflen),
- TP_FIELDS(
- ctf_integer_hex(rados_t, cluster, cluster)
- ctf_integer(int, osdid, osdid)
- ctf_integer(size_t, cmdlen, cmdlen)
- ceph_ctf_sequence(unsigned char, inbuf, inbuf, size_t, inbuflen)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_osd_command_cmd,
- TP_ARGS(
- const char*, cmd),
- TP_FIELDS(
- ctf_string(cmd, cmd)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_osd_command_exit,
- TP_ARGS(
- int, retval,
- char**, outbuf,
- size_t*, outbuflen,
- char**, outs,
- size_t*, outslen),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- ceph_ctf_stringp(outs, outs)
- ceph_ctf_sequencep(unsigned char, outbuf, outbuf, size_t, outbuflen)
- ceph_ctf_integerp(size_t, outslen, outslen)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_pg_command_enter,
- TP_ARGS(
- rados_t, cluster,
- const char*, pg,
- size_t, cmdlen,
- const char*, inbuf,
- size_t, inbuflen),
- TP_FIELDS(
- ctf_integer_hex(rados_t, cluster, cluster)
- ctf_string(pg, pg)
- ctf_integer(size_t, cmdlen, cmdlen)
- ceph_ctf_sequence(unsigned char, inbuf, inbuf, size_t, inbuflen)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_pg_command_cmd,
- TP_ARGS(
- const char*, cmd),
- TP_FIELDS(
- ctf_string(cmd, cmd)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_pg_command_exit,
- TP_ARGS(
- int, retval,
- char**, outbuf,
- size_t*, outbuflen,
- char**, outs,
- size_t*, outslen),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- ceph_ctf_stringp(outs, outs)
- ceph_ctf_sequencep(unsigned char, outbuf, outbuf, size_t, outbuflen)
- ceph_ctf_integerp(size_t, outslen, outslen)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_buffer_free_enter,
- TP_ARGS(
- void*, buf),
- TP_FIELDS(
- ctf_integer_hex(void*, buf, buf)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_buffer_free_exit,
- TP_ARGS(),
- TP_FIELDS()
-)
-
-TRACEPOINT_EVENT(librados, rados_monitor_log_enter,
- TP_ARGS(
- rados_t, cluster,
- const char*, level,
- rados_log_callback_t, callback,
- void*, arg),
- TP_FIELDS(
- ctf_integer_hex(rados_t, cluster, cluster)
- ceph_ctf_string(level, level)
- ctf_integer_hex(rados_log_callback_t, callback, callback)
- ctf_integer_hex(void*, arg, arg)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_monitor_log_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_ioctx_create_enter,
- TP_ARGS(
- rados_t, cluster,
- const char*, name),
- TP_FIELDS(
- ctf_integer_hex(rados_t, cluster, cluster)
- ctf_string(name, name)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_ioctx_create_exit,
- TP_ARGS(
- int, retval,
- rados_ioctx_t, ioctx),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- ctf_integer_hex(rados_ioctx_t, ioctx, ioctx)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_ioctx_destroy_enter,
- TP_ARGS(
- rados_ioctx_t, ioctx),
- TP_FIELDS(
- ctf_integer_hex(rados_ioctx_t, ioctx, ioctx)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_ioctx_destroy_exit,
- TP_ARGS(),
- TP_FIELDS()
-)
-
-TRACEPOINT_EVENT(librados, rados_ioctx_pool_stat_enter,
- TP_ARGS(
- rados_ioctx_t, ioctx),
- TP_FIELDS(
- ctf_integer_hex(rados_ioctx_t, ioctx, ioctx)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_ioctx_pool_stat_exit,
- TP_ARGS(
- int, retval,
- struct rados_pool_stat_t*, stats),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- ctf_integer(uint64_t, num_kb, stats->num_kb)
- ctf_integer(uint64_t, num_bytes, stats->num_bytes)
- ctf_integer(uint64_t, num_objects, stats->num_objects)
- ctf_integer(uint64_t, num_object_clones, stats->num_object_clones)
- ctf_integer(uint64_t, num_object_copies, stats->num_object_copies)
- ctf_integer(uint64_t, num_objects_missing_on_primary, stats->num_objects_missing_on_primary)
- ctf_integer(uint64_t, num_objects_unfound, stats->num_objects_unfound)
- ctf_integer(uint64_t, num_objects_degraded, stats->num_objects_degraded)
- ctf_integer(uint64_t, num_rd, stats->num_rd)
- ctf_integer(uint64_t, num_rd_kb, stats->num_rd_kb)
- ctf_integer(uint64_t, num_wr, stats->num_wr)
- ctf_integer(uint64_t, num_wr_kb, stats->num_wr_kb)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_ioctx_cct_enter,
- TP_ARGS(
- rados_ioctx_t, ioctx),
- TP_FIELDS(
- ctf_integer_hex(rados_ioctx_t, ioctx, ioctx)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_ioctx_cct_exit,
- TP_ARGS(
- rados_config_t, retval),
- TP_FIELDS(
- ctf_integer_hex(rados_config_t, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_ioctx_snap_set_read_enter,
- TP_ARGS(
- rados_ioctx_t, ioctx,
- uint64_t, snapid),
- TP_FIELDS(
- ctf_integer_hex(rados_ioctx_t, ioctx, ioctx)
- ctf_integer(uint64_t, snapid, snapid)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_ioctx_snap_set_read_exit,
- TP_ARGS(),
- TP_FIELDS()
-)
-
-TRACEPOINT_EVENT(librados, rados_ioctx_selfmanaged_snap_set_write_ctx_enter,
- TP_ARGS(
- rados_ioctx_t, ioctx,
- uint64_t, seq,
- uint64_t*, snaps,
- int, num_snaps),
- TP_FIELDS(
- ctf_integer_hex(rados_ioctx_t, ioctx, ioctx)
- ctf_integer(uint64_t, seq, seq)
- ctf_sequence(uint64_t, snaps, snaps,
- uint32_t, num_snaps)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_ioctx_selfmanaged_snap_set_write_ctx_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_write_enter,
- TP_ARGS(
- rados_ioctx_t, ioctx,
- const char*, oid,
- const void*, buf,
- size_t, len,
- uint64_t, off),
- TP_FIELDS(
- ctf_integer_hex(rados_ioctx_t, ioctx, ioctx)
- ctf_string(oid, oid)
- ceph_ctf_sequence(unsigned char, buf, buf, size_t, len)
- ctf_integer(uint64_t, off, off)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_write_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_append_enter,
- TP_ARGS(
- rados_ioctx_t, ioctx,
- const char*, oid,
- const void*, buf,
- size_t, len),
- TP_FIELDS(
- ctf_integer_hex(rados_ioctx_t, ioctx, ioctx)
- ctf_string(oid, oid)
- ceph_ctf_sequence(unsigned char, buf, buf, size_t, len)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_append_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_write_full_enter,
- TP_ARGS(
- rados_ioctx_t, ioctx,
- const char*, oid,
- const void*, buf,
- size_t, len),
- TP_FIELDS(
- ctf_integer_hex(rados_ioctx_t, ioctx, ioctx)
- ctf_string(oid, oid)
- ceph_ctf_sequence(unsigned char, buf, buf, size_t, len)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_write_full_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_clone_range_enter,
- TP_ARGS(
- rados_ioctx_t, ioctx,
- const char*, dst,
- uint64_t, dst_off,
- const char*, src,
- uint64_t, src_off,
- size_t, len),
- TP_FIELDS(
- ctf_integer_hex(rados_ioctx_t, ioctx, ioctx)
- ctf_string(dst, dst)
- ctf_integer(uint64_t, dst_off, dst_off)
- ctf_string(src, src)
- ctf_integer(uint64_t, src_off, src_off)
- ctf_integer(size_t, len, len)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_clone_range_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_trunc_enter,
- TP_ARGS(
- rados_ioctx_t, ioctx,
- const char*, oid,
- uint64_t, size),
- TP_FIELDS(
- ctf_integer_hex(rados_ioctx_t, ioctx, ioctx)
- ctf_string(oid, oid)
- ctf_integer(uint64_t, size, size)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_trunc_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_remove_enter,
- TP_ARGS(
- rados_ioctx_t, ioctx,
- const char*, oid),
- TP_FIELDS(
- ctf_integer_hex(rados_ioctx_t, ioctx, ioctx)
- ctf_string(oid, oid)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_remove_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_read_enter,
- TP_ARGS(
- rados_ioctx_t, ioctx,
- const char*, oid,
- void*, buf,
- size_t, len,
- uint64_t, off),
- TP_FIELDS(
- ctf_integer_hex(rados_ioctx_t, ioctx, ioctx)
- ctf_string(oid, oid)
- ctf_integer_hex(void*, buf, buf)
- ctf_integer(size_t, len, len)
- ctf_integer(size_t, off, off)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_read_exit,
- TP_ARGS(
- int, retval,
- void*, buf),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- ceph_ctf_sequence(unsigned char, buf, buf, uint64_t, retval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_get_last_version_enter,
- TP_ARGS(
- rados_ioctx_t, ioctx),
- TP_FIELDS(
- ctf_integer_hex(rados_ioctx_t, ioctx, ioctx)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_get_last_version_exit,
- TP_ARGS(
- uint64_t, retval),
- TP_FIELDS(
- ctf_integer(uint64_t, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_pool_create_enter,
- TP_ARGS(
- rados_t, cluster,
- const char*, name),
- TP_FIELDS(
- ctf_integer_hex(rados_t, cluster, cluster)
- ctf_string(name, name)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_pool_create_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_pool_create_with_auid_enter,
- TP_ARGS(
- rados_t, cluster,
- const char*, name,
- uint64_t, auid),
- TP_FIELDS(
- ctf_integer_hex(rados_t, cluster, cluster)
- ctf_string(name, name)
- ctf_integer(uint64_t, auid, auid)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_pool_create_with_auid_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_pool_create_with_crush_rule_enter,
- TP_ARGS(
- rados_t, cluster,
- const char*, name,
- uint8_t, crush_rule_num),
- TP_FIELDS(
- ctf_integer_hex(rados_t, cluster, cluster)
- ctf_string(name, name)
- ctf_integer(uint8_t, crush_rule_num, crush_rule_num)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_pool_create_with_crush_rule_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_pool_create_with_all_enter,
- TP_ARGS(
- rados_t, cluster,
- const char*, name,
- uint64_t, auid,
- uint8_t, crush_rule_num),
- TP_FIELDS(
- ctf_integer_hex(rados_t, cluster, cluster)
- ctf_string(name, name)
- ctf_integer(uint64_t, auid, auid)
- ctf_integer(uint8_t, crush_rule_num, crush_rule_num)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_pool_create_with_all_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_pool_delete_enter,
- TP_ARGS(
- rados_t, cluster,
- const char*, name),
- TP_FIELDS(
- ctf_integer_hex(rados_t, cluster, cluster)
- ctf_string(name, name)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_pool_delete_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_ioctx_pool_set_auid_enter,
- TP_ARGS(
- rados_ioctx_t, ioctx,
- uint64_t, auid),
- TP_FIELDS(
- ctf_integer_hex(rados_ioctx_t, ioctx, ioctx)
- ctf_integer(uint64_t, auid, auid)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_ioctx_pool_set_auid_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_ioctx_pool_get_auid_enter,
- TP_ARGS(
- rados_ioctx_t, ioctx),
- TP_FIELDS(
- ctf_integer_hex(rados_ioctx_t, ioctx, ioctx)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_ioctx_pool_get_auid_exit,
- TP_ARGS(
- int, retval,
- uint64_t, auid),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- ctf_integer(uint64_t, auid, auid)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_ioctx_pool_requires_alignment_enter,
- TP_ARGS(
- rados_ioctx_t, ioctx),
- TP_FIELDS(
- ctf_integer_hex(rados_ioctx_t, ioctx, ioctx)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_ioctx_pool_requires_alignment_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_ioctx_pool_required_alignment_enter,
- TP_ARGS(
- rados_ioctx_t, ioctx),
- TP_FIELDS(
- ctf_integer_hex(rados_ioctx_t, ioctx, ioctx)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_ioctx_pool_required_alignment_exit,
- TP_ARGS(
- uint64_t, retval),
- TP_FIELDS(
- ctf_integer(uint64_t, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_ioctx_locator_set_key_enter,
- TP_ARGS(
- rados_ioctx_t, ioctx,
- const char*, key),
- TP_FIELDS(
- ctf_integer_hex(rados_ioctx_t, ioctx, ioctx)
- ceph_ctf_string(key, key)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_ioctx_locator_set_key_exit,
- TP_ARGS(),
- TP_FIELDS()
-)
-
-TRACEPOINT_EVENT(librados, rados_ioctx_set_namespace_enter,
- TP_ARGS(
- rados_ioctx_t, ioctx,
- const char*, nspace),
- TP_FIELDS(
- ctf_integer_hex(rados_ioctx_t, ioctx, ioctx)
- ceph_ctf_string(nspace, nspace)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_ioctx_set_namespace_exit,
- TP_ARGS(),
- TP_FIELDS()
-)
-
-TRACEPOINT_EVENT(librados, rados_ioctx_get_cluster_enter,
- TP_ARGS(
- rados_ioctx_t, ioctx),
- TP_FIELDS(
- ctf_integer_hex(rados_ioctx_t, ioctx, ioctx)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_ioctx_get_cluster_exit,
- TP_ARGS(
- rados_t, retval),
- TP_FIELDS(
- ctf_integer_hex(rados_t, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_ioctx_get_id_enter,
- TP_ARGS(
- rados_ioctx_t, ioctx),
- TP_FIELDS(
- ctf_integer_hex(rados_ioctx_t, ioctx, ioctx)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_ioctx_get_id_exit,
- TP_ARGS(
- int64_t, retval),
- TP_FIELDS(
- ctf_integer_hex(int64_t, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_ioctx_get_pool_name_enter,
- TP_ARGS(
- rados_ioctx_t, ioctx,
- unsigned, maxlen),
- TP_FIELDS(
- ctf_integer_hex(rados_ioctx_t, ioctx, ioctx)
- ctf_integer(unsigned, maxlen, maxlen)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_ioctx_get_pool_name_exit,
- TP_ARGS(
- int, retval,
- const char*, name),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- ctf_string(name, name)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_ioctx_snap_create_enter,
- TP_ARGS(
- rados_ioctx_t, ioctx,
- const char*, snapname),
- TP_FIELDS(
- ctf_integer_hex(rados_ioctx_t, ioctx, ioctx)
- ctf_string(snapname, snapname)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_ioctx_snap_create_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_ioctx_snap_remove_enter,
- TP_ARGS(
- rados_ioctx_t, ioctx,
- const char*, snapname),
- TP_FIELDS(
- ctf_integer_hex(rados_ioctx_t, ioctx, ioctx)
- ctf_string(snapname, snapname)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_ioctx_snap_remove_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_ioctx_snap_rollback_enter,
- TP_ARGS(
- rados_ioctx_t, ioctx,
- const char*, oid,
- const char*, snapname),
- TP_FIELDS(
- ctf_integer_hex(rados_ioctx_t, ioctx, ioctx)
- ctf_string(oid, oid)
- ctf_string(snapname, snapname)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_ioctx_snap_rollback_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_ioctx_selfmanaged_snap_create_enter,
- TP_ARGS(
- rados_ioctx_t, ioctx),
- TP_FIELDS(
- ctf_integer_hex(rados_ioctx_t, ioctx, ioctx)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_ioctx_selfmanaged_snap_create_exit,
- TP_ARGS(
- int, retval,
- uint64_t, snapid),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- ctf_integer(uint64_t, snapid, snapid)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_ioctx_selfmanaged_snap_remove_enter,
- TP_ARGS(
- rados_ioctx_t, ioctx,
- uint64_t, snapid),
- TP_FIELDS(
- ctf_integer_hex(rados_ioctx_t, ioctx, ioctx)
- ctf_integer(uint64_t, snapid, snapid)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_ioctx_selfmanaged_snap_remove_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_ioctx_selfmanaged_snap_rollback_enter,
- TP_ARGS(
- rados_ioctx_t, ioctx,
- const char*, oid,
- uint64_t, snapid),
- TP_FIELDS(
- ctf_integer_hex(rados_ioctx_t, ioctx, ioctx)
- ctf_string(oid, oid)
- ctf_integer(uint64_t, snapid, snapid)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_ioctx_selfmanaged_snap_rollback_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_ioctx_snap_list_enter,
- TP_ARGS(
- rados_ioctx_t, ioctx,
- int, maxlen),
- TP_FIELDS(
- ctf_integer_hex(rados_ioctx_t, ioctx, ioctx)
- ctf_integer(int, maxlen, maxlen)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_ioctx_snap_list_exit,
- TP_ARGS(
- int, retval,
- rados_snap_t*, snaps,
- int, num_snaps),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- ctf_sequence(rados_snap_t, snaps, snaps, uint32_t, num_snaps)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_ioctx_snap_lookup_enter,
- TP_ARGS(
- rados_ioctx_t, ioctx,
- const char*, name),
- TP_FIELDS(
- ctf_integer_hex(rados_ioctx_t, ioctx, ioctx)
- ctf_string(name, name)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_ioctx_snap_lookup_exit,
- TP_ARGS(
- int, retval,
- uint64_t, snapid),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- ctf_integer(uint64_t, snapid, snapid)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_ioctx_snap_get_name_enter,
- TP_ARGS(
- rados_ioctx_t, ioctx,
- uint64_t, snapid,
- int, maxlen),
- TP_FIELDS(
- ctf_integer_hex(rados_ioctx_t, ioctx, ioctx)
- ctf_integer(uint64_t, snapid, snapid)
- ctf_integer(int, maxlen, maxlen)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_ioctx_snap_get_name_exit,
- TP_ARGS(
- int, retval,
- const char*, name),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- ctf_string(name, name)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_ioctx_snap_get_stamp_enter,
- TP_ARGS(
- rados_ioctx_t, ioctx,
- uint64_t, snapid),
- TP_FIELDS(
- ctf_integer_hex(rados_ioctx_t, ioctx, ioctx)
- ctf_integer(uint64_t, snapid, snapid)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_ioctx_snap_get_stamp_exit,
- TP_ARGS(
- int, retval,
- time_t, time),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- ceph_ctf_time_t(time, time)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_getxattr_enter,
- TP_ARGS(
- rados_ioctx_t, ioctx,
- const char*, oid,
- const char*, aname,
- size_t, len),
- TP_FIELDS(
- ctf_integer_hex(rados_ioctx_t, ioctx, ioctx)
- ctf_string(oid, oid)
- ctf_string(aname, aname)
- ctf_integer(size_t, len, len)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_getxattr_exit,
- TP_ARGS(
- int, retval,
- const char*, value,
- int, len),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- ceph_ctf_sequence(unsigned char, value, value, uint64_t, len)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_getxattrs_enter,
- TP_ARGS(
- rados_ioctx_t, ioctx,
- const char*, oid),
- TP_FIELDS(
- ctf_integer_hex(rados_ioctx_t, ioctx, ioctx)
- ctf_string(oid, oid)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_getxattrs_exit,
- TP_ARGS(
- int, retval,
- rados_xattrs_iter_t, iter),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- ctf_integer_hex(rados_xattrs_iter_t, iter, iter)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_getxattrs_next_enter,
- TP_ARGS(
- rados_xattrs_iter_t, iter),
- TP_FIELDS(
- ctf_integer_hex(rados_xattrs_iter_t, iter, iter)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_getxattrs_next_exit,
- TP_ARGS(
- int, retval,
- const char*, aname,
- const char*, value,
- size_t, len),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- ceph_ctf_string(aname, aname)
- ceph_ctf_sequence(unsigned char, value, value, size_t, len)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_getxattrs_end_enter,
- TP_ARGS(
- rados_xattrs_iter_t, iter),
- TP_FIELDS(
- ctf_integer_hex(rados_xattrs_iter_t, iter, iter)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_getxattrs_end_exit,
- TP_ARGS(),
- TP_FIELDS()
-)
-
-TRACEPOINT_EVENT(librados, rados_setxattr_enter,
- TP_ARGS(
- rados_ioctx_t, ioctx,
- const char*, oid,
- const char*, aname,
- const char*, value,
- size_t, len),
- TP_FIELDS(
- ctf_integer_hex(rados_ioctx_t, ioctx, ioctx)
- ctf_string(oid, oid)
- ctf_string(aname, aname)
- ceph_ctf_sequence(unsigned char, value, value, size_t, len)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_setxattr_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_rmxattr_enter,
- TP_ARGS(
- rados_ioctx_t, ioctx,
- const char*, oid,
- const char*, aname),
- TP_FIELDS(
- ctf_integer_hex(rados_ioctx_t, ioctx, ioctx)
- ctf_string(oid, oid)
- ctf_string(aname, aname)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_rmxattr_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_stat_enter,
- TP_ARGS(
- rados_ioctx_t, ioctx,
- const char*, oid),
- TP_FIELDS(
- ctf_integer_hex(rados_ioctx_t, ioctx, ioctx)
- ctf_string(oid, oid)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_stat_exit,
- TP_ARGS(
- int, retval,
- uint64_t*, size,
- time_t*, mtime),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- ceph_ctf_integerp(uint64_t, size, size)
- ceph_ctf_time_tp(mtime, mtime)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_tmap_update_enter,
- TP_ARGS(
- rados_ioctx_t, ioctx,
- const char*, oid,
- const char*, cmdbuf,
- size_t, cmdbuflen),
- TP_FIELDS(
- ctf_integer_hex(rados_ioctx_t, ioctx, ioctx)
- ctf_string(oid, oid)
- ctf_sequence(unsigned char, cmdbuf, cmdbuf, size_t, CEPH_MIN(cmdbuflen, CEPH_TRACE_BUF_TRUNC_LEN))
- ctf_integer(size_t, cmdbuflen, cmdbuflen)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_tmap_update_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_tmap_put_enter,
- TP_ARGS(
- rados_ioctx_t, ioctx,
- const char*, oid,
- const char*, buf,
- size_t, buflen),
- TP_FIELDS(
- ctf_integer_hex(rados_ioctx_t, ioctx, ioctx)
- ctf_string(oid, oid)
- ctf_sequence(unsigned char, buf, buf, size_t, CEPH_MIN(buflen, CEPH_TRACE_BUF_TRUNC_LEN))
- ctf_integer(size_t, buflen, buflen)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_tmap_put_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_tmap_get_enter,
- TP_ARGS(
- rados_ioctx_t, ioctx,
- const char*, oid,
- size_t, buflen),
- TP_FIELDS(
- ctf_integer_hex(rados_ioctx_t, ioctx, ioctx)
- ctf_string(oid, oid)
- ctf_integer(size_t, buflen, buflen)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_tmap_get_exit,
- TP_ARGS(
- int, retval,
- char*, buf,
- int, len),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- ctf_sequence(unsigned char, buf, buf, uint32_t, CEPH_MIN(len, CEPH_TRACE_BUF_TRUNC_LEN))
- ctf_integer(int, len, len)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_tmap_to_omap_enter,
- TP_ARGS(
- rados_ioctx_t, ioctx,
- const char*, oid,
- char, nullok),
- TP_FIELDS(
- ctf_integer_hex(rados_ioctx_t, ioctx, ioctx)
- ctf_string(oid, oid)
- ctf_integer(char, nullok, nullok)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_tmap_to_omap_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_exec_enter,
- TP_ARGS(
- rados_ioctx_t, ioctx,
- const char*, oid,
- const char*, cls,
- const char*, method,
- const char*, inbuf,
- size_t, in_len,
- size_t, out_len),
- TP_FIELDS(
- ctf_integer_hex(rados_ioctx_t, ioctx, ioctx)
- ctf_string(oid, oid)
- ctf_string(cls, cls)
- ctf_string(method, method)
- ceph_ctf_sequence(unsigned char, inbuf, inbuf, size_t, in_len)
- ctf_integer(size_t, out_len, out_len)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_exec_exit,
- TP_ARGS(
- int, retval,
- char*, outbuf,
- size_t, len),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- ceph_ctf_sequence(unsigned char, outbuf, outbuf, size_t, len)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_objects_list_open_enter,
- TP_ARGS(
- rados_ioctx_t, ioctx),
- TP_FIELDS(
- ctf_integer_hex(rados_ioctx_t, ioctx, ioctx)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_objects_list_open_exit,
- TP_ARGS(
- int, retval,
- rados_list_ctx_t, listctx),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- ctf_integer_hex(rados_list_ctx_t, listctx, listctx)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_objects_list_close_enter,
- TP_ARGS(
- rados_list_ctx_t, listctx),
- TP_FIELDS(
- ctf_integer_hex(rados_list_ctx_t, listctx, listctx)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_objects_list_close_exit,
- TP_ARGS(),
- TP_FIELDS()
-)
-
-TRACEPOINT_EVENT(librados, rados_objects_list_seek_enter,
- TP_ARGS(
- rados_list_ctx_t, listctx,
- uint32_t, pos),
- TP_FIELDS(
- ctf_integer_hex(rados_list_ctx_t, listctx, listctx)
- ctf_integer(uint32_t, pos, pos)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_objects_list_seek_exit,
- TP_ARGS(
- uint32_t, retval),
- TP_FIELDS(
- ctf_integer(uint32_t, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_objects_list_get_pg_hash_position_enter,
- TP_ARGS(
- rados_list_ctx_t, listctx),
- TP_FIELDS(
- ctf_integer_hex(rados_list_ctx_t, listctx, listctx)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_objects_list_get_pg_hash_position_exit,
- TP_ARGS(
- uint32_t, retval),
- TP_FIELDS(
- ctf_integer(uint32_t, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_objects_list_next_enter,
- TP_ARGS(
- rados_list_ctx_t, listctx),
- TP_FIELDS(
- ctf_integer_hex(rados_list_ctx_t, listctx, listctx)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_objects_list_next_exit,
- TP_ARGS(
- int, retval,
- const char*, entry,
- char const* const*, key),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- ceph_ctf_string(entry, entry)
- ceph_ctf_stringp(key, key)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_aio_create_completion_enter,
- TP_ARGS(
- void*, cb_arg,
- rados_callback_t, cb_complete,
- rados_callback_t, cb_safe),
- TP_FIELDS(
- ctf_integer_hex(void*, cb_arg, cb_arg)
- ctf_integer_hex(rados_callback_t, cb_complete, cb_complete)
- ctf_integer_hex(rados_callback_t, cb_safe, cb_safe)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_aio_create_completion_exit,
- TP_ARGS(
- int, retval,
- rados_completion_t, completion),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- ctf_integer_hex(rados_completion_t, completion, completion)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_aio_wait_for_complete_enter,
- TP_ARGS(
- rados_completion_t, completion),
- TP_FIELDS(
- ctf_integer_hex(rados_completion_t, completion, completion)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_aio_wait_for_complete_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_aio_wait_for_safe_enter,
- TP_ARGS(
- rados_completion_t, completion),
- TP_FIELDS(
- ctf_integer_hex(rados_completion_t, completion, completion)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_aio_wait_for_safe_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_aio_is_complete_enter,
- TP_ARGS(
- rados_completion_t, completion),
- TP_FIELDS(
- ctf_integer_hex(rados_completion_t, completion, completion)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_aio_is_complete_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_aio_is_safe_enter,
- TP_ARGS(
- rados_completion_t, completion),
- TP_FIELDS(
- ctf_integer_hex(rados_completion_t, completion, completion)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_aio_is_safe_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_aio_wait_for_complete_and_cb_enter,
- TP_ARGS(
- rados_completion_t, completion),
- TP_FIELDS(
- ctf_integer_hex(rados_completion_t, completion, completion)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_aio_wait_for_complete_and_cb_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_aio_wait_for_safe_and_cb_enter,
- TP_ARGS(
- rados_completion_t, completion),
- TP_FIELDS(
- ctf_integer_hex(rados_completion_t, completion, completion)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_aio_wait_for_safe_and_cb_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_aio_is_complete_and_cb_enter,
- TP_ARGS(
- rados_completion_t, completion),
- TP_FIELDS(
- ctf_integer_hex(rados_completion_t, completion, completion)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_aio_is_complete_and_cb_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_aio_is_safe_and_cb_enter,
- TP_ARGS(
- rados_completion_t, completion),
- TP_FIELDS(
- ctf_integer_hex(rados_completion_t, completion, completion)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_aio_is_safe_and_cb_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_aio_get_return_value_enter,
- TP_ARGS(
- rados_completion_t, completion),
- TP_FIELDS(
- ctf_integer_hex(rados_completion_t, completion, completion)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_aio_get_return_value_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_aio_get_version_enter,
- TP_ARGS(
- rados_completion_t, completion),
- TP_FIELDS(
- ctf_integer_hex(rados_completion_t, completion, completion)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_aio_get_version_exit,
- TP_ARGS(
- uint64_t, retval),
- TP_FIELDS(
- ctf_integer(uint64_t, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_aio_release_enter,
- TP_ARGS(
- rados_completion_t, completion),
- TP_FIELDS(
- ctf_integer_hex(rados_completion_t, completion, completion)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_aio_release_exit,
- TP_ARGS(),
- TP_FIELDS()
-)
-
-TRACEPOINT_EVENT(librados, rados_aio_read_enter,
- TP_ARGS(
- rados_ioctx_t, ioctx,
- const char*, oid,
- rados_completion_t, completion,
- size_t, len,
- uint64_t, off),
- TP_FIELDS(
- ctf_integer_hex(rados_ioctx_t, ioctx, ioctx)
- ctf_string(oid, oid)
- ctf_integer_hex(rados_completion_t, completion, completion)
- ctf_integer(size_t, len, len)
- ctf_integer(uint64_t, off, off)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_aio_read_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_aio_write_enter,
- TP_ARGS(
- rados_ioctx_t, ioctx,
- const char*, oid,
- rados_completion_t, completion,
- const char*, buf,
- size_t, len,
- uint64_t, off),
- TP_FIELDS(
- ctf_integer_hex(rados_ioctx_t, ioctx, ioctx)
- ctf_string(oid, oid)
- ctf_integer_hex(rados_completion_t, completion, completion)
- ctf_sequence(unsigned char, buf, buf, size_t, CEPH_MIN(len, CEPH_TRACE_BUF_TRUNC_LEN))
- ctf_integer(size_t, len, len)
- ctf_integer(uint64_t, off, off)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_aio_write_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_aio_append_enter,
- TP_ARGS(
- rados_ioctx_t, ioctx,
- const char*, oid,
- rados_completion_t, completion,
- const char*, buf,
- size_t, len),
- TP_FIELDS(
- ctf_integer_hex(rados_ioctx_t, ioctx, ioctx)
- ctf_string(oid, oid)
- ctf_integer_hex(rados_completion_t, completion, completion)
- ctf_sequence(unsigned char, buf, buf, size_t, CEPH_MIN(len, CEPH_TRACE_BUF_TRUNC_LEN))
- ctf_integer(size_t, len, len)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_aio_append_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_aio_write_full_enter,
- TP_ARGS(
- rados_ioctx_t, ioctx,
- const char*, oid,
- rados_completion_t, completion,
- const char*, buf,
- size_t, len),
- TP_FIELDS(
- ctf_integer_hex(rados_ioctx_t, ioctx, ioctx)
- ctf_string(oid, oid)
- ctf_integer_hex(rados_completion_t, completion, completion)
- ctf_sequence(unsigned char, buf, buf, size_t, CEPH_MIN(len, CEPH_TRACE_BUF_TRUNC_LEN))
- ctf_integer(size_t, len, len)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_aio_write_full_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_aio_remove_enter,
- TP_ARGS(
- rados_ioctx_t, ioctx,
- const char*, oid,
- rados_completion_t, completion),
- TP_FIELDS(
- ctf_integer_hex(rados_ioctx_t, ioctx, ioctx)
- ctf_string(oid, oid)
- ctf_integer_hex(rados_completion_t, completion, completion)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_aio_remove_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_aio_flush_async_enter,
- TP_ARGS(
- rados_ioctx_t, ioctx,
- rados_completion_t, completion),
- TP_FIELDS(
- ctf_integer_hex(rados_ioctx_t, ioctx, ioctx)
- ctf_integer_hex(rados_completion_t, completion, completion)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_aio_flush_async_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_aio_flush_enter,
- TP_ARGS(
- rados_ioctx_t, ioctx),
- TP_FIELDS(
- ctf_integer_hex(rados_ioctx_t, ioctx, ioctx)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_aio_flush_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_aio_stat_enter,
- TP_ARGS(
- rados_ioctx_t, ioctx,
- const char*, oid,
- rados_completion_t, completion),
- TP_FIELDS(
- ctf_integer_hex(rados_ioctx_t, ioctx, ioctx)
- ctf_string(oid, oid)
- ctf_integer_hex(rados_completion_t, completion, completion)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_aio_stat_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_watch_enter,
- TP_ARGS(
- rados_ioctx_t, ioctx,
- const char*, oid,
- uint64_t, version,
- rados_watchcb_t, callback,
- void*, arg),
- TP_FIELDS(
- ctf_integer_hex(rados_ioctx_t, ioctx, ioctx)
- ctf_string(oid, oid)
- ctf_integer(uint64_t, version, version)
- ctf_integer_hex(rados_watchcb_t, callback, callback)
- ctf_integer_hex(void*, arg, arg)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_watch_exit,
- TP_ARGS(
- int, retval,
- uint64_t, handle),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- ctf_integer(uint64_t, handle, handle)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_unwatch_enter,
- TP_ARGS(
- rados_ioctx_t, ioctx,
- const char*, oid,
- uint64_t, handle),
- TP_FIELDS(
- ctf_integer_hex(rados_ioctx_t, ioctx, ioctx)
- ctf_string(oid, oid)
- ctf_integer(uint64_t, handle, handle)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_unwatch_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_notify_enter,
- TP_ARGS(
- rados_ioctx_t, ioctx,
- const char*, oid,
- uint64_t, version,
- const char*, buf,
- int, buf_len),
- TP_FIELDS(
- ctf_integer_hex(rados_ioctx_t, ioctx, ioctx)
- ctf_string(oid, oid)
- ctf_integer(uint64_t, version, version)
- ceph_ctf_sequence(unsigned char, buf, buf, size_t, buf_len)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_notify_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_set_alloc_hint_enter,
- TP_ARGS(
- rados_ioctx_t, ioctx,
- const char*, oid,
- uint64_t, expected_object_size,
- uint64_t, expected_write_size),
- TP_FIELDS(
- ctf_integer_hex(rados_ioctx_t, ioctx, ioctx)
- ctf_string(oid, oid)
- ctf_integer(uint64_t, expected_object_size, expected_object_size)
- ctf_integer(uint64_t, expected_write_size, expected_write_size)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_set_alloc_hint_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_lock_exclusive_enter,
- TP_ARGS(
- rados_ioctx_t, ioctx,
- const char*, oid,
- const char*, name,
- const char*, cookie,
- const char*, description,
- struct timeval*, duration,
- uint8_t, flags),
- TP_FIELDS(
- ctf_integer_hex(rados_ioctx_t, ioctx, ioctx)
- ctf_string(oid, oid)
- ceph_ctf_string(name, name)
- ceph_ctf_string(cookie, cookie)
- ceph_ctf_string(description, description)
- ceph_ctf_timevalp(duration, duration)
- ctf_integer(uint8_t, flags, flags)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_lock_exclusive_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_lock_shared_enter,
- TP_ARGS(
- rados_ioctx_t, ioctx,
- const char*, oid,
- const char*, name,
- const char*, cookie,
- const char*, tag,
- const char*, description,
- struct timeval*, duration,
- uint8_t, flags),
- TP_FIELDS(
- ctf_integer_hex(rados_ioctx_t, ioctx, ioctx)
- ctf_string(oid, oid)
- ceph_ctf_string(name, name)
- ceph_ctf_string(cookie, cookie)
- ceph_ctf_string(tag, tag)
- ceph_ctf_string(description, description)
- ceph_ctf_timevalp(duration, duration)
- ctf_integer(uint8_t, flags, flags)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_lock_shared_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_unlock_enter,
- TP_ARGS(
- rados_ioctx_t, ioctx,
- const char*, oid,
- const char*, name,
- const char*, cookie),
- TP_FIELDS(
- ctf_integer_hex(rados_ioctx_t, ioctx, ioctx)
- ctf_string(oid, oid)
- ceph_ctf_string(name, name)
- ceph_ctf_string(cookie, cookie)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_unlock_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_list_lockers_enter,
- TP_ARGS(
- rados_ioctx_t, ioctx,
- const char*, oid,
- const char*, name,
- size_t, tag_len,
- size_t, clients_len,
- size_t, cookies_len,
- size_t, addrs_len),
- TP_FIELDS(
- ctf_integer_hex(rados_ioctx_t, ioctx, ioctx)
- ctf_string(oid, oid)
- ceph_ctf_string(name, name)
- ctf_integer(size_t, tag_len, tag_len)
- ctf_integer(size_t, clients_len, clients_len)
- ctf_integer(size_t, cookies_len, cookies_len)
- ctf_integer(size_t, addrs_len, addrs_len)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_list_lockers_locker,
- TP_ARGS(
- const char*, client,
- const char*, cookie,
- const char*, addr),
- TP_FIELDS(
- ctf_string(client, client)
- ctf_string(cookie, cookie)
- ctf_string(addr, addr)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_list_lockers_exit,
- TP_ARGS(
- int, retval,
- int, exclusive,
- const char*, tag,
- size_t, tag_len,
- size_t, clients_len,
- size_t, cookies_len,
- size_t, addrs_len),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- ctf_integer(int, exclusive, exclusive)
- ctf_string(tag, tag)
- ctf_integer(size_t, tag_len, tag_len)
- ctf_integer(size_t, clients_len, clients_len)
- ctf_integer(size_t, cookies_len, cookies_len)
- ctf_integer(size_t, addrs_len, addrs_len)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_break_lock_enter,
- TP_ARGS(
- rados_ioctx_t, ioctx,
- const char*, oid,
- const char*, name,
- const char*, client,
- const char*, cookie),
- TP_FIELDS(
- ctf_integer_hex(rados_ioctx_t, ioctx, ioctx)
- ctf_string(oid, oid)
- ceph_ctf_string(name, name)
- ceph_ctf_string(client, client)
- ceph_ctf_string(cookie, cookie)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_break_lock_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_create_write_op_enter,
- TP_ARGS(),
- TP_FIELDS()
-)
-
-TRACEPOINT_EVENT(librados, rados_create_write_op_exit,
- TP_ARGS(
- rados_write_op_t, retval),
- TP_FIELDS(
- ctf_integer_hex(rados_write_op_t, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_release_write_op_enter,
- TP_ARGS(
- rados_write_op_t, op),
- TP_FIELDS(
- ctf_integer_hex(rados_write_op_t, op, op)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_release_write_op_exit,
- TP_ARGS(),
- TP_FIELDS()
-)
-
-TRACEPOINT_EVENT(librados, rados_write_op_set_flags_enter,
- TP_ARGS(
- rados_write_op_t, op,
- int, flags),
- TP_FIELDS(
- ctf_integer_hex(rados_write_op_t, op, op)
- ctf_integer(int, flags, flags)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_write_op_set_flags_exit,
- TP_ARGS(),
- TP_FIELDS()
-)
-
-TRACEPOINT_EVENT(librados, rados_write_op_assert_exists_enter,
- TP_ARGS(
- rados_write_op_t, op),
- TP_FIELDS(
- ctf_integer_hex(rados_write_op_t, op, op)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_write_op_assert_exists_exit,
- TP_ARGS(),
- TP_FIELDS()
-)
-
-TRACEPOINT_EVENT(librados, rados_write_op_cmpxattr_enter,
- TP_ARGS(
- rados_write_op_t, op,
- const char*, aname,
- uint8_t, comparison_operator,
- const char*, value,
- size_t, value_len),
- TP_FIELDS(
- ctf_integer_hex(rados_write_op_t, op, op)
- ceph_ctf_string(aname, aname)
- ctf_integer(uint8_t, comparison_operator, comparison_operator)
- ceph_ctf_sequence(unsigned char, value, value, size_t, value_len)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_write_op_cmpxattr_exit,
- TP_ARGS(),
- TP_FIELDS()
-)
-
-TRACEPOINT_EVENT(librados, rados_write_op_omap_cmp_enter,
- TP_ARGS(
- rados_write_op_t, op,
- const char*, name,
- uint8_t, comparison_operator,
- const char*, value,
- size_t, value_len,
- int*, prval),
- TP_FIELDS(
- ctf_integer_hex(rados_write_op_t, op, op)
- ceph_ctf_string(name, name)
- ctf_integer(uint8_t, comparison_operator, comparison_operator)
- ceph_ctf_sequence(unsigned char, value, value, size_t, value_len)
- ctf_integer_hex(int*, prval, prval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_write_op_omap_cmp_exit,
- TP_ARGS(),
- TP_FIELDS()
-)
-
-TRACEPOINT_EVENT(librados, rados_write_op_setxattr_enter,
- TP_ARGS(
- rados_write_op_t, op,
- const char*, name,
- const char*, value,
- size_t, value_len),
- TP_FIELDS(
- ctf_integer_hex(rados_write_op_t, op, op)
- ceph_ctf_string(name, name)
- ceph_ctf_sequence(unsigned char, value, value, size_t, value_len)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_write_op_setxattr_exit,
- TP_ARGS(),
- TP_FIELDS()
-)
-
-TRACEPOINT_EVENT(librados, rados_write_op_rmxattr_enter,
- TP_ARGS(
- rados_write_op_t, op,
- const char*, name),
- TP_FIELDS(
- ctf_integer_hex(rados_write_op_t, op, op)
- ceph_ctf_string(name, name)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_write_op_rmxattr_exit,
- TP_ARGS(),
- TP_FIELDS()
-)
-
-TRACEPOINT_EVENT(librados, rados_write_op_create_enter,
- TP_ARGS(
- rados_write_op_t, op,
- int, exclusive,
- const char*, category),
- TP_FIELDS(
- ctf_integer_hex(rados_write_op_t, op, op)
- ctf_integer(int, exclusive, exclusive)
- ceph_ctf_string(category, category)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_write_op_create_exit,
- TP_ARGS(),
- TP_FIELDS()
-)
-
-TRACEPOINT_EVENT(librados, rados_write_op_write_enter,
- TP_ARGS(
- rados_write_op_t, op,
- const char*, buffer,
- size_t, len,
- uint64_t, offset),
- TP_FIELDS(
- ctf_integer_hex(rados_write_op_t, op, op)
- ceph_ctf_sequence(unsigned char, buffer, buffer, size_t, len)
- ctf_integer(uint64_t, offset, offset)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_write_op_write_exit,
- TP_ARGS(),
- TP_FIELDS()
-)
-
-TRACEPOINT_EVENT(librados, rados_write_op_write_full_enter,
- TP_ARGS(
- rados_write_op_t, op,
- const char*, buffer,
- size_t, len),
- TP_FIELDS(
- ctf_integer_hex(rados_write_op_t, op, op)
- ceph_ctf_sequence(unsigned char, buffer, buffer, size_t, len)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_write_op_write_full_exit,
- TP_ARGS(),
- TP_FIELDS()
-)
-
-TRACEPOINT_EVENT(librados, rados_write_op_append_enter,
- TP_ARGS(
- rados_write_op_t, op,
- const char*, buffer,
- size_t, len),
- TP_FIELDS(
- ctf_integer_hex(rados_write_op_t, op, op)
- ceph_ctf_sequence(unsigned char, buffer, buffer, size_t, len)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_write_op_append_exit,
- TP_ARGS(),
- TP_FIELDS()
-)
-
-TRACEPOINT_EVENT(librados, rados_write_op_remove_enter,
- TP_ARGS(
- rados_write_op_t, op),
- TP_FIELDS(
- ctf_integer_hex(rados_write_op_t, op, op)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_write_op_remove_exit,
- TP_ARGS(),
- TP_FIELDS()
-)
-
-TRACEPOINT_EVENT(librados, rados_write_op_truncate_enter,
- TP_ARGS(
- rados_write_op_t, op,
- uint64_t, offset),
- TP_FIELDS(
- ctf_integer_hex(rados_write_op_t, op, op)
- ctf_integer(uint64_t, offset, offset)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_write_op_truncate_exit,
- TP_ARGS(),
- TP_FIELDS()
-)
-
-TRACEPOINT_EVENT(librados, rados_write_op_zero_enter,
- TP_ARGS(
- rados_write_op_t, op,
- uint64_t, offset,
- uint64_t, len),
- TP_FIELDS(
- ctf_integer_hex(rados_write_op_t, op, op)
- ctf_integer(uint64_t, offset, offset)
- ctf_integer(uint64_t, len, len)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_write_op_zero_exit,
- TP_ARGS(),
- TP_FIELDS()
-)
-
-TRACEPOINT_EVENT(librados, rados_write_op_exec_enter,
- TP_ARGS(
- rados_write_op_t, op,
- const char*, cls,
- const char*, method,
- const char*, in_buf,
- size_t, in_len,
- int*, prval),
- TP_FIELDS(
- ctf_integer_hex(rados_write_op_t, op, op)
- ceph_ctf_string(cls, cls)
- ceph_ctf_string(method, method)
- ceph_ctf_sequence(unsigned char, in_buf, in_buf, size_t, in_len)
- ctf_integer_hex(int*, prval, prval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_write_op_exec_exit,
- TP_ARGS(),
- TP_FIELDS()
-)
-
-TRACEPOINT_EVENT(librados, rados_write_op_omap_set_enter,
- TP_ARGS(
- rados_write_op_t, op,
- size_t, num),
- TP_FIELDS(
- ctf_integer_hex(rados_write_op_t, op, op)
- ctf_integer(size_t, num, num)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_write_op_omap_set_entry,
- TP_ARGS(
- const char*, key,
- const char*, value,
- size_t, value_len),
- TP_FIELDS(
- ceph_ctf_string(key, key)
- ceph_ctf_sequence(unsigned char, value, value, size_t, value_len)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_write_op_omap_set_exit,
- TP_ARGS(),
- TP_FIELDS()
-)
-
-TRACEPOINT_EVENT(librados, rados_write_op_omap_rm_keys_enter,
- TP_ARGS(
- rados_write_op_t, op,
- size_t, num),
- TP_FIELDS(
- ctf_integer_hex(rados_write_op_t, op, op)
- ctf_integer(size_t, num, num)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_write_op_omap_rm_keys_entry,
- TP_ARGS(
- const char*, key),
- TP_FIELDS(
- ceph_ctf_string(key, key)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_write_op_omap_rm_keys_exit,
- TP_ARGS(),
- TP_FIELDS()
-)
-
-TRACEPOINT_EVENT(librados, rados_write_op_omap_clear_enter,
- TP_ARGS(
- rados_write_op_t, op),
- TP_FIELDS(
- ctf_integer_hex(rados_write_op_t, op, op)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_write_op_omap_clear_exit,
- TP_ARGS(),
- TP_FIELDS()
-)
-
-TRACEPOINT_EVENT(librados, rados_write_op_set_alloc_hint_enter,
- TP_ARGS(
- rados_write_op_t, op,
- uint64_t, expected_object_size,
- uint64_t, expected_write_size),
- TP_FIELDS(
- ctf_integer_hex(rados_write_op_t, op, op)
- ctf_integer(uint64_t, expected_object_size, expected_object_size)
- ctf_integer(uint64_t, expected_write_size, expected_write_size)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_write_op_set_alloc_hint_exit,
- TP_ARGS(),
- TP_FIELDS()
-)
-
-TRACEPOINT_EVENT(librados, rados_write_op_operate_enter,
- TP_ARGS(
- rados_write_op_t, op,
- rados_ioctx_t, ioctx,
- const char*, oid,
- time_t*, mtime,
- int, flags),
- TP_FIELDS(
- ctf_integer_hex(rados_write_op_t, op, op)
- ctf_integer_hex(rados_ioctx_t, ioctx, ioctx)
- ctf_string(oid, oid)
- ceph_ctf_time_tp(mtime, mtime)
- ctf_integer_hex(int, flags, flags)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_write_op_operate_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_aio_write_op_operate_enter,
- TP_ARGS(
- rados_write_op_t, op,
- rados_ioctx_t, ioctx,
- rados_completion_t, completion,
- const char*, oid,
- time_t*, mtime,
- int, flags),
- TP_FIELDS(
- ctf_integer_hex(rados_write_op_t, op, op)
- ctf_integer_hex(rados_ioctx_t, ioctx, ioctx)
- ctf_integer_hex(rados_completion_t, completion, completion)
- ctf_string(oid, oid)
- ceph_ctf_time_tp(mtime, mtime)
- ctf_integer_hex(int, flags, flags)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_aio_write_op_operate_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_create_read_op_enter,
- TP_ARGS(),
- TP_FIELDS()
-)
-
-TRACEPOINT_EVENT(librados, rados_create_read_op_exit,
- TP_ARGS(
- rados_read_op_t, retval),
- TP_FIELDS(
- ctf_integer_hex(rados_read_op_t, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_release_read_op_enter,
- TP_ARGS(
- rados_read_op_t, read_op),
- TP_FIELDS(
- ctf_integer_hex(rados_read_op_t, read_op, read_op)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_release_read_op_exit,
- TP_ARGS(),
- TP_FIELDS()
-)
-
-TRACEPOINT_EVENT(librados, rados_read_op_set_flags_enter,
- TP_ARGS(
- rados_read_op_t, read_op,
- int, flags),
- TP_FIELDS(
- ctf_integer_hex(rados_read_op_t, read_op, read_op)
- ctf_integer_hex(int, flags, flags)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_read_op_set_flags_exit,
- TP_ARGS(),
- TP_FIELDS()
-)
-
-TRACEPOINT_EVENT(librados, rados_read_op_assert_exists_enter,
- TP_ARGS(
- rados_read_op_t, read_op),
- TP_FIELDS(
- ctf_integer_hex(rados_read_op_t, read_op, read_op)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_read_op_assert_exists_exit,
- TP_ARGS(),
- TP_FIELDS()
-)
-
-TRACEPOINT_EVENT(librados, rados_read_op_cmpxattr_enter,
- TP_ARGS(
- rados_read_op_t, read_op,
- const char*, name,
- uint8_t, comparison_operator,
- const char*, value,
- size_t, value_len),
- TP_FIELDS(
- ctf_integer_hex(rados_read_op_t, read_op, read_op)
- ctf_string(name, name)
- ctf_integer(uint8_t, comparison_operator, comparison_operator)
- ceph_ctf_sequence(unsigned char, value, value, size_t, value_len)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_read_op_cmpxattr_exit,
- TP_ARGS(),
- TP_FIELDS()
-)
-
-TRACEPOINT_EVENT(librados, rados_read_op_omap_cmp_enter,
- TP_ARGS(
- rados_read_op_t, read_op,
- const char*, name,
- uint8_t, comparison_operator,
- const char*, value,
- size_t, value_len,
- void*, prval),
- TP_FIELDS(
- ctf_integer_hex(rados_read_op_t, read_op, read_op)
- ctf_string(name, name)
- ctf_integer(uint8_t, comparison_operator, comparison_operator)
- ceph_ctf_sequence(unsigned char, value, value, size_t, value_len)
- ctf_integer_hex(void*, prval, prval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_read_op_omap_cmp_exit,
- TP_ARGS(),
- TP_FIELDS()
-)
-
-TRACEPOINT_EVENT(librados, rados_read_op_stat_enter,
- TP_ARGS(
- rados_read_op_t, read_op,
- void*, psize,
- void*, pmtime,
- void*, prval),
- TP_FIELDS(
- ctf_integer_hex(rados_read_op_t, read_op, read_op)
- ctf_integer_hex(void*, psize, psize)
- ctf_integer_hex(void*, pmtime, pmtime)
- ctf_integer_hex(void*, prval, prval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_read_op_stat_exit,
- TP_ARGS(),
- TP_FIELDS()
-)
-
-TRACEPOINT_EVENT(librados, rados_read_op_read_enter,
- TP_ARGS(
- rados_read_op_t, read_op,
- uint64_t, offset,
- size_t, len,
- char*, buf,
- size_t*, bytes_read,
- int*, prval),
- TP_FIELDS(
- ctf_integer_hex(rados_read_op_t, read_op, read_op)
- ctf_integer(uint64_t, offset, offset)
- ctf_integer(size_t, len, len)
- ctf_integer_hex(void*, buf, buf)
- ctf_integer_hex(void*, bytes_read, bytes_read)
- ctf_integer_hex(void*, prval, prval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_read_op_read_exit,
- TP_ARGS(),
- TP_FIELDS()
-)
-
-TRACEPOINT_EVENT(librados, rados_read_op_exec_enter,
- TP_ARGS(
- rados_read_op_t, read_op,
- const char*, cls,
- const char*, method,
- const char*, in_buf,
- size_t, in_len,
- char**, out_buf,
- size_t*, out_len,
- int*, prval),
- TP_FIELDS(
- ctf_integer_hex(rados_read_op_t, read_op, read_op)
- ceph_ctf_string(cls, cls)
- ceph_ctf_string(method, method)
- ceph_ctf_sequence(unsigned char, in_buf, in_buf, size_t, in_len)
- ctf_integer_hex(void*, out_buf, out_buf)
- ctf_integer_hex(void*, out_len, out_len)
- ctf_integer_hex(void*, prval, prval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_read_op_exec_exit,
- TP_ARGS(),
- TP_FIELDS()
-)
-
-TRACEPOINT_EVENT(librados, rados_read_op_exec_user_buf_enter,
- TP_ARGS(
- rados_read_op_t, read_op,
- const char*, cls,
- const char*, method,
- const char*, in_buf,
- size_t, in_len,
- char*, out_buf,
- size_t, out_len,
- size_t*, used_len,
- int*, prval),
- TP_FIELDS(
- ctf_integer_hex(rados_read_op_t, read_op, read_op)
- ceph_ctf_string(cls, cls)
- ceph_ctf_string(method, method)
- ceph_ctf_sequence(unsigned char, in_buf, in_buf, size_t, in_len)
- ctf_integer_hex(void*, out_buf, out_buf)
- ctf_integer(size_t, out_len, out_len)
- ctf_integer_hex(void*, used_len, used_len)
- ctf_integer_hex(void*, prval, prval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_read_op_exec_user_buf_exit,
- TP_ARGS(),
- TP_FIELDS()
-)
-
-TRACEPOINT_EVENT(librados, rados_read_op_getxattrs_enter,
- TP_ARGS(
- rados_read_op_t, read_op,
- int*, prval),
- TP_FIELDS(
- ctf_integer_hex(rados_read_op_t, read_op, read_op)
- ctf_integer_hex(void*, prval, prval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_read_op_getxattrs_exit,
- TP_ARGS(
- rados_xattrs_iter_t, iter),
- TP_FIELDS(
- ctf_integer_hex(rados_xattrs_iter_t, iter, iter)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_read_op_omap_get_vals_enter,
- TP_ARGS(
- rados_read_op_t, read_op,
- const char*, start_after,
- const char*, filter_prefix,
- uint64_t, max_return,
- int*, prval),
- TP_FIELDS(
- ctf_integer_hex(rados_read_op_t, read_op, read_op)
- ceph_ctf_string(start_after, start_after)
- ceph_ctf_string(filter_prefix, filter_prefix)
- ctf_integer(uint64_t, max_return, max_return)
- ctf_integer_hex(void*, prval, prval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_read_op_omap_get_vals_exit,
- TP_ARGS(
- rados_omap_iter_t, iter),
- TP_FIELDS(
- ctf_integer_hex(rados_omap_iter_t, iter, iter)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_read_op_omap_get_keys_enter,
- TP_ARGS(
- rados_read_op_t, read_op,
- const char*, start_after,
- uint64_t, max_return,
- int*, prval),
- TP_FIELDS(
- ctf_integer_hex(rados_read_op_t, read_op, read_op)
- ceph_ctf_string(start_after, start_after)
- ctf_integer(uint64_t, max_return, max_return)
- ctf_integer_hex(void*, prval, prval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_read_op_omap_get_keys_exit,
- TP_ARGS(
- rados_omap_iter_t, iter),
- TP_FIELDS(
- ctf_integer_hex(rados_omap_iter_t, iter, iter)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_read_op_omap_get_vals_by_keys_enter,
- TP_ARGS(
- rados_read_op_t, read_op,
- char const* const*, keys,
- size_t, keys_len,
- rados_omap_iter_t*, piter,
- int*, prval),
- TP_FIELDS(
- ctf_integer_hex(rados_read_op_t, read_op, read_op)
- ctf_integer_hex(void*, keys, keys)
- ctf_integer(size_t, keys_len, keys_len)
- ctf_integer_hex(void*, piter, piter)
- ctf_integer_hex(void*, prval, prval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_read_op_omap_get_vals_by_keys_exit,
- TP_ARGS(
- rados_omap_iter_t, iter),
- TP_FIELDS(
- ctf_integer_hex(rados_omap_iter_t, iter, iter)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_omap_get_next_enter,
- TP_ARGS(
- rados_omap_iter_t, iter),
- TP_FIELDS(
- ctf_integer_hex(rados_omap_iter_t, iter, iter)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_omap_get_next_exit,
- TP_ARGS(
- int, retval,
- char**, key,
- char**, val,
- size_t*, len),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- ceph_ctf_stringp(key, key)
- ceph_ctf_sequencep(unsigned char, val, val, size_t, len)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_omap_get_end_enter,
- TP_ARGS(
- rados_omap_iter_t, iter),
- TP_FIELDS(
- ctf_integer_hex(rados_omap_iter_t, iter, iter)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_omap_get_end_exit,
- TP_ARGS(),
- TP_FIELDS()
-)
-
-TRACEPOINT_EVENT(librados, rados_read_op_operate_enter,
- TP_ARGS(
- rados_read_op_t, read_op,
- rados_ioctx_t, ctx,
- const char*, oid,
- int, flags),
- TP_FIELDS(
- ctf_integer_hex(rados_read_op_t, read_op, read_op)
- ctf_integer_hex(rados_ioctx_t, ctx, ctx)
- ctf_string(oid, oid)
- ctf_integer(int, flags, flags)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_read_op_operate_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_aio_read_op_operate_enter,
- TP_ARGS(
- rados_read_op_t, read_op,
- rados_ioctx_t, ctx,
- rados_completion_t, completion,
- const char*, oid,
- int, flags),
- TP_FIELDS(
- ctf_integer_hex(rados_read_op_t, read_op, read_op)
- ctf_integer_hex(rados_ioctx_t, ctx, ctx)
- ctf_integer_hex(rados_completion_t, completion, completion)
- ceph_ctf_string(oid, oid)
- ctf_integer(int, flags, flags)
- )
-)
-
-TRACEPOINT_EVENT(librados, rados_aio_read_op_operate_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
+++ /dev/null
-#include "tracing/tracing-common.h"
-#include "include/rbd/librbd.h"
-
-TRACEPOINT_EVENT(librbd, read_enter,
- TP_ARGS(
- void*, imagectx,
- const char*, name,
- const char*, snap_name,
- char, read_only,
- uint64_t, offset,
- uint64_t, length),
- TP_FIELDS(
- ctf_integer_hex(void*, imagectx, imagectx)
- ctf_string(name, name)
- ctf_string(snap_name, snap_name)
- ctf_integer(char, read_only, read_only)
- ctf_integer(uint64_t, offset, offset)
- ctf_integer(uint64_t, length, length)
- )
-)
-
-TRACEPOINT_EVENT(librbd, read_exit,
- TP_ARGS(
- ssize_t, retval),
- TP_FIELDS(
- ctf_integer(ssize_t, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librbd, write_enter,
- TP_ARGS(
- void*, imagectx,
- const char*, name,
- const char*, snap_name,
- char, read_only,
- uint64_t, off,
- size_t, len,
- const char*, buf),
- TP_FIELDS(
- ctf_integer_hex(void*, imagectx, imagectx)
- ctf_string(name, name)
- ctf_string(snap_name, snap_name)
- ctf_integer(char, read_only, read_only)
- ctf_integer(uint64_t, off, off)
- ceph_ctf_sequence(unsigned char, buf, buf, size_t, len)
- )
-)
-
-TRACEPOINT_EVENT(librbd, write_exit,
- TP_ARGS(
- ssize_t, retval),
- TP_FIELDS(
- ctf_integer(ssize_t, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librbd, open_image_enter,
- TP_ARGS(
- void*, imagectx,
- const char*, name,
- const char*, id,
- const char*, snap_name,
- int, read_only),
- TP_FIELDS(
- ctf_integer_hex(void*, imagectx, imagectx)
- ctf_string(name, name)
- ctf_string(id, id)
- ctf_string(snap_name, snap_name)
- ctf_integer(uint8_t, read_only, read_only ? 1 : 0)
- )
-)
-
-TRACEPOINT_EVENT(librbd, open_image_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librbd, close_image_enter,
- TP_ARGS(
- void*, imagectx,
- const char*, name,
- const char*, id),
- TP_FIELDS(
- ctf_integer_hex(void*, imagectx, imagectx)
- ctf_string(name, name)
- ctf_string(id, id)
- )
-)
-
-TRACEPOINT_EVENT(librbd, close_image_exit,
- TP_ARGS(),
- TP_FIELDS()
-)
-
-TRACEPOINT_EVENT(librbd, create_enter,
- TP_ARGS(
- const char*, pool_name,
- int64_t, id,
- const char*, imgname,
- uint64_t, size,
- int, order),
- TP_FIELDS(
- ctf_string(pool_name, pool_name)
- ctf_integer(int64_t, id, id)
- ctf_string(imgname, imgname)
- ctf_integer(uint64_t, size, size)
- ctf_integer(int, order, order)
- )
-)
-
-TRACEPOINT_EVENT(librbd, create_exit,
- TP_ARGS(
- int, retval,
- int, order),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- ctf_integer(int, order, order)
- )
-)
-
-TRACEPOINT_EVENT(librbd, create2_enter,
- TP_ARGS(
- const char*, pool_name,
- int64_t, id,
- const char*, imgname,
- uint64_t, size,
- uint64_t, features,
- int, order),
- TP_FIELDS(
- ctf_string(pool_name, pool_name)
- ctf_integer(int64_t, id, id)
- ctf_string(imgname, imgname)
- ctf_integer(uint64_t, size, size)
- ctf_integer(uint64_t, features, features)
- ctf_integer(int, order, order)
- )
-)
-
-TRACEPOINT_EVENT(librbd, create2_exit,
- TP_ARGS(
- int, retval,
- int, order),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- ctf_integer(int, order, order)
- )
-)
-
-TRACEPOINT_EVENT(librbd, create3_enter,
- TP_ARGS(
- const char*, pool_name,
- int64_t, id,
- const char*, imgname,
- uint64_t, size,
- uint64_t, features,
- int, order,
- uint64_t, stripe_unit,
- uint64_t, stripe_count),
- TP_FIELDS(
- ctf_string(pool_name, pool_name)
- ctf_integer(int64_t, id, id)
- ctf_string(imgname, imgname)
- ctf_integer(uint64_t, size, size)
- ctf_integer(uint64_t, features, features)
- ctf_integer(int, order, order)
- ctf_integer(uint64_t, stripe_unit, stripe_unit)
- ctf_integer(uint64_t, stripe_count, stripe_count)
- )
-)
-
-TRACEPOINT_EVENT(librbd, create3_exit,
- TP_ARGS(
- int, retval,
- int, order),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- ctf_integer(int, order, order)
- )
-)
-
-TRACEPOINT_EVENT(librbd, remove_enter,
- TP_ARGS(
- const char*, pool_name,
- int64_t, id,
- const char*, imgname),
- TP_FIELDS(
- ctf_string(pool_name, pool_name)
- ctf_integer(int64_t, id, id)
- ctf_string(imgname, imgname)
- )
-)
-
-TRACEPOINT_EVENT(librbd, remove_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librbd, aio_write_enter,
- TP_ARGS(
- void*, imagectx,
- const char*, name,
- const char*, snap_name,
- char, read_only,
- uint64_t, off,
- size_t, len,
- const char*, buf,
- const void*, completion),
- TP_FIELDS(
- ctf_integer_hex(void*, imagectx, imagectx)
- ctf_string(name, name)
- ctf_string(snap_name, snap_name)
- ctf_integer(char, read_only, read_only)
- ctf_integer(uint64_t, off, off)
- ctf_integer(size_t, len, len)
- ceph_ctf_sequence(unsigned char, buf, buf, size_t, len)
- ctf_integer_hex(const void*, completion, completion)
- )
-)
-
-TRACEPOINT_EVENT(librbd, aio_write_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librbd, aio_read_enter,
- TP_ARGS(
- void*, imagectx,
- const char*, name,
- const char*, snap_name,
- char, read_only,
- uint64_t, offset,
- uint64_t, length,
- const char*, buf,
- const void*, completion),
- TP_FIELDS(
- ctf_integer_hex(void*, imagectx, imagectx)
- ctf_string(name, name)
- ctf_string(snap_name, snap_name)
- ctf_integer(char, read_only, read_only)
- ctf_integer(uint64_t, offset, offset)
- ctf_integer(uint64_t, length, length)
- ctf_integer_hex(const void*, completion, completion)
- )
-)
-
-TRACEPOINT_EVENT(librbd, aio_read_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librbd, aio_discard_enter,
- TP_ARGS(
- void*, imagectx,
- const char*, name,
- const char*, snap_name,
- char, read_only,
- uint64_t, off,
- uint64_t, len,
- void*, completion),
- TP_FIELDS(
- ctf_integer_hex(void*, imagectx, imagectx)
- ctf_string(name, name)
- ctf_string(snap_name, snap_name)
- ctf_integer(char, read_only, read_only)
- ctf_integer(uint64_t, off, off)
- ctf_integer(uint64_t, len, len)
- ctf_integer_hex(void*, completion, completion)
- )
-)
-
-TRACEPOINT_EVENT(librbd, aio_discard_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librbd, invalidate_cache_enter,
- TP_ARGS(
- void*, imagectx,
- const char*, name,
- const char*, snap_name,
- char, read_only),
- TP_FIELDS(
- ctf_integer_hex(void*, imagectx, imagectx)
- ctf_string(name, name)
- ctf_string(snap_name, snap_name)
- ctf_integer(char, read_only, read_only)
- )
-)
-
-TRACEPOINT_EVENT(librbd, invalidate_cache_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librbd, flush_enter,
- TP_ARGS(
- void*, imagectx,
- const char*, name,
- const char*, snap_name,
- char, read_only),
- TP_FIELDS(
- ctf_integer_hex(void*, imagectx, imagectx)
- ctf_string(name, name)
- ctf_string(snap_name, snap_name)
- ctf_integer(char, read_only, read_only)
- )
-)
-
-TRACEPOINT_EVENT(librbd, flush_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librbd, aio_flush_enter,
- TP_ARGS(
- void*, imagectx,
- const char*, name,
- const char*, snap_name,
- char, read_only,
- const void*, completion),
- TP_FIELDS(
- ctf_integer_hex(void*, imagectx, imagectx)
- ctf_string(name, name)
- ctf_string(snap_name, snap_name)
- ctf_integer(char, read_only, read_only)
- ctf_integer_hex(const void*, completion, completion)
- )
-)
-
-TRACEPOINT_EVENT(librbd, aio_flush_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librbd, copy_enter,
- TP_ARGS(
- void*, src_imagectx,
- const char*, src_name,
- const char*, src_snap_name,
- char, src_read_only,
- const char*, dst_name),
- TP_FIELDS(
- ctf_integer_hex(void*, src_imagectx, src_imagectx)
- ctf_string(src_name, src_name)
- ctf_string(src_snap_name, src_snap_name)
- ctf_integer(char, src_read_only, src_read_only)
- ctf_string(dst_name, dst_name)
- )
-)
-
-TRACEPOINT_EVENT(librbd, copy_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librbd, copy2_enter,
- TP_ARGS(
- void*, src_imagectx,
- const char*, src_name,
- const char*, src_snap_name,
- char, src_read_only,
- void*, dst_imagectx,
- const char*, dst_name,
- const char*, dst_snap_name,
- char, dst_read_only),
- TP_FIELDS(
- ctf_integer_hex(void*, src_imagectx, src_imagectx)
- ctf_string(src_name, src_name)
- ctf_string(src_snap_name, src_snap_name)
- ctf_integer(char, src_read_only, src_read_only)
- ctf_integer_hex(void*, dst_imagectx, dst_imagectx)
- ctf_string(dst_name, dst_name)
- ctf_string(dst_snap_name, dst_snap_name)
- ctf_integer(char, dst_read_only, dst_read_only)
- )
-)
-
-TRACEPOINT_EVENT(librbd, copy2_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librbd, resize_enter,
- TP_ARGS(
- void*, imagectx,
- const char*, name,
- const char*, snap_name,
- char, read_only,
- uint64_t, size),
- TP_FIELDS(
- ctf_integer_hex(void*, imagectx, imagectx)
- ctf_string(name, name)
- ctf_string(snap_name, snap_name)
- ctf_integer(char, read_only, read_only)
- ctf_integer(uint64_t, size, size)
- )
-)
-
-TRACEPOINT_EVENT(librbd, resize_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librbd, rename_enter,
- TP_ARGS(
- const char*, pool_name,
- uint64_t, id,
- const char*, srcname,
- const char*, dstname),
- TP_FIELDS(
- ctf_string(pool_name, pool_name)
- ctf_integer(uint64_t, id, id)
- ctf_string(srcname, srcname)
- ctf_string(dstname, dstname)
- )
-)
-
-TRACEPOINT_EVENT(librbd, rename_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librbd, discard_enter,
- TP_ARGS(
- void*, imagectx,
- const char*, name,
- const char*, snap_name,
- char, read_only,
- uint64_t, off,
- uint64_t, len),
- TP_FIELDS(
- ctf_integer_hex(void*, imagectx, imagectx)
- ctf_string(name, name)
- ctf_string(snap_name, snap_name)
- ctf_integer(char, read_only, read_only)
- ctf_integer(uint64_t, off, off)
- ctf_integer(uint64_t, len, len)
- )
-)
-
-TRACEPOINT_EVENT(librbd, discard_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librbd, aio_is_complete_enter,
- TP_ARGS(
- rbd_completion_t, completion),
- TP_FIELDS(
- ctf_integer_hex(rbd_completion_t, completion, completion)
- )
-)
-
-TRACEPOINT_EVENT(librbd, aio_is_complete_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librbd, aio_get_return_value_enter,
- TP_ARGS(
- rbd_completion_t, completion),
- TP_FIELDS(
- ctf_integer_hex(rbd_completion_t, completion, completion)
- )
-)
-
-TRACEPOINT_EVENT(librbd, aio_get_return_value_exit,
- TP_ARGS(
- ssize_t, retval),
- TP_FIELDS(
- ctf_integer(ssize_t, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librbd, aio_wait_for_complete_enter,
- TP_ARGS(
- rbd_completion_t, completion),
- TP_FIELDS(
- ctf_integer_hex(rbd_completion_t, completion, completion)
- )
-)
-
-TRACEPOINT_EVENT(librbd, aio_wait_for_complete_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(librbd, aio_complete_enter,
- TP_ARGS(
- rbd_completion_t, completion,
- ssize_t, rval),
- TP_FIELDS(
- ctf_integer_hex(rbd_completion_t, completion, completion)
- ctf_integer(ssize_t, rval, rval)
- )
-)
-
-TRACEPOINT_EVENT(librbd, aio_complete_exit,
- TP_ARGS(),
- TP_FIELDS()
-)
+++ /dev/null
-TRACEPOINT_EVENT(objectstore, exists_enter,
- TP_ARGS(
- const char *, coll_name),
- TP_FIELDS(
- ctf_string(coll_name, coll_name)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, exists_exit,
- TP_ARGS(
- uint8_t, retval),
- TP_FIELDS(
- ctf_integer(uint8_t, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, stat_enter,
- TP_ARGS(
- const char *, coll_name),
- TP_FIELDS(
- ctf_string(coll_name, coll_name)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, stat_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, read_enter,
- TP_ARGS(
- const char *, coll_name,
- uint64_t, offset,
- size_t, len),
- TP_FIELDS(
- ctf_string(coll_name, coll_name)
- ctf_integer(uint64_t, offset, offset)
- ctf_integer(size_t, len, len)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, read_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, fiemap_enter,
- TP_ARGS(
- const char *, coll_name,
- uint64_t, offset,
- size_t, len),
- TP_FIELDS(
- ctf_string(coll_name, coll_name)
- ctf_integer(uint64_t, offset, offset)
- ctf_integer(size_t, len, len)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, fiemap_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, getattr_enter,
- TP_ARGS(
- const char *, coll_name),
- TP_FIELDS(
- ctf_string(coll_name, coll_name)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, getattr_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, getattrs_enter,
- TP_ARGS(
- const char *, coll_name),
- TP_FIELDS(
- ctf_string(coll_name, coll_name)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, getattrs_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, list_collections_enter,
- TP_ARGS(),
- TP_FIELDS()
-)
-
-TRACEPOINT_EVENT(objectstore, list_collections_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, collection_stat_enter,
- TP_ARGS(
- const char *, coll_name),
- TP_FIELDS(
- ctf_string(coll_name, coll_name)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, collection_stat_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, collection_exists_enter,
- TP_ARGS(
- const char *, coll_name),
- TP_FIELDS(
- ctf_string(coll_name, coll_name)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, collection_exists_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, collection_empty_enter,
- TP_ARGS(
- const char *, coll_name),
- TP_FIELDS(
- ctf_string(coll_name, coll_name)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, collection_empty_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, collection_list_range_enter,
- TP_ARGS(
- const char *, coll_name),
- TP_FIELDS(
- ctf_string(coll_name, coll_name)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, collection_list_range_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, collection_list_partial_enter,
- TP_ARGS(
- const char *, coll_name),
- TP_FIELDS(
- ctf_string(coll_name, coll_name)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, collection_list_partial_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, collection_list_enter,
- TP_ARGS(
- const char *, coll_name),
- TP_FIELDS(
- ctf_string(coll_name, coll_name)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, collection_list_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, omap_get_enter,
- TP_ARGS(
- const char *, coll_name),
- TP_FIELDS(
- ctf_string(coll_name, coll_name)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, omap_get_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, omap_get_header_enter,
- TP_ARGS(
- const char *, coll_name),
- TP_FIELDS(
- ctf_string(coll_name, coll_name)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, omap_get_header_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, omap_get_keys_enter,
- TP_ARGS(
- const char *, coll_name),
- TP_FIELDS(
- ctf_string(coll_name, coll_name)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, omap_get_keys_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, omap_get_values_enter,
- TP_ARGS(
- const char *, coll_name),
- TP_FIELDS(
- ctf_string(coll_name, coll_name)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, omap_get_values_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, omap_check_keys_enter,
- TP_ARGS(
- const char *, coll_name),
- TP_FIELDS(
- ctf_string(coll_name, coll_name)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, omap_check_keys_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, get_omap_iterator,
- TP_ARGS(
- const char *, coll_name),
- TP_FIELDS(
- ctf_string(coll_name, coll_name)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, write_enter,
- TP_ARGS(
- const char *, osr_name,
- uint64_t, offset,
- uint64_t, length),
- TP_FIELDS(
- ctf_string(osr_name, osr_name)
- ctf_integer(uint64_t, offset, offset)
- ctf_integer(uint64_t, length, length)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, write_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, setallochint_enter,
- TP_ARGS(
- const char *, osr_name),
- TP_FIELDS(
- ctf_string(osr_name, osr_name)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, setallochint_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, split_coll_enter,
- TP_ARGS(
- const char *, osr_name),
- TP_FIELDS(
- ctf_string(osr_name, osr_name)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, split_coll_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, split_coll2_enter,
- TP_ARGS(
- const char *, osr_name),
- TP_FIELDS(
- ctf_string(osr_name, osr_name)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, split_coll2_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, omap_setheader_enter,
- TP_ARGS(
- const char *, osr_name),
- TP_FIELDS(
- ctf_string(osr_name, osr_name)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, omap_setheader_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, omap_rmkeyrange_enter,
- TP_ARGS(
- const char *, osr_name),
- TP_FIELDS(
- ctf_string(osr_name, osr_name)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, omap_rmkeyrange_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, omap_rmkeys_enter,
- TP_ARGS(
- const char *, osr_name),
- TP_FIELDS(
- ctf_string(osr_name, osr_name)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, omap_rmkeys_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, omap_setkeys_enter,
- TP_ARGS(
- const char *, osr_name),
- TP_FIELDS(
- ctf_string(osr_name, osr_name)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, omap_setkeys_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, omap_clear_enter,
- TP_ARGS(
- const char *, osr_name),
- TP_FIELDS(
- ctf_string(osr_name, osr_name)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, omap_clear_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, coll_rename_enter,
- TP_ARGS(
- const char *, osr_name),
- TP_FIELDS(
- ctf_string(osr_name, osr_name)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, coll_rename_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, startsync_enter,
- TP_ARGS(
- const char *, osr_name),
- TP_FIELDS(
- ctf_string(osr_name, osr_name)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, startsync_exit,
- TP_ARGS(),
- TP_FIELDS()
-)
-
-TRACEPOINT_EVENT(objectstore, coll_rmattr_enter,
- TP_ARGS(
- const char *, osr_name),
- TP_FIELDS(
- ctf_string(osr_name, osr_name)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, coll_rmattr_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, coll_setattr_enter,
- TP_ARGS(
- const char *, osr_name),
- TP_FIELDS(
- ctf_string(osr_name, osr_name)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, coll_setattr_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, coll_move_enter,
- TP_ARGS(),
- TP_FIELDS()
-)
-
-TRACEPOINT_EVENT(objectstore, coll_move_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, coll_move_rename_enter,
- TP_ARGS(),
- TP_FIELDS()
-)
-
-TRACEPOINT_EVENT(objectstore, coll_move_rename_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, coll_remove_enter,
- TP_ARGS(
- const char *, osr_name),
- TP_FIELDS(
- ctf_string(osr_name, osr_name)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, coll_remove_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, coll_add_enter,
- TP_ARGS(),
- TP_FIELDS()
-)
-
-TRACEPOINT_EVENT(objectstore, coll_add_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, rmcoll_enter,
- TP_ARGS(
- const char *, osr_name),
- TP_FIELDS(
- ctf_string(osr_name, osr_name)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, rmcoll_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, mkcoll_enter,
- TP_ARGS(
- const char *, osr_name),
- TP_FIELDS(
- ctf_string(osr_name, osr_name)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, mkcoll_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, clone_range2_enter,
- TP_ARGS(
- const char *, osr_name,
- uint64_t, length),
- TP_FIELDS(
- ctf_string(osr_name, osr_name)
- ctf_integer(uint64_t, length, length)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, clone_range2_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, clone_range_enter,
- TP_ARGS(
- const char *, osr_name,
- uint64_t, length),
- TP_FIELDS(
- ctf_string(osr_name, osr_name)
- ctf_integer(uint64_t, length, length)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, clone_range_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, clone_enter,
- TP_ARGS(
- const char *, osr_name),
- TP_FIELDS(
- ctf_string(osr_name, osr_name)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, clone_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, rmattrs_enter,
- TP_ARGS(
- const char *, osr_name),
- TP_FIELDS(
- ctf_string(osr_name, osr_name)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, rmattrs_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, rmattr_enter,
- TP_ARGS(
- const char *, osr_name),
- TP_FIELDS(
- ctf_string(osr_name, osr_name)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, rmattr_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, setattrs_enter,
- TP_ARGS(
- const char *, osr_name),
- TP_FIELDS(
- ctf_string(osr_name, osr_name)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, setattrs_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, setattr_enter,
- TP_ARGS(
- const char *, osr_name),
- TP_FIELDS(
- ctf_string(osr_name, osr_name)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, setattr_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, remove_enter,
- TP_ARGS(
- const char *, osr_name),
- TP_FIELDS(
- ctf_string(osr_name, osr_name)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, remove_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, truncate_enter,
- TP_ARGS(
- const char *, osr_name,
- uint64_t, offset),
- TP_FIELDS(
- ctf_string(osr_name, osr_name)
- ctf_integer(uint64_t, offset, offset)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, truncate_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, zero_enter,
- TP_ARGS(
- const char *, osr_name,
- uint64_t, offset,
- uint64_t, length),
- TP_FIELDS(
- ctf_string(osr_name, osr_name)
- ctf_integer(uint64_t, offset, offset)
- ctf_integer(uint64_t, length, length)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, zero_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, touch_enter,
- TP_ARGS(
- const char *, osr_name),
- TP_FIELDS(
- ctf_string(osr_name, osr_name)
- )
-)
-
-TRACEPOINT_EVENT(objectstore, touch_exit,
- TP_ARGS(
- int, retval),
- TP_FIELDS(
- ctf_integer(int, retval, retval)
- )
-)
+++ /dev/null
-TRACEPOINT_EVENT(oprequest, set_rmw_flags,
- TP_ARGS(
- // osd_reqid_t
- uint8_t, type,
- int64_t, num,
- uint64_t, tid,
- int32_t, inc,
- int, flag,
- int, old_rmw_flags,
- int, new_rmw_flags),
- TP_FIELDS(
- ctf_integer(uint8_t, type, type)
- ctf_integer(int64_t, num, num)
- ctf_integer(uint64_t, tid, tid)
- ctf_integer(int32_t, inc, inc)
- ctf_integer_hex(int, flag, flag)
- ctf_integer_hex(int, old_rmw_flags, old_rmw_flags)
- ctf_integer_hex(int, new_rmw_flags, new_rmw_flags)
- )
-)
-
-TRACEPOINT_EVENT(oprequest, mark_flag_point,
- TP_ARGS(
- // osd_reqid_t
- uint8_t, type,
- int64_t, num,
- uint64_t, tid,
- int32_t, inc,
- int, rmw_flags,
- uint8_t, flag,
- const char*, msg,
- uint8_t, old_hit_flag_points,
- uint8_t, new_hit_flag_points),
- TP_FIELDS(
- ctf_integer(uint8_t, type, type)
- ctf_integer(int64_t, num, num)
- ctf_integer(uint64_t, tid, tid)
- ctf_integer(int32_t, inc, inc)
- ctf_integer_hex(int, rmw_flags, rmw_flags)
- ctf_integer_hex(uint8_t, flag, flag)
- ctf_string(msg, msg)
- ctf_integer_hex(uint8_t, old_hit_flag_points, old_hit_flag_points)
- ctf_integer_hex(uint8_t, new_hit_flag_points, new_hit_flag_points)
- )
-)
+++ /dev/null
-TRACEPOINT_EVENT(osd, prepare_tx_enter,
- TP_ARGS(
- // osd_reqid_t
- uint8_t, type,
- int64_t, num,
- uint64_t, tid,
- int32_t, inc),
- TP_FIELDS(
- ctf_integer(uint8_t, type, type)
- ctf_integer(int64_t, num, num)
- ctf_integer(uint64_t, tid, tid)
- ctf_integer(int32_t, inc, inc)
- )
-)
-
-TRACEPOINT_EVENT(osd, prepare_tx_exit,
- TP_ARGS(
- // osd_reqid_t
- uint8_t, type,
- int64_t, num,
- uint64_t, tid,
- int32_t, inc),
- TP_FIELDS(
- ctf_integer(uint8_t, type, type)
- ctf_integer(int64_t, num, num)
- ctf_integer(uint64_t, tid, tid)
- ctf_integer(int32_t, inc, inc)
- )
-)
-
-TRACEPOINT_EVENT(osd, ms_fast_dispatch,
- TP_ARGS(
- // osd_reqid_t
- uint8_t, type,
- int64_t, num,
- uint64_t, tid,
- int32_t, inc),
- TP_FIELDS(
- ctf_integer(uint8_t, type, type)
- ctf_integer(int64_t, num, num)
- ctf_integer(uint64_t, tid, tid)
- ctf_integer(int32_t, inc, inc)
- )
-)
-
-TRACEPOINT_EVENT(osd, opwq_process_start,
- TP_ARGS(
- // osd_reqid_t
- uint8_t, type,
- int64_t, num,
- uint64_t, tid,
- int32_t, inc),
- TP_FIELDS(
- ctf_integer(uint8_t, type, type)
- ctf_integer(int64_t, num, num)
- ctf_integer(uint64_t, tid, tid)
- ctf_integer(int32_t, inc, inc)
- )
-)
-
-TRACEPOINT_EVENT(osd, opwq_process_finish,
- TP_ARGS(
- // osd_reqid_t
- uint8_t, type,
- int64_t, num,
- uint64_t, tid,
- int32_t, inc),
- TP_FIELDS(
- ctf_integer(uint8_t, type, type)
- ctf_integer(int64_t, num, num)
- ctf_integer(uint64_t, tid, tid)
- ctf_integer(int32_t, inc, inc)
- )
-)
-
-TRACEPOINT_EVENT(osd, do_osd_op_pre,
- TP_ARGS(
- const char*, oid,
- uint64_t, snap,
- uint16_t, op,
- const char*, opname,
- uint32_t, flags),
- TP_FIELDS(
- ctf_string(oid, oid)
- ctf_integer(uint64_t, snap, snap)
- ctf_integer_hex(uint16_t, op, op)
- ctf_string(opname, opname)
- ctf_integer_hex(uint32_t, flags, flags)
- )
-)
-
-TRACEPOINT_EVENT(osd, do_osd_op_pre_read,
- TP_ARGS(
- const char*, oid,
- uint64_t, snap,
- uint64_t, osize,
- uint32_t, oseq,
- uint64_t, offset,
- uint64_t, length,
- uint64_t, truncate_size,
- uint32_t, truncate_seq),
- TP_FIELDS(
- ctf_string(oid, oid)
- ctf_integer(uint64_t, snap, snap)
- ctf_integer(uint64_t, osize, osize)
- ctf_integer(uint32_t, oseq, oseq)
- ctf_integer(uint64_t, offset, offset)
- ctf_integer(uint64_t, length, length)
- ctf_integer(uint64_t, truncate_size, truncate_size)
- ctf_integer(uint32_t, truncate_seq, truncate_seq)
- )
-)
-
-TRACEPOINT_EVENT(osd, do_osd_op_pre_mapext,
- TP_ARGS(
- const char*, oid,
- uint64_t, snap,
- uint64_t, offset,
- uint64_t, length),
- TP_FIELDS(
- ctf_string(oid, oid)
- ctf_integer(uint64_t, snap, snap)
- ctf_integer(uint64_t, offset, offset)
- ctf_integer(uint64_t, length, length)
- )
-)
-
-TRACEPOINT_EVENT(osd, do_osd_op_pre_sparse_read,
- TP_ARGS(
- const char*, oid,
- uint64_t, snap,
- uint64_t, osize,
- uint32_t, oseq,
- uint64_t, offset,
- uint64_t, length,
- uint64_t, truncate_size,
- uint32_t, truncate_seq),
- TP_FIELDS(
- ctf_string(oid, oid)
- ctf_integer(uint64_t, snap, snap)
- ctf_integer(uint64_t, osize, osize)
- ctf_integer(uint32_t, oseq, oseq)
- ctf_integer(uint64_t, offset, offset)
- ctf_integer(uint64_t, length, length)
- ctf_integer(uint64_t, truncate_size, truncate_size)
- ctf_integer(uint32_t, truncate_seq, truncate_seq)
- )
-)
-
-TRACEPOINT_EVENT(osd, do_osd_op_pre_call,
- TP_ARGS(
- const char*, oid,
- uint64_t, snap,
- const char*, class_name,
- const char*, method_name),
- TP_FIELDS(
- ctf_string(oid, oid)
- ctf_integer(uint64_t, snap, snap)
- ctf_string(class_name, class_name)
- ctf_string(method_name, method_name)
- )
-)
-
-TRACEPOINT_EVENT(osd, do_osd_op_pre_stat,
- TP_ARGS(
- const char*, oid,
- uint64_t, snap),
- TP_FIELDS(
- ctf_string(oid, oid)
- ctf_integer(uint64_t, snap, snap)
- )
-)
-
-TRACEPOINT_EVENT(osd, do_osd_op_pre_isdirty,
- TP_ARGS(
- const char*, oid,
- uint64_t, snap),
- TP_FIELDS(
- ctf_string(oid, oid)
- ctf_integer(uint64_t, snap, snap)
- )
-)
-
-TRACEPOINT_EVENT(osd, do_osd_op_pre_undirty,
- TP_ARGS(
- const char*, oid,
- uint64_t, snap),
- TP_FIELDS(
- ctf_string(oid, oid)
- ctf_integer(uint64_t, snap, snap)
- )
-)
-
-TRACEPOINT_EVENT(osd, do_osd_op_pre_try_flush,
- TP_ARGS(
- const char*, oid,
- uint64_t, snap),
- TP_FIELDS(
- ctf_string(oid, oid)
- ctf_integer(uint64_t, snap, snap)
- )
-)
-
-TRACEPOINT_EVENT(osd, do_osd_op_pre_cache_flush,
- TP_ARGS(
- const char*, oid,
- uint64_t, snap),
- TP_FIELDS(
- ctf_string(oid, oid)
- ctf_integer(uint64_t, snap, snap)
- )
-)
-
-TRACEPOINT_EVENT(osd, do_osd_op_pre_cache_evict,
- TP_ARGS(
- const char*, oid,
- uint64_t, snap),
- TP_FIELDS(
- ctf_string(oid, oid)
- ctf_integer(uint64_t, snap, snap)
- )
-)
-
-TRACEPOINT_EVENT(osd, do_osd_op_pre_getxattr,
- TP_ARGS(
- const char*, oid,
- uint64_t, snap,
- const char*, aname),
- TP_FIELDS(
- ctf_string(oid, oid)
- ctf_integer(uint64_t, snap, snap)
- ctf_string(aname, aname)
- )
-)
-
-TRACEPOINT_EVENT(osd, do_osd_op_pre_getxattrs,
- TP_ARGS(
- const char*, oid,
- uint64_t, snap),
- TP_FIELDS(
- ctf_string(oid, oid)
- ctf_integer(uint64_t, snap, snap)
- )
-)
-
-TRACEPOINT_EVENT(osd, do_osd_op_pre_cmpxattr,
- TP_ARGS(
- const char*, oid,
- uint64_t, snap,
- const char*, aname),
- TP_FIELDS(
- ctf_string(oid, oid)
- ctf_integer(uint64_t, snap, snap)
- ctf_string(aname, aname)
- )
-)
-
-TRACEPOINT_EVENT(osd, do_osd_op_pre_assert_ver,
- TP_ARGS(
- const char*, oid,
- uint64_t, snap,
- uint64_t, ver),
- TP_FIELDS(
- ctf_string(oid, oid)
- ctf_integer(uint64_t, snap, snap)
- ctf_integer(uint64_t, ver, ver)
- )
-)
-
-TRACEPOINT_EVENT(osd, do_osd_op_pre_list_watchers,
- TP_ARGS(
- const char*, oid,
- uint64_t, snap),
- TP_FIELDS(
- ctf_string(oid, oid)
- ctf_integer(uint64_t, snap, snap)
- )
-)
-
-TRACEPOINT_EVENT(osd, do_osd_op_pre_list_snaps,
- TP_ARGS(
- const char*, oid,
- uint64_t, snap),
- TP_FIELDS(
- ctf_string(oid, oid)
- ctf_integer(uint64_t, snap, snap)
- )
-)
-
-TRACEPOINT_EVENT(osd, do_osd_op_pre_assert_src_version,
- TP_ARGS(
- const char*, oid,
- uint64_t, snap,
- uint64_t, ver),
- TP_FIELDS(
- ctf_string(oid, oid)
- ctf_integer(uint64_t, snap, snap)
- ctf_integer(uint64_t, ver, ver)
- )
-)
-
-TRACEPOINT_EVENT(osd, do_osd_op_pre_notify,
- TP_ARGS(
- const char*, oid,
- uint64_t, snap,
- uint64_t, timeout),
- TP_FIELDS(
- ctf_string(oid, oid)
- ctf_integer(uint64_t, snap, snap)
- ctf_integer(uint64_t, timeout, timeout)
- )
-)
-
-TRACEPOINT_EVENT(osd, do_osd_op_pre_notify_ack,
- TP_ARGS(
- const char*, oid,
- uint64_t, snap,
- uint64_t, notify_id,
- uint64_t, watch_cookie,
- const char*, watch_cookie_valid),
- TP_FIELDS(
- ctf_string(oid, oid)
- ctf_integer(uint64_t, snap, snap)
- ctf_integer(uint64_t, notify_id, notify_id)
- ctf_integer(uint64_t, watch_cookie, watch_cookie)
- ctf_string(watch_cookie_valid, watch_cookie_valid)
- )
-)
-
-TRACEPOINT_EVENT(osd, do_osd_op_pre_setallochint,
- TP_ARGS(
- const char*, oid,
- uint64_t, snap,
- uint64_t, expected_object_size,
- uint64_t, expected_write_size),
- TP_FIELDS(
- ctf_string(oid, oid)
- ctf_integer(uint64_t, snap, snap)
- ctf_integer(uint64_t, expected_object_size, expected_object_size)
- ctf_integer(uint64_t, expected_write_size, expected_write_size)
- )
-)
-
-TRACEPOINT_EVENT(osd, do_osd_op_pre_write,
- TP_ARGS(
- const char*, oid,
- uint64_t, snap,
- uint64_t, osize,
- uint32_t, oseq,
- uint64_t, offset,
- uint64_t, length,
- uint64_t, truncate_size,
- uint32_t, truncate_seq),
- TP_FIELDS(
- ctf_string(oid, oid)
- ctf_integer(uint64_t, snap, snap)
- ctf_integer(uint64_t, osize, osize)
- ctf_integer(uint32_t, oseq, oseq)
- ctf_integer(uint64_t, offset, offset)
- ctf_integer(uint64_t, length, length)
- ctf_integer(uint64_t, truncate_size, truncate_size)
- ctf_integer(uint32_t, truncate_seq, truncate_seq)
- )
-)
-
-TRACEPOINT_EVENT(osd, do_osd_op_pre_writefull,
- TP_ARGS(
- const char*, oid,
- uint64_t, snap,
- uint64_t, osize,
- uint64_t, offset,
- uint64_t, length),
- TP_FIELDS(
- ctf_string(oid, oid)
- ctf_integer(uint64_t, snap, snap)
- ctf_integer(uint64_t, osize, osize)
- ctf_integer(uint64_t, offset, offset)
- ctf_integer(uint64_t, length, length)
- )
-)
-
-TRACEPOINT_EVENT(osd, do_osd_op_pre_rollback,
- TP_ARGS(
- const char*, oid,
- uint64_t, snap),
- TP_FIELDS(
- ctf_string(oid, oid)
- ctf_integer(uint64_t, snap, snap)
- )
-)
-
-TRACEPOINT_EVENT(osd, do_osd_op_pre_zero,
- TP_ARGS(
- const char*, oid,
- uint64_t, snap,
- uint64_t, offset,
- uint64_t, length),
- TP_FIELDS(
- ctf_string(oid, oid)
- ctf_integer(uint64_t, snap, snap)
- ctf_integer(uint64_t, offset, offset)
- ctf_integer(uint64_t, length, length)
- )
-)
-
-TRACEPOINT_EVENT(osd, do_osd_op_pre_create,
- TP_ARGS(
- const char*, oid,
- uint64_t, snap),
- TP_FIELDS(
- ctf_string(oid, oid)
- ctf_integer(uint64_t, snap, snap)
- )
-)
-
-TRACEPOINT_EVENT(osd, do_osd_op_pre_truncate,
- TP_ARGS(
- const char*, oid,
- uint64_t, snap,
- uint64_t, osize,
- uint32_t, oseq,
- uint64_t, offset,
- uint64_t, length,
- uint64_t, truncate_size,
- uint32_t, truncate_seq),
- TP_FIELDS(
- ctf_string(oid, oid)
- ctf_integer(uint64_t, snap, snap)
- ctf_integer(uint64_t, osize, osize)
- ctf_integer(uint32_t, oseq, oseq)
- ctf_integer(uint64_t, offset, offset)
- ctf_integer(uint64_t, length, length)
- ctf_integer(uint64_t, truncate_size, truncate_size)
- ctf_integer(uint32_t, truncate_seq, truncate_seq)
- )
-)
-
-TRACEPOINT_EVENT(osd, do_osd_op_pre_delete,
- TP_ARGS(
- const char*, oid,
- uint64_t, snap),
- TP_FIELDS(
- ctf_string(oid, oid)
- ctf_integer(uint64_t, snap, snap)
- )
-)
-
-TRACEPOINT_EVENT(osd, do_osd_op_pre_clonerange,
- TP_ARGS(
- const char*, oid,
- uint64_t, snap,
- uint64_t, offset,
- uint64_t, length,
- uint64_t, src_offset),
- TP_FIELDS(
- ctf_string(oid, oid)
- ctf_integer(uint64_t, snap, snap)
- ctf_integer(uint64_t, offset, offset)
- ctf_integer(uint64_t, length, length)
- ctf_integer(uint64_t, src_offset, src_offset)
- )
-)
-
-TRACEPOINT_EVENT(osd, do_osd_op_pre_watch,
- TP_ARGS(
- const char*, oid,
- uint64_t, snap,
- uint64_t, cookie,
- uint8_t, flag),
- TP_FIELDS(
- ctf_string(oid, oid)
- ctf_integer(uint64_t, snap, snap)
- ctf_integer(uint64_t, cookie, cookie)
- ctf_integer(uint8_t, flag, flag)
- )
-)
-
-TRACEPOINT_EVENT(osd, do_osd_op_pre_setxattr,
- TP_ARGS(
- const char*, oid,
- uint64_t, snap,
- const char*, aname),
- TP_FIELDS(
- ctf_string(oid, oid)
- ctf_integer(uint64_t, snap, snap)
- ctf_string(aname, aname)
- )
-)
-
-TRACEPOINT_EVENT(osd, do_osd_op_pre_rmxattr,
- TP_ARGS(
- const char*, oid,
- uint64_t, snap,
- const char*, aname),
- TP_FIELDS(
- ctf_string(oid, oid)
- ctf_integer(uint64_t, snap, snap)
- ctf_string(aname, aname)
- )
-)
-
-TRACEPOINT_EVENT(osd, do_osd_op_pre_append,
- TP_ARGS(
- const char*, oid,
- uint64_t, snap,
- uint64_t, osize,
- uint32_t, oseq,
- uint64_t, offset,
- uint64_t, length,
- uint64_t, truncate_size,
- uint32_t, truncate_seq),
- TP_FIELDS(
- ctf_string(oid, oid)
- ctf_integer(uint64_t, snap, snap)
- ctf_integer(uint64_t, osize, osize)
- ctf_integer(uint32_t, oseq, oseq)
- ctf_integer(uint64_t, offset, offset)
- ctf_integer(uint64_t, length, length)
- ctf_integer(uint64_t, truncate_size, truncate_size)
- ctf_integer(uint32_t, truncate_seq, truncate_seq)
- )
-)
-
-TRACEPOINT_EVENT(osd, do_osd_op_pre_startsync,
- TP_ARGS(
- const char*, oid,
- uint64_t, snap),
- TP_FIELDS(
- ctf_string(oid, oid)
- ctf_integer(uint64_t, snap, snap)
- )
-)
-
-TRACEPOINT_EVENT(osd, do_osd_op_pre_tmapget,
- TP_ARGS(
- const char*, oid,
- uint64_t, snap),
- TP_FIELDS(
- ctf_string(oid, oid)
- ctf_integer(uint64_t, snap, snap)
- )
-)
-
-TRACEPOINT_EVENT(osd, do_osd_op_pre_tmapput,
- TP_ARGS(
- const char*, oid,
- uint64_t, snap),
- TP_FIELDS(
- ctf_string(oid, oid)
- ctf_integer(uint64_t, snap, snap)
- )
-)
-
-TRACEPOINT_EVENT(osd, do_osd_op_pre_tmapup,
- TP_ARGS(
- const char*, oid,
- uint64_t, snap),
- TP_FIELDS(
- ctf_string(oid, oid)
- ctf_integer(uint64_t, snap, snap)
- )
-)
-
-TRACEPOINT_EVENT(osd, do_osd_op_pre_tmap2omap,
- TP_ARGS(
- const char*, oid,
- uint64_t, snap),
- TP_FIELDS(
- ctf_string(oid, oid)
- ctf_integer(uint64_t, snap, snap)
- )
-)
-
-TRACEPOINT_EVENT(osd, do_osd_op_pre_omapgetkeys,
- TP_ARGS(
- const char*, oid,
- uint64_t, snap,
- const char*, start_after,
- uint64_t, max_return),
- TP_FIELDS(
- ctf_string(oid, oid)
- ctf_integer(uint64_t, snap, snap)
- ctf_string(start_after, start_after)
- ctf_integer(uint64_t, max_return, max_return)
- )
-)
-
-TRACEPOINT_EVENT(osd, do_osd_op_pre_omapgetvals,
- TP_ARGS(
- const char*, oid,
- uint64_t, snap,
- const char*, start_after,
- uint64_t, max_return,
- const char*, filter_prefix),
- TP_FIELDS(
- ctf_string(oid, oid)
- ctf_integer(uint64_t, snap, snap)
- ctf_string(start_after, start_after)
- ctf_integer(uint64_t, max_return, max_return)
- ctf_string(filter_prefix, filter_prefix)
- )
-)
-
-TRACEPOINT_EVENT(osd, do_osd_op_pre_omapgetheader,
- TP_ARGS(
- const char*, oid,
- uint64_t, snap),
- TP_FIELDS(
- ctf_string(oid, oid)
- ctf_integer(uint64_t, snap, snap)
- )
-)
-
-TRACEPOINT_EVENT(osd, do_osd_op_pre_omapgetvalsbykeys,
- TP_ARGS(
- const char*, oid,
- uint64_t, snap,
- const char*, keys),
- TP_FIELDS(
- ctf_string(oid, oid)
- ctf_integer(uint64_t, snap, snap)
- ctf_string(keys, keys)
- )
-)
-
-TRACEPOINT_EVENT(osd, do_osd_op_pre_omap_cmp,
- TP_ARGS(
- const char*, oid,
- uint64_t, snap,
- const char*, keys),
- TP_FIELDS(
- ctf_string(oid, oid)
- ctf_integer(uint64_t, snap, snap)
- ctf_string(keys, keys)
- )
-)
-
-TRACEPOINT_EVENT(osd, do_osd_op_pre_omapsetvals,
- TP_ARGS(
- const char*, oid,
- uint64_t, snap,
- const char*, keys),
- TP_FIELDS(
- ctf_string(oid, oid)
- ctf_integer(uint64_t, snap, snap)
- ctf_string(keys, keys)
- )
-)
-
-TRACEPOINT_EVENT(osd, do_osd_op_pre_omapsetheader,
- TP_ARGS(
- const char*, oid,
- uint64_t, snap),
- TP_FIELDS(
- ctf_string(oid, oid)
- ctf_integer(uint64_t, snap, snap)
- )
-)
-
-TRACEPOINT_EVENT(osd, do_osd_op_pre_omapclear,
- TP_ARGS(
- const char*, oid,
- uint64_t, snap),
- TP_FIELDS(
- ctf_string(oid, oid)
- ctf_integer(uint64_t, snap, snap)
- )
-)
-
-TRACEPOINT_EVENT(osd, do_osd_op_pre_omaprmkeys,
- TP_ARGS(
- const char*, oid,
- uint64_t, snap,
- const char*, keys),
- TP_FIELDS(
- ctf_string(oid, oid)
- ctf_integer(uint64_t, snap, snap)
- ctf_string(keys, keys)
- )
-)
-
-TRACEPOINT_EVENT(osd, do_osd_op_pre_copy_get_classic,
- TP_ARGS(
- const char*, oid,
- uint64_t, snap),
- TP_FIELDS(
- ctf_string(oid, oid)
- ctf_integer(uint64_t, snap, snap)
- )
-)
-
-TRACEPOINT_EVENT(osd, do_osd_op_pre_copy_get,
- TP_ARGS(
- const char*, oid,
- uint64_t, snap),
- TP_FIELDS(
- ctf_string(oid, oid)
- ctf_integer(uint64_t, snap, snap)
- )
-)
-
-TRACEPOINT_EVENT(osd, do_osd_op_pre_copy_from,
- TP_ARGS(
- const char*, oid,
- uint64_t, snap,
- const char*, src_name,
- int64_t, src_pool,
- const char*, src_key,
- const char*, src_nspace,
- int64_t, src_hash,
- uint64_t, src_snapid,
- uint64_t, src_version),
- TP_FIELDS(
- ctf_string(oid, oid)
- ctf_integer(uint64_t, snap, snap)
- ctf_string(src_name, src_name)
- ctf_integer(int64_t, src_pool, src_pool)
- ctf_string(src_key, src_key)
- ctf_string(src_nspace, src_nspace)
- ctf_integer(int64_t, src_hash, src_hash)
- ctf_integer(uint64_t, src_snapid, src_snapid)
- ctf_integer(uint64_t, src_version, src_version)
- )
-)
-
-TRACEPOINT_EVENT(osd, do_osd_op_pre_unknown,
- TP_ARGS(
- const char*, oid,
- uint64_t, snap,
- uint16_t, op,
- const char*, opname),
- TP_FIELDS(
- ctf_string(oid, oid)
- ctf_integer(uint64_t, snap, snap)
- ctf_integer_hex(uint16_t, op, op)
- ctf_string(opname, opname)
- )
-)
-
-TRACEPOINT_EVENT(osd, do_osd_op_post,
- TP_ARGS(
- const char*, oid,
- uint64_t, snap,
- uint16_t, op,
- const char*, opname,
- uint32_t, flags,
- int, result),
- TP_FIELDS(
- ctf_string(oid, oid)
- ctf_integer(uint64_t, snap, snap)
- ctf_integer_hex(uint16_t, op, op)
- ctf_string(opname, opname)
- ctf_integer_hex(uint32_t, flags, flags)
- ctf_integer_hex(int, result, result)
- )
-)
+++ /dev/null
-TRACEPOINT_EVENT(pg, queue_op,
- TP_ARGS(
- // osd_reqid_t
- uint8_t, type,
- int64_t, num,
- uint64_t, tid,
- int32_t, inc,
- int, rmw_flags),
- TP_FIELDS(
- ctf_integer(uint8_t, type, type)
- ctf_integer(int64_t, num, num)
- ctf_integer(uint64_t, tid, tid)
- ctf_integer(int32_t, inc, inc)
- ctf_integer(int, rmw_flags, rmw_flags)
- )
-)
+++ /dev/null
-#if !defined(TRACING_COMMON_H)
-#define TRACING_COMMON_H
-
-// Amount of buffer data to dump when using ceph_ctf_sequence or ceph_ctf_sequencep.
-// If 0, then *_data field is omitted entirely.
-#if !defined(CEPH_TRACE_BUF_TRUNC_LEN)
-#define CEPH_TRACE_BUF_TRUNC_LEN 0
-#endif
-
-// TODO: This is GCC-specific. Replace CEPH_MAX and CEPH_MIN with standard macros, if possible.
-#define CEPH_MAX(a,b) \
- ({ __typeof__ (a) _a = (a); \
- __typeof__ (b) _b = (b); \
- _a > _b ? _a : _b; })
-
-#define CEPH_MIN(a,b) \
- ({ __typeof__ (a) _a = (a); \
- __typeof__ (b) _b = (b); \
- _a < _b ? _a : _b; })
-
-// type should be an integer type
-// val should have type type*
-#define ceph_ctf_integerp(type, field, val) \
- ctf_integer(type, field, (val) == NULL ? 0 : (val)) \
- ctf_integer(uint8_t, field##_isnull, (val) == NULL)
-
-// val should have type char*
-#define ceph_ctf_string(field, val) \
- ctf_string(field, (val) == NULL ? "" : (val)) \
- ctf_integer(uint8_t, field##_isnull, (val) == NULL)
-
-// val should have type char**
-#define ceph_ctf_stringp(field, val) \
- ctf_string(field, ((val) == NULL || *(val) == NULL) ? "" : *(val)) \
- ctf_integer(uint8_t, field##_isnull, (val) == NULL) \
- ctf_integer(uint8_t, field##_data_isnull, (val) == NULL || *(val) == NULL)
-
-// val should have type type*
-// lenval should have type lentype
-#if CEPH_TRACE_BUF_TRUNC_LEN > 0
-#define ceph_ctf_sequence(type, field, val, lentype, lenval) \
- ctf_integer_hex(void*, field, val) \
- ctf_sequence(type, field##_data, (val) == NULL ? "" : (val), lentype, (val) == NULL ? 0 : CEPH_MIN((lenval), CEPH_TRACE_BUF_TRUNC_LEN)) \
- ctf_integer(uint8_t, field##_isnull, (val) == NULL) \
- ctf_integer(lentype, field##_len, lenval)
-#else
-#define ceph_ctf_sequence(type, field, val, lentype, lenval) \
- ctf_integer_hex(void*, field, val) \
- ctf_integer(uint8_t, field##_isnull, (val) == NULL) \
- ctf_integer(lentype, field##_len, lenval)
-#endif
-
-// val should have type type**
-// lenval should have type lentype*
-#if CEPH_TRACE_BUF_TRUNC_LEN > 0
-#define ceph_ctf_sequencep(type, field, val, lentype, lenval) \
- ctf_integer_hex(void*, field, val) \
- ctf_sequence(type, \
- field##_data, \
- ((val) == NULL || *(val) == NULL) ? "" : *(val), \
- lentype, \
- ((val) == NULL || *(val) == NULL || (lenval) == NULL) ? 0 : CEPH_MIN(*(lenval), CEPH_TRACE_BUF_TRUNC_LEN)) \
- ctf_integer(uint8_t, field##_isnull, (val) == NULL) \
- ctf_integer(uint8_t, field##_data_isnull, ((val) == NULL || *(val) == NULL)) \
- ctf_integer(lentype, field##_len, (lenval) == NULL ? 0 : *(lenval)) \
- ctf_integer(lentype, field##_len_isnull, (lenval) == NULL)
-#else
-#define ceph_ctf_sequencep(type, field, val, lentype, lenval) \
- ctf_integer_hex(void*, field, val) \
- ctf_integer(uint8_t, field##_isnull, (val) == NULL) \
- ctf_integer(uint8_t, field##_data_isnull, ((val) == NULL || *(val) == NULL)) \
- ctf_integer(lentype, field##_len, (lenval) == NULL ? 0 : *(lenval)) \
- ctf_integer(lentype, field##_len_isnull, (lenval) == NULL)
-#endif
-
-// p should be of type struct timeval*
-#define ceph_ctf_timevalp(field, p) \
- ctf_integer(long int, field##_sec, (p) == NULL ? 0 : (p)->tv_sec) \
- ctf_integer(long int, field##_usec, (p) == NULL ? 0 : (p)->tv_usec) \
- ctf_integer(uint8_t, field##_isnull, (p) == NULL)
-
-// val should be of type time_t
-// Currently assumes that time_t is an integer and no more than 64 bits wide.
-// This is verified by the configure script.
-#define ceph_ctf_time_t(field, val) \
- ctf_integer(uint64_t, field, (uint64_t)(val))
-
-// val should be of type time_t*
-// Currently assumes that time_t is an integer and no more than 64 bits wide.
-// This is verified by the configure script.
-#define ceph_ctf_time_tp(field, val) \
- ctf_integer(uint64_t, field, (val) == NULL ? 0 : (uint64_t)(*val)) \
- ctf_integer(uint8_t, field##_isnull, (val) == NULL)
-
-
-#endif /* TRACING_COMMON_H */