Skip to content

Commit be41017

Browse files
authored
Merge pull request ceph#63232 from amathuria/wip-amat-update-seastar
seastar: bump up seastar submodule Reviewed-by: Matan Breizman <[email protected]>
2 parents 614e83c + 0f3b651 commit be41017

File tree

5 files changed

+66
-19
lines changed

5 files changed

+66
-19
lines changed

install-deps.sh

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -426,8 +426,9 @@ else
426426
[ ! $NO_BOOST_PKGS ] && install_boost_on_ubuntu focal
427427
;;
428428
*Jammy*)
429-
[ ! $NO_BOOST_PKGS ] && install_boost_on_ubuntu jammy
430429
$SUDO apt-get install -y gcc
430+
ensure_decent_gcc_on_ubuntu 12 jammy
431+
[ ! $NO_BOOST_PKGS ] && install_boost_on_ubuntu jammy
431432
;;
432433
*)
433434
$SUDO apt-get install -y gcc

src/crimson/tools/perf_crimson_msgr.cc

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,15 +44,16 @@ seastar::logger& logger() {
4444
return crimson::get_logger(ceph_subsys_ms);
4545
}
4646

47+
template <typename T>
48+
static std::list<seastar::lw_shared_ptr<seastar::sharded<T>>> sharded_objects;
49+
4750
template <typename T, typename... Args>
4851
seastar::future<T*> create_sharded(Args... args) {
4952
// seems we should only construct/stop shards on #0
5053
return seastar::smp::submit_to(0, [=] {
5154
auto sharded_obj = seastar::make_lw_shared<seastar::sharded<T>>();
55+
sharded_objects<T>.push_back(sharded_obj);
5256
return sharded_obj->start(args...).then([sharded_obj]() {
53-
seastar::engine().at_exit([sharded_obj]() {
54-
return sharded_obj->stop().then([sharded_obj] {});
55-
});
5657
return sharded_obj.get();
5758
});
5859
}).then([] (seastar::sharded<T> *ptr_shard) {
@@ -1167,8 +1168,23 @@ static seastar::future<> run(
11671168
});
11681169
}
11691170
}).finally([] {
1170-
return crimson::common::sharded_conf().stop();
1171+
return seastar::smp::submit_to(0, [] {
1172+
return seastar::do_for_each(sharded_objects<test_state::Server>,
1173+
[](auto& sharded_obj) {
1174+
return sharded_obj->stop();
1175+
}).then([] {
1176+
return seastar::do_for_each(sharded_objects<test_state::Client>,
1177+
[](auto& sharded_obj) {
1178+
return sharded_obj->stop();
1179+
});
1180+
});
1181+
}).then([] {
1182+
sharded_objects<test_state::Server>.clear();
1183+
sharded_objects<test_state::Client>.clear();
1184+
return crimson::common::sharded_conf().stop();
1185+
});
11711186
});
1187+
11721188
}
11731189

11741190
}

src/crimson/tools/perf_staged_fltree.cc

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
#include <seastar/core/app-template.hh>
77
#include <seastar/core/thread.hh>
8+
#include <seastar/util/closeable.hh>
89

910
#include "crimson/common/config_proxy.h"
1011
#include "crimson/common/log.h"
@@ -116,15 +117,11 @@ seastar::future<> run(const bpo::variables_map& config) {
116117

117118
using crimson::common::sharded_conf;
118119
sharded_conf().start(EntityName{}, std::string_view{"ceph"}).get();
119-
seastar::engine().at_exit([] {
120-
return sharded_conf().stop();
121-
});
120+
auto sharded_conf_stop = seastar::deferred_stop(sharded_conf());
122121

123122
using crimson::common::sharded_perf_coll;
124123
sharded_perf_coll().start().get();
125-
seastar::engine().at_exit([] {
126-
return sharded_perf_coll().stop();
127-
});
124+
auto sharded_perf_stop = seastar::deferred_stop(sharded_perf_coll());
128125

129126
auto kvs = KVPool<test_item_t>::create_raw_range(
130127
ns_sizes, oid_sizes, onode_sizes,

src/seastar

Submodule seastar updated 112 files

src/test/crimson/test_messenger.cc

Lines changed: 40 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -54,19 +54,34 @@ static entity_addr_t get_server_addr() {
5454
return saddr;
5555
}
5656

57+
/*
58+
* at_exit() is now deprecated, and Seastar recommends using deferred_stop()
59+
* as an alternative for object cleanup.
60+
*
61+
* However, in our use case, deferred_stop() is not a suitable replacement
62+
* due to differences in how it manages object lifetimes.
63+
*
64+
* Previously, at_exit() captured the sharded_obj and kept it alive until shutdown.
65+
* In contrast, deferred_stop() does not retain ownership and assumes the referenced
66+
* object remains valid for the lifetime of the deferred_stop instance.
67+
*
68+
* To address this, we introduced a static list to retain each sharded_obj
69+
* created via create_sharded().
70+
*/
71+
72+
template <typename T>
73+
static std::list<seastar::lw_shared_ptr<seastar::sharded<T>>> sharded_objects;
74+
5775
template <typename T, typename... Args>
5876
seastar::future<T*> create_sharded(Args... args) {
5977
// we should only construct/stop shards on #0
60-
return seastar::smp::submit_to(0, [=] {
78+
return seastar::smp::submit_to(0, [=]() -> seastar::future<seastar::sharded<T>*> {
6179
auto sharded_obj = seastar::make_lw_shared<seastar::sharded<T>>();
62-
return sharded_obj->start(args...
63-
).then([sharded_obj] {
64-
seastar::engine().at_exit([sharded_obj] {
65-
return sharded_obj->stop().then([sharded_obj] {});
66-
});
80+
sharded_objects<T>.push_back(sharded_obj);
81+
return sharded_obj->start(args...).then([sharded_obj] {
6782
return sharded_obj.get();
6883
});
69-
}).then([](seastar::sharded<T> *ptr_shard) {
84+
}).then([](seastar::sharded<T>* ptr_shard) {
7085
return &ptr_shard->local();
7186
});
7287
}
@@ -390,6 +405,15 @@ static seastar::future<> test_echo(unsigned rounds,
390405
}).handle_exception([](auto eptr) {
391406
logger().error("test_echo() failed: got exception {}", eptr);
392407
throw;
408+
}).then([] {
409+
return seastar::smp::submit_to(0, [] {
410+
return seastar::do_for_each(sharded_objects<test_state::Client>,
411+
[](auto& sharded_obj) {
412+
return sharded_obj->stop();
413+
});
414+
}).then([] {
415+
sharded_objects<test_state::Client>.clear();
416+
});
393417
}).finally([gates, server1, server2] {
394418
return gates->close();
395419
});
@@ -3832,6 +3856,15 @@ seastar::future<int> do_test(seastar::app_template& app)
38323856
// which will result in memory leak and thus fail LeakSanitizer.
38333857
return seastar::sleep(100ms);
38343858
});
3859+
}).then([] {
3860+
return seastar::smp::submit_to(0, [] {
3861+
return seastar::do_for_each(sharded_objects<ShardedGates>,
3862+
[](auto& sharded_obj) {
3863+
return sharded_obj->stop();
3864+
});
3865+
}).then([] {
3866+
sharded_objects<ShardedGates>.clear();
3867+
});
38353868
}).then([] {
38363869
return crimson::common::sharded_conf().stop();
38373870
}).then([] {

0 commit comments

Comments
 (0)