Bug #21756
Updated by Kefu Chai over 6 years ago
steps to reproduce:
<pre>
../src/vstart.sh -X -n --mon_num 1 --osd_num 4 --mds_num 0
./bin/ceph osd erasure-code-profile set huangjun k=3 m=1
./bin/ceph osd pool create rbd 1 1 erasure huangjun
./bin/ceph osd pool set rbd allow_ec_overwrites true
# comment out "osd copyfrom max chunk = 524288" in ceph.conf
./bin/init-ceph restart osd
dd if=/dev/zero of=/tmp/9461760 bs=1K count=947
truncate -s 9461760 /tmp/9461760
./bin/rados -p rbd put object1 /tmp/9461760
./bin/rados -p rbd cp object1 object2
</pre>
osd1 crashed with:
<pre>
/usr/src/ceph/src/osd/ECTransaction.h: 179: FAILED assert(plan.to_read.count(i.first) == 0 || (!plan.to_read.at(i.first).empty() && !i.second.has_source()))
ceph version 13.0.0-66-g2c0fe55 (2c0fe556fdf088f35bc7f7d98cfaced68fe50171) mimic (dev)
1: (ceph::__ceph_assert_fail(char const*, char const*, int, char const*)+0x110) [0x7f8ff2563ca0]
2: (ECBackend::start_rmw(ECBackend::Op*, std::unique_ptr<PGTransaction, std::default_delete<PGTransaction> >&&)+0x121d) [0x7f8ff22e986d]
3: (ECBackend::submit_transaction(hobject_t const&, object_stat_sum_t const&, eversion_t const&, std::unique_ptr<PGTransaction, std::default_delete<PGTransaction> >&&, eversion
_t const&, eversion_t const&, std::vector<pg_log_entry_t, std::allocator<pg_log_entry_t> > const&, boost::optional<pg_hit_set_history_t>&, Context*, Context*, Context*, unsigned
long, osd_reqid_t, boost::intrusive_ptr<OpRequest>)+0x408) [0x7f8ff22ea7b8]
4: (PrimaryLogPG::issue_repop(PrimaryLogPG::RepGather*, PrimaryLogPG::OpContext*)+0x9f1) [0x7f8ff2150c21]
5: (PrimaryLogPG::execute_ctx(PrimaryLogPG::OpContext*)+0x13ea) [0x7f8ff219e74a]
6: (CopyFromCallback::finish(boost::tuples::tuple<int, PrimaryLogPG::CopyResults*, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::
null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type>)+0xb0) [0x7f8ff21e76d0]
7: (PrimaryLogPG::process_copy_chunk(hobject_t, unsigned long, int)+0x76c) [0x7f8ff218873c]
8: (C_Copyfrom::finish(int)+0xb1) [0x7f8ff21e7401]
9: (Context::complete(int)+0x9) [0x7f8ff202cd29]
10: (Finisher::finisher_thread_entry()+0x198) [0x7f8ff25615f8]
11: (()+0x7dc5) [0x7f8fef144dc5]
12: (clone()+0x6d) [0x7f8fee23873d]
</pre>