{"action":"created","issue":{"url":"https://api.github.com/repos/ceph/ceph/issues/8510","repository_url":"https://api.github.com/repos/ceph/ceph","labels_url":"https://api.github.com/repos/ceph/ceph/issues/8510/labels{/name}","comments_url":"https://api.github.com/repos/ceph/ceph/issues/8510/comments","events_url":"https://api.github.com/repos/ceph/ceph/issues/8510/events","html_url":"https://github.com/ceph/ceph/pull/8510","id":146983597,"number":8510,"title":"DNM os/bluestore: New data structures and read/write/zero/truncate handler implementations embedded into Bluestore","user":{"login":"ifed01","id":7138176,"avatar_url":"https://avatars.githubusercontent.com/u/7138176?v=3","gravatar_id":"","url":"https://api.github.com/users/ifed01","html_url":"https://github.com/ifed01","followers_url":"https://api.github.com/users/ifed01/followers","following_url":"https://api.github.com/users/ifed01/following{/other_user}","gists_url":"https://api.github.com/users/ifed01/gists{/gist_id}","starred_url":"https://api.github.com/users/ifed01/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ifed01/subscriptions","organizations_url":"https://api.github.com/users/ifed01/orgs","repos_url":"https://api.github.com/users/ifed01/repos","events_url":"https://api.github.com/users/ifed01/events{/privacy}","received_events_url":"https://api.github.com/users/ifed01/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"},{"url":"https://api.github.com/repos/ceph/ceph/labels/pending-discussion","name":"pending-discussion","color":"f7c6c7"}],"state":"open","locked":false,"assignee":{"login":"liewegas","id":433031,"avatar_url":"https://avatars.githubusercontent.com/u/433031?v=3","gravatar_id":"","url":"https://api.github.com/users/liewegas","html_url":"https://github.com/liewegas","followers_url":"https://api.github.com/users/liewegas/followers","following_url":"https://api.github.com/users/liewegas/following{/other_user}","gists_url":"https://api.github.com/users/liewegas/gists{/gist_id}","starred_url":"https://api.github.com/users/liewegas/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/liewegas/subscriptions","organizations_url":"https://api.github.com/users/liewegas/orgs","repos_url":"https://api.github.com/users/liewegas/repos","events_url":"https://api.github.com/users/liewegas/events{/privacy}","received_events_url":"https://api.github.com/users/liewegas/received_events","type":"User","site_admin":false},"milestone":null,"comments":17,"created_at":"2016-04-08T17:01:04Z","updated_at":"2016-05-04T13:02:06Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/ceph/ceph/pulls/8510","html_url":"https://github.com/ceph/ceph/pull/8510","diff_url":"https://github.com/ceph/ceph/pull/8510.diff","patch_url":"https://github.com/ceph/ceph/pull/8510.patch"},"body":"This is a prototype code implementing lextent/blob/pextent structure triple at bluestore to support compression/checksum verification. This patch introduces data structure modifications and read/write/zero/fiemap/clone op implementations along with corresponding UT coverage.\r\nCode integrates into Bluestore and replaces old data structures for all object operations.\r\nceph_test_objectstore test case PASSED.\r\n\r\nOpen tasks:\r\n- Remove legacy WAL structures and related code, most of other legacy stuff has been already removed.\r\n- Add deferred processing to implement merge procedures that require R/M/W sequence\r\n- Add calls and settings for compressor/checksum verification\r\n\r\nSigned-off-by: Igor Fedotov <ifedotov@mirantis.com>\r\n"},"comment":{"url":"https://api.github.com/repos/ceph/ceph/issues/comments/216855381","html_url":"https://github.com/ceph/ceph/pull/8510#issuecomment-216855381","issue_url":"https://api.github.com/repos/ceph/ceph/issues/8510","id":216855381,"user":{"login":"ifed01","id":7138176,"avatar_url":"https://avatars.githubusercontent.com/u/7138176?v=3","gravatar_id":"","url":"https://api.github.com/users/ifed01","html_url":"https://github.com/ifed01","followers_url":"https://api.github.com/users/ifed01/followers","following_url":"https://api.github.com/users/ifed01/following{/other_user}","gists_url":"https://api.github.com/users/ifed01/gists{/gist_id}","starred_url":"https://api.github.com/users/ifed01/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ifed01/subscriptions","organizations_url":"https://api.github.com/users/ifed01/orgs","repos_url":"https://api.github.com/users/ifed01/repos","events_url":"https://api.github.com/users/ifed01/events{/privacy}","received_events_url":"https://api.github.com/users/ifed01/received_events","type":"User","site_admin":false},"created_at":"2016-05-04T13:02:06Z","updated_at":"2016-05-04T13:02:06Z","body":">Right now we only load up the enode if we need to update ref counts etc... Now the ExtentManager ctor needs it unconditionally. I think we should make an upcall to get a ref for the mapping so that it's only loaded when necessary.\r\n@liewegas Not sure I understand your suggestion here. Please note however that contrary to Enode we create Bnode for any Onode,  not for ones that have clones. Bnode is not just a ref count tracker but an 'independent' owner for blob mapping. Thus we load Bnode with the first Onode that needs it and cache/lru it as usual.\r\n"}}