{"action":"created","issue":{"url":"https://api.github.com/repos/basho/riak_cs/issues/1191","labels_url":"https://api.github.com/repos/basho/riak_cs/issues/1191/labels{/name}","comments_url":"https://api.github.com/repos/basho/riak_cs/issues/1191/comments","events_url":"https://api.github.com/repos/basho/riak_cs/issues/1191/events","html_url":"https://github.com/basho/riak_cs/pull/1191","id":95316292,"number":1191,"title":"Fast user get option [JIRA: RCS-240]","user":{"login":"kuenishi","id":11440,"avatar_url":"https://avatars.githubusercontent.com/u/11440?v=3","gravatar_id":"","url":"https://api.github.com/users/kuenishi","html_url":"https://github.com/kuenishi","followers_url":"https://api.github.com/users/kuenishi/followers","following_url":"https://api.github.com/users/kuenishi/following{/other_user}","gists_url":"https://api.github.com/users/kuenishi/gists{/gist_id}","starred_url":"https://api.github.com/users/kuenishi/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kuenishi/subscriptions","organizations_url":"https://api.github.com/users/kuenishi/orgs","repos_url":"https://api.github.com/users/kuenishi/repos","events_url":"https://api.github.com/users/kuenishi/events{/privacy}","received_events_url":"https://api.github.com/users/kuenishi/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/basho/riak_cs/labels/JIRA:%20To%20Do","name":"JIRA: To Do","color":"ededed"}],"state":"open","locked":false,"assignee":null,"milestone":{"url":"https://api.github.com/repos/basho/riak_cs/milestones/18","html_url":"https://github.com/basho/riak_cs/milestones/2.1.0","labels_url":"https://api.github.com/repos/basho/riak_cs/milestones/18/labels","id":1087473,"number":18,"title":"2.1.0","description":"","creator":{"login":"kuenishi","id":11440,"avatar_url":"https://avatars.githubusercontent.com/u/11440?v=3","gravatar_id":"","url":"https://api.github.com/users/kuenishi","html_url":"https://github.com/kuenishi","followers_url":"https://api.github.com/users/kuenishi/followers","following_url":"https://api.github.com/users/kuenishi/following{/other_user}","gists_url":"https://api.github.com/users/kuenishi/gists{/gist_id}","starred_url":"https://api.github.com/users/kuenishi/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kuenishi/subscriptions","organizations_url":"https://api.github.com/users/kuenishi/orgs","repos_url":"https://api.github.com/users/kuenishi/repos","events_url":"https://api.github.com/users/kuenishi/events{/privacy}","received_events_url":"https://api.github.com/users/kuenishi/received_events","type":"User","site_admin":false},"open_issues":11,"closed_issues":34,"state":"open","created_at":"2015-04-28T13:37:13Z","updated_at":"2015-07-16T00:05:42Z","due_on":null,"closed_at":null},"comments":1,"created_at":"2015-07-16T00:05:42Z","updated_at":"2015-07-16T08:13:23Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/basho/riak_cs/pulls/1191","html_url":"https://github.com/basho/riak_cs/pull/1191","diff_url":"https://github.com/basho/riak_cs/pull/1191.diff","patch_url":"https://github.com/basho/riak_cs/pull/1191.patch"},"body":"If `fast_user_get` is turned on, all requests to get user record skip PR=3 get to Riak to avoid unnecessary unavailability. The case this merits is where one of Riak nodes is ~~down~~ slow or going to down, get_fsm should wait for all of them or request fails. For consistency PW=3 when updating user record would be enough. `fast_user_get` is off by default now, but will be on by default in some future.\r\n\r\nAll riak_test items have passed with this option (except `stats_test` which is currently failing continously), but I don't think additional riak_test for this because current riak_test does not simulate any failure (which we have to do some)."},"comment":{"url":"https://api.github.com/repos/basho/riak_cs/issues/comments/121872934","html_url":"https://github.com/basho/riak_cs/pull/1191#issuecomment-121872934","issue_url":"https://api.github.com/repos/basho/riak_cs/issues/1191","id":121872934,"user":{"login":"shino","id":10225,"avatar_url":"https://avatars.githubusercontent.com/u/10225?v=3","gravatar_id":"","url":"https://api.github.com/users/shino","html_url":"https://github.com/shino","followers_url":"https://api.github.com/users/shino/followers","following_url":"https://api.github.com/users/shino/following{/other_user}","gists_url":"https://api.github.com/users/shino/gists{/gist_id}","starred_url":"https://api.github.com/users/shino/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/shino/subscriptions","organizations_url":"https://api.github.com/users/shino/orgs","repos_url":"https://api.github.com/users/shino/repos","events_url":"https://api.github.com/users/shino/events{/privacy}","received_events_url":"https://api.github.com/users/shino/received_events","type":"User","site_admin":false},"created_at":"2015-07-16T08:13:23Z","updated_at":"2015-07-16T08:13:23Z","body":"Nice PR! I agree this is great direction for latency improvements.\r\n\r\nI give big :+1: for the simple(st) approach of current diff is sufficient for some users like private object storage purpose.  Maybe not in the scope of this PR, for more general purpose or finally to make this fast path by default setting, I want to discuss on pruning of bucket list [1] and consistency.\r\n\r\nPruning path along with fast path can be achieved by using the strong option to get user objects in some of APIs.  To avoid latency issue, such APIs should be not hot APIs.  The tentative list is:\r\n\r\n- PUT Bucket S3 API and\r\n- DELETE Bucket S3 API.\r\n\r\nFor consistency, it would be safer to use strong option for user modifying API calls. These includes following ones as well as above two S3 APIs.\r\n\r\n- POST User admin API (create user)\r\n- PUT User admin API (modify user)\r\n\r\nIt's no problem if these discussion will not be reflected in this PR :) I will just create new issue or PR based on this comment.  Aside from it, any comments/correction/etc are appreciated.\r\n\r\n----\r\n\r\n[1] Short description of pruning deleted buckets\r\n\r\nskip this if you already know about it :)\r\n\r\nThere is a bucket list in user records and deleted buckets will be there as a kind of tombstone.  These tombstones should be removed in any way eventually in general purpose, e.g. public object storage, to keep the list bounded.  The pruned object will be overwritten *only* when user objects has been fetched by the strong option.\r\n"}}