{"action":"created","comment":{"url":"https://api.github.com/repos/kubernetes-incubator/service-catalog/pulls/comments/219095623","pull_request_review_id":157184354,"id":219095623,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIxOTA5NTYyMw==","diff_hunk":"@@ -0,0 +1,132 @@\n+/*\n+Copyright 2017 The Kubernetes Authors.\n+\n+Licensed under the Apache License, Version 2.0 (the \"License\");\n+you may not use this file except in compliance with the License.\n+You may obtain a copy of the License at\n+\n+    http://www.apache.org/licenses/LICENSE-2.0\n+\n+Unless required by applicable law or agreed to in writing, software\n+distributed under the License is distributed on an \"AS IS\" BASIS,\n+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n+See the License for the specific language governing permissions and\n+limitations under the License.\n+*/\n+\n+package controller\n+\n+import (\n+\t\"fmt\"\n+\t\"github.com/golang/glog\"\n+\tosb \"github.com/pmorie/go-open-service-broker-client/v2\"\n+\t\"reflect\"\n+\t\"sync\"\n+)\n+\n+// BrokerKey defines a key which points to a broker (cluster wide or namespaced)\n+type BrokerKey struct {\n+\tname      string\n+\tnamespace string\n+}\n+\n+// IsClusterScoped whether this broker key points to cluster scoped service broker.\n+func (bk *BrokerKey) IsClusterScoped() bool {\n+\treturn bk.namespace == \"\"\n+}\n+\n+// String returns string representation of the broker key\n+func (bk *BrokerKey) String() string {\n+\tif bk.IsClusterScoped() {\n+\t\treturn bk.name\n+\t}\n+\treturn fmt.Sprintf(\"%s/%s\", bk.namespace, bk.name)\n+}\n+\n+// NewServiceBrokerKey creates a BrokerKey instance which points to namespaced broker\n+func NewServiceBrokerKey(namespace, name string) BrokerKey {\n+\treturn BrokerKey{\n+\t\tnamespace: namespace,\n+\t\tname:      name,\n+\t}\n+}\n+\n+// NewClusterServiceBrokerKey creates a BrokerKey instance which points to cluster wide broker\n+func NewClusterServiceBrokerKey(name string) BrokerKey {\n+\treturn BrokerKey{\n+\t\tnamespace: \"\",\n+\t\tname:      name,\n+\t}\n+}\n+\n+// BrokerClientManager stores OSB client instances per broker\n+type BrokerClientManager struct {\n+\tmu      sync.RWMutex\n+\tclients map[BrokerKey]clientWithConfig\n+\n+\tbrokerClientCreateFunc osb.CreateFunc\n+}\n+\n+// NewBrokerClientManager creates BrokerClientManager instance\n+func NewBrokerClientManager(brokerClientCreateFunc osb.CreateFunc) *BrokerClientManager {\n+\treturn &BrokerClientManager{\n+\t\tclients:                map[BrokerKey]clientWithConfig{},\n+\t\tbrokerClientCreateFunc: brokerClientCreateFunc,\n+\t}\n+}\n+\n+// UpdateBrokerClient creates new broker client if necessary (the ClientConfig has changed or there is no client for the broker),\n+// the method returns created or stored osb.Client instance.\n+func (m *BrokerClientManager) UpdateBrokerClient(brokerKey BrokerKey, clientConfig *osb.ClientConfiguration) (osb.Client, error) {\n+\tm.mu.Lock()\n+\tdefer m.mu.Unlock()\n+\n+\texisting, found := m.clients[brokerKey]\n+\n+\tif !found || m.configHasChanged(existing.clientConfig, clientConfig) {\n+\t\tglog.V(4).Infof(\"Updating OSB client for broker %s, URL: %s\", brokerKey.String(), clientConfig.URL)\n+\t\treturn m.createClient(brokerKey, clientConfig)\n+\t}\n+\n+\treturn existing.OSBClient, nil\n+}\n+\n+// RemoveBrokerClient removes broker client broker\n+func (m *BrokerClientManager) RemoveBrokerClient(brokerKey BrokerKey) {\n+\tm.mu.Lock()\n+\tdefer m.mu.Unlock()\n+\n+\tglog.V(4).Info(\"Removing OSB client for broker %s\", brokerKey.String())\n+\tdelete(m.clients, brokerKey)\n+}\n+\n+// BrokerClient returns broker client fro a broker specified by the brokerKey","path":"pkg/controller/broker_client_manager.go","position":null,"original_position":103,"commit_id":"156ab7655e8f9538401f148bf6e1622188ac4a9f","original_commit_id":"8a05c0a8fd2d36f13f426cfb6bc3c82ea0782827","user":{"login":"piotrmiskiewicz","id":15731038,"node_id":"MDQ6VXNlcjE1NzMxMDM4","avatar_url":"https://avatars0.githubusercontent.com/u/15731038?v=4","gravatar_id":"","url":"https://api.github.com/users/piotrmiskiewicz","html_url":"https://github.com/piotrmiskiewicz","followers_url":"https://api.github.com/users/piotrmiskiewicz/followers","following_url":"https://api.github.com/users/piotrmiskiewicz/following{/other_user}","gists_url":"https://api.github.com/users/piotrmiskiewicz/gists{/gist_id}","starred_url":"https://api.github.com/users/piotrmiskiewicz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/piotrmiskiewicz/subscriptions","organizations_url":"https://api.github.com/users/piotrmiskiewicz/orgs","repos_url":"https://api.github.com/users/piotrmiskiewicz/repos","events_url":"https://api.github.com/users/piotrmiskiewicz/events{/privacy}","received_events_url":"https://api.github.com/users/piotrmiskiewicz/received_events","type":"User","site_admin":false},"body":"fixed","created_at":"2018-09-20T09:34:56Z","updated_at":"2018-09-20T09:34:56Z","html_url":"https://github.com/kubernetes-incubator/service-catalog/pull/2337#discussion_r219095623","pull_request_url":"https://api.github.com/repos/kubernetes-incubator/service-catalog/pulls/2337","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/kubernetes-incubator/service-catalog/pulls/comments/219095623"},"html":{"href":"https://github.com/kubernetes-incubator/service-catalog/pull/2337#discussion_r219095623"},"pull_request":{"href":"https://api.github.com/repos/kubernetes-incubator/service-catalog/pulls/2337"}},"in_reply_to_id":217460324},"pull_request":{"url":"https://api.github.com/repos/kubernetes-incubator/service-catalog/pulls/2337","id":214893490,"node_id":"MDExOlB1bGxSZXF1ZXN0MjE0ODkzNDkw","html_url":"https://github.com/kubernetes-incubator/service-catalog/pull/2337","diff_url":"https://github.com/kubernetes-incubator/service-catalog/pull/2337.diff","patch_url":"https://github.com/kubernetes-incubator/service-catalog/pull/2337.patch","issue_url":"https://api.github.com/repos/kubernetes-incubator/service-catalog/issues/2337","number":2337,"state":"open","locked":false,"title":"Share OSB client for ServiceBroker","user":{"login":"piotrmiskiewicz","id":15731038,"node_id":"MDQ6VXNlcjE1NzMxMDM4","avatar_url":"https://avatars0.githubusercontent.com/u/15731038?v=4","gravatar_id":"","url":"https://api.github.com/users/piotrmiskiewicz","html_url":"https://github.com/piotrmiskiewicz","followers_url":"https://api.github.com/users/piotrmiskiewicz/followers","following_url":"https://api.github.com/users/piotrmiskiewicz/following{/other_user}","gists_url":"https://api.github.com/users/piotrmiskiewicz/gists{/gist_id}","starred_url":"https://api.github.com/users/piotrmiskiewicz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/piotrmiskiewicz/subscriptions","organizations_url":"https://api.github.com/users/piotrmiskiewicz/orgs","repos_url":"https://api.github.com/users/piotrmiskiewicz/repos","events_url":"https://api.github.com/users/piotrmiskiewicz/events{/privacy}","received_events_url":"https://api.github.com/users/piotrmiskiewicz/received_events","type":"User","site_admin":false},"body":" <!--  Thanks for sending a pull request!  Here are some tips for you:\r\n1. If this is your first time, read our contributor guidelines https://github.com/kubernetes-incubator/service-catalog/blob/master/CONTRIBUTING.md\r\n2. If the PR is unfinished, see how to mark it: https://git.k8s.io/community/contributors/guide/pull-requests.md#marking-unfinished-pull-requests\r\n3. See our merge process https://github.com/kubernetes-incubator/service-catalog/blob/master/REVIEWING.md\r\n-->\r\n\r\nThis PR is a \r\n - [ ] Feature Implementation\r\n - [x] Bug Fix\r\n - [ ] Documentation\r\n\r\n**What this PR does / why we need it**:\r\n\r\nThis PR introduces BrokerClientManager which stores OSB clients - one client per broker. It allows to share one OSB client instance for all calls to the broker. It prevents the controller from creating OSB clients for every operation and it follows the description of the Golang HTTP client: \"The Client's Transport typically has internal state (cached TCP connections), so Clients should be reused instead of created as needed. Clients are safe for concurrent use by multiple goroutines.\"\r\n\r\n**Which issue(s) this PR fixes** \r\n<!-- *(optional, in `fixes #<issue number>(, fixes #<issue_number>, ...)` format, will close the issue(s) when PR gets merged)*: -->\r\nFixes #2276 \r\n\r\nPlease leave this checklist in the PR comment so that maintainers can ensure a good PR.\r\n\r\nMerge Checklist:\r\n - [ ] New feature \r\n   - [x] Tests\r\n   - [ ] Documentation\r\n - [ ] SVCat CLI flag\r\n - [ ] Server Flag for config\r\n   - [ ] Chart changes\r\n   - [ ] removing a flag by marking deprecated and hiding to avoid\r\n         breaking the chart release and existing clients who provide a\r\n         flag that will get an error when they try to update\r\n","created_at":"2018-09-12T09:28:08Z","updated_at":"2018-09-20T09:34:56Z","closed_at":null,"merged_at":null,"merge_commit_sha":"4d33e64f21f15ac20b805234d70e74263f6df614","assignee":null,"assignees":[],"requested_reviewers":[{"login":"jberkhahn","id":5873242,"node_id":"MDQ6VXNlcjU4NzMyNDI=","avatar_url":"https://avatars0.githubusercontent.com/u/5873242?v=4","gravatar_id":"","url":"https://api.github.com/users/jberkhahn","html_url":"https://github.com/jberkhahn","followers_url":"https://api.github.com/users/jberkhahn/followers","following_url":"https://api.github.com/users/jberkhahn/following{/other_user}","gists_url":"https://api.github.com/users/jberkhahn/gists{/gist_id}","starred_url":"https://api.github.com/users/jberkhahn/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jberkhahn/subscriptions","organizations_url":"https://api.github.com/users/jberkhahn/orgs","repos_url":"https://api.github.com/users/jberkhahn/repos","events_url":"https://api.github.com/users/jberkhahn/events{/privacy}","received_events_url":"https://api.github.com/users/jberkhahn/received_events","type":"User","site_admin":false},{"login":"staebler","id":30120115,"node_id":"MDQ6VXNlcjMwMTIwMTE1","avatar_url":"https://avatars1.githubusercontent.com/u/30120115?v=4","gravatar_id":"","url":"https://api.github.com/users/staebler","html_url":"https://github.com/staebler","followers_url":"https://api.github.com/users/staebler/followers","following_url":"https://api.github.com/users/staebler/following{/other_user}","gists_url":"https://api.github.com/users/staebler/gists{/gist_id}","starred_url":"https://api.github.com/users/staebler/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/staebler/subscriptions","organizations_url":"https://api.github.com/users/staebler/orgs","repos_url":"https://api.github.com/users/staebler/repos","events_url":"https://api.github.com/users/staebler/events{/privacy}","received_events_url":"https://api.github.com/users/staebler/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[{"id":972660684,"node_id":"MDU6TGFiZWw5NzI2NjA2ODQ=","url":"https://api.github.com/repos/kubernetes-incubator/service-catalog/labels/approved","name":"approved","color":"0ffa16","default":false},{"id":485046198,"node_id":"MDU6TGFiZWw0ODUwNDYxOTg=","url":"https://api.github.com/repos/kubernetes-incubator/service-catalog/labels/cncf-cla:%20yes","name":"cncf-cla: yes","color":"bfe5bf","default":false},{"id":678154349,"node_id":"MDU6TGFiZWw2NzgxNTQzNDk=","url":"https://api.github.com/repos/kubernetes-incubator/service-catalog/labels/size/XL","name":"size/XL","color":"ee5500","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/kubernetes-incubator/service-catalog/pulls/2337/commits","review_comments_url":"https://api.github.com/repos/kubernetes-incubator/service-catalog/pulls/2337/comments","review_comment_url":"https://api.github.com/repos/kubernetes-incubator/service-catalog/pulls/comments{/number}","comments_url":"https://api.github.com/repos/kubernetes-incubator/service-catalog/issues/2337/comments","statuses_url":"https://api.github.com/repos/kubernetes-incubator/service-catalog/statuses/156ab7655e8f9538401f148bf6e1622188ac4a9f","head":{"label":"piotrmiskiewicz:shared-osb-clients","ref":"shared-osb-clients","sha":"156ab7655e8f9538401f148bf6e1622188ac4a9f","user":{"login":"piotrmiskiewicz","id":15731038,"node_id":"MDQ6VXNlcjE1NzMxMDM4","avatar_url":"https://avatars0.githubusercontent.com/u/15731038?v=4","gravatar_id":"","url":"https://api.github.com/users/piotrmiskiewicz","html_url":"https://github.com/piotrmiskiewicz","followers_url":"https://api.github.com/users/piotrmiskiewicz/followers","following_url":"https://api.github.com/users/piotrmiskiewicz/following{/other_user}","gists_url":"https://api.github.com/users/piotrmiskiewicz/gists{/gist_id}","starred_url":"https://api.github.com/users/piotrmiskiewicz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/piotrmiskiewicz/subscriptions","organizations_url":"https://api.github.com/users/piotrmiskiewicz/orgs","repos_url":"https://api.github.com/users/piotrmiskiewicz/repos","events_url":"https://api.github.com/users/piotrmiskiewicz/events{/privacy}","received_events_url":"https://api.github.com/users/piotrmiskiewicz/received_events","type":"User","site_admin":false},"repo":{"id":145099764,"node_id":"MDEwOlJlcG9zaXRvcnkxNDUwOTk3NjQ=","name":"service-catalog","full_name":"piotrmiskiewicz/service-catalog","private":false,"owner":{"login":"piotrmiskiewicz","id":15731038,"node_id":"MDQ6VXNlcjE1NzMxMDM4","avatar_url":"https://avatars0.githubusercontent.com/u/15731038?v=4","gravatar_id":"","url":"https://api.github.com/users/piotrmiskiewicz","html_url":"https://github.com/piotrmiskiewicz","followers_url":"https://api.github.com/users/piotrmiskiewicz/followers","following_url":"https://api.github.com/users/piotrmiskiewicz/following{/other_user}","gists_url":"https://api.github.com/users/piotrmiskiewicz/gists{/gist_id}","starred_url":"https://api.github.com/users/piotrmiskiewicz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/piotrmiskiewicz/subscriptions","organizations_url":"https://api.github.com/users/piotrmiskiewicz/orgs","repos_url":"https://api.github.com/users/piotrmiskiewicz/repos","events_url":"https://api.github.com/users/piotrmiskiewicz/events{/privacy}","received_events_url":"https://api.github.com/users/piotrmiskiewicz/received_events","type":"User","site_admin":false},"html_url":"https://github.com/piotrmiskiewicz/service-catalog","description":"Consume services in Kubernetes using the Open Service Broker API","fork":true,"url":"https://api.github.com/repos/piotrmiskiewicz/service-catalog","forks_url":"https://api.github.com/repos/piotrmiskiewicz/service-catalog/forks","keys_url":"https://api.github.com/repos/piotrmiskiewicz/service-catalog/keys{/key_id}","collaborators_url":"https://api.github.com/repos/piotrmiskiewicz/service-catalog/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/piotrmiskiewicz/service-catalog/teams","hooks_url":"https://api.github.com/repos/piotrmiskiewicz/service-catalog/hooks","issue_events_url":"https://api.github.com/repos/piotrmiskiewicz/service-catalog/issues/events{/number}","events_url":"https://api.github.com/repos/piotrmiskiewicz/service-catalog/events","assignees_url":"https://api.github.com/repos/piotrmiskiewicz/service-catalog/assignees{/user}","branches_url":"https://api.github.com/repos/piotrmiskiewicz/service-catalog/branches{/branch}","tags_url":"https://api.github.com/repos/piotrmiskiewicz/service-catalog/tags","blobs_url":"https://api.github.com/repos/piotrmiskiewicz/service-catalog/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/piotrmiskiewicz/service-catalog/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/piotrmiskiewicz/service-catalog/git/refs{/sha}","trees_url":"https://api.github.com/repos/piotrmiskiewicz/service-catalog/git/trees{/sha}","statuses_url":"https://api.github.com/repos/piotrmiskiewicz/service-catalog/statuses/{sha}","languages_url":"https://api.github.com/repos/piotrmiskiewicz/service-catalog/languages","stargazers_url":"https://api.github.com/repos/piotrmiskiewicz/service-catalog/stargazers","contributors_url":"https://api.github.com/repos/piotrmiskiewicz/service-catalog/contributors","subscribers_url":"https://api.github.com/repos/piotrmiskiewicz/service-catalog/subscribers","subscription_url":"https://api.github.com/repos/piotrmiskiewicz/service-catalog/subscription","commits_url":"https://api.github.com/repos/piotrmiskiewicz/service-catalog/commits{/sha}","git_commits_url":"https://api.github.com/repos/piotrmiskiewicz/service-catalog/git/commits{/sha}","comments_url":"https://api.github.com/repos/piotrmiskiewicz/service-catalog/comments{/number}","issue_comment_url":"https://api.github.com/repos/piotrmiskiewicz/service-catalog/issues/comments{/number}","contents_url":"https://api.github.com/repos/piotrmiskiewicz/service-catalog/contents/{+path}","compare_url":"https://api.github.com/repos/piotrmiskiewicz/service-catalog/compare/{base}...{head}","merges_url":"https://api.github.com/repos/piotrmiskiewicz/service-catalog/merges","archive_url":"https://api.github.com/repos/piotrmiskiewicz/service-catalog/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/piotrmiskiewicz/service-catalog/downloads","issues_url":"https://api.github.com/repos/piotrmiskiewicz/service-catalog/issues{/number}","pulls_url":"https://api.github.com/repos/piotrmiskiewicz/service-catalog/pulls{/number}","milestones_url":"https://api.github.com/repos/piotrmiskiewicz/service-catalog/milestones{/number}","notifications_url":"https://api.github.com/repos/piotrmiskiewicz/service-catalog/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/piotrmiskiewicz/service-catalog/labels{/name}","releases_url":"https://api.github.com/repos/piotrmiskiewicz/service-catalog/releases{/id}","deployments_url":"https://api.github.com/repos/piotrmiskiewicz/service-catalog/deployments","created_at":"2018-08-17T09:18:27Z","updated_at":"2018-08-17T09:18:32Z","pushed_at":"2018-09-20T09:33:44Z","git_url":"git://github.com/piotrmiskiewicz/service-catalog.git","ssh_url":"git@github.com:piotrmiskiewicz/service-catalog.git","clone_url":"https://github.com/piotrmiskiewicz/service-catalog.git","svn_url":"https://github.com/piotrmiskiewicz/service-catalog","homepage":"","size":103899,"stargazers_count":0,"watchers_count":0,"language":"Go","has_issues":false,"has_projects":true,"has_downloads":true,"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","node_id":"MDc6TGljZW5zZTI="},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"kubernetes-incubator:master","ref":"master","sha":"395f5d42c39cfe851503bfe39655212c5fe5e9b8","user":{"login":"kubernetes-incubator","id":20862812,"node_id":"MDEyOk9yZ2FuaXphdGlvbjIwODYyODEy","avatar_url":"https://avatars2.githubusercontent.com/u/20862812?v=4","gravatar_id":"","url":"https://api.github.com/users/kubernetes-incubator","html_url":"https://github.com/kubernetes-incubator","followers_url":"https://api.github.com/users/kubernetes-incubator/followers","following_url":"https://api.github.com/users/kubernetes-incubator/following{/other_user}","gists_url":"https://api.github.com/users/kubernetes-incubator/gists{/gist_id}","starred_url":"https://api.github.com/users/kubernetes-incubator/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kubernetes-incubator/subscriptions","organizations_url":"https://api.github.com/users/kubernetes-incubator/orgs","repos_url":"https://api.github.com/users/kubernetes-incubator/repos","events_url":"https://api.github.com/users/kubernetes-incubator/events{/privacy}","received_events_url":"https://api.github.com/users/kubernetes-incubator/received_events","type":"Organization","site_admin":false},"repo":{"id":68024288,"node_id":"MDEwOlJlcG9zaXRvcnk2ODAyNDI4OA==","name":"service-catalog","full_name":"kubernetes-incubator/service-catalog","private":false,"owner":{"login":"kubernetes-incubator","id":20862812,"node_id":"MDEyOk9yZ2FuaXphdGlvbjIwODYyODEy","avatar_url":"https://avatars2.githubusercontent.com/u/20862812?v=4","gravatar_id":"","url":"https://api.github.com/users/kubernetes-incubator","html_url":"https://github.com/kubernetes-incubator","followers_url":"https://api.github.com/users/kubernetes-incubator/followers","following_url":"https://api.github.com/users/kubernetes-incubator/following{/other_user}","gists_url":"https://api.github.com/users/kubernetes-incubator/gists{/gist_id}","starred_url":"https://api.github.com/users/kubernetes-incubator/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kubernetes-incubator/subscriptions","organizations_url":"https://api.github.com/users/kubernetes-incubator/orgs","repos_url":"https://api.github.com/users/kubernetes-incubator/repos","events_url":"https://api.github.com/users/kubernetes-incubator/events{/privacy}","received_events_url":"https://api.github.com/users/kubernetes-incubator/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/kubernetes-incubator/service-catalog","description":"Consume services in Kubernetes using the Open Service Broker API","fork":false,"url":"https://api.github.com/repos/kubernetes-incubator/service-catalog","forks_url":"https://api.github.com/repos/kubernetes-incubator/service-catalog/forks","keys_url":"https://api.github.com/repos/kubernetes-incubator/service-catalog/keys{/key_id}","collaborators_url":"https://api.github.com/repos/kubernetes-incubator/service-catalog/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/kubernetes-incubator/service-catalog/teams","hooks_url":"https://api.github.com/repos/kubernetes-incubator/service-catalog/hooks","issue_events_url":"https://api.github.com/repos/kubernetes-incubator/service-catalog/issues/events{/number}","events_url":"https://api.github.com/repos/kubernetes-incubator/service-catalog/events","assignees_url":"https://api.github.com/repos/kubernetes-incubator/service-catalog/assignees{/user}","branches_url":"https://api.github.com/repos/kubernetes-incubator/service-catalog/branches{/branch}","tags_url":"https://api.github.com/repos/kubernetes-incubator/service-catalog/tags","blobs_url":"https://api.github.com/repos/kubernetes-incubator/service-catalog/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/kubernetes-incubator/service-catalog/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/kubernetes-incubator/service-catalog/git/refs{/sha}","trees_url":"https://api.github.com/repos/kubernetes-incubator/service-catalog/git/trees{/sha}","statuses_url":"https://api.github.com/repos/kubernetes-incubator/service-catalog/statuses/{sha}","languages_url":"https://api.github.com/repos/kubernetes-incubator/service-catalog/languages","stargazers_url":"https://api.github.com/repos/kubernetes-incubator/service-catalog/stargazers","contributors_url":"https://api.github.com/repos/kubernetes-incubator/service-catalog/contributors","subscribers_url":"https://api.github.com/repos/kubernetes-incubator/service-catalog/subscribers","subscription_url":"https://api.github.com/repos/kubernetes-incubator/service-catalog/subscription","commits_url":"https://api.github.com/repos/kubernetes-incubator/service-catalog/commits{/sha}","git_commits_url":"https://api.github.com/repos/kubernetes-incubator/service-catalog/git/commits{/sha}","comments_url":"https://api.github.com/repos/kubernetes-incubator/service-catalog/comments{/number}","issue_comment_url":"https://api.github.com/repos/kubernetes-incubator/service-catalog/issues/comments{/number}","contents_url":"https://api.github.com/repos/kubernetes-incubator/service-catalog/contents/{+path}","compare_url":"https://api.github.com/repos/kubernetes-incubator/service-catalog/compare/{base}...{head}","merges_url":"https://api.github.com/repos/kubernetes-incubator/service-catalog/merges","archive_url":"https://api.github.com/repos/kubernetes-incubator/service-catalog/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/kubernetes-incubator/service-catalog/downloads","issues_url":"https://api.github.com/repos/kubernetes-incubator/service-catalog/issues{/number}","pulls_url":"https://api.github.com/repos/kubernetes-incubator/service-catalog/pulls{/number}","milestones_url":"https://api.github.com/repos/kubernetes-incubator/service-catalog/milestones{/number}","notifications_url":"https://api.github.com/repos/kubernetes-incubator/service-catalog/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/kubernetes-incubator/service-catalog/labels{/name}","releases_url":"https://api.github.com/repos/kubernetes-incubator/service-catalog/releases{/id}","deployments_url":"https://api.github.com/repos/kubernetes-incubator/service-catalog/deployments","created_at":"2016-09-12T15:58:39Z","updated_at":"2018-09-19T21:56:22Z","pushed_at":"2018-09-20T09:33:45Z","git_url":"git://github.com/kubernetes-incubator/service-catalog.git","ssh_url":"git@github.com:kubernetes-incubator/service-catalog.git","clone_url":"https://github.com/kubernetes-incubator/service-catalog.git","svn_url":"https://github.com/kubernetes-incubator/service-catalog","homepage":"https://svc-cat.io","size":103942,"stargazers_count":602,"watchers_count":602,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":219,"mirror_url":null,"archived":false,"open_issues_count":234,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0","node_id":"MDc6TGljZW5zZTI="},"forks":219,"open_issues":234,"watchers":602,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/kubernetes-incubator/service-catalog/pulls/2337"},"html":{"href":"https://github.com/kubernetes-incubator/service-catalog/pull/2337"},"issue":{"href":"https://api.github.com/repos/kubernetes-incubator/service-catalog/issues/2337"},"comments":{"href":"https://api.github.com/repos/kubernetes-incubator/service-catalog/issues/2337/comments"},"review_comments":{"href":"https://api.github.com/repos/kubernetes-incubator/service-catalog/pulls/2337/comments"},"review_comment":{"href":"https://api.github.com/repos/kubernetes-incubator/service-catalog/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/kubernetes-incubator/service-catalog/pulls/2337/commits"},"statuses":{"href":"https://api.github.com/repos/kubernetes-incubator/service-catalog/statuses/156ab7655e8f9538401f148bf6e1622188ac4a9f"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"piotrmiskiewicz"}}