Project

General

Profile

Actions

Bug #10117

closed

OSD crashes if xattr "_" is absent for the file when doing backfill scanning (ReplicatedPG::scan_range)

Added by Guang Yang over 9 years ago. Updated about 7 years ago.

Status:
Won't Fix
Priority:
Normal
Assignee:
-
Category:
OSD
Target version:
-
% Done:

0%

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

Description

We observed a OSD crash pattern which is due to xattr "_" is absent for the file (on filesystem) which result in an assertion failure, corresponding code snippet is:

void ReplicatedPG::scan_range(...) {
for (vector<hobject_t>::iterator p = ls.begin(); p != ls.end(); ++p) {
    handle.reset_tp_timeout();
    ObjectContextRef obc;
    if (is_primary())
      obc = object_contexts.lookup(*p);
    if (obc) {
      bi->objects[*p] = obc->obs.oi.version;
      dout(20) << "  " << *p << " " << obc->obs.oi.version << dendl;
    } else {
      bufferlist bl;
      int r = pgbackend->objects_get_attr(*p, OI_ATTR, &bl);
      assert(r >= 0);
      ...
    }
...
}

I am not sure if there is a better way to handle such data corruption, but a better way might be to tolerate such corruption and use redundancy to construct the list.

Ceph version: v0.80.4
Platform: RHEL6.5


Related issues 1 (0 open1 closed)

Related to Ceph - Bug #10150: osd/ReplicatedPG.cc: 10853: FAILED assert(r >= 0) (in _scan_range)ResolvedSamuel Just11/20/2014

Actions
Actions

Also available in: Atom PDF