{"action":"created","comment":{"url":"https://api.github.com/repos/borgbackup/borg/pulls/comments/63957994","id":63957994,"diff_hunk":"@@ -412,30 +412,41 @@ def get_many(self, keys):\n class RepositoryCache(RepositoryNoCache):\n     \"\"\"A caching Repository wrapper\n \n-    Caches Repository GET operations using a local temporary Repository.\n+    Caches Repository GET operations locally.\n     \"\"\"\n     def __init__(self, repository):\n         super().__init__(repository)\n-        tmppath = tempfile.mkdtemp(prefix='borg-tmp')\n-        self.caching_repo = Repository(tmppath, create=True, exclusive=True)\n-        self.caching_repo.__enter__()  # handled by context manager in base class\n+        self.cache = LRUCache(100, dispose=os.unlink)\n+\n+    def _cache(self, key, data):\n+        try:\n+            with tempfile.NamedTemporaryFile(prefix='borg-tmp', delete=False) as file:","path":"borg/remote.py","position":25,"original_position":25,"commit_id":"842e6c6224ba488037d5ced056ca007189938834","original_commit_id":"842e6c6224ba488037d5ced056ca007189938834","user":{"login":"ThomasWaldmann","id":356103,"avatar_url":"https://avatars.githubusercontent.com/u/356103?v=3","gravatar_id":"","url":"https://api.github.com/users/ThomasWaldmann","html_url":"https://github.com/ThomasWaldmann","followers_url":"https://api.github.com/users/ThomasWaldmann/followers","following_url":"https://api.github.com/users/ThomasWaldmann/following{/other_user}","gists_url":"https://api.github.com/users/ThomasWaldmann/gists{/gist_id}","starred_url":"https://api.github.com/users/ThomasWaldmann/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ThomasWaldmann/subscriptions","organizations_url":"https://api.github.com/users/ThomasWaldmann/orgs","repos_url":"https://api.github.com/users/ThomasWaldmann/repos","events_url":"https://api.github.com/users/ThomasWaldmann/events{/privacy}","received_events_url":"https://api.github.com/users/ThomasWaldmann/received_events","type":"User","site_admin":false},"body":"usually the temp dir overflows rather quickly, causing all sorts of bad effects.\r\n\r\nso, rather use the cache dir?","created_at":"2016-05-19T21:30:12Z","updated_at":"2016-05-19T21:30:12Z","html_url":"https://github.com/borgbackup/borg/pull/1066#discussion_r63957994","pull_request_url":"https://api.github.com/repos/borgbackup/borg/pulls/1066","_links":{"self":{"href":"https://api.github.com/repos/borgbackup/borg/pulls/comments/63957994"},"html":{"href":"https://github.com/borgbackup/borg/pull/1066#discussion_r63957994"},"pull_request":{"href":"https://api.github.com/repos/borgbackup/borg/pulls/1066"}}},"pull_request":{"url":"https://api.github.com/repos/borgbackup/borg/pulls/1066","id":70747528,"html_url":"https://github.com/borgbackup/borg/pull/1066","diff_url":"https://github.com/borgbackup/borg/pull/1066.diff","patch_url":"https://github.com/borgbackup/borg/pull/1066.patch","issue_url":"https://api.github.com/repos/borgbackup/borg/issues/1066","number":1066,"state":"open","locked":false,"title":"RepositoryCache: limit cache size","user":{"login":"enkore","id":1330164,"avatar_url":"https://avatars.githubusercontent.com/u/1330164?v=3","gravatar_id":"","url":"https://api.github.com/users/enkore","html_url":"https://github.com/enkore","followers_url":"https://api.github.com/users/enkore/followers","following_url":"https://api.github.com/users/enkore/following{/other_user}","gists_url":"https://api.github.com/users/enkore/gists{/gist_id}","starred_url":"https://api.github.com/users/enkore/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/enkore/subscriptions","organizations_url":"https://api.github.com/users/enkore/orgs","repos_url":"https://api.github.com/users/enkore/repos","events_url":"https://api.github.com/users/enkore/events{/privacy}","received_events_url":"https://api.github.com/users/enkore/received_events","type":"User","site_admin":false},"body":"Unbounded cache size is inacceptable.\r\n\r\nI don't see why a full-fledged repository needs to be used here, either,\r\nsince this cache requires none of the consistency or durability guarantees\r\nmade by it (and bought with a performance impact).\r\n\r\nThis implementation uses an LRUCache to effectively bound the size,\r\nchecks for ENOSPC when writing to the cache and uses tempfiles\r\nwith no flushes. That way most writes will never hit the disk\r\n(if there is one at /tmp), but stay in the page cache, which is the\r\nintention anyway.\r\n\r\nIf a write results in ENOSPC, then exponential backoff is invoked.\r\n\r\n(_capacity *is* technically private, I didn't rename it to \"announce\" it's public, to keep change size down)\r\n\r\nPractically tested: Mount archive, `tar cvf - /mount/point > /tmp/archive.tar`, watch how tar and the mount process battle for free space :) (tar loses [because it gets fresh cache entries and the cache drops least-recently entries], but the backoff and cleanup works). Works fine if you are writing the tar somewhere else (logically). The cache will happily bounce between 4 and 8 GB (in my case) - slow grow, rapid fall. As it should be.\r\n\r\nFixes #1063","created_at":"2016-05-19T19:02:57Z","updated_at":"2016-05-19T21:30:12Z","closed_at":null,"merged_at":null,"merge_commit_sha":"8266ca27a9f1fba8b1cd6e86c4ab8ff609bd04ac","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/borgbackup/borg/pulls/1066/commits","review_comments_url":"https://api.github.com/repos/borgbackup/borg/pulls/1066/comments","review_comment_url":"https://api.github.com/repos/borgbackup/borg/pulls/comments{/number}","comments_url":"https://api.github.com/repos/borgbackup/borg/issues/1066/comments","statuses_url":"https://api.github.com/repos/borgbackup/borg/statuses/842e6c6224ba488037d5ced056ca007189938834","head":{"label":"enkore:issue/1063","ref":"issue/1063","sha":"842e6c6224ba488037d5ced056ca007189938834","user":{"login":"enkore","id":1330164,"avatar_url":"https://avatars.githubusercontent.com/u/1330164?v=3","gravatar_id":"","url":"https://api.github.com/users/enkore","html_url":"https://github.com/enkore","followers_url":"https://api.github.com/users/enkore/followers","following_url":"https://api.github.com/users/enkore/following{/other_user}","gists_url":"https://api.github.com/users/enkore/gists{/gist_id}","starred_url":"https://api.github.com/users/enkore/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/enkore/subscriptions","organizations_url":"https://api.github.com/users/enkore/orgs","repos_url":"https://api.github.com/users/enkore/repos","events_url":"https://api.github.com/users/enkore/events{/privacy}","received_events_url":"https://api.github.com/users/enkore/received_events","type":"User","site_admin":false},"repo":{"id":53583744,"name":"borg","full_name":"enkore/borg","owner":{"login":"enkore","id":1330164,"avatar_url":"https://avatars.githubusercontent.com/u/1330164?v=3","gravatar_id":"","url":"https://api.github.com/users/enkore","html_url":"https://github.com/enkore","followers_url":"https://api.github.com/users/enkore/followers","following_url":"https://api.github.com/users/enkore/following{/other_user}","gists_url":"https://api.github.com/users/enkore/gists{/gist_id}","starred_url":"https://api.github.com/users/enkore/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/enkore/subscriptions","organizations_url":"https://api.github.com/users/enkore/orgs","repos_url":"https://api.github.com/users/enkore/repos","events_url":"https://api.github.com/users/enkore/events{/privacy}","received_events_url":"https://api.github.com/users/enkore/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/enkore/borg","description":"Dev fork","fork":true,"url":"https://api.github.com/repos/enkore/borg","forks_url":"https://api.github.com/repos/enkore/borg/forks","keys_url":"https://api.github.com/repos/enkore/borg/keys{/key_id}","collaborators_url":"https://api.github.com/repos/enkore/borg/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/enkore/borg/teams","hooks_url":"https://api.github.com/repos/enkore/borg/hooks","issue_events_url":"https://api.github.com/repos/enkore/borg/issues/events{/number}","events_url":"https://api.github.com/repos/enkore/borg/events","assignees_url":"https://api.github.com/repos/enkore/borg/assignees{/user}","branches_url":"https://api.github.com/repos/enkore/borg/branches{/branch}","tags_url":"https://api.github.com/repos/enkore/borg/tags","blobs_url":"https://api.github.com/repos/enkore/borg/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/enkore/borg/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/enkore/borg/git/refs{/sha}","trees_url":"https://api.github.com/repos/enkore/borg/git/trees{/sha}","statuses_url":"https://api.github.com/repos/enkore/borg/statuses/{sha}","languages_url":"https://api.github.com/repos/enkore/borg/languages","stargazers_url":"https://api.github.com/repos/enkore/borg/stargazers","contributors_url":"https://api.github.com/repos/enkore/borg/contributors","subscribers_url":"https://api.github.com/repos/enkore/borg/subscribers","subscription_url":"https://api.github.com/repos/enkore/borg/subscription","commits_url":"https://api.github.com/repos/enkore/borg/commits{/sha}","git_commits_url":"https://api.github.com/repos/enkore/borg/git/commits{/sha}","comments_url":"https://api.github.com/repos/enkore/borg/comments{/number}","issue_comment_url":"https://api.github.com/repos/enkore/borg/issues/comments{/number}","contents_url":"https://api.github.com/repos/enkore/borg/contents/{+path}","compare_url":"https://api.github.com/repos/enkore/borg/compare/{base}...{head}","merges_url":"https://api.github.com/repos/enkore/borg/merges","archive_url":"https://api.github.com/repos/enkore/borg/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/enkore/borg/downloads","issues_url":"https://api.github.com/repos/enkore/borg/issues{/number}","pulls_url":"https://api.github.com/repos/enkore/borg/pulls{/number}","milestones_url":"https://api.github.com/repos/enkore/borg/milestones{/number}","notifications_url":"https://api.github.com/repos/enkore/borg/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/enkore/borg/labels{/name}","releases_url":"https://api.github.com/repos/enkore/borg/releases{/id}","deployments_url":"https://api.github.com/repos/enkore/borg/deployments","created_at":"2016-03-10T12:45:08Z","updated_at":"2016-04-06T21:28:16Z","pushed_at":"2016-05-19T19:18:27Z","git_url":"git://github.com/enkore/borg.git","ssh_url":"git@github.com:enkore/borg.git","clone_url":"https://github.com/enkore/borg.git","svn_url":"https://github.com/enkore/borg","homepage":"","size":3902,"stargazers_count":1,"watchers_count":1,"language":"Python","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":1,"default_branch":"master"}},"base":{"label":"borgbackup:1.0-maint","ref":"1.0-maint","sha":"d043794757752e90522907c4c3eb2adcc930eae9","user":{"login":"borgbackup","id":12418060,"avatar_url":"https://avatars.githubusercontent.com/u/12418060?v=3","gravatar_id":"","url":"https://api.github.com/users/borgbackup","html_url":"https://github.com/borgbackup","followers_url":"https://api.github.com/users/borgbackup/followers","following_url":"https://api.github.com/users/borgbackup/following{/other_user}","gists_url":"https://api.github.com/users/borgbackup/gists{/gist_id}","starred_url":"https://api.github.com/users/borgbackup/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/borgbackup/subscriptions","organizations_url":"https://api.github.com/users/borgbackup/orgs","repos_url":"https://api.github.com/users/borgbackup/repos","events_url":"https://api.github.com/users/borgbackup/events{/privacy}","received_events_url":"https://api.github.com/users/borgbackup/received_events","type":"Organization","site_admin":false},"repo":{"id":35517126,"name":"borg","full_name":"borgbackup/borg","owner":{"login":"borgbackup","id":12418060,"avatar_url":"https://avatars.githubusercontent.com/u/12418060?v=3","gravatar_id":"","url":"https://api.github.com/users/borgbackup","html_url":"https://github.com/borgbackup","followers_url":"https://api.github.com/users/borgbackup/followers","following_url":"https://api.github.com/users/borgbackup/following{/other_user}","gists_url":"https://api.github.com/users/borgbackup/gists{/gist_id}","starred_url":"https://api.github.com/users/borgbackup/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/borgbackup/subscriptions","organizations_url":"https://api.github.com/users/borgbackup/orgs","repos_url":"https://api.github.com/users/borgbackup/repos","events_url":"https://api.github.com/users/borgbackup/events{/privacy}","received_events_url":"https://api.github.com/users/borgbackup/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/borgbackup/borg","description":"Deduplicating backup program with compression and authenticated encryption.","fork":false,"url":"https://api.github.com/repos/borgbackup/borg","forks_url":"https://api.github.com/repos/borgbackup/borg/forks","keys_url":"https://api.github.com/repos/borgbackup/borg/keys{/key_id}","collaborators_url":"https://api.github.com/repos/borgbackup/borg/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/borgbackup/borg/teams","hooks_url":"https://api.github.com/repos/borgbackup/borg/hooks","issue_events_url":"https://api.github.com/repos/borgbackup/borg/issues/events{/number}","events_url":"https://api.github.com/repos/borgbackup/borg/events","assignees_url":"https://api.github.com/repos/borgbackup/borg/assignees{/user}","branches_url":"https://api.github.com/repos/borgbackup/borg/branches{/branch}","tags_url":"https://api.github.com/repos/borgbackup/borg/tags","blobs_url":"https://api.github.com/repos/borgbackup/borg/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/borgbackup/borg/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/borgbackup/borg/git/refs{/sha}","trees_url":"https://api.github.com/repos/borgbackup/borg/git/trees{/sha}","statuses_url":"https://api.github.com/repos/borgbackup/borg/statuses/{sha}","languages_url":"https://api.github.com/repos/borgbackup/borg/languages","stargazers_url":"https://api.github.com/repos/borgbackup/borg/stargazers","contributors_url":"https://api.github.com/repos/borgbackup/borg/contributors","subscribers_url":"https://api.github.com/repos/borgbackup/borg/subscribers","subscription_url":"https://api.github.com/repos/borgbackup/borg/subscription","commits_url":"https://api.github.com/repos/borgbackup/borg/commits{/sha}","git_commits_url":"https://api.github.com/repos/borgbackup/borg/git/commits{/sha}","comments_url":"https://api.github.com/repos/borgbackup/borg/comments{/number}","issue_comment_url":"https://api.github.com/repos/borgbackup/borg/issues/comments{/number}","contents_url":"https://api.github.com/repos/borgbackup/borg/contents/{+path}","compare_url":"https://api.github.com/repos/borgbackup/borg/compare/{base}...{head}","merges_url":"https://api.github.com/repos/borgbackup/borg/merges","archive_url":"https://api.github.com/repos/borgbackup/borg/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/borgbackup/borg/downloads","issues_url":"https://api.github.com/repos/borgbackup/borg/issues{/number}","pulls_url":"https://api.github.com/repos/borgbackup/borg/pulls{/number}","milestones_url":"https://api.github.com/repos/borgbackup/borg/milestones{/number}","notifications_url":"https://api.github.com/repos/borgbackup/borg/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/borgbackup/borg/labels{/name}","releases_url":"https://api.github.com/repos/borgbackup/borg/releases{/id}","deployments_url":"https://api.github.com/repos/borgbackup/borg/deployments","created_at":"2015-05-12T23:10:47Z","updated_at":"2016-05-19T19:14:04Z","pushed_at":"2016-05-19T19:18:28Z","git_url":"git://github.com/borgbackup/borg.git","ssh_url":"git@github.com:borgbackup/borg.git","clone_url":"https://github.com/borgbackup/borg.git","svn_url":"https://github.com/borgbackup/borg","homepage":"https://borgbackup.readthedocs.io/","size":4779,"stargazers_count":1160,"watchers_count":1160,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":95,"mirror_url":null,"open_issues_count":166,"forks":95,"open_issues":166,"watchers":1160,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/borgbackup/borg/pulls/1066"},"html":{"href":"https://github.com/borgbackup/borg/pull/1066"},"issue":{"href":"https://api.github.com/repos/borgbackup/borg/issues/1066"},"comments":{"href":"https://api.github.com/repos/borgbackup/borg/issues/1066/comments"},"review_comments":{"href":"https://api.github.com/repos/borgbackup/borg/pulls/1066/comments"},"review_comment":{"href":"https://api.github.com/repos/borgbackup/borg/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/borgbackup/borg/pulls/1066/commits"},"statuses":{"href":"https://api.github.com/repos/borgbackup/borg/statuses/842e6c6224ba488037d5ced056ca007189938834"}}}}
{"actor":{"display_login":"ThomasWaldmann"}}