Project

General

Profile

Bug #20983

bluestore: failure to dirty src onode on clone with 1-byte logical extent

Added by Sage Weil about 2 years ago. Updated about 2 years ago.

Status:
Resolved
Priority:
Urgent
Assignee:
-
Category:
-
Target version:
-
Start date:
08/11/2017
Due date:
% Done:

0%

Source:
Tags:
Backport:
luminous
Regression:
No
Severity:
3 - minor
Reviewed:
Affected Versions:
ceph-qa-suite:
Component(RADOS):
Pull request ID:

Description

symptom is

2017-08-10 19:34:54.003525 7f0e904e2e80 -1 bluestore(bluestore.test_temp_dir) fsck error: shared blob 0x1a7f ref_map ref_map(0x2adfb000~1000=2) != expected ref_map(0x2adfb000~1000=1)

the problem is that when we clone and share a blob for a 1 byte logical extent
2017-08-10 19:34:48.303627 7f0e904e2e80 20 bluestore(bluestore.test_temp_dir) _do_clone_range  src 0x1c600~1: 0x1c600~1 Blob(0x562460ea4fc0 blob([!~1c000,0x2adfb000~1000] csum+has_unused crc32c/0x1000 unused=0x7fff) use_tracker(0x1d*0x1000 0x[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1]) SharedBlob(0x
562460ea4a10 sbid 0x0))
2017-08-10 19:34:48.303636 7f0e904e2e80 20 bluestore(bluestore.test_temp_dir) _assign_blobid 6783
2017-08-10 19:34:48.303638 7f0e904e2e80 10 bluestore(bluestore.test_temp_dir).collection(555.0_head 0x562462915600) make_blob_shared Blob(0x562460ea4fc0 blob([!~1c000,0x2adfb000~1000] csum+has_unused crc32c/0x1000 unused=0x7fff) use_tracker(0x1d*0x1000 0x[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1]) 
SharedBlob(0x562460ea4a10 sbid 0x0))
2017-08-10 19:34:48.303648 7f0e904e2e80 20 bluestore(bluestore.test_temp_dir).collection(555.0_head 0x562462915600) make_blob_shared now Blob(0x562460ea4fc0 blob([!~1c000,0x2adfb000~1000] csum+has_unused+shared crc32c/0x1000 unused=0x7fff) use_tracker(0x1d*0x1000 0x[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1]) SharedBlob(0x562460ea4a10 loaded (sbid 0x1a7f ref_map(0x2adfb000~1000=1))))
2017-08-10 19:34:48.303658 7f0e904e2e80 20 bluestore(bluestore.test_temp_dir) _do_clone_range    new Blob(0x56245f582770 blob([!~1c000,0x2adfb000~1000] csum+has_unused+shared crc32c/0x1000 unused=0x7fff) use_tracker(0x0 0x0) SharedBlob(0x562460ea4a10 loaded (sbid 0x1a7f ref_map(0x2adfb000~1000=2))))
2017-08-10 19:34:48.303667 7f0e904e2e80 20 bluestore.blob(0x56245f582770) get_ref 0x1c600~1 Blob(0x56245f582770 blob([!~1c000,0x2adfb000~1000] csum+has_unused+shared crc32c/0x1000 unused=0x7fff) use_tracker(0x0 0x0) SharedBlob(0x562460ea4a10 loaded (sbid 0x1a7f ref_map(0x2adfb000~1000=2))))
2017-08-10 19:34:48.303672 7f0e904e2e80 20 bluestore.blob(0x56245f582770) get_ref init 0x1d000, 1000
2017-08-10 19:34:48.303674 7f0e904e2e80 20 bluestore(bluestore.test_temp_dir) _do_clone_range  dst 0x1c600~1: 0x1c600~1 Blob(0x56245f582770 blob([!~1c000,0x2adfb000~1000] csum+has_unused+shared crc32c/0x1000 unused=0x7fff) use_tracker(0x1d*0x1000 0x[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1]) SharedBlob(0x562460ea4a10 loaded (sbid 0x1a7f ref_map(0x2adfb000~1000=2))))

we end up dirty_range_begin == dirty_range_end and think we don't need to update onode (or dirty the shard)

History

#2 Updated by Sage Weil about 2 years ago

  • Status changed from Need Review to Resolved

Also available in: Atom PDF