Updated cluster now to 12.2.4 and the cycle of inconsistent->repair->unfound seems to continue, though possibly slightly differently. A pg does pass through an "active+clean" phase after repair, which might be new, but more likely I never observed it at the right time before.

I see messages like this in the logs now "attr name mismatch 'hinfo_key'" - perhaps this might cast more light on the cause:

2018-03-02 18:55:11.583850 osd.386 osd.386 401 : 
cluster [ERR] 70.3dbs0 : soid 
70:dbc6ed68:::default.325674.85_bellplants_images%2f1055211.jpg:head attr name 
mismatch 'hinfo_key'
2018-03-02 19:00:18.031929 osd.386 osd.386 428 : 
cluster [ERR] 70.3dbs0 : soid 
70:dbc97561:::default.325674.85_bellplants_images%2f1017818.jpg:head attr name 
mismatch 'hinfo_key'
2018-03-02 19:04:50.058477 osd.386 osd.386 452 : 
cluster [ERR] 70.3dbs0 : soid 
70:dbcbcb34:::default.325674.85_bellplants_images%2f1049756.jpg:head attr name 
mismatch 'hinfo_key'
2018-03-02 19:13:05.689136 osd.386 osd.386 494 : 
cluster [ERR] 70.3dbs0 : soid 
70:dbcfc7c9:::default.325674.85_bellplants_images%2f1021177.jpg:head attr name 
mismatch 'hinfo_key'
2018-03-02 19:13:30.883100 osd.386 osd.386 495 : 
cluster [ERR] 70.3dbs0 repair 0 missing, 161 inconsistent objects
2018-03-02 19:13:30.888259 osd.386 osd.386 496 : 
cluster [ERR] 70.3db repair 161 errors, 161 fixed

The only similar-sounding issue I could find is


When I look at src/osd/PGBackend.cc be_compare_scrubmaps in luminous, I don't see the changes in the commit here:


of course a lot of other things have changed, but is it possible this fix never made it into luminous?


On 02/17/2018 12:48 PM, David Zafman wrote:

The commits below came after v12.2.2 and may impact this issue. When a pg is active+clean+inconsistent means that scrub has detected issues with 1 or more replicas of 1 or more objects .  An unfound object is a potentially temporary state in which the current set of available OSDs doesn't allow an object to be recovered/backfilled/repaired.  When the primary OSD restarts, any unfound objects ( an in memory structure) are reset so that the new set of peered OSDs can determine again what objects are unfound.

I'm not clear in this scenario whether recovery failed to start, recovery hung before due to a bug or if recovery stopped (as designed) because of the unfound object.  The new recovery_unfound and backfill_unfound states indicates that recovery has stopped due to unfound objects.

commit 64047e1bac2e775a06423a03cfab69b88462538c
Author: David Zafman <dzaf...@redhat.com>
Date:   Wed Jan 10 13:30:41 2018 -0800

     osd: Don't start recovery for missing until active pg state set

    I was seeing recovery hang when it is started before _activate_committed()     The state machine passes into "Active" but this transitions to activating
     pg state and after commmitted into "active" pg state.

     Signed-off-by: David Zafman <dzaf...@redhat.com>

commit 7f8b0ce9e681f727d8217e3ed74a1a3355f364f3
Author: David Zafman <dzaf...@redhat.com>
Date:   Mon Oct 9 08:19:21 2017 -0700

     osd, mon: Add new pg states recovery_unfound and backfill_unfound

     Signed-off-by: David Zafman <dzaf...@redhat.com>

On 2/16/18 1:40 PM, Gregory Farnum wrote:
On Fri, Feb 16, 2018 at 12:17 PM Graham Allan <g...@umn.edu> wrote:

On 02/16/2018 12:31 PM, Graham Allan wrote:
If I set debug rgw=1 and demug ms=1 before running the "object stat"
command, it seems to stall in a loop of trying communicate with osds for
pool 96, which is .rgw.control --> --
osd_op(unknown.0.0:541 96.e 96:7759931f:::notify.3:head [watch ping
cookie 139709246356176] snapc 0=[] ondisk+write+known_if_redirected
e507695) v8 -- 0x7f10ac033610 con 0 <== osd.38 59 ====
osd_op_reply(541 notify.3 [watch ping cookie 139709246356176] v0'0
uv3933745 ondisk = 0) v8 ==== 152+0+0 (2536111836 <(253)%20611-1836> 0
0) 0x7f1158003e20
con 0x7f117afd8390
Prior to that, probably more relevant, this was the only communication
logged with the primary osd of the pg: --> --
osd_op(unknown.0.0:96 70.438s0
[getxattrs,stat] snapc 0=[] ondisk+read+known_if_redirected e507695)
v8 -- 0x7fab79889fa0 con 0 <== osd.175 1 ====
osd_backoff(70.438s0 block id 1

e507695) v1 ==== 209+0+0 (1958971312 0 0) 0x7fab5003d3c0 con
0x7fab79885980 --> --
osd_backoff(70.438s0 ack-block id 1

e507695) v1 -- 0x7fab48065420 con 0
so I guess the backoff message above is saying the object is
unavailable. OK, that certainly makes sense. Not sure that it helps me
understand how to fix the inconsistencies....
If I restart the primary osd for the pg, that makes it forget its state
and return to active+clean+inconsistent. I can then download the
previously-unfound objects again, as well as run "radosgw-admin object

So the interesting bit is probably figuring out why it decides these
objects are unfound, when clearly they aren't.

What would be the best place to enable additional logging to understand
this - perhaps the primary osd?

David, this sounds like one of the bugs where an OSD can mark objects as
inconsistent locally but then doesn't actually trigger recovery on them. Or
it doesn't like any copy but doesn't persist that.
Do any known issues around that apply to 12.2.2?

Thanks for all your help,

Graham Allan
Minnesota Supercomputing Institute - g...@umn.edu

Graham Allan
Minnesota Supercomputing Institute - g...@umn.edu
ceph-users mailing list

Reply via email to