{"action":"closed","number":14793,"pull_request":{"url":"https://api.github.com/repos/grpc/grpc/pulls/14793","id":176674241,"html_url":"https://github.com/grpc/grpc/pull/14793","diff_url":"https://github.com/grpc/grpc/pull/14793.diff","patch_url":"https://github.com/grpc/grpc/pull/14793.patch","issue_url":"https://api.github.com/repos/grpc/grpc/issues/14793","number":14793,"state":"closed","locked":false,"title":"Load data store for server-side load reporting","user":{"login":"AspirinSJL","id":3314176,"avatar_url":"https://avatars0.githubusercontent.com/u/3314176?v=4","gravatar_id":"","url":"https://api.github.com/users/AspirinSJL","html_url":"https://github.com/AspirinSJL","followers_url":"https://api.github.com/users/AspirinSJL/followers","following_url":"https://api.github.com/users/AspirinSJL/following{/other_user}","gists_url":"https://api.github.com/users/AspirinSJL/gists{/gist_id}","starred_url":"https://api.github.com/users/AspirinSJL/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/AspirinSJL/subscriptions","organizations_url":"https://api.github.com/users/AspirinSJL/orgs","repos_url":"https://api.github.com/users/AspirinSJL/repos","events_url":"https://api.github.com/users/AspirinSJL/events{/privacy}","received_events_url":"https://api.github.com/users/AspirinSJL/received_events","type":"User","site_admin":false},"body":"The following description is for the whole service. But we've shrunk this PR to only contain the load data store files to make code review easier.\r\n\r\n=============================\r\n\r\nAdding a service to report load to balancers. Please check `src/proto/grpc/lb/v1/load_reporter.proto` for details.\r\n\r\nEventually this service will be a server plugin, but that will be addressed in a future PR.\r\n\r\nFor the service itself, we still need some API support from https://github.com/census-instrumentation/opencensus-cpp to finish the stats write/read. \r\n\r\nThe classes are organized as following:\r\n![spiiesnlcyzq_zmic64izgg](https://user-images.githubusercontent.com/3314176/37751314-fba359a6-2d4e-11e8-9153-0e100c63bbe5.png)\r\n\r\n~~The visibility of some class member variables can be stricter, but the friendship will be a little verbose?~~\r\nThe classes can be declared in hierarchy, but they will be nested deeply.\r\n\r\n<!-- Reviewable:start -->\r\n---\r\nThis change is [<img src=\"https://reviewable.io/review_button.svg\" height=\"34\" align=\"absmiddle\" alt=\"Reviewable\"/>](https://reviewable.io/reviews/grpc/grpc/14793)\r\n<!-- Reviewable:end -->\r\n","created_at":"2018-03-22T04:43:56Z","updated_at":"2018-05-01T22:57:53Z","closed_at":"2018-05-01T22:57:53Z","merged_at":"2018-05-01T22:57:53Z","merge_commit_sha":"b5ba47013aff176c9fc742e3087ccd10312ec9a6","assignee":null,"assignees":[],"requested_reviewers":[{"login":"dgquintas","id":120217,"avatar_url":"https://avatars3.githubusercontent.com/u/120217?v=4","gravatar_id":"","url":"https://api.github.com/users/dgquintas","html_url":"https://github.com/dgquintas","followers_url":"https://api.github.com/users/dgquintas/followers","following_url":"https://api.github.com/users/dgquintas/following{/other_user}","gists_url":"https://api.github.com/users/dgquintas/gists{/gist_id}","starred_url":"https://api.github.com/users/dgquintas/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dgquintas/subscriptions","organizations_url":"https://api.github.com/users/dgquintas/orgs","repos_url":"https://api.github.com/users/dgquintas/repos","events_url":"https://api.github.com/users/dgquintas/events{/privacy}","received_events_url":"https://api.github.com/users/dgquintas/received_events","type":"User","site_admin":false},{"login":"slash-lib","id":19825775,"avatar_url":"https://avatars2.githubusercontent.com/u/19825775?v=4","gravatar_id":"","url":"https://api.github.com/users/slash-lib","html_url":"https://github.com/slash-lib","followers_url":"https://api.github.com/users/slash-lib/followers","following_url":"https://api.github.com/users/slash-lib/following{/other_user}","gists_url":"https://api.github.com/users/slash-lib/gists{/gist_id}","starred_url":"https://api.github.com/users/slash-lib/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/slash-lib/subscriptions","organizations_url":"https://api.github.com/users/slash-lib/orgs","repos_url":"https://api.github.com/users/slash-lib/repos","events_url":"https://api.github.com/users/slash-lib/events{/privacy}","received_events_url":"https://api.github.com/users/slash-lib/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/grpc/grpc/pulls/14793/commits","review_comments_url":"https://api.github.com/repos/grpc/grpc/pulls/14793/comments","review_comment_url":"https://api.github.com/repos/grpc/grpc/pulls/comments{/number}","comments_url":"https://api.github.com/repos/grpc/grpc/issues/14793/comments","statuses_url":"https://api.github.com/repos/grpc/grpc/statuses/a0aab7ebcc4e3af28f9dde745bf1800094b085a7","head":{"label":"AspirinSJL:server_load_report","ref":"server_load_report","sha":"a0aab7ebcc4e3af28f9dde745bf1800094b085a7","user":{"login":"AspirinSJL","id":3314176,"avatar_url":"https://avatars0.githubusercontent.com/u/3314176?v=4","gravatar_id":"","url":"https://api.github.com/users/AspirinSJL","html_url":"https://github.com/AspirinSJL","followers_url":"https://api.github.com/users/AspirinSJL/followers","following_url":"https://api.github.com/users/AspirinSJL/following{/other_user}","gists_url":"https://api.github.com/users/AspirinSJL/gists{/gist_id}","starred_url":"https://api.github.com/users/AspirinSJL/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/AspirinSJL/subscriptions","organizations_url":"https://api.github.com/users/AspirinSJL/orgs","repos_url":"https://api.github.com/users/AspirinSJL/repos","events_url":"https://api.github.com/users/AspirinSJL/events{/privacy}","received_events_url":"https://api.github.com/users/AspirinSJL/received_events","type":"User","site_admin":false},"repo":{"id":99160006,"name":"grpc","full_name":"AspirinSJL/grpc","owner":{"login":"AspirinSJL","id":3314176,"avatar_url":"https://avatars0.githubusercontent.com/u/3314176?v=4","gravatar_id":"","url":"https://api.github.com/users/AspirinSJL","html_url":"https://github.com/AspirinSJL","followers_url":"https://api.github.com/users/AspirinSJL/followers","following_url":"https://api.github.com/users/AspirinSJL/following{/other_user}","gists_url":"https://api.github.com/users/AspirinSJL/gists{/gist_id}","starred_url":"https://api.github.com/users/AspirinSJL/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/AspirinSJL/subscriptions","organizations_url":"https://api.github.com/users/AspirinSJL/orgs","repos_url":"https://api.github.com/users/AspirinSJL/repos","events_url":"https://api.github.com/users/AspirinSJL/events{/privacy}","received_events_url":"https://api.github.com/users/AspirinSJL/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/AspirinSJL/grpc","description":"The C based gRPC (C++, Node.js, Python, Ruby, Objective-C, PHP, C#)","fork":true,"url":"https://api.github.com/repos/AspirinSJL/grpc","forks_url":"https://api.github.com/repos/AspirinSJL/grpc/forks","keys_url":"https://api.github.com/repos/AspirinSJL/grpc/keys{/key_id}","collaborators_url":"https://api.github.com/repos/AspirinSJL/grpc/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/AspirinSJL/grpc/teams","hooks_url":"https://api.github.com/repos/AspirinSJL/grpc/hooks","issue_events_url":"https://api.github.com/repos/AspirinSJL/grpc/issues/events{/number}","events_url":"https://api.github.com/repos/AspirinSJL/grpc/events","assignees_url":"https://api.github.com/repos/AspirinSJL/grpc/assignees{/user}","branches_url":"https://api.github.com/repos/AspirinSJL/grpc/branches{/branch}","tags_url":"https://api.github.com/repos/AspirinSJL/grpc/tags","blobs_url":"https://api.github.com/repos/AspirinSJL/grpc/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/AspirinSJL/grpc/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/AspirinSJL/grpc/git/refs{/sha}","trees_url":"https://api.github.com/repos/AspirinSJL/grpc/git/trees{/sha}","statuses_url":"https://api.github.com/repos/AspirinSJL/grpc/statuses/{sha}","languages_url":"https://api.github.com/repos/AspirinSJL/grpc/languages","stargazers_url":"https://api.github.com/repos/AspirinSJL/grpc/stargazers","contributors_url":"https://api.github.com/repos/AspirinSJL/grpc/contributors","subscribers_url":"https://api.github.com/repos/AspirinSJL/grpc/subscribers","subscription_url":"https://api.github.com/repos/AspirinSJL/grpc/subscription","commits_url":"https://api.github.com/repos/AspirinSJL/grpc/commits{/sha}","git_commits_url":"https://api.github.com/repos/AspirinSJL/grpc/git/commits{/sha}","comments_url":"https://api.github.com/repos/AspirinSJL/grpc/comments{/number}","issue_comment_url":"https://api.github.com/repos/AspirinSJL/grpc/issues/comments{/number}","contents_url":"https://api.github.com/repos/AspirinSJL/grpc/contents/{+path}","compare_url":"https://api.github.com/repos/AspirinSJL/grpc/compare/{base}...{head}","merges_url":"https://api.github.com/repos/AspirinSJL/grpc/merges","archive_url":"https://api.github.com/repos/AspirinSJL/grpc/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/AspirinSJL/grpc/downloads","issues_url":"https://api.github.com/repos/AspirinSJL/grpc/issues{/number}","pulls_url":"https://api.github.com/repos/AspirinSJL/grpc/pulls{/number}","milestones_url":"https://api.github.com/repos/AspirinSJL/grpc/milestones{/number}","notifications_url":"https://api.github.com/repos/AspirinSJL/grpc/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/AspirinSJL/grpc/labels{/name}","releases_url":"https://api.github.com/repos/AspirinSJL/grpc/releases{/id}","deployments_url":"https://api.github.com/repos/AspirinSJL/grpc/deployments","created_at":"2017-08-02T20:53:56Z","updated_at":"2018-05-01T17:22:42Z","pushed_at":"2018-05-01T17:47:18Z","git_url":"git://github.com/AspirinSJL/grpc.git","ssh_url":"git@github.com:AspirinSJL/grpc.git","clone_url":"https://github.com/AspirinSJL/grpc.git","svn_url":"https://github.com/AspirinSJL/grpc","homepage":"","size":164016,"stargazers_count":0,"watchers_count":0,"language":"C++","has_issues":false,"has_projects":true,"has_downloads":false,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0"},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"grpc:master","ref":"master","sha":"ac0188e25b46a191e278610e264edb1df1287c94","user":{"login":"grpc","id":7802525,"avatar_url":"https://avatars1.githubusercontent.com/u/7802525?v=4","gravatar_id":"","url":"https://api.github.com/users/grpc","html_url":"https://github.com/grpc","followers_url":"https://api.github.com/users/grpc/followers","following_url":"https://api.github.com/users/grpc/following{/other_user}","gists_url":"https://api.github.com/users/grpc/gists{/gist_id}","starred_url":"https://api.github.com/users/grpc/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/grpc/subscriptions","organizations_url":"https://api.github.com/users/grpc/orgs","repos_url":"https://api.github.com/users/grpc/repos","events_url":"https://api.github.com/users/grpc/events{/privacy}","received_events_url":"https://api.github.com/users/grpc/received_events","type":"Organization","site_admin":false},"repo":{"id":27729880,"name":"grpc","full_name":"grpc/grpc","owner":{"login":"grpc","id":7802525,"avatar_url":"https://avatars1.githubusercontent.com/u/7802525?v=4","gravatar_id":"","url":"https://api.github.com/users/grpc","html_url":"https://github.com/grpc","followers_url":"https://api.github.com/users/grpc/followers","following_url":"https://api.github.com/users/grpc/following{/other_user}","gists_url":"https://api.github.com/users/grpc/gists{/gist_id}","starred_url":"https://api.github.com/users/grpc/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/grpc/subscriptions","organizations_url":"https://api.github.com/users/grpc/orgs","repos_url":"https://api.github.com/users/grpc/repos","events_url":"https://api.github.com/users/grpc/events{/privacy}","received_events_url":"https://api.github.com/users/grpc/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/grpc/grpc","description":"The C based gRPC (C++, Python, Ruby, Objective-C, PHP, C#)","fork":false,"url":"https://api.github.com/repos/grpc/grpc","forks_url":"https://api.github.com/repos/grpc/grpc/forks","keys_url":"https://api.github.com/repos/grpc/grpc/keys{/key_id}","collaborators_url":"https://api.github.com/repos/grpc/grpc/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/grpc/grpc/teams","hooks_url":"https://api.github.com/repos/grpc/grpc/hooks","issue_events_url":"https://api.github.com/repos/grpc/grpc/issues/events{/number}","events_url":"https://api.github.com/repos/grpc/grpc/events","assignees_url":"https://api.github.com/repos/grpc/grpc/assignees{/user}","branches_url":"https://api.github.com/repos/grpc/grpc/branches{/branch}","tags_url":"https://api.github.com/repos/grpc/grpc/tags","blobs_url":"https://api.github.com/repos/grpc/grpc/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/grpc/grpc/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/grpc/grpc/git/refs{/sha}","trees_url":"https://api.github.com/repos/grpc/grpc/git/trees{/sha}","statuses_url":"https://api.github.com/repos/grpc/grpc/statuses/{sha}","languages_url":"https://api.github.com/repos/grpc/grpc/languages","stargazers_url":"https://api.github.com/repos/grpc/grpc/stargazers","contributors_url":"https://api.github.com/repos/grpc/grpc/contributors","subscribers_url":"https://api.github.com/repos/grpc/grpc/subscribers","subscription_url":"https://api.github.com/repos/grpc/grpc/subscription","commits_url":"https://api.github.com/repos/grpc/grpc/commits{/sha}","git_commits_url":"https://api.github.com/repos/grpc/grpc/git/commits{/sha}","comments_url":"https://api.github.com/repos/grpc/grpc/comments{/number}","issue_comment_url":"https://api.github.com/repos/grpc/grpc/issues/comments{/number}","contents_url":"https://api.github.com/repos/grpc/grpc/contents/{+path}","compare_url":"https://api.github.com/repos/grpc/grpc/compare/{base}...{head}","merges_url":"https://api.github.com/repos/grpc/grpc/merges","archive_url":"https://api.github.com/repos/grpc/grpc/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/grpc/grpc/downloads","issues_url":"https://api.github.com/repos/grpc/grpc/issues{/number}","pulls_url":"https://api.github.com/repos/grpc/grpc/pulls{/number}","milestones_url":"https://api.github.com/repos/grpc/grpc/milestones{/number}","notifications_url":"https://api.github.com/repos/grpc/grpc/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/grpc/grpc/labels{/name}","releases_url":"https://api.github.com/repos/grpc/grpc/releases{/id}","deployments_url":"https://api.github.com/repos/grpc/grpc/deployments","created_at":"2014-12-08T18:58:53Z","updated_at":"2018-05-01T21:33:39Z","pushed_at":"2018-05-01T22:57:53Z","git_url":"git://github.com/grpc/grpc.git","ssh_url":"git@github.com:grpc/grpc.git","clone_url":"https://github.com/grpc/grpc.git","svn_url":"https://github.com/grpc/grpc","homepage":"https://grpc.io","size":177751,"stargazers_count":15016,"watchers_count":15016,"language":"C++","has_issues":true,"has_projects":true,"has_downloads":false,"has_wiki":true,"has_pages":true,"forks_count":3349,"mirror_url":null,"archived":false,"open_issues_count":1237,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0"},"forks":3349,"open_issues":1237,"watchers":15016,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/grpc/grpc/pulls/14793"},"html":{"href":"https://github.com/grpc/grpc/pull/14793"},"issue":{"href":"https://api.github.com/repos/grpc/grpc/issues/14793"},"comments":{"href":"https://api.github.com/repos/grpc/grpc/issues/14793/comments"},"review_comments":{"href":"https://api.github.com/repos/grpc/grpc/pulls/14793/comments"},"review_comment":{"href":"https://api.github.com/repos/grpc/grpc/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/grpc/grpc/pulls/14793/commits"},"statuses":{"href":"https://api.github.com/repos/grpc/grpc/statuses/a0aab7ebcc4e3af28f9dde745bf1800094b085a7"}},"author_association":"CONTRIBUTOR","merged":true,"mergeable":null,"rebaseable":null,"mergeable_state":"unknown","merged_by":{"login":"AspirinSJL","id":3314176,"avatar_url":"https://avatars0.githubusercontent.com/u/3314176?v=4","gravatar_id":"","url":"https://api.github.com/users/AspirinSJL","html_url":"https://github.com/AspirinSJL","followers_url":"https://api.github.com/users/AspirinSJL/followers","following_url":"https://api.github.com/users/AspirinSJL/following{/other_user}","gists_url":"https://api.github.com/users/AspirinSJL/gists{/gist_id}","starred_url":"https://api.github.com/users/AspirinSJL/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/AspirinSJL/subscriptions","organizations_url":"https://api.github.com/users/AspirinSJL/orgs","repos_url":"https://api.github.com/users/AspirinSJL/repos","events_url":"https://api.github.com/users/AspirinSJL/events{/privacy}","received_events_url":"https://api.github.com/users/AspirinSJL/received_events","type":"User","site_admin":false},"comments":75,"review_comments":9,"maintainer_can_modify":false,"commits":1,"additions":1416,"deletions":2,"changed_files":11}}
{"actor":{"display_login":"AspirinSJL"}}