{"action":"created","comment":{"url":"https://api.github.com/repos/resin-io/docs/pulls/comments/167349632","pull_request_review_id":95563506,"id":167349632,"diff_hunk":"@@ -26,11 +26,15 @@ To enable this behaviour on a per-device basis, set the above variable at **Devi\n \n ## Delta Behaviour\n \n-When you are using delta updates, you might notice the following changes in resin.io behaviour.\n+If you are using delta updates, you might notice the following changes in resin.io behaviour:\n \n-The **download progress bar** on the dashboard might show only for a very short time, much shorter than it takes in a normal application update. This is because in the most common development patterns there are usually very small changes between one version of the application image and the next (e.g. fixing typos, adding a new source file, or installing an extra OS package), and using deltas these changes are downloaded much quicker than before.\n+The *Download progress* bar on the dashboard might show for only a short time—much shorter than in a normal application update. This is because in the most common development patterns, there are usually very small changes between one version of the application image and the next (e.g. fixing typos, adding a new source file, or installing an extra OS package), and when using deltas these changes are downloaded much quicker than before.\n \n-You might still observe the application **downloading the full application image**. This happens if there was an issue during the delta download, and in that case the supervisor will fall back to the original Docker pull approach to recover.\n+Delta updates are resumable, so if the connection drops or otherwise stalls, the update will resume from the last byte received. A user can configure the number of times a delta is retried before it bails out and signals failure to the supervisor. This is set by the `RESIN_SUPERVISOR_DELTA_RETRY_COUNT` configuration variable.\n+\n+In addition, the wait time before an update is considered stalled and the time between retries are configurable, using `RESIN_SUPERVISOR_DELTA_REQUEST_TIMEOUT` and `RESIN_SUPERVISOR_DELTA_RETRY_INTERVAL`. These are both specified in milliseconds. The defaults for these options allow for a 20 minute time frame where no byte is received before they give up, after which the supervisor retries the delta from the beginning. Even then, the actual bandwidth consumed is usually less than pulling layers.\n+\n+The only case where the deltas fall back to pulling the entire layer is if corruption is detected.","path":"pages/runtime/delta.md","position":15,"original_position":15,"commit_id":"8a5cfc737c2670cd05df85e59a7ecff1dbd91d4b","original_commit_id":"8a5cfc737c2670cd05df85e59a7ecff1dbd91d4b","user":{"login":"dfunckt","id":130359,"avatar_url":"https://avatars3.githubusercontent.com/u/130359?v=4","gravatar_id":"","url":"https://api.github.com/users/dfunckt","html_url":"https://github.com/dfunckt","followers_url":"https://api.github.com/users/dfunckt/followers","following_url":"https://api.github.com/users/dfunckt/following{/other_user}","gists_url":"https://api.github.com/users/dfunckt/gists{/gist_id}","starred_url":"https://api.github.com/users/dfunckt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dfunckt/subscriptions","organizations_url":"https://api.github.com/users/dfunckt/orgs","repos_url":"https://api.github.com/users/dfunckt/repos","events_url":"https://api.github.com/users/dfunckt/events{/privacy}","received_events_url":"https://api.github.com/users/dfunckt/received_events","type":"User","site_admin":false},"body":"Technically, this is more correct, given an image is potentially many layers:\r\n\r\n> The only case where the deltas fall back to pulling the entire new image is if corruption is detected.","created_at":"2018-02-09T21:24:39Z","updated_at":"2018-02-09T21:28:06Z","html_url":"https://github.com/resin-io/docs/pull/710#discussion_r167349632","pull_request_url":"https://api.github.com/repos/resin-io/docs/pulls/710","author_association":"MEMBER","_links":{"self":{"href":"https://api.github.com/repos/resin-io/docs/pulls/comments/167349632"},"html":{"href":"https://github.com/resin-io/docs/pull/710#discussion_r167349632"},"pull_request":{"href":"https://api.github.com/repos/resin-io/docs/pulls/710"}}},"pull_request":{"url":"https://api.github.com/repos/resin-io/docs/pulls/710","id":168341098,"html_url":"https://github.com/resin-io/docs/pull/710","diff_url":"https://github.com/resin-io/docs/pull/710.diff","patch_url":"https://github.com/resin-io/docs/pull/710.patch","issue_url":"https://api.github.com/repos/resin-io/docs/issues/710","number":710,"state":"open","locked":false,"title":"Update delta info","user":{"login":"zwalchuk","id":8054407,"avatar_url":"https://avatars0.githubusercontent.com/u/8054407?v=4","gravatar_id":"","url":"https://api.github.com/users/zwalchuk","html_url":"https://github.com/zwalchuk","followers_url":"https://api.github.com/users/zwalchuk/followers","following_url":"https://api.github.com/users/zwalchuk/following{/other_user}","gists_url":"https://api.github.com/users/zwalchuk/gists{/gist_id}","starred_url":"https://api.github.com/users/zwalchuk/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/zwalchuk/subscriptions","organizations_url":"https://api.github.com/users/zwalchuk/orgs","repos_url":"https://api.github.com/users/zwalchuk/repos","events_url":"https://api.github.com/users/zwalchuk/events{/privacy}","received_events_url":"https://api.github.com/users/zwalchuk/received_events","type":"User","site_admin":false},"body":"Include information about the resumable nature of delta updates, including a description of the applicable config variables.\r\n\r\nChange-type: patch\r\n\r\nFixes #701 ","created_at":"2018-02-09T21:00:15Z","updated_at":"2018-02-09T21:28:06Z","closed_at":null,"merged_at":null,"merge_commit_sha":"beb575c04ec96995506c0f8462e48901fdb9de83","assignee":{"login":"zwalchuk","id":8054407,"avatar_url":"https://avatars0.githubusercontent.com/u/8054407?v=4","gravatar_id":"","url":"https://api.github.com/users/zwalchuk","html_url":"https://github.com/zwalchuk","followers_url":"https://api.github.com/users/zwalchuk/followers","following_url":"https://api.github.com/users/zwalchuk/following{/other_user}","gists_url":"https://api.github.com/users/zwalchuk/gists{/gist_id}","starred_url":"https://api.github.com/users/zwalchuk/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/zwalchuk/subscriptions","organizations_url":"https://api.github.com/users/zwalchuk/orgs","repos_url":"https://api.github.com/users/zwalchuk/repos","events_url":"https://api.github.com/users/zwalchuk/events{/privacy}","received_events_url":"https://api.github.com/users/zwalchuk/received_events","type":"User","site_admin":false},"assignees":[{"login":"zwalchuk","id":8054407,"avatar_url":"https://avatars0.githubusercontent.com/u/8054407?v=4","gravatar_id":"","url":"https://api.github.com/users/zwalchuk","html_url":"https://github.com/zwalchuk","followers_url":"https://api.github.com/users/zwalchuk/followers","following_url":"https://api.github.com/users/zwalchuk/following{/other_user}","gists_url":"https://api.github.com/users/zwalchuk/gists{/gist_id}","starred_url":"https://api.github.com/users/zwalchuk/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/zwalchuk/subscriptions","organizations_url":"https://api.github.com/users/zwalchuk/orgs","repos_url":"https://api.github.com/users/zwalchuk/repos","events_url":"https://api.github.com/users/zwalchuk/events{/privacy}","received_events_url":"https://api.github.com/users/zwalchuk/received_events","type":"User","site_admin":false}],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":832647559,"url":"https://api.github.com/repos/resin-io/docs/labels/in%20progress","name":"in progress","color":"ededed","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/resin-io/docs/pulls/710/commits","review_comments_url":"https://api.github.com/repos/resin-io/docs/pulls/710/comments","review_comment_url":"https://api.github.com/repos/resin-io/docs/pulls/comments{/number}","comments_url":"https://api.github.com/repos/resin-io/docs/issues/710/comments","statuses_url":"https://api.github.com/repos/resin-io/docs/statuses/8a5cfc737c2670cd05df85e59a7ecff1dbd91d4b","head":{"label":"resin-io:delta-info","ref":"delta-info","sha":"8a5cfc737c2670cd05df85e59a7ecff1dbd91d4b","user":{"login":"resin-io","id":6157842,"avatar_url":"https://avatars1.githubusercontent.com/u/6157842?v=4","gravatar_id":"","url":"https://api.github.com/users/resin-io","html_url":"https://github.com/resin-io","followers_url":"https://api.github.com/users/resin-io/followers","following_url":"https://api.github.com/users/resin-io/following{/other_user}","gists_url":"https://api.github.com/users/resin-io/gists{/gist_id}","starred_url":"https://api.github.com/users/resin-io/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/resin-io/subscriptions","organizations_url":"https://api.github.com/users/resin-io/orgs","repos_url":"https://api.github.com/users/resin-io/repos","events_url":"https://api.github.com/users/resin-io/events{/privacy}","received_events_url":"https://api.github.com/users/resin-io/received_events","type":"Organization","site_admin":false},"repo":{"id":21133508,"name":"docs","full_name":"resin-io/docs","owner":{"login":"resin-io","id":6157842,"avatar_url":"https://avatars1.githubusercontent.com/u/6157842?v=4","gravatar_id":"","url":"https://api.github.com/users/resin-io","html_url":"https://github.com/resin-io","followers_url":"https://api.github.com/users/resin-io/followers","following_url":"https://api.github.com/users/resin-io/following{/other_user}","gists_url":"https://api.github.com/users/resin-io/gists{/gist_id}","starred_url":"https://api.github.com/users/resin-io/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/resin-io/subscriptions","organizations_url":"https://api.github.com/users/resin-io/orgs","repos_url":"https://api.github.com/users/resin-io/repos","events_url":"https://api.github.com/users/resin-io/events{/privacy}","received_events_url":"https://api.github.com/users/resin-io/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/resin-io/docs","description":"Documentation for the resin.io platform.","fork":false,"url":"https://api.github.com/repos/resin-io/docs","forks_url":"https://api.github.com/repos/resin-io/docs/forks","keys_url":"https://api.github.com/repos/resin-io/docs/keys{/key_id}","collaborators_url":"https://api.github.com/repos/resin-io/docs/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/resin-io/docs/teams","hooks_url":"https://api.github.com/repos/resin-io/docs/hooks","issue_events_url":"https://api.github.com/repos/resin-io/docs/issues/events{/number}","events_url":"https://api.github.com/repos/resin-io/docs/events","assignees_url":"https://api.github.com/repos/resin-io/docs/assignees{/user}","branches_url":"https://api.github.com/repos/resin-io/docs/branches{/branch}","tags_url":"https://api.github.com/repos/resin-io/docs/tags","blobs_url":"https://api.github.com/repos/resin-io/docs/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/resin-io/docs/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/resin-io/docs/git/refs{/sha}","trees_url":"https://api.github.com/repos/resin-io/docs/git/trees{/sha}","statuses_url":"https://api.github.com/repos/resin-io/docs/statuses/{sha}","languages_url":"https://api.github.com/repos/resin-io/docs/languages","stargazers_url":"https://api.github.com/repos/resin-io/docs/stargazers","contributors_url":"https://api.github.com/repos/resin-io/docs/contributors","subscribers_url":"https://api.github.com/repos/resin-io/docs/subscribers","subscription_url":"https://api.github.com/repos/resin-io/docs/subscription","commits_url":"https://api.github.com/repos/resin-io/docs/commits{/sha}","git_commits_url":"https://api.github.com/repos/resin-io/docs/git/commits{/sha}","comments_url":"https://api.github.com/repos/resin-io/docs/comments{/number}","issue_comment_url":"https://api.github.com/repos/resin-io/docs/issues/comments{/number}","contents_url":"https://api.github.com/repos/resin-io/docs/contents/{+path}","compare_url":"https://api.github.com/repos/resin-io/docs/compare/{base}...{head}","merges_url":"https://api.github.com/repos/resin-io/docs/merges","archive_url":"https://api.github.com/repos/resin-io/docs/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/resin-io/docs/downloads","issues_url":"https://api.github.com/repos/resin-io/docs/issues{/number}","pulls_url":"https://api.github.com/repos/resin-io/docs/pulls{/number}","milestones_url":"https://api.github.com/repos/resin-io/docs/milestones{/number}","notifications_url":"https://api.github.com/repos/resin-io/docs/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/resin-io/docs/labels{/name}","releases_url":"https://api.github.com/repos/resin-io/docs/releases{/id}","deployments_url":"https://api.github.com/repos/resin-io/docs/deployments","created_at":"2014-06-23T16:26:36Z","updated_at":"2018-02-09T17:43:04Z","pushed_at":"2018-02-09T21:00:16Z","git_url":"git://github.com/resin-io/docs.git","ssh_url":"git@github.com:resin-io/docs.git","clone_url":"https://github.com/resin-io/docs.git","svn_url":"https://github.com/resin-io/docs","homepage":"https://docs.resin.io/","size":137917,"stargazers_count":18,"watchers_count":18,"language":"CSS","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":69,"mirror_url":null,"archived":false,"open_issues_count":129,"license":null,"forks":69,"open_issues":129,"watchers":18,"default_branch":"master"}},"base":{"label":"resin-io:master","ref":"master","sha":"c7626b2e8aba4edcc7378014b0bbc4db1349df8f","user":{"login":"resin-io","id":6157842,"avatar_url":"https://avatars1.githubusercontent.com/u/6157842?v=4","gravatar_id":"","url":"https://api.github.com/users/resin-io","html_url":"https://github.com/resin-io","followers_url":"https://api.github.com/users/resin-io/followers","following_url":"https://api.github.com/users/resin-io/following{/other_user}","gists_url":"https://api.github.com/users/resin-io/gists{/gist_id}","starred_url":"https://api.github.com/users/resin-io/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/resin-io/subscriptions","organizations_url":"https://api.github.com/users/resin-io/orgs","repos_url":"https://api.github.com/users/resin-io/repos","events_url":"https://api.github.com/users/resin-io/events{/privacy}","received_events_url":"https://api.github.com/users/resin-io/received_events","type":"Organization","site_admin":false},"repo":{"id":21133508,"name":"docs","full_name":"resin-io/docs","owner":{"login":"resin-io","id":6157842,"avatar_url":"https://avatars1.githubusercontent.com/u/6157842?v=4","gravatar_id":"","url":"https://api.github.com/users/resin-io","html_url":"https://github.com/resin-io","followers_url":"https://api.github.com/users/resin-io/followers","following_url":"https://api.github.com/users/resin-io/following{/other_user}","gists_url":"https://api.github.com/users/resin-io/gists{/gist_id}","starred_url":"https://api.github.com/users/resin-io/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/resin-io/subscriptions","organizations_url":"https://api.github.com/users/resin-io/orgs","repos_url":"https://api.github.com/users/resin-io/repos","events_url":"https://api.github.com/users/resin-io/events{/privacy}","received_events_url":"https://api.github.com/users/resin-io/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/resin-io/docs","description":"Documentation for the resin.io platform.","fork":false,"url":"https://api.github.com/repos/resin-io/docs","forks_url":"https://api.github.com/repos/resin-io/docs/forks","keys_url":"https://api.github.com/repos/resin-io/docs/keys{/key_id}","collaborators_url":"https://api.github.com/repos/resin-io/docs/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/resin-io/docs/teams","hooks_url":"https://api.github.com/repos/resin-io/docs/hooks","issue_events_url":"https://api.github.com/repos/resin-io/docs/issues/events{/number}","events_url":"https://api.github.com/repos/resin-io/docs/events","assignees_url":"https://api.github.com/repos/resin-io/docs/assignees{/user}","branches_url":"https://api.github.com/repos/resin-io/docs/branches{/branch}","tags_url":"https://api.github.com/repos/resin-io/docs/tags","blobs_url":"https://api.github.com/repos/resin-io/docs/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/resin-io/docs/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/resin-io/docs/git/refs{/sha}","trees_url":"https://api.github.com/repos/resin-io/docs/git/trees{/sha}","statuses_url":"https://api.github.com/repos/resin-io/docs/statuses/{sha}","languages_url":"https://api.github.com/repos/resin-io/docs/languages","stargazers_url":"https://api.github.com/repos/resin-io/docs/stargazers","contributors_url":"https://api.github.com/repos/resin-io/docs/contributors","subscribers_url":"https://api.github.com/repos/resin-io/docs/subscribers","subscription_url":"https://api.github.com/repos/resin-io/docs/subscription","commits_url":"https://api.github.com/repos/resin-io/docs/commits{/sha}","git_commits_url":"https://api.github.com/repos/resin-io/docs/git/commits{/sha}","comments_url":"https://api.github.com/repos/resin-io/docs/comments{/number}","issue_comment_url":"https://api.github.com/repos/resin-io/docs/issues/comments{/number}","contents_url":"https://api.github.com/repos/resin-io/docs/contents/{+path}","compare_url":"https://api.github.com/repos/resin-io/docs/compare/{base}...{head}","merges_url":"https://api.github.com/repos/resin-io/docs/merges","archive_url":"https://api.github.com/repos/resin-io/docs/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/resin-io/docs/downloads","issues_url":"https://api.github.com/repos/resin-io/docs/issues{/number}","pulls_url":"https://api.github.com/repos/resin-io/docs/pulls{/number}","milestones_url":"https://api.github.com/repos/resin-io/docs/milestones{/number}","notifications_url":"https://api.github.com/repos/resin-io/docs/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/resin-io/docs/labels{/name}","releases_url":"https://api.github.com/repos/resin-io/docs/releases{/id}","deployments_url":"https://api.github.com/repos/resin-io/docs/deployments","created_at":"2014-06-23T16:26:36Z","updated_at":"2018-02-09T17:43:04Z","pushed_at":"2018-02-09T21:00:16Z","git_url":"git://github.com/resin-io/docs.git","ssh_url":"git@github.com:resin-io/docs.git","clone_url":"https://github.com/resin-io/docs.git","svn_url":"https://github.com/resin-io/docs","homepage":"https://docs.resin.io/","size":137917,"stargazers_count":18,"watchers_count":18,"language":"CSS","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":69,"mirror_url":null,"archived":false,"open_issues_count":129,"license":null,"forks":69,"open_issues":129,"watchers":18,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/resin-io/docs/pulls/710"},"html":{"href":"https://github.com/resin-io/docs/pull/710"},"issue":{"href":"https://api.github.com/repos/resin-io/docs/issues/710"},"comments":{"href":"https://api.github.com/repos/resin-io/docs/issues/710/comments"},"review_comments":{"href":"https://api.github.com/repos/resin-io/docs/pulls/710/comments"},"review_comment":{"href":"https://api.github.com/repos/resin-io/docs/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/resin-io/docs/pulls/710/commits"},"statuses":{"href":"https://api.github.com/repos/resin-io/docs/statuses/8a5cfc737c2670cd05df85e59a7ecff1dbd91d4b"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"dfunckt"}}