mgr/influx: Use Queue to store points which need to be written
This allows us to multiplex data being send to Influx as we have
a configurable amount of workers sending data to Influx.
The main bottleneck for the performance seems to be fetching all
the perf counters using this code:
self.get_all_perf_counters()
On a larger cluster, for example 2000 OSDs this can take about 20s
where flushing to Influx only takes 5s.
A 2000 OSD cluster generates about 100k data points on every run,
prior to using a Queue these would all be send to Influx in series
in that took over 15 seconds to complete.
Python Six is being used in the code to make sure it's compatible
with both Python 2 and 3.
* refs/pull/22999/head:
mds: consider max age of dispatch queue when finding stale client
mds: reset heartbeat map at potential time-consuming places
mds: change MDSRank::finished_queue to deque
Reviewed-by: Patrick Donnelly <pdonnell@redhat.com>
Tiago Melo [Fri, 3 Aug 2018 13:02:46 +0000 (14:02 +0100)]
mgr/dashboard: Add breadcrumbs component
Now we don't need to add a breadcrumb in each new page we create,
just add the necessary extra data in the route module and the
breadcrumb will be automatically created.
I used a modified version of ngx-breadcrumbs from McNull:
https://github.com/McNull/ngx-breadcrumbs
John Spray [Tue, 24 Jul 2018 12:48:26 +0000 (08:48 -0400)]
mgr/devicehealth: improve error handling
Avoid catch-all exception handlers, especially
ones that just `pass`
When catching RADOS object not found type errors,
catch specifically those, and make sure we're still
logging any actual unexpected IO errors from RADOS.
John Spray [Tue, 24 Jul 2018 12:14:23 +0000 (08:14 -0400)]
mgr/devicehealth: style/whitespace cleanup
We don't usually do gratuitious whitespace commits,
but for the python code it's worthwhile as it allows
smart editors to show us real problems without them
getting lost in the style noise.
/home/pdonnell/ceph/src/client/fuse_ll.cc: In member function ‘int CephFuse::Handle::init(int, const char**)’:
/home/pdonnell/ceph/src/client/fuse_ll.cc:1126:59: warning: format ‘%lu’ expects argument of type ‘long unsigned int’, but argument 3 has type ‘Option::size_t’ [-Wformat=]
sprintf(strsplice, "max_write=%" PRIu64, fuse_max_write);
Signed-off-by: Patrick Donnelly <pdonnell@redhat.com>
This is a milestone in the CephFS shell project. QA testing is still in the
works and will be merged separately. Installation code via CMake will also be
written in another PR.
* refs/pull/23158/head:
doc: add cephfs-shell to cephfs doc index
cephfs-shell: add new CephFS shell
Reviewed-by: Patrick Donnelly <pdonnell@redhat.com>
The CephFS shell is an alternative client to access CephFS without mounting in
the usual way. The shell provides commands to interactively access the file
system, like put, ls, chmod, etc.
Kefu Chai [Fri, 3 Aug 2018 09:27:20 +0000 (17:27 +0800)]
qa/suites/fs: add python3-cephfs to packages
the default set of packages to install is in
$suite/qa/packages/packages.yaml . see get_package_list() in
teuthology/teuthology/task/install/__init__.py for how we prepare a
package list for install task.
for running python3 tests in
fs/basic_functional/tasks/volume-client, we need to install
python3-cephfs. please note that,
_package_override() in teuthology/teutholoy/task/install/rpm.py will
take care of the different naming on centos/rhel, where the python3
packages are named python34-*.
task.install.rpm installs packages listed in
$suites/qa/packages/packages.yaml, the packge list applies to the
upgrade tests also. but we don't have python3 bindings packages in jewel
-- they were introduced in kraken.
test: use death_test_style="threadsafe" for Mutex.NormalAsserts
use threadsafe for running the Mutex assert test to run the test from
beginning to avoid the hang. this test overrides the symbol of
ceph::__ceph_assert_fail() with a local one offered by the application
links against libceph-common. but we intentionally forbid this behavior:
we do not allow libceph-common to reference the symbols exposed from
application with the same name. see http://tracker.ceph.com/issues/25154
Kefu Chai [Thu, 2 Aug 2018 11:04:30 +0000 (19:04 +0800)]
cmake: require 4.0.0 <= libfmt-dev < 5.0.0
FMT_VERSION is now living in fmt/core.h in libfmt >= 5.0, so we cannot
parse fmt/format.h for libfmt's version anymore. also we don't need
Findfmt.cmake now. because libfmt-dev 4.0 and up is required by seastar,
also it's libfmt-dev 3.x's cmake module which fails to offer fmt::fmt
target. in other words, it's safe to drop libfmt 3.x support. but 5.0.0
is not compatible with seastar, we will have failures like:
In file included from
/home/smithfarm/src/ceph/smithfarm/ceph/src/seastar/include/seastar/core/aligned_buffer.hh:25:0,
from
/home/smithfarm/src/ceph/smithfarm/ceph/src/seastar/include/seastar/core/reactor.hh:26,
from
/home/smithfarm/src/ceph/smithfarm/ceph/src/seastar/include/seastar/core/alien.hh:35,
from
/home/smithfarm/src/ceph/smithfarm/ceph/src/seastar/src/core/alien.cc:23:
/home/smithfarm/src/ceph/smithfarm/ceph/src/seastar/include/seastar/core/print.hh:
In function 'seastar::sstring seastar::format(const char*, A&& ...)':
/home/smithfarm/src/ceph/smithfarm/ceph/src/seastar/include/seastar/core/print.hh:135:10:
error: 'MemoryWriter' is not a member of 'fmt'
fmt::MemoryWriter out;
^~~~~~~~~~~~
/home/smithfarm/src/ceph/smithfarm/ceph/src/seastar/include/seastar/core/print.hh:136:5:
error: 'out' was not declared in this scope
out.write(fmt, std::forward<A>(a)...);
^~~
so, we should build libfmt even if we have libfmt-dev 5.x
Nathan Cutler [Wed, 1 Aug 2018 10:52:45 +0000 (12:52 +0200)]
build/ops: refrain from installing/using lsb_release in install-deps.sh
Unfortunately the mapping between release number and codename (which is only
relevant for Debian and Ubuntu btw) is not available from /etc/os-release.
In that one respect, lsb_release was "better".
However, when I weigh the advantages of obtaining that mapping from an external
tool, with the (substantial) risk that the external dependency might cause
trouble on one or more supported distros (to say nothing of the non- or
semi-/pseudo-supported ones), against the work involved in maintaining a
hard-coded mapping (negligible), the needle on my scale immediately swings
toward eliminating the dependency.
Also, I see this commit as part of the longer-term effort to completely expunge
lsb_release from our codebase. See git log --grep lsb_release.
For another example of an external distro-detection tool (albeit one that was
included in Python 2) gone awry, see http://tracker.ceph.com/issues/18163.
Kefu Chai [Thu, 2 Aug 2018 05:59:31 +0000 (13:59 +0800)]
cmake: extract sanitizer detection out
also, we don't need to pass '-lasan' or '-ltsan' to linker. it's
suggested to use the "-fsanitize=${sanitizer}".
please note, this module is compatible with the one used in seastar on
purpose, as seastar is included in ceph using add_subdirectory(), and it
in turn add its own cmake modules directory using list(APPEND ...), so
cmake/modules/FindSantitizers.cmake is prefered over
src/seastar/cmake/FindSantitizers.cmake.
Kefu Chai [Thu, 2 Aug 2018 05:45:51 +0000 (13:45 +0800)]
cmake: fix StdFilesystem detection
before this change, we fails to detect std::filesystem with clang++,
because the cmake project created by try_compile() only expands
following options passed from its caller:
- COMPILE_DEFINITIONS
- INCLUDE_DIRECTORIES
- LINK_DIRECTORIES
- LINK_LIBRARIES
which do not include CMAKE_CXX_FLAGS, so either we need to (ab)use
COMPILE_DEFINITIONS for passing -std=c++17, or we can change the
CMAKE_CXX_FLAGS in the parent env, as it turns out the created cmake
project does inherit this flag from current project. in this change,
we use the COMPILE_DEFINITIONS approach: simpler this way. and we
can drop it once cmake 3.8 is required.