Kefu Chai [Sat, 1 Oct 2022 10:03:30 +0000 (18:03 +0800)]
crimson/osd: drop redundant code
this change is a cleanup.
we already update `superblock` with the latest `boost_epoch` and
osdmap's epoch in `OSD::handle_osd_map()`, and `committed_osd_maps()` is
called at end of this function. `shutdown()` is called when we marked
down and stop by the monitor in `committed_osd_maps()`. so these
assignment statements are noops. instead, we should stop the whole osd
service. let's leave it for another commit.
Kefu Chai [Sat, 1 Oct 2022 09:43:00 +0000 (17:43 +0800)]
crimson/osd: use abort_source in stop_signal
before this change, `stop_signal::wait()` waits until it receives
`SIGTERM` or `SIGINT`, but we also need to stop the service per the
request of monitor or when a serious health condition is detected.
so, an `abort_source` should allow the server to request abort by
itself. also, as the single truth of stop, `stop_signal` will be
able to send the message to its subscribers to abort any "blocking"
calls which might prevent or delay the stop process.
Kefu Chai [Sat, 1 Oct 2022 08:30:43 +0000 (16:30 +0800)]
crimson/osd: vendor stop_signal.h
stop_signal.h is copied from seastar/apps/lib/stop_signal.hh. this
change copies it int our project so we can customize it in a following
commit. we will need to add an `abort_source` member to it.
the class `stop_signal` works great for us. but under some
circumstances, we also need to stop the crimson server programmatically
from the server itsef, for instance, per the request of monitor. in that
case, `stop_signal` cannot fulfill our needs, as the only thing which
can stop it is, SIGTERM or SIGTERM. we could send SIGINT to ourselves to
unblock `stop_signal::wait()`. but it would be better if we could leverage
`abort_source` for this purpose. for two reasons:
* `abort_source` allows use to cancel a "blocking" op.
we have a couple background tasks in crimson, like `AdminSocket`'s
accept and handle task, which could have been stopped by an
`abort_source`. but now it checks for the `stop_gate` before accepting
an incoming connection. this pattern cannot be always be repeated.
because we cannot *abort* a "blocking" task. for instance, we use
a homebrew `tri_mutex` to protect the read/write consistency of
an obc, what if the server would need to stop when a request is
still trying to acquire the lock? with the help of the `abort_source`,
we should be able to either subscribe from the `abort_source`,
and set an abort exception for each of the waiters. the same applies
to other "blocking" calls like `shared_promise::get_shared_future()`,
this allows us to abort the waiter before the promise is resolved.
this could be handy if we need to abort potentially op which
might take long and should be aborted when monitor wants to
kill the osd instance.
* `abort_source` allows us to abort the services programmatically.
this is the use case mentioned in the beginning of this commit
message.
This PR rewrites the front matter in the "Erasure Code"
section of the RADOS documentation. Previously, the information
in this section was syntactically confused. I have also fleshed
out the distinction between erasure coding and replication.
Josh Durgin [Fri, 11 Mar 2022 20:17:54 +0000 (15:17 -0500)]
doc/governance: update based on review and CLT discussions
Clarified some parts of council that were discussed previously,
specifying the number of members and a staggered term.
Added a bit more about the steering committee - thinking the meetings
could be split between tactical (3/4 weeks) and strategic (monthly),
and still open to anyone to join the discussion, but restricted to
only members voting.
Removed the meeting section since that belongs more in a separate
place, like the ceph.io website.
Josh Durgin [Fri, 15 Oct 2021 15:36:07 +0000 (11:36 -0400)]
doc/governance: add proposed structure
This is Sage's summary of the Ceph leadership team discussions around
this topic. Still many details to be worked out, this is just one
concrete proposal as a basis for further discussion.
duplicates some of the logic from member functions of
RGWRealm/Period/ZoneGroup/ZoneParams, but as free functions in terms
of the sal::ConfigStore APIs
[ 0%] Building CXX object src/compressor/CMakeFiles/compressor_objs.dir/Compressor.cc.o
In file included from /d/ceph-build/ceph-17.2.3-0-dff484dfc9e/src/common/config_values.h:59,
from /d/ceph-build/ceph-17.2.3-0-dff484dfc9e/src/common/config.h:27,
from /d/ceph-build/ceph-17.2.3-0-dff484dfc9e/src/common/config_proxy.h:6,
from /d/ceph-build/ceph-17.2.3-0-dff484dfc9e/src/common/ceph_context.h:41,
from /d/ceph-build/ceph-17.2.3-0-dff484dfc9e/src/compressor/Compressor.cc:23:
/d/ceph-build/ceph-17.2.3-0-dff484dfc9e/src/common/options/legacy_config_opts.h:1:10: fatal error: global_legacy_options.h: No such file or directory
1 | #include "global_legacy_options.h"
| ^~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
make[2]: *** [src/compressor/CMakeFiles/compressor_objs.dir/build.make:76: src/compressor/CMakeFiles/compressor_objs.dir/Compressor.cc.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:7964: src/compressor/CMakeFiles/compressor_objs.dir/all] Error 2
make: *** [Makefile:146: all] Error 2
error: Bad exit status from /var/tmp/rpm-tmp.1CBUsC (%build)
RPM build errors:
Bad exit status from /var/tmp/rpm-tmp.1CBUsC (%build)
Solution: add legacy-option-headers dependency to compressor_objs.
Laura Flores [Wed, 28 Sep 2022 17:17:17 +0000 (17:17 +0000)]
mgr/telemetry: handle daemons with complex ids
Treating daemons as `<daemon_type>.x` caused a crash
in the Telemetry module since the current method does not cover a case
where a daemon id is more complex, i.e. `<daemon_type>.x.y`.
When we parse the daemon type and daemon id, we should
split it into a maximum of two pieces rather than splitting
it by every `.` character. Specifying `1` in the Python
.split() function will limit the split to a maximum of two items.
Fixes: https://tracker.ceph.com/issues/57700 Signed-off-by: Laura Flores <lflores@redhat.com>
John Mulligan [Tue, 27 Sep 2022 18:50:44 +0000 (14:50 -0400)]
cephadm: rename import from cd to _cephadm
The `cd` name is an abbreviation of an obsolete name for cephadm.
As this is not widely known it could be confusing or conflict with
other common terms like `cd` for "change dir" or "compact disc".
Therefore we rename it to something much clearer.
Signed-off-by: John Mulligan <jmulligan@redhat.com>
John Mulligan [Tue, 27 Sep 2022 18:50:24 +0000 (14:50 -0400)]
cephadm: rename import from cd to _cephadm
The `cd` name is an abbreviation of an obsolete name for cephadm.
As this is not widely known it could be confusing or conflict with
other common terms like `cd` for "change dir" or "compact disc".
Therefore we rename it to something much clearer.
Signed-off-by: John Mulligan <jmulligan@redhat.com>
John Mulligan [Tue, 27 Sep 2022 18:49:39 +0000 (14:49 -0400)]
cephadm: rename import from cd to _cephadm
The `cd` name is an abbreviation of an obsolete name for cephadm.
As this is not widely known it could be confusing or conflict with
other common terms like `cd` for "change dir" or "compact disc".
Therefore we rename it to something much clearer.
Signed-off-by: John Mulligan <jmulligan@redhat.com>
John Mulligan [Mon, 26 Sep 2022 19:30:25 +0000 (15:30 -0400)]
cephadm: lazily import cephadm in fixtures.py
We can avoid creating side-effects in the cephadm module by only importing
the module in the functions that are meant to generate side effects.
Simply importing fixtures and not calling any of the functions now can
not change cephadm by accident.
Signed-off-by: John Mulligan <jmulligan@redhat.com>
John Mulligan [Mon, 26 Sep 2022 19:20:25 +0000 (15:20 -0400)]
cephadm: remove container_engine argument from test helper function
The with_cephadm_ctx test helper function had an argument that *called*
mock_podman function, thus calling the function at import-time. This can
lead to confusing and unexpected side effects. Because the
container_engine argument is not used by any callers of with_cephadm_ctx
we remove the argument.
All other callers of with_cephadm_ctx that make use of container engine
are already setting `ctx.container_engine = <xyz>` so removing the
argument makes it harder to make the same mistake again in the future.
Signed-off-by: John Mulligan <jmulligan@redhat.com>
John Mulligan [Mon, 26 Sep 2022 19:14:20 +0000 (15:14 -0400)]
cephadm: fix iscsi test_unit_run relying on how cephadm was being imported
The iscsi test_unit_run test case was relying upon a strange side-effect
of how the cephadm module was being imported in fixtures.py. In short,
it expected the podman container_engine not to be a subclass of Podman.
```
(Pdb) p ctx.container_engine
<Mock spec='Podman' id='140676342644256'>
(Pdb) p ctx.container_engine.__class__
<class 'cephadm.Podman'>
(Pdb) p isinstance(ctx.container_engine, Podman)
False
(Pdb) p id(ctx.container_engine.__class__) 94372514199712
(Pdb) p id(Podman) 94372516682112
```
In order to clean up fixtures.py and other imports of cephadm as a
module, we fix the test to expect a mock docker. We choose docker
because it only requires changes the path of the container engine. If we
changed it to a real podman subclass we'd have to change many arguments
in the expected CLI text.
Signed-off-by: John Mulligan <jmulligan@redhat.com>
Ken Dreyer [Tue, 13 Sep 2022 20:18:36 +0000 (16:18 -0400)]
cmake: add -fstack-protector-strong on win32
mingw on RHEL 9 needs -fstack-protector (which adds -lssp), or it fails
with these errors:
undefined reference to `__stack_chk_fail'
undefined reference to `__stack_chk_guard'
undefined reference to `__strcpy_chk'
Commit 8d35b2eceabafbe13458101f8701e3fc49f15d63 mentions that the build
fails with -fstack-protector-strong. Perhaps that only applied to
earlier Ubuntu versions, because Ubuntu Focal can build with
-fstack-protector-strong now.
Ken Dreyer [Tue, 13 Sep 2022 17:34:35 +0000 (13:34 -0400)]
cmake: set empty CMAKE_DL_LIBS on MinGW
Upstream CMake sets CMAKE_DL_LIBS to an empty value on MINGW, but the
Fedora and RHEL packages override this and set "dl". Re-set it back to
an empty value.
We can revert this if https://bugzilla.redhat.com/2127529 is resolved
for CMake in Fedora and RHEL.
Samuel Just [Thu, 8 Sep 2022 23:12:45 +0000 (23:12 +0000)]
crimson/net: Message::conn needs to be a foreign_ptr
There are two main consequences of this:
1. Messages can't be default copy constructed in crimson. MMonCommand
seems to be the only user, and we simply add a copy constructor that
duplicates data portions of the message.
2. We can't casually copy-construct the conn into other structures.
The main user here is watch/notify. We use copy() explicitely
to populate the object_context structures and avoid passing
ConnectionFRef by value.
Samuel Just [Fri, 2 Sep 2022 21:10:40 +0000 (14:10 -0700)]
crimson/common/operation: release pipeline stages on the core they are on
Otherwise, tasks waiting on the stage will wake up on the wrong core.
Later, we may choose to statically enable this behavior only for stages
that can actually span cores, but this is ok for now.
Samuel Just [Tue, 30 Aug 2022 22:00:37 +0000 (15:00 -0700)]
crimson/osd: replace global tid with unique core-local tids
We don't really want a global counter here if we can avoid it. Instead,
assign tids with core-local counters prefixed with the core id. We
continue to ensure that tids are unique within an osd boot, but lose
the property that sucessive tids on different cores are ordered. I
don't see anything relying on that property, however, so this should be
fine.
Samuel Just [Tue, 30 Aug 2022 21:57:59 +0000 (14:57 -0700)]
crimson/osd: remove explicit pg counter
The main user of num_pgs was get_target_pg_log_entries(), but we
don't really want to be accessing a global counter there if we
can avoid it. Instead, compute a core-local target and use the
core-local pg count.
For now, FuturizedStore implementations assume that methods are invoked
on core 0. Later, we'll adapt each implementation to intelligently
support invocation on any pg core. Until then, this wrapper converts
the existing implementations to a safe, if not particuarly performant,
proxy behavior.
Samuel Just [Thu, 1 Sep 2022 23:22:59 +0000 (23:22 +0000)]
crimson/osd: refactor pg management for multicore
OSDSingletonState will now only be responsible for the spg_t->core
mapping for pgs, the individual PerShardState's will hold local
PGMap's. PG management operations are now proxied from PGShardManager
to PerShardState. Subsequent patches will shard PerShardState.
Zack Cerza [Thu, 4 Aug 2022 19:58:56 +0000 (13:58 -0600)]
tasks/cephadm: Add 'osd_method' config item
Since the default of None gets interpreted as 'lvm', the only useful
value would be 'raw'. This will enable us to use loop devices inside
containers for OSDs.