Skip to content

Commit 616fbc1

Browse files
authored
Merge pull request ceph#59098 from athanatos/sjust/wip-67415-alienstore-mkfs-crash
crimson: clear AlienStore::coll_map in umount rather than in stop Reviewed-by: Yingxin Cheng <[email protected]> Reviewed-by: Matan Breizman <[email protected]>
2 parents 530a260 + 65734ae commit 616fbc1

File tree

2 files changed

+49
-45
lines changed

2 files changed

+49
-45
lines changed

src/crimson/os/alienstore/alien_store.cc

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -128,13 +128,6 @@ seastar::future<> AlienStore::stop()
128128
return seastar::now();
129129
}
130130
return tp->submit([this] {
131-
{
132-
std::lock_guard l(coll_map_lock);
133-
for (auto [cid, ch]: coll_map) {
134-
static_cast<AlienCollection*>(ch.get())->collection.reset();
135-
}
136-
coll_map.clear();
137-
}
138131
store.reset();
139132
cct.reset();
140133
g_ceph_context = nullptr;
@@ -182,6 +175,13 @@ seastar::future<> AlienStore::umount()
182175
}
183176
return op_gate.close().then([this] {
184177
return tp->submit([this] {
178+
{
179+
std::lock_guard l(coll_map_lock);
180+
for (auto [cid, ch]: coll_map) {
181+
static_cast<AlienCollection*>(ch.get())->collection.reset();
182+
}
183+
coll_map.clear();
184+
}
185185
return store->umount();
186186
});
187187
}).then([] (int r) {

src/crimson/osd/osd.cc

Lines changed: 42 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -197,50 +197,54 @@ seastar::future<> OSD::mkfs(
197197
std::string osdspec_affinity)
198198
{
199199
LOG_PREFIX(OSD::mkfs);
200-
return store.start().then([&store, FNAME, osd_uuid] {
201-
return store.mkfs(osd_uuid).handle_error(
202-
crimson::stateful_ec::assert_failure([FNAME] (const auto& ec) {
203-
ERROR("error creating empty object store in {}: ({}) {}",
204-
local_conf().get_val<std::string>("osd_data"),
205-
ec.value(), ec.message());
206-
}));
207-
}).then([&store, FNAME] {
208-
return store.mount().handle_error(
209-
crimson::stateful_ec::assert_failure([FNAME](const auto& ec) {
210-
ERROR("error mounting object store in {}: ({}) {}",
211-
local_conf().get_val<std::string>("osd_data"),
212-
ec.value(), ec.message());
213-
}));
214-
}).then([&store] {
215-
return open_or_create_meta_coll(store);
216-
}).then([&store, whoami, cluster_fsid](auto meta_coll) {
200+
201+
co_await store.start();
202+
203+
co_await store.mkfs(osd_uuid).handle_error(
204+
crimson::stateful_ec::assert_failure([FNAME] (const auto& ec) {
205+
ERROR("error creating empty object store in {}: ({}) {}",
206+
local_conf().get_val<std::string>("osd_data"),
207+
ec.value(), ec.message());
208+
}));
209+
210+
co_await store.mount().handle_error(
211+
crimson::stateful_ec::assert_failure([FNAME](const auto& ec) {
212+
ERROR("error mounting object store in {}: ({}) {}",
213+
local_conf().get_val<std::string>("osd_data"),
214+
ec.value(), ec.message());
215+
}));
216+
217+
{
218+
auto meta_coll = co_await open_or_create_meta_coll(store);
219+
217220
OSDSuperblock superblock;
218221
superblock.cluster_fsid = cluster_fsid;
219222
superblock.osd_fsid = store.get_fsid();
220223
superblock.whoami = whoami;
221224
superblock.compat_features = get_osd_initial_compat_set();
222-
return _write_superblock(
225+
co_await _write_superblock(
223226
store, std::move(meta_coll), std::move(superblock));
224-
}).then([&store, cluster_fsid] {
225-
return store.write_meta("ceph_fsid", cluster_fsid.to_string());
226-
}).then([&store] {
227-
return store.write_meta("magic", CEPH_OSD_ONDISK_MAGIC);
228-
}).then([&store, whoami] {
229-
return store.write_meta("whoami", std::to_string(whoami));
230-
}).then([&store] {
231-
return _write_key_meta(store);
232-
}).then([&store, osdspec_affinity=std::move(osdspec_affinity)] {
233-
return store.write_meta("osdspec_affinity", osdspec_affinity);
234-
}).then([&store] {
235-
return store.write_meta("ready", "ready");
236-
}).then([&store, whoami, cluster_fsid] {
237-
fmt::print("created object store {} for osd.{} fsid {}\n",
238-
local_conf().get_val<std::string>("osd_data"),
239-
whoami, cluster_fsid);
240-
return store.umount();
241-
}).then([&store] {
242-
return store.stop();
243-
});
227+
}
228+
229+
co_await store.write_meta("ceph_fsid", cluster_fsid.to_string());
230+
231+
co_await store.write_meta("magic", CEPH_OSD_ONDISK_MAGIC);
232+
233+
co_await store.write_meta("whoami", std::to_string(whoami));
234+
235+
co_await _write_key_meta(store);
236+
237+
co_await store.write_meta("osdspec_affinity", osdspec_affinity);
238+
239+
co_await store.write_meta("ready", "ready");
240+
241+
INFO("created object store {} for osd.{} fsid {}\n",
242+
local_conf().get_val<std::string>("osd_data"),
243+
whoami, cluster_fsid);
244+
co_await store.umount();
245+
246+
co_await store.stop();
247+
co_return;
244248
}
245249

246250
seastar::future<> OSD::_write_superblock(

0 commit comments

Comments
 (0)