{"action":"created","issue":{"url":"https://api.github.com/repos/ceph/ceph/issues/4312","labels_url":"https://api.github.com/repos/ceph/ceph/issues/4312/labels{/name}","comments_url":"https://api.github.com/repos/ceph/ceph/issues/4312/comments","events_url":"https://api.github.com/repos/ceph/ceph/issues/4312/events","html_url":"https://github.com/ceph/ceph/pull/4312","id":67313040,"number":4312,"title":"ec : backend feature to read from all OSDs and silently discard EIO if possible","user":{"login":"guangyy","id":891065,"avatar_url":"https://avatars.githubusercontent.com/u/891065?v=3","gravatar_id":"","url":"https://api.github.com/users/guangyy","html_url":"https://github.com/guangyy","followers_url":"https://api.github.com/users/guangyy/followers","following_url":"https://api.github.com/users/guangyy/following{/other_user}","gists_url":"https://api.github.com/users/guangyy/gists{/gist_id}","starred_url":"https://api.github.com/users/guangyy/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/guangyy/subscriptions","organizations_url":"https://api.github.com/users/guangyy/orgs","repos_url":"https://api.github.com/users/guangyy/repos","events_url":"https://api.github.com/users/guangyy/events{/privacy}","received_events_url":"https://api.github.com/users/guangyy/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/ceph/ceph/labels/core","name":"core","color":"0052cc"},{"url":"https://api.github.com/repos/ceph/ceph/labels/feature","name":"feature","color":"009800"}],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":34,"created_at":"2015-04-09T08:57:11Z","updated_at":"2015-07-10T14:59:02Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/ceph/ceph/pulls/4312","html_url":"https://github.com/ceph/ceph/pull/4312","diff_url":"https://github.com/ceph/ceph/pull/4312.diff","patch_url":"https://github.com/ceph/ceph/pull/4312.patch"},"body":"Add osd setting osd_pool_erasure_code_subread_all. Default is false. If set it to true.\r\nWill send sub-read op to all OSD and choose the first success read result.\r\n\r\nFixes: 9943\r\nSigned-off-by: Wei Luo <luowei@yahoo-inc.com>\r\nSigned-off-by: Guang Yang <yguang@yahoo-inc.com>"},"comment":{"url":"https://api.github.com/repos/ceph/ceph/issues/comments/120429620","html_url":"https://github.com/ceph/ceph/pull/4312#issuecomment-120429620","issue_url":"https://api.github.com/repos/ceph/ceph/issues/4312","id":120429620,"user":{"login":"tchaikov","id":59071,"avatar_url":"https://avatars.githubusercontent.com/u/59071?v=3","gravatar_id":"","url":"https://api.github.com/users/tchaikov","html_url":"https://github.com/tchaikov","followers_url":"https://api.github.com/users/tchaikov/followers","following_url":"https://api.github.com/users/tchaikov/following{/other_user}","gists_url":"https://api.github.com/users/tchaikov/gists{/gist_id}","starred_url":"https://api.github.com/users/tchaikov/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tchaikov/subscriptions","organizations_url":"https://api.github.com/users/tchaikov/orgs","repos_url":"https://api.github.com/users/tchaikov/repos","events_url":"https://api.github.com/users/tchaikov/events{/privacy}","received_events_url":"https://api.github.com/users/tchaikov/received_events","type":"User","site_admin":false},"created_at":"2015-07-10T14:59:02Z","updated_at":"2015-07-10T14:59:02Z","body":"> For recovery read, we shouldn't complete the read once getting K responses, as for the logic for recovery read, the primary may issue >K shard reads and all of them matters, refer to: ECBackend::get_min_avail_to_read_shards and ErasureCode::minimum_to_decode.\r\n\r\n @guangyy , if we are taking jerasure plugsin, not LRC or SHEC, i have the opposite understanding. it reads only K chunks for decoding the object. in the case of recovery, let's take [5,0,4] as an example, if later on it changes to [4,3,0], so we don't have the chunk at OSD 5, then `want_to_read` would be 5, and `available_chunks` are [4,3], and we will return `[4,3]` as the `minimum` returned by `ErasureCode::minimum_to_decode()`.\r\n\r\n> With the logs from teuthology, I can confirm the above analysis, the PG's acting set was[5, 0, 4] and later on it changed to [4, 3 , 0], and the EC profile is K = 2, M = 1, as a result, it needs to read all three shards for recovery,\r\n\r\ncould you point me to the log?"}}