{"action":"created","comment":{"url":"https://api.github.com/repos/kubernetes/kubernetes/pulls/comments/38704666","id":38704666,"diff_hunk":"@@ -75,23 +74,38 @@ type matchPredicate func(compareThis, toThis *api.PersistentVolume) bool\n \n // Find returns the nearest PV from the ordered list or nil if a match is not found\n func (pvIndex *persistentVolumeOrderedIndex) Find(pv *api.PersistentVolume, matchPredicate matchPredicate) (*api.PersistentVolume, error) {\n-\tvolumes, err := pvIndex.ListByAccessModes(pv.Spec.AccessModes)\n-\tif err != nil {\n-\t\treturn nil, err\n-\t}\n+\t// the 'pv' argument is a synthetic PV with capacity and accessmodes set according to the user's PersistentVolumeClaim.\n+\t// the synthetic pv arg is, therefore, a request for a storage resource.\n+\t//\n+\t// PVs are indexed by their access modes to allow easier searching.  Each index is the string representation of a set of access modes.\n+\t// There is a finite number of possible sets and PVs will only be indexed in one of them (whichever index matches the PV's modes).\n+\t//\n+\t// A request for resources will always specify its desired access modes.  Any matching PV must have at least that number\n+\t// of access modes, but it can have more.  For example, a user asks for ReadWriteOnce but a GCEPD is available, which is ReadWriteOnce+ReadOnlyMany.\n+\t//\n+\t// Searches are performed against a set of access modes, so we can attempt not only the exact matching modes but also\n+\t// potential matches (the GCEPD example above).\n+\tallPossibleModes := pvIndex.allPossibleMatchingAccessModes(pv.Spec.AccessModes)","path":"pkg/controller/persistentvolume/types.go","position":36,"original_position":36,"commit_id":"0b6030f50ce54d5caa8f131880ef8fa2d5df8001","original_commit_id":"ce7191c48160e1f20a2d081727a2cdc05e46dc0e","user":{"login":"saad-ali","id":10052848,"avatar_url":"https://avatars.githubusercontent.com/u/10052848?v=3","gravatar_id":"","url":"https://api.github.com/users/saad-ali","html_url":"https://github.com/saad-ali","followers_url":"https://api.github.com/users/saad-ali/followers","following_url":"https://api.github.com/users/saad-ali/following{/other_user}","gists_url":"https://api.github.com/users/saad-ali/gists{/gist_id}","starred_url":"https://api.github.com/users/saad-ali/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/saad-ali/subscriptions","organizations_url":"https://api.github.com/users/saad-ali/orgs","repos_url":"https://api.github.com/users/saad-ali/repos","events_url":"https://api.github.com/users/saad-ali/events{/privacy}","received_events_url":"https://api.github.com/users/saad-ali/received_events","type":"User","site_admin":false},"body":"@markturansky That's fair. I don't see a way of easily simplifying this short of rewriting the indexing code and that's out-of-scope for this PR.","created_at":"2015-09-03T22:34:27Z","updated_at":"2015-09-03T22:34:27Z","html_url":"https://github.com/kubernetes/kubernetes/pull/10833#discussion_r38704666","pull_request_url":"https://api.github.com/repos/kubernetes/kubernetes/pulls/10833","_links":{"self":{"href":"https://api.github.com/repos/kubernetes/kubernetes/pulls/comments/38704666"},"html":{"href":"https://github.com/kubernetes/kubernetes/pull/10833#discussion_r38704666"},"pull_request":{"href":"https://api.github.com/repos/kubernetes/kubernetes/pulls/10833"}}},"pull_request":{"url":"https://api.github.com/repos/kubernetes/kubernetes/pulls/10833","id":39375646,"html_url":"https://github.com/kubernetes/kubernetes/pull/10833","diff_url":"https://github.com/kubernetes/kubernetes/pull/10833.diff","patch_url":"https://github.com/kubernetes/kubernetes/pull/10833.patch","issue_url":"https://api.github.com/repos/kubernetes/kubernetes/issues/10833","number":10833,"state":"open","locked":false,"title":"Allow PV/Claim matching on inexact access modes","user":{"login":"markturansky","id":8001968,"avatar_url":"https://avatars.githubusercontent.com/u/8001968?v=3","gravatar_id":"","url":"https://api.github.com/users/markturansky","html_url":"https://github.com/markturansky","followers_url":"https://api.github.com/users/markturansky/followers","following_url":"https://api.github.com/users/markturansky/following{/other_user}","gists_url":"https://api.github.com/users/markturansky/gists{/gist_id}","starred_url":"https://api.github.com/users/markturansky/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/markturansky/subscriptions","organizations_url":"https://api.github.com/users/markturansky/orgs","repos_url":"https://api.github.com/users/markturansky/repos","events_url":"https://api.github.com/users/markturansky/events{/privacy}","received_events_url":"https://api.github.com/users/markturansky/received_events","type":"User","site_admin":false},"body":"Resolves #10683 \r\n\r\nUse case 1:  User requests only ReadWriteOnce.  Cluster is full of GCEPDs (RWO+ROX).  The user's request should match a GCEPD.\r\n\r\nUse case 2:  User's claim requests only ReadWriteMany.   There is no exact match for that (NFS is RWO+ROX+RWX).  The request for ReadWriteMany should be satisfied by an NFS volume.\r\n\r\n@thockin @smarterclayton ","created_at":"2015-07-07T14:26:00Z","updated_at":"2015-09-03T22:34:27Z","closed_at":null,"merged_at":null,"merge_commit_sha":"8f8dbc33697b652a33e327308b267606cf4ffd55","assignee":{"login":"saad-ali","id":10052848,"avatar_url":"https://avatars.githubusercontent.com/u/10052848?v=3","gravatar_id":"","url":"https://api.github.com/users/saad-ali","html_url":"https://github.com/saad-ali","followers_url":"https://api.github.com/users/saad-ali/followers","following_url":"https://api.github.com/users/saad-ali/following{/other_user}","gists_url":"https://api.github.com/users/saad-ali/gists{/gist_id}","starred_url":"https://api.github.com/users/saad-ali/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/saad-ali/subscriptions","organizations_url":"https://api.github.com/users/saad-ali/orgs","repos_url":"https://api.github.com/users/saad-ali/repos","events_url":"https://api.github.com/users/saad-ali/events{/privacy}","received_events_url":"https://api.github.com/users/saad-ali/received_events","type":"User","site_admin":false},"milestone":null,"commits_url":"https://api.github.com/repos/kubernetes/kubernetes/pulls/10833/commits","review_comments_url":"https://api.github.com/repos/kubernetes/kubernetes/pulls/10833/comments","review_comment_url":"https://api.github.com/repos/kubernetes/kubernetes/pulls/comments{/number}","comments_url":"https://api.github.com/repos/kubernetes/kubernetes/issues/10833/comments","statuses_url":"https://api.github.com/repos/kubernetes/kubernetes/statuses/0b6030f50ce54d5caa8f131880ef8fa2d5df8001","head":{"label":"markturansky:loosen_binding","ref":"loosen_binding","sha":"0b6030f50ce54d5caa8f131880ef8fa2d5df8001","user":{"login":"markturansky","id":8001968,"avatar_url":"https://avatars.githubusercontent.com/u/8001968?v=3","gravatar_id":"","url":"https://api.github.com/users/markturansky","html_url":"https://github.com/markturansky","followers_url":"https://api.github.com/users/markturansky/followers","following_url":"https://api.github.com/users/markturansky/following{/other_user}","gists_url":"https://api.github.com/users/markturansky/gists{/gist_id}","starred_url":"https://api.github.com/users/markturansky/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/markturansky/subscriptions","organizations_url":"https://api.github.com/users/markturansky/orgs","repos_url":"https://api.github.com/users/markturansky/repos","events_url":"https://api.github.com/users/markturansky/events{/privacy}","received_events_url":"https://api.github.com/users/markturansky/received_events","type":"User","site_admin":false},"repo":{"id":24423869,"name":"kubernetes","full_name":"markturansky/kubernetes","owner":{"login":"markturansky","id":8001968,"avatar_url":"https://avatars.githubusercontent.com/u/8001968?v=3","gravatar_id":"","url":"https://api.github.com/users/markturansky","html_url":"https://github.com/markturansky","followers_url":"https://api.github.com/users/markturansky/followers","following_url":"https://api.github.com/users/markturansky/following{/other_user}","gists_url":"https://api.github.com/users/markturansky/gists{/gist_id}","starred_url":"https://api.github.com/users/markturansky/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/markturansky/subscriptions","organizations_url":"https://api.github.com/users/markturansky/orgs","repos_url":"https://api.github.com/users/markturansky/repos","events_url":"https://api.github.com/users/markturansky/events{/privacy}","received_events_url":"https://api.github.com/users/markturansky/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/markturansky/kubernetes","description":"Container Cluster Manager","fork":true,"url":"https://api.github.com/repos/markturansky/kubernetes","forks_url":"https://api.github.com/repos/markturansky/kubernetes/forks","keys_url":"https://api.github.com/repos/markturansky/kubernetes/keys{/key_id}","collaborators_url":"https://api.github.com/repos/markturansky/kubernetes/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/markturansky/kubernetes/teams","hooks_url":"https://api.github.com/repos/markturansky/kubernetes/hooks","issue_events_url":"https://api.github.com/repos/markturansky/kubernetes/issues/events{/number}","events_url":"https://api.github.com/repos/markturansky/kubernetes/events","assignees_url":"https://api.github.com/repos/markturansky/kubernetes/assignees{/user}","branches_url":"https://api.github.com/repos/markturansky/kubernetes/branches{/branch}","tags_url":"https://api.github.com/repos/markturansky/kubernetes/tags","blobs_url":"https://api.github.com/repos/markturansky/kubernetes/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/markturansky/kubernetes/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/markturansky/kubernetes/git/refs{/sha}","trees_url":"https://api.github.com/repos/markturansky/kubernetes/git/trees{/sha}","statuses_url":"https://api.github.com/repos/markturansky/kubernetes/statuses/{sha}","languages_url":"https://api.github.com/repos/markturansky/kubernetes/languages","stargazers_url":"https://api.github.com/repos/markturansky/kubernetes/stargazers","contributors_url":"https://api.github.com/repos/markturansky/kubernetes/contributors","subscribers_url":"https://api.github.com/repos/markturansky/kubernetes/subscribers","subscription_url":"https://api.github.com/repos/markturansky/kubernetes/subscription","commits_url":"https://api.github.com/repos/markturansky/kubernetes/commits{/sha}","git_commits_url":"https://api.github.com/repos/markturansky/kubernetes/git/commits{/sha}","comments_url":"https://api.github.com/repos/markturansky/kubernetes/comments{/number}","issue_comment_url":"https://api.github.com/repos/markturansky/kubernetes/issues/comments{/number}","contents_url":"https://api.github.com/repos/markturansky/kubernetes/contents/{+path}","compare_url":"https://api.github.com/repos/markturansky/kubernetes/compare/{base}...{head}","merges_url":"https://api.github.com/repos/markturansky/kubernetes/merges","archive_url":"https://api.github.com/repos/markturansky/kubernetes/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/markturansky/kubernetes/downloads","issues_url":"https://api.github.com/repos/markturansky/kubernetes/issues{/number}","pulls_url":"https://api.github.com/repos/markturansky/kubernetes/pulls{/number}","milestones_url":"https://api.github.com/repos/markturansky/kubernetes/milestones{/number}","notifications_url":"https://api.github.com/repos/markturansky/kubernetes/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/markturansky/kubernetes/labels{/name}","releases_url":"https://api.github.com/repos/markturansky/kubernetes/releases{/id}","created_at":"2014-09-24T16:55:04Z","updated_at":"2015-05-08T20:34:01Z","pushed_at":"2015-09-03T21:09:28Z","git_url":"git://github.com/markturansky/kubernetes.git","ssh_url":"git@github.com:markturansky/kubernetes.git","clone_url":"https://github.com/markturansky/kubernetes.git","svn_url":"https://github.com/markturansky/kubernetes","homepage":null,"size":107355,"stargazers_count":0,"watchers_count":0,"language":"Go","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"kubernetes:master","ref":"master","sha":"986d37d145462a0e41a9d2afc1c169612b21d9ea","user":{"login":"kubernetes","id":13629408,"avatar_url":"https://avatars.githubusercontent.com/u/13629408?v=3","gravatar_id":"","url":"https://api.github.com/users/kubernetes","html_url":"https://github.com/kubernetes","followers_url":"https://api.github.com/users/kubernetes/followers","following_url":"https://api.github.com/users/kubernetes/following{/other_user}","gists_url":"https://api.github.com/users/kubernetes/gists{/gist_id}","starred_url":"https://api.github.com/users/kubernetes/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kubernetes/subscriptions","organizations_url":"https://api.github.com/users/kubernetes/orgs","repos_url":"https://api.github.com/users/kubernetes/repos","events_url":"https://api.github.com/users/kubernetes/events{/privacy}","received_events_url":"https://api.github.com/users/kubernetes/received_events","type":"Organization","site_admin":false},"repo":{"id":20580498,"name":"kubernetes","full_name":"kubernetes/kubernetes","owner":{"login":"kubernetes","id":13629408,"avatar_url":"https://avatars.githubusercontent.com/u/13629408?v=3","gravatar_id":"","url":"https://api.github.com/users/kubernetes","html_url":"https://github.com/kubernetes","followers_url":"https://api.github.com/users/kubernetes/followers","following_url":"https://api.github.com/users/kubernetes/following{/other_user}","gists_url":"https://api.github.com/users/kubernetes/gists{/gist_id}","starred_url":"https://api.github.com/users/kubernetes/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kubernetes/subscriptions","organizations_url":"https://api.github.com/users/kubernetes/orgs","repos_url":"https://api.github.com/users/kubernetes/repos","events_url":"https://api.github.com/users/kubernetes/events{/privacy}","received_events_url":"https://api.github.com/users/kubernetes/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/kubernetes/kubernetes","description":"Container Cluster Manager from Google","fork":false,"url":"https://api.github.com/repos/kubernetes/kubernetes","forks_url":"https://api.github.com/repos/kubernetes/kubernetes/forks","keys_url":"https://api.github.com/repos/kubernetes/kubernetes/keys{/key_id}","collaborators_url":"https://api.github.com/repos/kubernetes/kubernetes/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/kubernetes/kubernetes/teams","hooks_url":"https://api.github.com/repos/kubernetes/kubernetes/hooks","issue_events_url":"https://api.github.com/repos/kubernetes/kubernetes/issues/events{/number}","events_url":"https://api.github.com/repos/kubernetes/kubernetes/events","assignees_url":"https://api.github.com/repos/kubernetes/kubernetes/assignees{/user}","branches_url":"https://api.github.com/repos/kubernetes/kubernetes/branches{/branch}","tags_url":"https://api.github.com/repos/kubernetes/kubernetes/tags","blobs_url":"https://api.github.com/repos/kubernetes/kubernetes/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/kubernetes/kubernetes/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/kubernetes/kubernetes/git/refs{/sha}","trees_url":"https://api.github.com/repos/kubernetes/kubernetes/git/trees{/sha}","statuses_url":"https://api.github.com/repos/kubernetes/kubernetes/statuses/{sha}","languages_url":"https://api.github.com/repos/kubernetes/kubernetes/languages","stargazers_url":"https://api.github.com/repos/kubernetes/kubernetes/stargazers","contributors_url":"https://api.github.com/repos/kubernetes/kubernetes/contributors","subscribers_url":"https://api.github.com/repos/kubernetes/kubernetes/subscribers","subscription_url":"https://api.github.com/repos/kubernetes/kubernetes/subscription","commits_url":"https://api.github.com/repos/kubernetes/kubernetes/commits{/sha}","git_commits_url":"https://api.github.com/repos/kubernetes/kubernetes/git/commits{/sha}","comments_url":"https://api.github.com/repos/kubernetes/kubernetes/comments{/number}","issue_comment_url":"https://api.github.com/repos/kubernetes/kubernetes/issues/comments{/number}","contents_url":"https://api.github.com/repos/kubernetes/kubernetes/contents/{+path}","compare_url":"https://api.github.com/repos/kubernetes/kubernetes/compare/{base}...{head}","merges_url":"https://api.github.com/repos/kubernetes/kubernetes/merges","archive_url":"https://api.github.com/repos/kubernetes/kubernetes/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/kubernetes/kubernetes/downloads","issues_url":"https://api.github.com/repos/kubernetes/kubernetes/issues{/number}","pulls_url":"https://api.github.com/repos/kubernetes/kubernetes/pulls{/number}","milestones_url":"https://api.github.com/repos/kubernetes/kubernetes/milestones{/number}","notifications_url":"https://api.github.com/repos/kubernetes/kubernetes/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/kubernetes/kubernetes/labels{/name}","releases_url":"https://api.github.com/repos/kubernetes/kubernetes/releases{/id}","created_at":"2014-06-06T22:56:04Z","updated_at":"2015-09-03T20:38:47Z","pushed_at":"2015-09-03T22:26:57Z","git_url":"git://github.com/kubernetes/kubernetes.git","ssh_url":"git@github.com:kubernetes/kubernetes.git","clone_url":"https://github.com/kubernetes/kubernetes.git","svn_url":"https://github.com/kubernetes/kubernetes","homepage":"http://kubernetes.io","size":405153,"stargazers_count":10052,"watchers_count":10052,"language":"Go","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":2444,"mirror_url":null,"open_issues_count":1709,"forks":2444,"open_issues":1709,"watchers":10052,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/kubernetes/kubernetes/pulls/10833"},"html":{"href":"https://github.com/kubernetes/kubernetes/pull/10833"},"issue":{"href":"https://api.github.com/repos/kubernetes/kubernetes/issues/10833"},"comments":{"href":"https://api.github.com/repos/kubernetes/kubernetes/issues/10833/comments"},"review_comments":{"href":"https://api.github.com/repos/kubernetes/kubernetes/pulls/10833/comments"},"review_comment":{"href":"https://api.github.com/repos/kubernetes/kubernetes/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/kubernetes/kubernetes/pulls/10833/commits"},"statuses":{"href":"https://api.github.com/repos/kubernetes/kubernetes/statuses/0b6030f50ce54d5caa8f131880ef8fa2d5df8001"}}}}