GitHub PullRequestEvent at 2014-11-18 01:08:41
Repository: docker-registry
Actor: stevvooe
Payload: {"action":"opened","number":741,"pull_request":{"url":"https://api.github.com/repos/docker/docker-registry/pulls/741","id":24581459,"html_url":"https://github.com/docker/docker-registry/pull/741","diff_url":"https://github.com/docker/docker-registry/pull/741.diff","patch_url":"https://github.com/docker/docker-registry/pull/741.patch","issue_url":"https://api.github.com/repos/docker/docker-registry/issues/741","number":741,"state":"open","locked":false,"title":"Initial implementation of registry LayerService","user":{"login":"stevvooe","id":120601,"avatar_url":"https://avatars.githubusercontent.com/u/120601?v=3","gravatar_id":"","url":"https://api.github.com/users/stevvooe","html_url":"https://github.com/stevvooe","followers_url":"https://api.github.com/users/stevvooe/followers","following_url":"https://api.github.com/users/stevvooe/following{/other_user}","gists_url":"https://api.github.com/users/stevvooe/gists{/gist_id}","starred_url":"https://api.github.com/users/stevvooe/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/stevvooe/subscriptions","organizations_url":"https://api.github.com/users/stevvooe/orgs","repos_url":"https://api.github.com/users/stevvooe/repos","events_url":"https://api.github.com/users/stevvooe/events{/privacy}","received_events_url":"https://api.github.com/users/stevvooe/received_events","type":"User","site_admin":false},"body":"This change contains the initial implementation of the LayerService to power\r\nlayer push and pulls on the storagedriver. The interfaces presented in this\r\npackage will be used by the http application to drive most features around\r\nefficient pulls and resumable pushes.\r\n\r\nThe file storage/layer.go defines the interface interactions. LayerService is\r\nthe root type and supports methods to access Layer and LayerUpload objects.\r\nPull operations are supported with LayerService.Fetch and push operations are\r\nsupported with LayerService.Upload and LayerService.Resume. Reads and writes of\r\nlayers are split between Layer and LayerUpload, respectively.\r\n\r\nLayerService is implemented internally with the layerStore object, which takes\r\na storagedriver.StorageDriver and a pathMapper instance.\r\n\r\nLayerUploadState is currently exported and will likely continue to be as the\r\ninteraction between it and layerUploadStore are better understood. Likely, the\r\nlayerUploadStore lifecycle and implementation will be deferred to the\r\napplication.\r\n\r\nImage pushes pulls will be implemented in a similar manner without the\r\ndiscrete, persistent upload.\r\n\r\nMuch of this change is in place to get something running and working. Caveats\r\nof this change include the following:\r\n\r\n1. Layer upload state storage is implemented on the local filesystem, separate\r\n   from the storage driver. This must be replaced with using the proper backend\r\n   and other state storage. This can be removed when we implement resumable\r\n   hashing and tarsum calculations to avoid backend roundtrips.\r\n2. Error handling is rather bespoke at this time. The http API implementation\r\n   should really dictate the error return structure for the future, so we\r\n   intend to refactor this heavily to support these errors. We'd also like to\r\n   collect production data to understand how failures happen in the system as\r\n   a while before moving to a particular edict around error handling.\r\n3. The layerUploadStore, which manages layer upload storage and state is not\r\n   currently exported. This will likely end up being split, with the file\r\n   management portion being pointed at the storagedriver and the state storage\r\n   elsewhere.\r\n4. Access Control provisions are nearly completely missing from this change.\r\n   There are details around how layerindex lookup works that are related with\r\n   access controls. As the auth portions of the new API take shape, these\r\n   provisions will become more clear.\r\n\r\nPlease see TODOs for details and individual recommendations.","created_at":"2014-11-18T01:08:41Z","updated_at":"2014-11-18T01:08:41Z","closed_at":null,"merged_at":null,"merge_commit_sha":null,"assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/docker/docker-registry/pulls/741/commits","review_comments_url":"https://api.github.com/repos/docker/docker-registry/pulls/741/comments","review_comment_url":"https://api.github.com/repos/docker/docker-registry/pulls/comments/{number}","comments_url":"https://api.github.com/repos/docker/docker-registry/issues/741/comments","statuses_url":"https://api.github.com/repos/docker/docker-registry/statuses/73a594f87d7314891c4c71c1a5c0bea957982daf","head":{"label":"stevvooe:layer-service","ref":"layer-service","sha":"73a594f87d7314891c4c71c1a5c0bea957982daf","user":{"login":"stevvooe","id":120601,"avatar_url":"https://avatars.githubusercontent.com/u/120601?v=3","gravatar_id":"","url":"https://api.github.com/users/stevvooe","html_url":"https://github.com/stevvooe","followers_url":"https://api.github.com/users/stevvooe/followers","following_url":"https://api.github.com/users/stevvooe/following{/other_user}","gists_url":"https://api.github.com/users/stevvooe/gists{/gist_id}","starred_url":"https://api.github.com/users/stevvooe/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/stevvooe/subscriptions","organizations_url":"https://api.github.com/users/stevvooe/orgs","repos_url":"https://api.github.com/users/stevvooe/repos","events_url":"https://api.github.com/users/stevvooe/events{/privacy}","received_events_url":"https://api.github.com/users/stevvooe/received_events","type":"User","site_admin":false},"repo":{"id":26198554,"name":"docker-registry","full_name":"stevvooe/docker-registry","owner":{"login":"stevvooe","id":120601,"avatar_url":"https://avatars.githubusercontent.com/u/120601?v=3","gravatar_id":"","url":"https://api.github.com/users/stevvooe","html_url":"https://github.com/stevvooe","followers_url":"https://api.github.com/users/stevvooe/followers","following_url":"https://api.github.com/users/stevvooe/following{/other_user}","gists_url":"https://api.github.com/users/stevvooe/gists{/gist_id}","starred_url":"https://api.github.com/users/stevvooe/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/stevvooe/subscriptions","organizations_url":"https://api.github.com/users/stevvooe/orgs","repos_url":"https://api.github.com/users/stevvooe/repos","events_url":"https://api.github.com/users/stevvooe/events{/privacy}","received_events_url":"https://api.github.com/users/stevvooe/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/stevvooe/docker-registry","description":"Registry server for Docker (hosting/delivering of repositories and images)","fork":true,"url":"https://api.github.com/repos/stevvooe/docker-registry","forks_url":"https://api.github.com/repos/stevvooe/docker-registry/forks","keys_url":"https://api.github.com/repos/stevvooe/docker-registry/keys{/key_id}","collaborators_url":"https://api.github.com/repos/stevvooe/docker-registry/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/stevvooe/docker-registry/teams","hooks_url":"https://api.github.com/repos/stevvooe/docker-registry/hooks","issue_events_url":"https://api.github.com/repos/stevvooe/docker-registry/issues/events{/number}","events_url":"https://api.github.com/repos/stevvooe/docker-registry/events","assignees_url":"https://api.github.com/repos/stevvooe/docker-registry/assignees{/user}","branches_url":"https://api.github.com/repos/stevvooe/docker-registry/branches{/branch}","tags_url":"https://api.github.com/repos/stevvooe/docker-registry/tags","blobs_url":"https://api.github.com/repos/stevvooe/docker-registry/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/stevvooe/docker-registry/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/stevvooe/docker-registry/git/refs{/sha}","trees_url":"https://api.github.com/repos/stevvooe/docker-registry/git/trees{/sha}","statuses_url":"https://api.github.com/repos/stevvooe/docker-registry/statuses/{sha}","languages_url":"https://api.github.com/repos/stevvooe/docker-registry/languages","stargazers_url":"https://api.github.com/repos/stevvooe/docker-registry/stargazers","contributors_url":"https://api.github.com/repos/stevvooe/docker-registry/contributors","subscribers_url":"https://api.github.com/repos/stevvooe/docker-registry/subscribers","subscription_url":"https://api.github.com/repos/stevvooe/docker-registry/subscription","commits_url":"https://api.github.com/repos/stevvooe/docker-registry/commits{/sha}","git_commits_url":"https://api.github.com/repos/stevvooe/docker-registry/git/commits{/sha}","comments_url":"https://api.github.com/repos/stevvooe/docker-registry/comments{/number}","issue_comment_url":"https://api.github.com/repos/stevvooe/docker-registry/issues/comments/{number}","contents_url":"https://api.github.com/repos/stevvooe/docker-registry/contents/{+path}","compare_url":"https://api.github.com/repos/stevvooe/docker-registry/compare/{base}...{head}","merges_url":"https://api.github.com/repos/stevvooe/docker-registry/merges","archive_url":"https://api.github.com/repos/stevvooe/docker-registry/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/stevvooe/docker-registry/downloads","issues_url":"https://api.github.com/repos/stevvooe/docker-registry/issues{/number}","pulls_url":"https://api.github.com/repos/stevvooe/docker-registry/pulls{/number}","milestones_url":"https://api.github.com/repos/stevvooe/docker-registry/milestones{/number}","notifications_url":"https://api.github.com/repos/stevvooe/docker-registry/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/stevvooe/docker-registry/labels{/name}","releases_url":"https://api.github.com/repos/stevvooe/docker-registry/releases{/id}","created_at":"2014-11-05T02:10:44Z","updated_at":"2014-11-18T01:03:45Z","pushed_at":"2014-11-18T01:08:08Z","git_url":"git://github.com/stevvooe/docker-registry.git","ssh_url":"git@github.com:stevvooe/docker-registry.git","clone_url":"https://github.com/stevvooe/docker-registry.git","svn_url":"https://github.com/stevvooe/docker-registry","homepage":"http://www.docker.com","size":1544,"stargazers_count":0,"watchers_count":0,"language":"Go","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1,"mirror_url":null,"open_issues_count":0,"forks":1,"open_issues":0,"watchers":0,"default_branch":"next-generation"}},"base":{"label":"docker:next-generation","ref":"next-generation","sha":"a2d232aaecef5646ce244e8b80753c493ad964d2","user":{"login":"docker","id":5429470,"avatar_url":"https://avatars.githubusercontent.com/u/5429470?v=3","gravatar_id":"","url":"https://api.github.com/users/docker","html_url":"https://github.com/docker","followers_url":"https://api.github.com/users/docker/followers","following_url":"https://api.github.com/users/docker/following{/other_user}","gists_url":"https://api.github.com/users/docker/gists{/gist_id}","starred_url":"https://api.github.com/users/docker/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/docker/subscriptions","organizations_url":"https://api.github.com/users/docker/orgs","repos_url":"https://api.github.com/users/docker/repos","events_url":"https://api.github.com/users/docker/events{/privacy}","received_events_url":"https://api.github.com/users/docker/received_events","type":"Organization","site_admin":false},"repo":{"id":9461481,"name":"docker-registry","full_name":"docker/docker-registry","owner":{"login":"docker","id":5429470,"avatar_url":"https://avatars.githubusercontent.com/u/5429470?v=3","gravatar_id":"","url":"https://api.github.com/users/docker","html_url":"https://github.com/docker","followers_url":"https://api.github.com/users/docker/followers","following_url":"https://api.github.com/users/docker/following{/other_user}","gists_url":"https://api.github.com/users/docker/gists{/gist_id}","starred_url":"https://api.github.com/users/docker/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/docker/subscriptions","organizations_url":"https://api.github.com/users/docker/orgs","repos_url":"https://api.github.com/users/docker/repos","events_url":"https://api.github.com/users/docker/events{/privacy}","received_events_url":"https://api.github.com/users/docker/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/docker/docker-registry","description":"Registry server for Docker (hosting/delivering of repositories and images)","fork":false,"url":"https://api.github.com/repos/docker/docker-registry","forks_url":"https://api.github.com/repos/docker/docker-registry/forks","keys_url":"https://api.github.com/repos/docker/docker-registry/keys{/key_id}","collaborators_url":"https://api.github.com/repos/docker/docker-registry/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/docker/docker-registry/teams","hooks_url":"https://api.github.com/repos/docker/docker-registry/hooks","issue_events_url":"https://api.github.com/repos/docker/docker-registry/issues/events{/number}","events_url":"https://api.github.com/repos/docker/docker-registry/events","assignees_url":"https://api.github.com/repos/docker/docker-registry/assignees{/user}","branches_url":"https://api.github.com/repos/docker/docker-registry/branches{/branch}","tags_url":"https://api.github.com/repos/docker/docker-registry/tags","blobs_url":"https://api.github.com/repos/docker/docker-registry/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/docker/docker-registry/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/docker/docker-registry/git/refs{/sha}","trees_url":"https://api.github.com/repos/docker/docker-registry/git/trees{/sha}","statuses_url":"https://api.github.com/repos/docker/docker-registry/statuses/{sha}","languages_url":"https://api.github.com/repos/docker/docker-registry/languages","stargazers_url":"https://api.github.com/repos/docker/docker-registry/stargazers","contributors_url":"https://api.github.com/repos/docker/docker-registry/contributors","subscribers_url":"https://api.github.com/repos/docker/docker-registry/subscribers","subscription_url":"https://api.github.com/repos/docker/docker-registry/subscription","commits_url":"https://api.github.com/repos/docker/docker-registry/commits{/sha}","git_commits_url":"https://api.github.com/repos/docker/docker-registry/git/commits{/sha}","comments_url":"https://api.github.com/repos/docker/docker-registry/comments{/number}","issue_comment_url":"https://api.github.com/repos/docker/docker-registry/issues/comments/{number}","contents_url":"https://api.github.com/repos/docker/docker-registry/contents/{+path}","compare_url":"https://api.github.com/repos/docker/docker-registry/compare/{base}...{head}","merges_url":"https://api.github.com/repos/docker/docker-registry/merges","archive_url":"https://api.github.com/repos/docker/docker-registry/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/docker/docker-registry/downloads","issues_url":"https://api.github.com/repos/docker/docker-registry/issues{/number}","pulls_url":"https://api.github.com/repos/docker/docker-registry/pulls{/number}","milestones_url":"https://api.github.com/repos/docker/docker-registry/milestones{/number}","notifications_url":"https://api.github.com/repos/docker/docker-registry/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/docker/docker-registry/labels{/name}","releases_url":"https://api.github.com/repos/docker/docker-registry/releases{/id}","created_at":"2013-04-16T01:04:54Z","updated_at":"2014-11-18T00:05:56Z","pushed_at":"2014-11-18T01:07:33Z","git_url":"git://github.com/docker/docker-registry.git","ssh_url":"git@github.com:docker/docker-registry.git","clone_url":"https://github.com/docker/docker-registry.git","svn_url":"https://github.com/docker/docker-registry","homepage":"http://www.docker.com","size":10135,"stargazers_count":1671,"watchers_count":1671,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":500,"mirror_url":null,"open_issues_count":116,"forks":500,"open_issues":116,"watchers":1671,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/docker/docker-registry/pulls/741"},"html":{"href":"https://github.com/docker/docker-registry/pull/741"},"issue":{"href":"https://api.github.com/repos/docker/docker-registry/issues/741"},"comments":{"href":"https://api.github.com/repos/docker/docker-registry/issues/741/comments"},"review_comments":{"href":"https://api.github.com/repos/docker/docker-registry/pulls/741/comments"},"review_comment":{"href":"https://api.github.com/repos/docker/docker-registry/pulls/comments/{number}"},"commits":{"href":"https://api.github.com/repos/docker/docker-registry/pulls/741/commits"},"statuses":{"href":"https://api.github.com/repos/docker/docker-registry/statuses/73a594f87d7314891c4c71c1a5c0bea957982daf"}},"merged":false,"mergeable":null,"mergeable_state":"unknown","merged_by":null,"comments":0,"review_comments":0,"commits":1,"additions":1501,"deletions":0,"changed_files":7}}