`AsyncMessenger` has `local_connection` – an instance of
`AsyncConnection` used to send messages to itself (loop back).
Connections are handled by `EventCenter` in its dedicated
thread. When shutting down a messenger, it must be ensured
there is no task left in the `EventCenter`'s queue. Otherwise
a use-after-free can happen. That's the reason why `shutdown()`
of `AsyncMessenger` does `mark_down_all()` on connections
**before** draining the stack. The latter actually injects a task
into all `EventCenter` instances and waits for its completion
(synchronization barrier).
However, that's not the case for `local_connection`. Without
the patch it's marked down by the messenger's destructor
far **after** the synchronization barrier. This behavior is
dangerous when an implementation of `mark_down()` creates
a new task to be executed inside the boundaries of corresponding
`EventCenter` instance.
The fix unifies handling of `local_connection` with other
connections in the aspect of the shutdown phase.
Fixes: https://tracker.ceph.com/issues/43667
Signed-off-by: Radoslaw Zarzynski <rzarzyns@redhat.com>
tx_pkt_burst loops until the next pointer is null, set next pointer of
the last segment nullptr to fix this issue.
Signed-off-by: Chunsong Feng <fengchunsong@huawei.com>
Signed-off-by: luo rixin <luorixin@huawei.com>
* refs/pull/32114/head:
doc: split index.rst of dev guide
doc: tweak few section titles in dev guide
doc: don't display contents twice in dev guide
doc: add guide for running tests with teuthology
Reviewed-by: Josh Durgin <jdurgin@redhat.com>
Reviewed-by: Patrick Donnelly <pdonnell@redhat.com>
Reviewed-by: Kefu Chai <kchai@redhat.com>
This PR removes the now-very-old (2012) production cluster
examples from the hardware recommendations page.
Sage requested this change in IRC on 14 Jan 2020. There is no issue link.
Signed-off-by: Zac Dover <zac.dover@gmail.com>
* refs/pull/32619/head:
kv/RocksDBStore: break out of compaction thread early on shutdown
kv/RocksDBStore: debug async compaction
Reviewed-by: Neha Ojha <nojha@redhat.com>
The problem was that pg autoscaling is set to "on" by default. Therefore
the pg_num field is hidden, which caused the error. Now the test sets
the pg autoscaling to "off" revealing the pg_num field to make the tests
pass.
Fixes: https://tracker.ceph.com/issues/43594
Fixes: https://tracker.ceph.com/issues/43102
Signed-off-by: Stephan Müller <smueller@suse.com>
This helper method selects an option inside a select element.
It will also expect that the option was set.
Fixes: https://tracker.ceph.com/issues/43594
Signed-off-by: Stephan Müller <smueller@suse.com>
* refs/pull/31763/head:
test: auto-upgrade subvolume test
mgr/volumes: tie everything together to implement versioned subvolumes
mgr/volumes: provide subvolume create/remove/open APIs
mgr/volumes: implement subvolume based on subvolume template
mgr/volumes: implement subvolume group based on group template
mgr/volumes: implement trash as a subvolume group
mgr/volumes: snapshot util module
mgr/volumes: template for implementing groups and subvolumes
mgr/volumes: implement filesystem volume module
mgr/volumes: lock module to serialize volume operations
mgr/volumes: introduce volume specification module
mgr/volumes: add fs_util helper module
Reviewed-by: Ramana Raja <rraja@redhat.com>
Reviewed-by: Patrick Donnelly <pdonnell@redhat.com>
Moved vselector.sub_usage, so sub_usage and add_usage will not cross
_flush_bdev_safely(), which contains unlock().
Fixes: https://tracker.ceph.com/issues/43538
Signed-off-by: Adam Kupczyk <akupczyk@redhat.com>
ASSERT_EQ() is better than ASSERT_TRUE() when checking for equality, as
it is able to print the unmatched variables.
also, in ASSERT_EQ(), the first parameter is the expected value. so
transpose the parameters for better error messages.
Signed-off-by: Kefu Chai <kchai@redhat.com>
adapt based on btree implementation from Abseil Common Libraries.
with following changes:
* remove abseil dependencies. as abseil libraries do support C++11,
they are written in C++11 compatible way. and use its homebrew
alternatives for the facilities offered by C++14 and C++17. but
Ceph is in C++17, so replace those facilities using the ones
from the C++ standard library
* change `key_compare_to_adapter` to adapt to arithmetic types, and
those who have `compare()` defined.
* move SlotPolicy into *_params types, simpler this way.
* continue using *_fields types. the layout facilities is nice. but
we don't need this flexibility at this moment.
* continue using `empty_base_handle` for EBCO, CompressedTuple is
nice, but it involves more dependencies which we don't want at
this moment.
* node handle support is dropped. it's part of C++17 standard for
node-based containers. we don't use it at this moment. but it's
relatively simple if we want to add it back.
Signed-off-by: Kefu Chai <kchai@redhat.com>
it's equivalent to the `<=>` operator in C++20. it helps to simplify the
definition of other equality operators.
Signed-off-by: Kefu Chai <kchai@redhat.com>
* refs/pull/32348/head:
mds: Move data members of struct SnapRealm to private.
mds: Reorganize structure members in SnapRealm header
Reviewed-by: Patrick Donnelly <pdonnell@redhat.com>