Project

General

Profile

Actions

Bug #7190

closed

osd/OSD.cc: 2338: FAILED assert(oldmap->have_pg_pool(pgid.pool()))

Added by Sage Weil over 10 years ago. Updated about 10 years ago.

Status:
Resolved
Priority:
Urgent
Assignee:
Category:
OSD
Target version:
-
% Done:

0%

Source:
Q/A
Tags:
Backport:
Regression:
Severity:
3 - minor
Reviewed:
Affected Versions:
ceph-qa-suite:
Pull request ID:
Crash signature (v1):
Crash signature (v2):

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

Actions #1

Updated by Sage Weil over 10 years ago

  • Description updated (diff)
Actions #3

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.

Actions #4

Updated by Samuel Just about 10 years ago

  • Assignee set to Samuel Just
Actions #5

Updated by Samuel Just about 10 years ago

  • Status changed from 12 to Resolved

318e208ab6cf2262d5b9954efb11bd3e1fafac32

Actions

Also available in: Atom PDF