Boris Ranto [Thu, 17 May 2018 09:02:29 +0000 (11:02 +0200)]
dashboard: Fix dashboard shutdown/restart
The dashboard serve method uses block which it should not as it can
cause several problems when shutting down (restarting) ceph-mgr. As a
result the restart of the ceph-mgr module will block until time-out if
the dashboard module is enabled. This fixes the problem by using a
simple simple shutdown_event instead of block() and stopping the server
afterwards.
Boris Ranto [Mon, 30 Apr 2018 23:06:50 +0000 (01:06 +0200)]
prometheus: Fix prometheus shutdown/restart
The prometheus serve method uses block which it should not as it can
cause several problems when shutting down (restarting) ceph-mgr. As a
result the restart of the ceph-mgr module will block until time-out if
the prometheus module is enabled. This fixes the problem by using a
simple simple shutdown_event instead of block() and stopping the server
afterwards.
Boris Ranto [Thu, 25 Jan 2018 15:31:30 +0000 (16:31 +0100)]
selinux: Allow ceph to execute ldconfig
The ceph-volume testing showed that the ceph daemons can run ldconfig in
a corner case when they are forbidden access to some files. This patch
allows ceph to execute ldconfig in Enforcing mode.
Fixes: https://tracker.ceph.com/issues/22302 Signed-off-by: Boris Ranto <branto@redhat.com>
(cherry picked from commit fa5071b6d7182f54cd7b1ffe171a4b006f5255cb)
mgr/telemetry: Add Ceph Telemetry module to send reports back to project
This Manager Module will send statistics and version information from
a Ceph cluster back to telemetry.ceph.com if the user has opted-in on sending
this information.
Additionally a user can tell that the information is allowed to be made
public which then allows other users to see this information.
YunfeiGuan [Tue, 8 May 2018 11:35:32 +0000 (19:35 +0800)]
ceph-fuse: Delete inode's bufferhead was in Tx state would lead a assert fail
Prematurely delted the bh which was in Tx state may lead the object can't
be closed before its writer of this bh callback. Thus if inode's ref call
put_inode decrease ref to zero and release inode's oset.An assert fail occur
beacuse the oset can't be emptied.
If gather.has_subs() is true, we can't call flush_set_callback() because
this would cause a double drop of FILE_CACHE | FILE_BUFFER.
Fixes:http://tracker.ceph.com/issues/23837 Signed-off-by: Guan yunfei <yunfei.guan@xtaotech.com>
(cherry picked from commit 07e3bceea78dc8ecd76abb1cafca5c9d1fde521e)
Yan, Zheng [Wed, 2 May 2018 02:23:33 +0000 (10:23 +0800)]
mds: properly reconnect client caps after loading inodes
Commit e43c02d6 "mds: filter out blacklisted clients when importing
caps" makes MDCache::process_imported_caps() ignore clients that are
not in MDCache::rejoin_imported_session_map. The map does not contain
clients from which mds has received reconnect messages. This causes
some client caps (corresponding inodes were not in cache when mds was
in reconnect state) to get dropped.
Yan, Zheng [Tue, 8 May 2018 03:32:01 +0000 (11:32 +0800)]
mds: tighten conditions of calling rejoin_gather_finish()
Handle two cases:
1. mds receives all cache rejoin messages, then receives mdsmap that
says mds cluster enters rejoining state.
2. when opening undef inodes/dirfrags, other mds restarts.
Yan, Zheng [Tue, 8 May 2018 02:42:05 +0000 (10:42 +0800)]
mds: avoid calling rejoin_gather_finish() two times successively
If MDCache::rejoin_gather is empty and MDCache::rejoins_pending is true
when MDCache::process_imported_caps() calls maybe_send_pending_rejoins()
Both MDCache::rejoin_send_rejoins() and MDCache::process_imported_caps()
may call rejoin_gather_finish().
Jason Dillaman [Wed, 9 May 2018 16:37:22 +0000 (12:37 -0400)]
rbd: don't load config overrides from monitor initially
The overrides will be loaded when we connect to the cluster via librados
and the current approach prevents running 'rbd help' without a running
cluster.
Jason Dillaman [Fri, 4 May 2018 15:14:34 +0000 (11:14 -0400)]
rbd-mirror: ensure remote demotion is replayed locally
The bootstrap process cannot immediately quit if it notices the remote
image is not primary. Instead, it needs to continue if the local image is
still chained to the remote.
Fixes: http://tracker.ceph.com/issues/24009 Signed-off-by: Jason Dillaman <dillaman@redhat.com>
(cherry picked from commit d35bc94319c6fa267e973e533f4591568289ee96)
Volker Theile [Wed, 9 May 2018 08:29:11 +0000 (10:29 +0200)]
mgr/dashboard: Refactor RGW backend
- Do some polishing in the docs.
- Refactor RgwClient::is_service_online() method. The system is considered as online if the response structure is valid. The response content itself is not validated in this case.
- Relocate NoCredentialsException and derive it from RequestException.
This avoids unnecessary health warnings. However, the original issue in i23885
still exists because the standbys are not available at fs creation time. If you
create a new file system after these standbys are available, then you will
observe that the promotion works to silence the warnings.
Fixes: http://tracker.ceph.com/issues/23885 Signed-off-by: Patrick Donnelly <pdonnell@redhat.com>
(cherry picked from commit 93bc8c53ef51bf4fbaafad0c2d1ad79dbff8eb8b)
* refs/pull/21867/head:
qa/tasks/cephfs: add test for renewing stale session
client: invalidate caps and leases when session becomes stale
client: fix race in concurrent readdir
For a large directory, program needs to issue multiple readdir
syscalls to get all dentries. When there are multiple programs
read the directory concurrently. Following sequence of events
can happen.
- program calls readdir with pos = 2. ceph sends readdir request
to mds. The reply contains N1 entries. ceph adds these N1 entries
to readdir cache.
- program calls readdir with pos = N1+2. The readdir is satisfied
by the readdir cache, N2 entries are returned. (Other program
calls readdir in the middle, which fills the cache)
- program calls readdir with pos = N1+N2+2. ceph sends readdir
request to mds. The reply contains N3 entries and it reaches
directory end. ceph adds these N3 entries to the readdir cache
and marks directory complete.
The second readdir call does not update dirp->cache_index. ceph adds
the last N3 entries to wrong places.
Kefu Chai [Sun, 6 May 2018 06:52:06 +0000 (14:52 +0800)]
os/filestore: silence error from libstdc++ in gcc-8
this change silences following error
stl_tree.h:452:21: error: static assertion failed: comparison object
must be invocable with two arguments of key type
static_assert(__is_invocable<_Compare&, const _Key&, const _Key&>{},
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Kefu Chai [Sun, 6 May 2018 06:39:38 +0000 (14:39 +0800)]
messages,mon,osd: silence gcc-8 warnings related to memset()
this silences warnings like:
warning: ‘void* memset(void*, int, size_t)’ writing to an object of
non-trivial type ‘struct uuid_d’; use assignment instead [-Wcl\
ass-memaccess]
uuid_d only contains boost::uuids::uuid, which is "nil" initialized in
uuid_d's ctor. so we don't need to bother with memset() it with 0.
the same applies to entity_inst_t.
Kefu Chai [Sun, 6 May 2018 06:32:45 +0000 (14:32 +0800)]
cmake: specify missing settings for dpdk
* after upgrading to gcc-8, seems dpdk requires more settings to compile.
in which, CONFIG_RTE_MAX_VFIO_GROUPS=64 is copied from config/common_base.
* librte_bus_pci.a depends on librte_pci.a, so reorder the libraries
in DPDK_LIBRARIES.
* refs/pull/21857/head:
qa: move snap-hierarchy out of snaps workunits
qa: try snap format upgrade with multimds cluster
qa: add mds deactivation procedure for upgrades
The snapshot hierarchy it leaves behind can't be cleaned up by `rm -rf` which
breaks workunit cleanup. So, don't run this as part of normal snaps test.
Kefu Chai [Fri, 4 May 2018 08:11:53 +0000 (16:11 +0800)]
librados: timeout on mgr_command()
because the mgrclient will be waiting for the mgrmap if the mgrmap
is not available, when the client is about to send a mgr command.
and monitor will drop the subscription requests if the client does not
have enough cap for reading mon, so unlike mon commands, the client
won't get an EACCES return code in this case.
in this change, a timeout machinary is introduced. and the client
will wait for "rados-mon-op-timeout" before it gives up. if this
setting is 0, it will wait forever.