Bug #36378
upmap to same osd twice possible, crashes calc_pg_upmaps
Status:
New
Priority:
Normal
Assignee:
-
Category:
-
Target version:
-
% Done:
0%
Source:
Community (user)
Tags:
Backport:
luminous,mimic
Regression:
No
Severity:
3 - minor
Reviewed:
Affected Versions:
ceph-qa-suite:
Component(RADOS):
Pull request ID:
Crash signature (v1):
Crash signature (v2):
Description
Somehow v12.2.8 let me define an upmap like this:
pg_upmap_items 75.1ef [643,1100,625,907,647,1100]
and this leads to a crash in calc_pg_upmaps:
(gdb) up Python Exception <type 'exceptions.ValueError'> Cannot find type const std::set<long, std::less<long>, std::allocator<long> >::_Rep_type: #8 OSDMap::calc_pg_upmaps (this=0x562210187880, cct=0x562209faa1c0, max_deviation_ratio=0.00999999978, max=9, only_pools_orig=std::set with 1 elements, pending_inc=0x56221279d000) at /usr/src/debug/ceph-12.2.8/src/osd/OSDMap.cc:4126 4126 tmp.pg_upmap_items.erase(p); (gdb) list 4121 if (p != tmp.pg_upmap_items.end()) { 4122 for (auto q : p->second) { 4123 if (q.second == osd) { 4124 ldout(cct, 10) << " dropping pg_upmap_items " << pg 4125 << " " << p->second << dendl; 4126 tmp.pg_upmap_items.erase(p); 4127 pending_inc->old_pg_upmap_items.insert(pg); 4128 ++num_changed; 4129 restart = true; 4130 } (gdb) p pg $1 = {m_pool = 75, m_seed = 495, m_preferred = -1, static calc_name_buf_size = 36 '$'} (gdb) p p $2 = {first = {m_pool = 8675468274861041776, m_seed = 1382639220, m_preferred = 863261515, static calc_name_buf_size = 36 '$'}, second = std::vector of length 163398857340263679, capacity -747910334070635646 = {<error reading variable>
We should filter out upmaps which define the same osd more than once either in the from set or the to set.
History
#1 Updated by Sebastian Wagner almost 5 years ago
- Project changed from mgr to RADOS
- Category deleted (
ceph-mgr)