Because of winpthreads issues, we had to use Boost's shared_mutex
implementation.
When using mingw-llvm, we can safely use libc++'s shared mutex
implementation.
Signed-off-by: Lucian Petrut <lpetrut@cloudbasesolutions.com>
std::condition_variable::wait_for uses SleepConditionVariableSRW
on Windows, which has millisecond precision.
In order to avoid busy loops, we won't wait for less than one
millisecond on Windows.
Note that this situation is quite common since on Windows,
"wait_for" often returns ~1ms before the specified timeout.
Signed-off-by: Lucian Petrut <lpetrut@cloudbasesolutions.com>
The monotonic clocks are commonly used for measuring time deltas,
which can be negative.
ceph::mono_clock and ceph::coarse_mono_clock currently use
unsigned duration types [1]. The difference operators are overloaded
in order to ensure that the result is signed [2][3].
However, we still have issues when unsigned timespans are compared.
For example, std::condition::wait_for can hang indefinitely due
to underflows [4][5]. It ends up using our unsigned type for a
negative timespan, which is then compared to
std::chrono::duration<Rep,Period>::zero.
In order to avoid such problems, we'll simply use a signed type
for monotonic clock durations.
With signed timespans, we can no longer assume that time_point::zero()
is equal to time_point::min(), so we're updating it accodingly.
[1] 4040f12347/src/common/ceph_time.h (L285)
[2] 4040f12347/src/common/ceph_time.h (L345-L380)
[3] 4040f12347/src/common/ceph_time.h (L466-L487)
[4] 91cff8a718/libcxx/include/__condition_variable/condition_variable.h (L178)
[5] 91cff8a718/libcxx/include/__condition_variable/condition_variable.h (L193)
Signed-off-by: Lucian Petrut <lpetrut@cloudbasesolutions.com>
We've been experiencing timer hangs with mingw-llvm.
std::condition_variable::wait_for was returning a few microseconds
before the requested time and then hanging when called with a
small interval (e.g. microseconds).
This was affecting the OSD periodic tick, which would hang after
a while (20m up to 2h).
The issue can be reproduced with a timer loop and a small interval
(e.g. 40us), in which case the timer is likely to hang after about
10s.
We're adding some tests, while the actual mingw-llvm issue will
be mitigated in a separate commit.
Signed-off-by: Lucian Petrut <lpetrut@cloudbasesolutions.com>
winpthreads is a library that emulates the pthreads API using
Windows primitives. It's also used by the mingw/gcc libstdc++
for std::thread.
The issue is that winpthreads isn't well maintained. There
have been numerous bugs that haven't been addressed in years.
Specifically, we've been hitting deadlocks because of the
winpthreads rw lock implementation.
This change will allow building Ceph for Windows using mingw/llvm,
which uses libc++ and doesn't rely on winpthreads.
Signed-off-by: Lucian Petrut <lpetrut@cloudbasesolutions.com>
We're checking a permission denied exception message that's
runtime specific:
/mnt/data/workspace/ceph_mingw_clang/src/test/dokan/dokan.cc:252: Failure
Expected equality of these values:
e.what()
Which is: "filesystem error: in remove: Permission denied
[\"Z:\\ro_success_b76223c4-c590-45e0-ab78-4d281ac512b5\"]"
exception_msg.c_str()
Which is: "filesystem error: cannot remove: No such device
[Z:\\ro_success_b76223c4-c590-45e0-ab78-4d281ac512b5]"
In order to support libc++, we'll drop the exception message
assertion and rely on the exception type.
Signed-off-by: Lucian Petrut <lpetrut@cloudbasesolutions.com>
This test currently failes to build for Windows using llvm
due to unresolved symbols.
We'll address the issue by explicitly specifying the ceph-common
dependency.
Signed-off-by: Lucian Petrut <lpetrut@cloudbasesolutions.com>
Especially when targeting Windows, llvm may not necessarily
use pthreads for std::thread. In this case, we must not use the
"native" thread handle with the pthreads API.
We'll update the ceph_pthread_getname and ceph_pthread_setname
wrappers, adding a new one: ceph_pthread_kill.
Signed-off-by: Lucian Petrut <lpetrut@cloudbasesolutions.com>
The "-Bsymbolic" and "-Bsymbolic-functions" flags only apply to ELF
binaries.
llvm errors out when targeting Windows, which is why we'll need
to skip those flags for Windows builds.
Signed-off-by: Lucian Petrut <lpetrut@cloudbasesolutions.com>
clang errors out because of a few type mismatches that gcc
ignored through "-fpermissive".
We'll need to cast a few void pointers to the appropriate type.
There's also a function that doesn't have an explicit return type,
which was omitted by mistake.
Signed-off-by: Lucian Petrut <lpetrut@cloudbasesolutions.com>
Some symbols from the crc32, arch and fmt libs
are re-exported by libceph-common:
FAILED: bin/unittest_time.exe
ld.lld: error: fmt::v9::format_error::~format_error() was replaced
llvm throws errors because of the duplicate symbols.
One workaround is to use objects instead of static libs
for the libs. For libfmt we'll use the header-only version.
Signed-off-by: Lucian Petrut <lpetrut@cloudbasesolutions.com>
We're using the vendored fmt lib when there is no system library
available. However, there is an inconsistency: the
WITH_FMT_HEADER_ONLY setting is ignored by the vendored library.
In order to address this, we'll use the fmt-header-only alias
if WITH_FMT_HEADER_ONLY is set.
Signed-off-by: Lucian Petrut <lpetrut@cloudbasesolutions.com>
We're fixing a few rbd-wnbd issues that are currently ignored
by mingw-gcc but not by llvm:
* checking if an uint is smaller than 0
* qualified method names must be used when passing the address
* duplicate symbol "shutdown_lock"
* add missing const cast when passing WNBD interface
Signed-off-by: Lucian Petrut <lpetrut@cloudbasesolutions.com>
On Windows x64 hosts, "long" (4B) is not large enough to hold
an address.
For this reason, we're updating "test_json_formattable.cc"
to use "long long" instead.
Signed-off-by: Lucian Petrut <lpetrut@cloudbasesolutions.com>
std::result_of_t was deprecated in c++17 and removed in c++20.
gcc kept it around for backwards compatibility, however it was
removed in clang.
For this reason, we'll need to use std::invoke_result_ot instead,
which has a slightly different syntax.
Signed-off-by: Lucian Petrut <lpetrut@cloudbasesolutions.com>
We're currently setting FMT_USE_TZSET=0 when building libfmt
in order to avoid the _tzset function, which is unavailable
under Mingw:
aa5769ecf1
The issue is that it still gets used by fmt/chrono.h, which is
why we'll move this definition to the top level cmake file.
Note that the Windows build is currently failing as a result of
a recent change: https://github.com/ceph/ceph/pull/52590/files
In file included from ceph/src/common/ceph_time.h:22,
from ceph/src/include/encoding.h:31,
from ceph/src/include/uuid.h:9,
from ceph/src/include/types.h:21,
from ceph/src/crush/CrushWrapper.h:14,
from ceph/src/crush/CrushCompiler.h:7,
from ceph/src/crush/CrushCompiler.cc:4:
ceph/src/fmt/include/fmt/chrono.h: In lambda function:
ceph/src/fmt/include/fmt/chrono.h:953:5: error: ‘_tzset’ was
not declared in this scope; did you mean ‘tzset’?
953 | _tzset();
| ^~~~~~
| tzset
Signed-off-by: Lucian Petrut <lpetrut@cloudbasesolutions.com>
mgr/dashboard: empty grafana panels for performance of daemons
Reviewed-by: Pegonzal <NOT@FOUND>
Reviewed-by: cloudbehl <NOT@FOUND>
Reviewed-by: Juan Miguel Olmo <jolmomar@redhat.com>
Reviewed-by: Pere Diaz Bou <pdiazbou@redhat.com>
Fixes: https://tracker.ceph.com/issues/61792
Signed-off-by: avanthakkar <avanjohn@gmail.com>
Removing the `ceph-` prefix from ceph_daemon label to adopt it with the label
format used by queries in grafana dashboards. Also changing the
`instance_id` label for rgw to match the values coming from
exporter and prometheus module
Use the more modern prompt block instead of
using code blocks for example commands.
Signed-off-by: Ville Ojamo <14869000+bluikko@users.noreply.github.com>
The start time and end time CLI option specification is missing a space between the date and the optional time value. Also expand the text to talk about "optional time" after the date.
Signed-off-by: Ville Ojamo <14869000+bluikko@users.noreply.github.com>
cephx: initializing two member variables in the ctors
Reviewed-by: Radoslaw Zarzynski <rzarzyns@redhat.com>
Reviewed-by: Adam C. Emerson <aemerson@redhat.com>
exporter: ceph-exporter scrapes failing on multi-homed server
Reviewed-by: Adam King <adking@redhat.com>
Reviewed-by: Juan Miguel Olmo Martínez <jolmomar@ibm.com>
Reviewed-by: Redouane Kachach <rkachach@redhat.com>
Add instructions directing the reader to install the "python3-routes"
package. This package is required in order to launch the dashboard after
the installation procedure has completed, but is not yet included in the
install-deps.sh script.
Signed-off-by: Zac Dover <zac.dover@proton.me>
deps: increase the node version to 16
Reviewed-by: Aashish Sharma <aasharma@redhat.com>
Reviewed-by: Avan Thakkar <athakkar@redhat.com>
Reviewed-by: Ken Dreyer <kdreyer@redhat.com>
async: Fix units in the create_time_event() declaration.
Reviewed-by: Casey Bodley <cbodley@redhat.com>
Reviewed-by: Radoslaw Zarzynski <rzarzyns@redhat.com>
The default html error page as response body should be built completely include three ending html symbols(/ul, /body and /html) before rgw computes Content-Length in response header. The Content-Length in response header will be consistent with response body size. Client can get complete page.
Fixes: https://tracker.ceph.com/issues/52363
(cherry picked from commit cbeaef9fbe)
Co-authored-by: aicun hu <huaicun@chinatelecom.cn>
Co-authored-by: yupeng chen <chenyupeng@chinatelecom.cn>
Signed-off-by: xiangrui meng <mengxr@chinatelecom.cn>