| 868 | } |
| 869 | |
| 870 | bool ECCommonL::RMWPipeline::try_reads_to_commit() |
| 871 | { |
| 872 | if (waiting_reads.empty()) |
| 873 | return false; |
| 874 | Op *op = &(waiting_reads.front()); |
| 875 | if (op->read_in_progress()) |
| 876 | return false; |
| 877 | waiting_reads.pop_front(); |
| 878 | waiting_commit.push_back(*op); |
| 879 | |
| 880 | dout(10) << __func__ << ": starting commit on " << *op << dendl; |
| 881 | dout(20) << __func__ << ": " << cache << dendl; |
| 882 | |
| 883 | get_parent()->apply_stats( |
| 884 | op->hoid, |
| 885 | op->delta_stats); |
| 886 | |
| 887 | if (op->using_cache) { |
| 888 | for (auto &&hpair: op->pending_read) { |
| 889 | op->remote_read_result[hpair.first].insert( |
| 890 | cache.get_remaining_extents_for_rmw( |
| 891 | hpair.first, |
| 892 | op->pin, |
| 893 | hpair.second)); |
| 894 | } |
| 895 | op->pending_read.clear(); |
| 896 | } else { |
| 897 | ceph_assert(op->pending_read.empty()); |
| 898 | } |
| 899 | |
| 900 | map<shard_id_t, ObjectStore::Transaction> trans; |
| 901 | for (set<pg_shard_t>::const_iterator i = |
| 902 | get_parent()->get_acting_recovery_backfill_shards().begin(); |
| 903 | i != get_parent()->get_acting_recovery_backfill_shards().end(); |
| 904 | ++i) { |
| 905 | trans[i->shard]; |
| 906 | } |
| 907 | |
| 908 | op->trace.event("start ec write"); |
| 909 | |
| 910 | map<hobject_t,extent_map> written; |
| 911 | op->generate_transactions( |
| 912 | ec_impl, |
| 913 | get_parent()->get_info().pgid.pgid, |
| 914 | sinfo, |
| 915 | &written, |
| 916 | &trans, |
| 917 | get_parent()->get_dpp(), |
| 918 | get_osdmap()->require_osd_release); |
| 919 | |
| 920 | dout(20) << __func__ << ": " << cache << dendl; |
| 921 | dout(20) << __func__ << ": written: " << written << dendl; |
| 922 | dout(20) << __func__ << ": op: " << *op << dendl; |
| 923 | |
| 924 | if (!get_parent()->get_pool().allows_ecoverwrites()) { |
| 925 | for (auto &&i: op->log_entries) { |
| 926 | if (i.requires_kraken()) { |
| 927 | derr << __func__ << ": log entry " << i << " requires kraken" |
nothing calls this directly
no test coverage detected