{"action":"created","comment":{"url":"https://api.github.com/repos/container-storage-interface/spec/pulls/comments/186459421","pull_request_review_id":118036802,"id":186459421,"diff_hunk":"@@ -1090,6 +1088,223 @@ message ControllerServiceCapability {\n \n If the plugin is unable to complete the ControllerGetCapabilities call successfully, it MUST return a non-ok gRPC code in the gRPC status.\n \n+#### `CreateSnapshot`\n+\n+A Controller Plugin MUST implement this RPC call if it has `CREATE_DELETE_SNAPSHOT` controller capability.\n+This RPC will be called by the CO to create a new snapshot from a source volume on behalf of a user.\n+\n+This operation MUST be idempotent.\n+If a snapshot corresponding to the specified snapshot `name` already exists and is compatible with the specified `source_volume_id` and `parameters` in the `CreateSnapshotRequest`, the Plugin MUST reply `0 OK` with the corresponding `CreateSnapshotResponse`.","path":"spec.md","position":201,"original_position":201,"commit_id":"6ccec55ceec99ea0f938a2425f5a2d68852c2d28","original_commit_id":"6ccec55ceec99ea0f938a2425f5a2d68852c2d28","user":{"login":"jdef","id":2348332,"avatar_url":"https://avatars3.githubusercontent.com/u/2348332?v=4","gravatar_id":"","url":"https://api.github.com/users/jdef","html_url":"https://github.com/jdef","followers_url":"https://api.github.com/users/jdef/followers","following_url":"https://api.github.com/users/jdef/following{/other_user}","gists_url":"https://api.github.com/users/jdef/gists{/gist_id}","starred_url":"https://api.github.com/users/jdef/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jdef/subscriptions","organizations_url":"https://api.github.com/users/jdef/orgs","repos_url":"https://api.github.com/users/jdef/repos","events_url":"https://api.github.com/users/jdef/events{/privacy}","received_events_url":"https://api.github.com/users/jdef/received_events","type":"User","site_admin":false},"body":"This is an important sentence: if the snapshot \"exists\" and the snapshot status is `ERROR` this RPC is still expected to return `OK`. Maybe we could make that more clear in the errors table that follows?","created_at":"2018-05-07T15:30:38Z","updated_at":"2018-05-07T15:46:11Z","html_url":"https://github.com/container-storage-interface/spec/pull/224#discussion_r186459421","pull_request_url":"https://api.github.com/repos/container-storage-interface/spec/pulls/224","author_association":"OWNER","_links":{"self":{"href":"https://api.github.com/repos/container-storage-interface/spec/pulls/comments/186459421"},"html":{"href":"https://github.com/container-storage-interface/spec/pull/224#discussion_r186459421"},"pull_request":{"href":"https://api.github.com/repos/container-storage-interface/spec/pulls/224"}}},"pull_request":{"url":"https://api.github.com/repos/container-storage-interface/spec/pulls/224","id":184143209,"html_url":"https://github.com/container-storage-interface/spec/pull/224","diff_url":"https://github.com/container-storage-interface/spec/pull/224.diff","patch_url":"https://github.com/container-storage-interface/spec/pull/224.patch","issue_url":"https://api.github.com/repos/container-storage-interface/spec/issues/224","number":224,"state":"open","locked":false,"title":"Add Snapshot Support in CSI Spec","user":{"login":"xing-yang","id":1185309,"avatar_url":"https://avatars1.githubusercontent.com/u/1185309?v=4","gravatar_id":"","url":"https://api.github.com/users/xing-yang","html_url":"https://github.com/xing-yang","followers_url":"https://api.github.com/users/xing-yang/followers","following_url":"https://api.github.com/users/xing-yang/following{/other_user}","gists_url":"https://api.github.com/users/xing-yang/gists{/gist_id}","starred_url":"https://api.github.com/users/xing-yang/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/xing-yang/subscriptions","organizations_url":"https://api.github.com/users/xing-yang/orgs","repos_url":"https://api.github.com/users/xing-yang/repos","events_url":"https://api.github.com/users/xing-yang/events{/privacy}","received_events_url":"https://api.github.com/users/xing-yang/received_events","type":"User","site_admin":false},"body":"This PR proposes to add snapshot support in CSI specification.\r\nIt proposes to add 3 new controller service RPCs, including\r\nCreateSnapshot, DeleteSnapshot, and ListSnapshots, and modify\r\nthe existing ControllerGetCapabilitiesResponse and\r\nCreateVolumeRequest.\r\n\r\nThere are several cases for using the snapshot data in a volume:\r\n\r\n1. Create volume from snapshot: In this case, a new volume will be\r\ncreated on the storage backend and the data in the snapshot will\r\nbe copied to the new volume. This case will be addressed by this\r\nproposal.\r\n\r\n2. Revert snapshot: In this case, data in the original volume\r\nwill be erased and replaced with data in the snapshot. This case\r\nis out of scope for this proposal and should be handled by a\r\nfunction of its own (not to be mixed with create volume from\r\nsnapshot) if it is proposed in the future.\r\n\r\nThe following changes will be made in the Service Controller:\r\n- Add CreateSnapshot\r\n- Add DeleteSnapshot\r\n- Add ListSnapshots\r\n- Modify CreateVolumeRequest to support creating a new volume from\r\n  snapshot.\r\n- Modify ControllerGetCapabilitiesResponse to return\r\n  CREATE_DELETE_SNAPSHOT and LIST_SNAPSHOTS support capabilities.\r\n- Creating volume from snapshot is a required functionality for plugins\r\n  supporting CREATE_DELETE_SNAPSHOT.\r\n\r\nThis proposal was drafted here:\r\nhttps://docs.google.com/document/d/1oXVuDTNhXerr1UJ48tQrxF9J6vbm2LHVVC3z28655Qo/edit#\r\n\r\nThe PR https://github.com/container-storage-interface/spec/pull/207 is getting very big (possibly due to the large number of comments) and some people can't view it on Github, so close that one and submit a new PR here instead.","created_at":"2018-04-25T19:44:21Z","updated_at":"2018-05-07T15:46:11Z","closed_at":null,"merged_at":null,"merge_commit_sha":"362dfaa0413a2624e79aed388dd2406636a610b2","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/container-storage-interface/spec/pulls/224/commits","review_comments_url":"https://api.github.com/repos/container-storage-interface/spec/pulls/224/comments","review_comment_url":"https://api.github.com/repos/container-storage-interface/spec/pulls/comments{/number}","comments_url":"https://api.github.com/repos/container-storage-interface/spec/issues/224/comments","statuses_url":"https://api.github.com/repos/container-storage-interface/spec/statuses/6ccec55ceec99ea0f938a2425f5a2d68852c2d28","head":{"label":"xing-yang:snapshot2","ref":"snapshot2","sha":"6ccec55ceec99ea0f938a2425f5a2d68852c2d28","user":{"login":"xing-yang","id":1185309,"avatar_url":"https://avatars1.githubusercontent.com/u/1185309?v=4","gravatar_id":"","url":"https://api.github.com/users/xing-yang","html_url":"https://github.com/xing-yang","followers_url":"https://api.github.com/users/xing-yang/followers","following_url":"https://api.github.com/users/xing-yang/following{/other_user}","gists_url":"https://api.github.com/users/xing-yang/gists{/gist_id}","starred_url":"https://api.github.com/users/xing-yang/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/xing-yang/subscriptions","organizations_url":"https://api.github.com/users/xing-yang/orgs","repos_url":"https://api.github.com/users/xing-yang/repos","events_url":"https://api.github.com/users/xing-yang/events{/privacy}","received_events_url":"https://api.github.com/users/xing-yang/received_events","type":"User","site_admin":false},"repo":{"id":119099401,"name":"spec","full_name":"xing-yang/spec","owner":{"login":"xing-yang","id":1185309,"avatar_url":"https://avatars1.githubusercontent.com/u/1185309?v=4","gravatar_id":"","url":"https://api.github.com/users/xing-yang","html_url":"https://github.com/xing-yang","followers_url":"https://api.github.com/users/xing-yang/followers","following_url":"https://api.github.com/users/xing-yang/following{/other_user}","gists_url":"https://api.github.com/users/xing-yang/gists{/gist_id}","starred_url":"https://api.github.com/users/xing-yang/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/xing-yang/subscriptions","organizations_url":"https://api.github.com/users/xing-yang/orgs","repos_url":"https://api.github.com/users/xing-yang/repos","events_url":"https://api.github.com/users/xing-yang/events{/privacy}","received_events_url":"https://api.github.com/users/xing-yang/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/xing-yang/spec","description":"Container Storage Interface (CSI) Specification.","fork":true,"url":"https://api.github.com/repos/xing-yang/spec","forks_url":"https://api.github.com/repos/xing-yang/spec/forks","keys_url":"https://api.github.com/repos/xing-yang/spec/keys{/key_id}","collaborators_url":"https://api.github.com/repos/xing-yang/spec/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/xing-yang/spec/teams","hooks_url":"https://api.github.com/repos/xing-yang/spec/hooks","issue_events_url":"https://api.github.com/repos/xing-yang/spec/issues/events{/number}","events_url":"https://api.github.com/repos/xing-yang/spec/events","assignees_url":"https://api.github.com/repos/xing-yang/spec/assignees{/user}","branches_url":"https://api.github.com/repos/xing-yang/spec/branches{/branch}","tags_url":"https://api.github.com/repos/xing-yang/spec/tags","blobs_url":"https://api.github.com/repos/xing-yang/spec/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/xing-yang/spec/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/xing-yang/spec/git/refs{/sha}","trees_url":"https://api.github.com/repos/xing-yang/spec/git/trees{/sha}","statuses_url":"https://api.github.com/repos/xing-yang/spec/statuses/{sha}","languages_url":"https://api.github.com/repos/xing-yang/spec/languages","stargazers_url":"https://api.github.com/repos/xing-yang/spec/stargazers","contributors_url":"https://api.github.com/repos/xing-yang/spec/contributors","subscribers_url":"https://api.github.com/repos/xing-yang/spec/subscribers","subscription_url":"https://api.github.com/repos/xing-yang/spec/subscription","commits_url":"https://api.github.com/repos/xing-yang/spec/commits{/sha}","git_commits_url":"https://api.github.com/repos/xing-yang/spec/git/commits{/sha}","comments_url":"https://api.github.com/repos/xing-yang/spec/comments{/number}","issue_comment_url":"https://api.github.com/repos/xing-yang/spec/issues/comments{/number}","contents_url":"https://api.github.com/repos/xing-yang/spec/contents/{+path}","compare_url":"https://api.github.com/repos/xing-yang/spec/compare/{base}...{head}","merges_url":"https://api.github.com/repos/xing-yang/spec/merges","archive_url":"https://api.github.com/repos/xing-yang/spec/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/xing-yang/spec/downloads","issues_url":"https://api.github.com/repos/xing-yang/spec/issues{/number}","pulls_url":"https://api.github.com/repos/xing-yang/spec/pulls{/number}","milestones_url":"https://api.github.com/repos/xing-yang/spec/milestones{/number}","notifications_url":"https://api.github.com/repos/xing-yang/spec/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/xing-yang/spec/labels{/name}","releases_url":"https://api.github.com/repos/xing-yang/spec/releases{/id}","deployments_url":"https://api.github.com/repos/xing-yang/spec/deployments","created_at":"2018-01-26T20:24:00Z","updated_at":"2018-01-26T20:24:02Z","pushed_at":"2018-05-06T16:44:57Z","git_url":"git://github.com/xing-yang/spec.git","ssh_url":"git@github.com:xing-yang/spec.git","clone_url":"https://github.com/xing-yang/spec.git","svn_url":"https://github.com/xing-yang/spec","homepage":"","size":490,"stargazers_count":0,"watchers_count":0,"language":"Makefile","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"},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"container-storage-interface:master","ref":"master","sha":"1eead7c74ba2e3fca67051c91c58aab554421dc9","user":{"login":"container-storage-interface","id":28406793,"avatar_url":"https://avatars1.githubusercontent.com/u/28406793?v=4","gravatar_id":"","url":"https://api.github.com/users/container-storage-interface","html_url":"https://github.com/container-storage-interface","followers_url":"https://api.github.com/users/container-storage-interface/followers","following_url":"https://api.github.com/users/container-storage-interface/following{/other_user}","gists_url":"https://api.github.com/users/container-storage-interface/gists{/gist_id}","starred_url":"https://api.github.com/users/container-storage-interface/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/container-storage-interface/subscriptions","organizations_url":"https://api.github.com/users/container-storage-interface/orgs","repos_url":"https://api.github.com/users/container-storage-interface/repos","events_url":"https://api.github.com/users/container-storage-interface/events{/privacy}","received_events_url":"https://api.github.com/users/container-storage-interface/received_events","type":"Organization","site_admin":false},"repo":{"id":91765224,"name":"spec","full_name":"container-storage-interface/spec","owner":{"login":"container-storage-interface","id":28406793,"avatar_url":"https://avatars1.githubusercontent.com/u/28406793?v=4","gravatar_id":"","url":"https://api.github.com/users/container-storage-interface","html_url":"https://github.com/container-storage-interface","followers_url":"https://api.github.com/users/container-storage-interface/followers","following_url":"https://api.github.com/users/container-storage-interface/following{/other_user}","gists_url":"https://api.github.com/users/container-storage-interface/gists{/gist_id}","starred_url":"https://api.github.com/users/container-storage-interface/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/container-storage-interface/subscriptions","organizations_url":"https://api.github.com/users/container-storage-interface/orgs","repos_url":"https://api.github.com/users/container-storage-interface/repos","events_url":"https://api.github.com/users/container-storage-interface/events{/privacy}","received_events_url":"https://api.github.com/users/container-storage-interface/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/container-storage-interface/spec","description":"Container Storage Interface (CSI) Specification.","fork":false,"url":"https://api.github.com/repos/container-storage-interface/spec","forks_url":"https://api.github.com/repos/container-storage-interface/spec/forks","keys_url":"https://api.github.com/repos/container-storage-interface/spec/keys{/key_id}","collaborators_url":"https://api.github.com/repos/container-storage-interface/spec/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/container-storage-interface/spec/teams","hooks_url":"https://api.github.com/repos/container-storage-interface/spec/hooks","issue_events_url":"https://api.github.com/repos/container-storage-interface/spec/issues/events{/number}","events_url":"https://api.github.com/repos/container-storage-interface/spec/events","assignees_url":"https://api.github.com/repos/container-storage-interface/spec/assignees{/user}","branches_url":"https://api.github.com/repos/container-storage-interface/spec/branches{/branch}","tags_url":"https://api.github.com/repos/container-storage-interface/spec/tags","blobs_url":"https://api.github.com/repos/container-storage-interface/spec/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/container-storage-interface/spec/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/container-storage-interface/spec/git/refs{/sha}","trees_url":"https://api.github.com/repos/container-storage-interface/spec/git/trees{/sha}","statuses_url":"https://api.github.com/repos/container-storage-interface/spec/statuses/{sha}","languages_url":"https://api.github.com/repos/container-storage-interface/spec/languages","stargazers_url":"https://api.github.com/repos/container-storage-interface/spec/stargazers","contributors_url":"https://api.github.com/repos/container-storage-interface/spec/contributors","subscribers_url":"https://api.github.com/repos/container-storage-interface/spec/subscribers","subscription_url":"https://api.github.com/repos/container-storage-interface/spec/subscription","commits_url":"https://api.github.com/repos/container-storage-interface/spec/commits{/sha}","git_commits_url":"https://api.github.com/repos/container-storage-interface/spec/git/commits{/sha}","comments_url":"https://api.github.com/repos/container-storage-interface/spec/comments{/number}","issue_comment_url":"https://api.github.com/repos/container-storage-interface/spec/issues/comments{/number}","contents_url":"https://api.github.com/repos/container-storage-interface/spec/contents/{+path}","compare_url":"https://api.github.com/repos/container-storage-interface/spec/compare/{base}...{head}","merges_url":"https://api.github.com/repos/container-storage-interface/spec/merges","archive_url":"https://api.github.com/repos/container-storage-interface/spec/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/container-storage-interface/spec/downloads","issues_url":"https://api.github.com/repos/container-storage-interface/spec/issues{/number}","pulls_url":"https://api.github.com/repos/container-storage-interface/spec/pulls{/number}","milestones_url":"https://api.github.com/repos/container-storage-interface/spec/milestones{/number}","notifications_url":"https://api.github.com/repos/container-storage-interface/spec/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/container-storage-interface/spec/labels{/name}","releases_url":"https://api.github.com/repos/container-storage-interface/spec/releases{/id}","deployments_url":"https://api.github.com/repos/container-storage-interface/spec/deployments","created_at":"2017-05-19T04:23:40Z","updated_at":"2018-05-07T09:28:44Z","pushed_at":"2018-05-06T16:44:59Z","git_url":"git://github.com/container-storage-interface/spec.git","ssh_url":"git@github.com:container-storage-interface/spec.git","clone_url":"https://github.com/container-storage-interface/spec.git","svn_url":"https://github.com/container-storage-interface/spec","homepage":"","size":449,"stargazers_count":201,"watchers_count":201,"language":"Makefile","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":58,"mirror_url":null,"archived":false,"open_issues_count":77,"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":58,"open_issues":77,"watchers":201,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/container-storage-interface/spec/pulls/224"},"html":{"href":"https://github.com/container-storage-interface/spec/pull/224"},"issue":{"href":"https://api.github.com/repos/container-storage-interface/spec/issues/224"},"comments":{"href":"https://api.github.com/repos/container-storage-interface/spec/issues/224/comments"},"review_comments":{"href":"https://api.github.com/repos/container-storage-interface/spec/pulls/224/comments"},"review_comment":{"href":"https://api.github.com/repos/container-storage-interface/spec/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/container-storage-interface/spec/pulls/224/commits"},"statuses":{"href":"https://api.github.com/repos/container-storage-interface/spec/statuses/6ccec55ceec99ea0f938a2425f5a2d68852c2d28"}},"author_association":"NONE"}}
{"actor":{"display_login":"jdef"}}