Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 50 additions & 0 deletions otto/src/clyso/ceph/ai/report.py
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,56 @@ def _handle_non_recommended_version(result, ver, rec_versions, rec_minor) -> Non
result.add_check_result("Version", "Release", "WARN", summary, detail, recommend)


@add_check
def check_elastic_shared_blob_affected_osds(result: AIResult, data: CephData) -> None:
if data.ceph_report is None:
return
report = data.ceph_report
section = "OSD Health"
check = "Elastic Shared Blob Bug"
affected_osds = []
osd_metadata = report.osd_metadata

for osd in osd_metadata:
created_ver_str = getattr(osd, "ceph_version_when_created", None)
if not created_ver_str:
continue
try:
created_ver = created_ver_str.split()[2]
created_ver_parsed = version.parse(created_ver)
if version.parse("19.2.0") <= created_ver_parsed < version.parse(
"19.2.4"
) or created_ver_parsed == version.parse("20.2.0"):
affected_osds.append(f"osd.{osd.id}")
except Exception:
continue

if not affected_osds:
passfail = "PASS"
summary = "No OSDs created during versions affected by Elastic Shared Blob bug"
detail = [
"No OSDs were created during Squid 19.2.0–19.2.3 or Tentacle 20.2.0, which are affected by "
"the Elastic Shared Blob (ESB) bug (https://tracker.ceph.com/issues/70390)."
]
recommend = []
else:
passfail = "WARN"
summary = f"{len(affected_osds)} OSD(s) may be affected by the Elastic Shared Blob bug"
detail = [
f"The following OSD(s) were created during an affected version (Squid 19.2.0–19.2.3 or "
f"Tentacle 20.2.0) and may be affected by the Elastic Shared Blob (ESB) bug "
f"(https://tracker.ceph.com/issues/70390): {', '.join(affected_osds)}. "
f"This bug can cause OSD crashes and potential data corruption. "
f"Note that v19.2.4 and v20.2.1 prevent new corruptions but cannot detect or repair existing ones."
]
recommend = [
'Run "ceph config set osd bluestore_elastic_shared_blobs 0" to prevent new corruptions. '
"OSDs created during affected versions should be completely recreated to ensure data integrity."
]

result.add_check_result(section, check, passfail, summary, detail, recommend)


@add_check
def check_report_known_bugs(result: AIResult, data: CephData) -> None:
if data.ceph_report is None:
Expand Down
17 changes: 13 additions & 4 deletions tests/otto.json
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
{
"summary": {
"score": 26.0,
"score": 27.0,
"grade": "F",
"max_score": 33
"max_score": 34
},
"sections": [
{
Expand Down Expand Up @@ -319,8 +319,8 @@
},
{
"id": "OSD Health",
"score": 10.0,
"max_score": 13,
"score": 11.0,
"max_score": 14,
"summary": "",
"info": [
{
Expand All @@ -330,6 +330,15 @@
}
],
"checks": [
{
"id": "Elastic Shared Blob Bug",
"result": "PASS",
"summary": "No OSDs created during versions affected by Elastic Shared Blob bug",
"detail": [
"No OSDs were created during Squid 19.2.0–19.2.3 or Tentacle 20.2.0, which are affected by the Elastic Shared Blob (ESB) bug (https://tracker.ceph.com/issues/70390)."
],
"recommend": []
},
{
"id": "Check osdmap flags",
"result": "PASS",
Expand Down
Loading