{"action":"created","comment":{"url":"https://api.github.com/repos/dmtcp/dmtcp/pulls/comments/45693602","id":45693602,"diff_hunk":"@@ -1,2 +1,47 @@\n-This plugin serves as a template.  Please modify the given\n-functions according to your needs.\n+# 'ckptfile' plugin\n+\n+This plugin allows you to:\n+\n+ a) specify a file that DMTCP should checkpoint; and\n+ b) specify the path on restart of a file if it wasn't checkpointed.\n+\n+The plugin reads a user-specified database at checkpoint time. The\n+database is a simple text file that specifies the files that should\n+be checkpointed, and the restart paths of files that shouldn't be\n+checkpointed.\n+\n+The database file's format is defined below.\n+\n+   file:ckpt={1|0};rstrt=file\n+   file-pattern:ckpt={1|0};rstrt=file-pattern\n+\n+Note that for a file that's checkpointed (ckpt=1), the restart path\n+(rstrt=XXX) is ignored.\n+\n+## Background\n+\n+There are two scenarios:\n+\n+ 1) DMTCP checkpoints an open file:\n+\n+    This happens when a user asks DMTCP to checkpoint a file being used\n+    by an application. In this case, DMTCP saves a copy of the file as\n+    it existed at checkpoint time in a separate directory.\n+\n+    On restart, the saved copy of the file is restored at its original\n+    location, the file pointers are restored, and the user application\n+    can continue to read from there.\n+\n+ 2) DMTCP does not checkpoint an open file:\n+\n+    This happens when a user does not ask DMTCP to checkpoint a file\n+    being used by an application. In this case, DMTCP does not save a\n+    copy of the file at checkpoint time.\n+\n+    On restart, the file that the application was using at checkpoint\n+    time is expected to be at its original location, and only the file\n+    pointers are restored.\n+\n+## Usage\n+\n+    $ DMTCP_CKPTFILES_DATA=/path/to/ckptfiles.dat dmtcp_launch --with-plugin /path/to/libdmtcp_ckptfile.so ./a.out","path":"contrib/ckptfile/README","position":49,"original_position":49,"commit_id":"03f72538f4bb9898a6c062ca241810ab838ede54","original_commit_id":"03f72538f4bb9898a6c062ca241810ab838ede54","user":{"login":"gc00","id":1207321,"avatar_url":"https://avatars.githubusercontent.com/u/1207321?v=3","gravatar_id":"","url":"https://api.github.com/users/gc00","html_url":"https://github.com/gc00","followers_url":"https://api.github.com/users/gc00/followers","following_url":"https://api.github.com/users/gc00/following{/other_user}","gists_url":"https://api.github.com/users/gc00/gists{/gist_id}","starred_url":"https://api.github.com/users/gc00/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gc00/subscriptions","organizations_url":"https://api.github.com/users/gc00/orgs","repos_url":"https://api.github.com/users/gc00/repos","events_url":"https://api.github.com/users/gc00/events{/privacy}","received_events_url":"https://api.github.com/users/gc00/received_events","type":"User","site_admin":false},"body":"Let's put the `## Usage` comment and the following two lines at the beginning of this README file.","created_at":"2015-11-24T03:26:23Z","updated_at":"2015-11-24T03:26:23Z","html_url":"https://github.com/dmtcp/dmtcp/pull/171#discussion_r45693602","pull_request_url":"https://api.github.com/repos/dmtcp/dmtcp/pulls/171","_links":{"self":{"href":"https://api.github.com/repos/dmtcp/dmtcp/pulls/comments/45693602"},"html":{"href":"https://github.com/dmtcp/dmtcp/pull/171#discussion_r45693602"},"pull_request":{"href":"https://api.github.com/repos/dmtcp/dmtcp/pulls/171"}}},"pull_request":{"url":"https://api.github.com/repos/dmtcp/dmtcp/pulls/171","id":42257000,"html_url":"https://github.com/dmtcp/dmtcp/pull/171","diff_url":"https://github.com/dmtcp/dmtcp/pull/171.diff","patch_url":"https://github.com/dmtcp/dmtcp/pull/171.patch","issue_url":"https://api.github.com/repos/dmtcp/dmtcp/issues/171","number":171,"state":"open","locked":false,"title":"ckptfiles-plugin: add functionality","user":{"login":"rohgarg","id":1672104,"avatar_url":"https://avatars.githubusercontent.com/u/1672104?v=3","gravatar_id":"","url":"https://api.github.com/users/rohgarg","html_url":"https://github.com/rohgarg","followers_url":"https://api.github.com/users/rohgarg/followers","following_url":"https://api.github.com/users/rohgarg/following{/other_user}","gists_url":"https://api.github.com/users/rohgarg/gists{/gist_id}","starred_url":"https://api.github.com/users/rohgarg/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rohgarg/subscriptions","organizations_url":"https://api.github.com/users/rohgarg/orgs","repos_url":"https://api.github.com/users/rohgarg/repos","events_url":"https://api.github.com/users/rohgarg/events{/privacy}","received_events_url":"https://api.github.com/users/rohgarg/received_events","type":"User","site_admin":false},"body":"This patch adds basic ability to read a list of files to be checkpointed and their restart locations (which may be different on restart) from a user-specified database (simple text file). A sample database file is also provided.","created_at":"2015-08-12T16:02:01Z","updated_at":"2015-11-24T03:26:23Z","closed_at":null,"merged_at":null,"merge_commit_sha":"c0bf43ed3b51395db1ba3b0d475ae719bca187d5","assignee":null,"milestone":{"url":"https://api.github.com/repos/dmtcp/dmtcp/milestones/3","html_url":"https://github.com/dmtcp/dmtcp/milestones/2.5.0","labels_url":"https://api.github.com/repos/dmtcp/dmtcp/milestones/3/labels","id":1196132,"number":3,"title":"2.5.0","description":null,"creator":{"login":"karya0","id":433762,"avatar_url":"https://avatars.githubusercontent.com/u/433762?v=3","gravatar_id":"","url":"https://api.github.com/users/karya0","html_url":"https://github.com/karya0","followers_url":"https://api.github.com/users/karya0/followers","following_url":"https://api.github.com/users/karya0/following{/other_user}","gists_url":"https://api.github.com/users/karya0/gists{/gist_id}","starred_url":"https://api.github.com/users/karya0/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/karya0/subscriptions","organizations_url":"https://api.github.com/users/karya0/orgs","repos_url":"https://api.github.com/users/karya0/repos","events_url":"https://api.github.com/users/karya0/events{/privacy}","received_events_url":"https://api.github.com/users/karya0/received_events","type":"User","site_admin":false},"open_issues":28,"closed_issues":11,"state":"open","created_at":"2015-07-07T04:26:58Z","updated_at":"2015-11-24T03:14:12Z","due_on":null,"closed_at":null},"commits_url":"https://api.github.com/repos/dmtcp/dmtcp/pulls/171/commits","review_comments_url":"https://api.github.com/repos/dmtcp/dmtcp/pulls/171/comments","review_comment_url":"https://api.github.com/repos/dmtcp/dmtcp/pulls/comments{/number}","comments_url":"https://api.github.com/repos/dmtcp/dmtcp/issues/171/comments","statuses_url":"https://api.github.com/repos/dmtcp/dmtcp/statuses/03f72538f4bb9898a6c062ca241810ab838ede54","head":{"label":"rohgarg:ckptfiles-v2","ref":"ckptfiles-v2","sha":"03f72538f4bb9898a6c062ca241810ab838ede54","user":{"login":"rohgarg","id":1672104,"avatar_url":"https://avatars.githubusercontent.com/u/1672104?v=3","gravatar_id":"","url":"https://api.github.com/users/rohgarg","html_url":"https://github.com/rohgarg","followers_url":"https://api.github.com/users/rohgarg/followers","following_url":"https://api.github.com/users/rohgarg/following{/other_user}","gists_url":"https://api.github.com/users/rohgarg/gists{/gist_id}","starred_url":"https://api.github.com/users/rohgarg/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rohgarg/subscriptions","organizations_url":"https://api.github.com/users/rohgarg/orgs","repos_url":"https://api.github.com/users/rohgarg/repos","events_url":"https://api.github.com/users/rohgarg/events{/privacy}","received_events_url":"https://api.github.com/users/rohgarg/received_events","type":"User","site_admin":false},"repo":{"id":30499837,"name":"dmtcp-1","full_name":"rohgarg/dmtcp-1","owner":{"login":"rohgarg","id":1672104,"avatar_url":"https://avatars.githubusercontent.com/u/1672104?v=3","gravatar_id":"","url":"https://api.github.com/users/rohgarg","html_url":"https://github.com/rohgarg","followers_url":"https://api.github.com/users/rohgarg/followers","following_url":"https://api.github.com/users/rohgarg/following{/other_user}","gists_url":"https://api.github.com/users/rohgarg/gists{/gist_id}","starred_url":"https://api.github.com/users/rohgarg/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rohgarg/subscriptions","organizations_url":"https://api.github.com/users/rohgarg/orgs","repos_url":"https://api.github.com/users/rohgarg/repos","events_url":"https://api.github.com/users/rohgarg/events{/privacy}","received_events_url":"https://api.github.com/users/rohgarg/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/rohgarg/dmtcp-1","description":"DMTCP: Distributed MultiThreaded CheckPointing","fork":true,"url":"https://api.github.com/repos/rohgarg/dmtcp-1","forks_url":"https://api.github.com/repos/rohgarg/dmtcp-1/forks","keys_url":"https://api.github.com/repos/rohgarg/dmtcp-1/keys{/key_id}","collaborators_url":"https://api.github.com/repos/rohgarg/dmtcp-1/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/rohgarg/dmtcp-1/teams","hooks_url":"https://api.github.com/repos/rohgarg/dmtcp-1/hooks","issue_events_url":"https://api.github.com/repos/rohgarg/dmtcp-1/issues/events{/number}","events_url":"https://api.github.com/repos/rohgarg/dmtcp-1/events","assignees_url":"https://api.github.com/repos/rohgarg/dmtcp-1/assignees{/user}","branches_url":"https://api.github.com/repos/rohgarg/dmtcp-1/branches{/branch}","tags_url":"https://api.github.com/repos/rohgarg/dmtcp-1/tags","blobs_url":"https://api.github.com/repos/rohgarg/dmtcp-1/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/rohgarg/dmtcp-1/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/rohgarg/dmtcp-1/git/refs{/sha}","trees_url":"https://api.github.com/repos/rohgarg/dmtcp-1/git/trees{/sha}","statuses_url":"https://api.github.com/repos/rohgarg/dmtcp-1/statuses/{sha}","languages_url":"https://api.github.com/repos/rohgarg/dmtcp-1/languages","stargazers_url":"https://api.github.com/repos/rohgarg/dmtcp-1/stargazers","contributors_url":"https://api.github.com/repos/rohgarg/dmtcp-1/contributors","subscribers_url":"https://api.github.com/repos/rohgarg/dmtcp-1/subscribers","subscription_url":"https://api.github.com/repos/rohgarg/dmtcp-1/subscription","commits_url":"https://api.github.com/repos/rohgarg/dmtcp-1/commits{/sha}","git_commits_url":"https://api.github.com/repos/rohgarg/dmtcp-1/git/commits{/sha}","comments_url":"https://api.github.com/repos/rohgarg/dmtcp-1/comments{/number}","issue_comment_url":"https://api.github.com/repos/rohgarg/dmtcp-1/issues/comments{/number}","contents_url":"https://api.github.com/repos/rohgarg/dmtcp-1/contents/{+path}","compare_url":"https://api.github.com/repos/rohgarg/dmtcp-1/compare/{base}...{head}","merges_url":"https://api.github.com/repos/rohgarg/dmtcp-1/merges","archive_url":"https://api.github.com/repos/rohgarg/dmtcp-1/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/rohgarg/dmtcp-1/downloads","issues_url":"https://api.github.com/repos/rohgarg/dmtcp-1/issues{/number}","pulls_url":"https://api.github.com/repos/rohgarg/dmtcp-1/pulls{/number}","milestones_url":"https://api.github.com/repos/rohgarg/dmtcp-1/milestones{/number}","notifications_url":"https://api.github.com/repos/rohgarg/dmtcp-1/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/rohgarg/dmtcp-1/labels{/name}","releases_url":"https://api.github.com/repos/rohgarg/dmtcp-1/releases{/id}","created_at":"2015-02-08T17:56:51Z","updated_at":"2015-05-08T02:36:51Z","pushed_at":"2015-11-23T17:15:29Z","git_url":"git://github.com/rohgarg/dmtcp-1.git","ssh_url":"git@github.com:rohgarg/dmtcp-1.git","clone_url":"https://github.com/rohgarg/dmtcp-1.git","svn_url":"https://github.com/rohgarg/dmtcp-1","homepage":"http://dmtcp.sourceforge.net/","size":11041,"stargazers_count":0,"watchers_count":0,"language":"C++","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"dmtcp:master","ref":"master","sha":"3dfd0ed8a0da8cee4b21a71d1887768cdca92cce","user":{"login":"dmtcp","id":1207316,"avatar_url":"https://avatars.githubusercontent.com/u/1207316?v=3","gravatar_id":"","url":"https://api.github.com/users/dmtcp","html_url":"https://github.com/dmtcp","followers_url":"https://api.github.com/users/dmtcp/followers","following_url":"https://api.github.com/users/dmtcp/following{/other_user}","gists_url":"https://api.github.com/users/dmtcp/gists{/gist_id}","starred_url":"https://api.github.com/users/dmtcp/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dmtcp/subscriptions","organizations_url":"https://api.github.com/users/dmtcp/orgs","repos_url":"https://api.github.com/users/dmtcp/repos","events_url":"https://api.github.com/users/dmtcp/events{/privacy}","received_events_url":"https://api.github.com/users/dmtcp/received_events","type":"Organization","site_admin":false},"repo":{"id":24297650,"name":"dmtcp","full_name":"dmtcp/dmtcp","owner":{"login":"dmtcp","id":1207316,"avatar_url":"https://avatars.githubusercontent.com/u/1207316?v=3","gravatar_id":"","url":"https://api.github.com/users/dmtcp","html_url":"https://github.com/dmtcp","followers_url":"https://api.github.com/users/dmtcp/followers","following_url":"https://api.github.com/users/dmtcp/following{/other_user}","gists_url":"https://api.github.com/users/dmtcp/gists{/gist_id}","starred_url":"https://api.github.com/users/dmtcp/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dmtcp/subscriptions","organizations_url":"https://api.github.com/users/dmtcp/orgs","repos_url":"https://api.github.com/users/dmtcp/repos","events_url":"https://api.github.com/users/dmtcp/events{/privacy}","received_events_url":"https://api.github.com/users/dmtcp/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/dmtcp/dmtcp","description":"DMTCP: Distributed MultiThreaded CheckPointing","fork":false,"url":"https://api.github.com/repos/dmtcp/dmtcp","forks_url":"https://api.github.com/repos/dmtcp/dmtcp/forks","keys_url":"https://api.github.com/repos/dmtcp/dmtcp/keys{/key_id}","collaborators_url":"https://api.github.com/repos/dmtcp/dmtcp/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/dmtcp/dmtcp/teams","hooks_url":"https://api.github.com/repos/dmtcp/dmtcp/hooks","issue_events_url":"https://api.github.com/repos/dmtcp/dmtcp/issues/events{/number}","events_url":"https://api.github.com/repos/dmtcp/dmtcp/events","assignees_url":"https://api.github.com/repos/dmtcp/dmtcp/assignees{/user}","branches_url":"https://api.github.com/repos/dmtcp/dmtcp/branches{/branch}","tags_url":"https://api.github.com/repos/dmtcp/dmtcp/tags","blobs_url":"https://api.github.com/repos/dmtcp/dmtcp/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/dmtcp/dmtcp/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/dmtcp/dmtcp/git/refs{/sha}","trees_url":"https://api.github.com/repos/dmtcp/dmtcp/git/trees{/sha}","statuses_url":"https://api.github.com/repos/dmtcp/dmtcp/statuses/{sha}","languages_url":"https://api.github.com/repos/dmtcp/dmtcp/languages","stargazers_url":"https://api.github.com/repos/dmtcp/dmtcp/stargazers","contributors_url":"https://api.github.com/repos/dmtcp/dmtcp/contributors","subscribers_url":"https://api.github.com/repos/dmtcp/dmtcp/subscribers","subscription_url":"https://api.github.com/repos/dmtcp/dmtcp/subscription","commits_url":"https://api.github.com/repos/dmtcp/dmtcp/commits{/sha}","git_commits_url":"https://api.github.com/repos/dmtcp/dmtcp/git/commits{/sha}","comments_url":"https://api.github.com/repos/dmtcp/dmtcp/comments{/number}","issue_comment_url":"https://api.github.com/repos/dmtcp/dmtcp/issues/comments{/number}","contents_url":"https://api.github.com/repos/dmtcp/dmtcp/contents/{+path}","compare_url":"https://api.github.com/repos/dmtcp/dmtcp/compare/{base}...{head}","merges_url":"https://api.github.com/repos/dmtcp/dmtcp/merges","archive_url":"https://api.github.com/repos/dmtcp/dmtcp/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/dmtcp/dmtcp/downloads","issues_url":"https://api.github.com/repos/dmtcp/dmtcp/issues{/number}","pulls_url":"https://api.github.com/repos/dmtcp/dmtcp/pulls{/number}","milestones_url":"https://api.github.com/repos/dmtcp/dmtcp/milestones{/number}","notifications_url":"https://api.github.com/repos/dmtcp/dmtcp/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/dmtcp/dmtcp/labels{/name}","releases_url":"https://api.github.com/repos/dmtcp/dmtcp/releases{/id}","created_at":"2014-09-21T17:21:59Z","updated_at":"2015-09-22T13:27:33Z","pushed_at":"2015-11-24T03:09:57Z","git_url":"git://github.com/dmtcp/dmtcp.git","ssh_url":"git@github.com:dmtcp/dmtcp.git","clone_url":"https://github.com/dmtcp/dmtcp.git","svn_url":"https://github.com/dmtcp/dmtcp","homepage":"http://dmtcp.sourceforge.net/","size":14355,"stargazers_count":27,"watchers_count":27,"language":"C++","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":21,"mirror_url":null,"open_issues_count":90,"forks":21,"open_issues":90,"watchers":27,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/dmtcp/dmtcp/pulls/171"},"html":{"href":"https://github.com/dmtcp/dmtcp/pull/171"},"issue":{"href":"https://api.github.com/repos/dmtcp/dmtcp/issues/171"},"comments":{"href":"https://api.github.com/repos/dmtcp/dmtcp/issues/171/comments"},"review_comments":{"href":"https://api.github.com/repos/dmtcp/dmtcp/pulls/171/comments"},"review_comment":{"href":"https://api.github.com/repos/dmtcp/dmtcp/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/dmtcp/dmtcp/pulls/171/commits"},"statuses":{"href":"https://api.github.com/repos/dmtcp/dmtcp/statuses/03f72538f4bb9898a6c062ca241810ab838ede54"}}}}