Bug #7190
closedosd/OSD.cc: 2338: FAILED assert(oldmap->have_pg_pool(pgid.pool()))
0%
Description
0> 2014-01-20 10:24:03.231708 7f4c692ce700 -1 osd/OSD.cc: In function 'bool OSD::project_pg_history(pg_t, pg_history_t&, epoch_t, const std::vector<int>&, const std::vector<int>&)' thread 7f4c692ce700 time 2014-01-20 10:24:03.194597 osd/OSD.cc: 2338: FAILED assert(oldmap->have_pg_pool(pgid.pool())) ceph version 0.75-330-g63a77f4 (63a77f465654261e13cf7fbd5ffc6ed0c9f2eca0) 1: (OSD::project_pg_history(pg_t, pg_history_t&, unsigned int, std::vector<int, std::allocator<int> > const&, std::vector<int, std::allocator<int> > const&)+0x48f) [0x631ddf] 2: (OSD::handle_pg_create(std::tr1::shared_ptr<OpRequest>)+0xc9a) [0x63c30a] 3: (OSD::dispatch_op(std::tr1::shared_ptr<OpRequest>)+0x2bd) [0x63ffed] 4: (OSD::_dispatch(Message*)+0x268) [0x647538] 5: (OSD::ms_dispatch(Message*)+0x1de) [0x647cde] 6: (DispatchQueue::entry()+0x549) [0xa49139] 7: (DispatchQueue::DispatchThread::entry()+0xd) [0x98ab0d] 8: (()+0x7e9a) [0x7f4c7715be9a] 9: (clone()+0x6d) [0x7f4c7571c3fd] NOTE: a copy of the executable, or `objdump -rdS <executable>` is needed to interpret this.
ubuntu@teuthology:/var/lib/teuthworker/archive/teuthology-2014-01-19_23:00:02-rados-master-testing-basic-plana/44825
ubuntu@teuthology:/var/lib/teuthworker/archive/teuthology-2014-01-19_23:00:02-rados-master-testing-basic-plana/44869
Updated by Greg Farnum over 10 years ago
Saw this several times in a suite testing a filestore change as well:
http://qa-proxy.ceph.com/teuthology/gregf-2014-01-23_13:55:49-rados-wip-7207-master-basic-plana/49271/
http://qa-proxy.ceph.com/teuthology/gregf-2014-01-23_13:55:49-rados-wip-7207-master-basic-plana/49259/
http://qa-proxy.ceph.com/teuthology/gregf-2014-01-23_13:55:49-rados-wip-7207-master-basic-plana/49243/
Updated by Samuel Just about 10 years ago
vector<int> up, acting;
- osdmap->pg_to_up_acting_osds(on, up, acting);
+ int up_primary, acting_primary;
+ osdmap->pg_to_up_acting_osds(on, &up, &up_primary, &acting, &acting_primary);
int role = osdmap->calc_pg_role(whoami, acting, acting.size());
- if (role != 0) {
+ if (up_primary != whoami) {
dout(10) << "mkpg " << pgid << " not primary (role=" << role << "), skipping" << dendl;
pg_to_up_acting_osds() just bails if it doesn't have the pool, so up_primary/acting_primary don't get filled in. Interestingly, it usually still passes the up_primary != whoami check probably because on the previous loop iteration pg_to_up_acting_osds fills in up_primary with whoami as one would expect.
Updated by Samuel Just about 10 years ago
- Status changed from 12 to Resolved
318e208ab6cf2262d5b9954efb11bd3e1fafac32