payload: {"action":"created","comment":{"url":"https://api.github.com/repos/cmu-db/terrier/pulls/comments/317250959","pull_request_review_id":279154910,"id":317250959,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDMxNzI1MDk1OQ==","diff_hunk":"@@ -112,12 +112,16 @@ void LogSerializerTask::SerializeRecord(const terrier::storage::LogRecord &recor\n       // ProjectedRowInitializer from these ids and their corresponding block layout.\n       WriteValue(delta->NumColumns());\n       WriteValue(delta->ColumnIds(), static_cast<uint32_t>(sizeof(col_id_t)) * delta->NumColumns());\n-\n+      // Write out the attr sizes. We write these out because there is no guarantee we have the block layout during\n+      // deserialization\n+      const auto &block_layout = record_body->GetTupleSlot().GetBlock()->data_table_->GetBlockLayout();\n+      for (uint16_t i = 0; i < delta->NumColumns(); i++) {\n+        WriteValue(block_layout.AttrSize(delta->ColumnIds()[i]));","path":"src/storage/write_ahead_log/log_serializer_task.cpp","position":9,"original_position":9,"commit_id":"341209942bf97ee1124d98e13dceecb803dfc71c","original_commit_id":"341209942bf97ee1124d98e13dceecb803dfc71c","user":{"login":"GustavoAngulo","id":14846265,"node_id":"MDQ6VXNlcjE0ODQ2MjY1","avatar_url":"https://avatars2.githubusercontent.com/u/14846265?v=4","gravatar_id":"","url":"https://api.github.com/users/GustavoAngulo","html_url":"https://github.com/GustavoAngulo","followers_url":"https://api.github.com/users/GustavoAngulo/followers","following_url":"https://api.github.com/users/GustavoAngulo/following{/other_user}","gists_url":"https://api.github.com/users/GustavoAngulo/gists{/gist_id}","starred_url":"https://api.github.com/users/GustavoAngulo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/GustavoAngulo/subscriptions","organizations_url":"https://api.github.com/users/GustavoAngulo/orgs","repos_url":"https://api.github.com/users/GustavoAngulo/repos","events_url":"https://api.github.com/users/GustavoAngulo/events{/privacy}","received_events_url":"https://api.github.com/users/GustavoAngulo/received_events","type":"User","site_admin":false},"body":"This was easier, and honestly I didn't understand the code that generates the attribute boundaries. I think we can actually get away with just writing out how many attributes of each size we have.","created_at":"2019-08-23T18:23:40Z","updated_at":"2019-08-23T18:23:40Z","html_url":"https://github.com/cmu-db/terrier/pull/459#discussion_r317250959","pull_request_url":"https://api.github.com/repos/cmu-db/terrier/pulls/459","author_association":"MEMBER","_links":{"self":{"href":"https://api.github.com/repos/cmu-db/terrier/pulls/comments/317250959"},"html":{"href":"https://github.com/cmu-db/terrier/pull/459#discussion_r317250959"},"pull_request":{"href":"https://api.github.com/repos/cmu-db/terrier/pulls/459"}},"in_reply_to_id":315896198},"pull_request":{"url":"https://api.github.com/repos/cmu-db/terrier/pulls/459","id":292902202,"node_id":"MDExOlB1bGxSZXF1ZXN0MjkyOTAyMjAy","html_url":"https://github.com/cmu-db/terrier/pull/459","diff_url":"https://github.com/cmu-db/terrier/pull/459.diff","patch_url":"https://github.com/cmu-db/terrier/pull/459.patch","issue_url":"https://api.github.com/repos/cmu-db/terrier/issues/459","number":459,"state":"open","locked":false,"title":"Recovery Manager","user":{"login":"GustavoAngulo","id":14846265,"node_id":"MDQ6VXNlcjE0ODQ2MjY1","avatar_url":"https://avatars2.githubusercontent.com/u/14846265?v=4","gravatar_id":"","url":"https://api.github.com/users/GustavoAngulo","html_url":"https://github.com/GustavoAngulo","followers_url":"https://api.github.com/users/GustavoAngulo/followers","following_url":"https://api.github.com/users/GustavoAngulo/following{/other_user}","gists_url":"https://api.github.com/users/GustavoAngulo/gists{/gist_id}","starred_url":"https://api.github.com/users/GustavoAngulo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/GustavoAngulo/subscriptions","organizations_url":"https://api.github.com/users/GustavoAngulo/orgs","repos_url":"https://api.github.com/users/GustavoAngulo/repos","events_url":"https://api.github.com/users/GustavoAngulo/events{/privacy}","received_events_url":"https://api.github.com/users/GustavoAngulo/received_events","type":"User","site_admin":false},"body":"Resolves #304 (I will create an updated issue for just checkpointing)\r\n\r\nThis PR adds the recovery manager component to the system. The recovery manager is in charge of replaying logs and their changes. There are currently two main components to the recovery manager:\r\n\r\n* **`AbstractLogProvider`**: Object that provides log records to the `RecoveryManager`. The `RecoveryManager` receives logs through the `GetNextRecord()` method. This way, the recovery manager does not need to know where the logs come from. Log providers override virtual methods on the `AbstractLogProvider` so that the record deserialization code is only written once. The key point is that the log provider (for example `DiskLogProvider`) must implement the pure virtual `Read(dest, size)` method in a way that the memory being read from appears continuous to the deserialization code. For the `DiskLogProvider` this is easy since the `BufferedLogReader` does that already. In the future, when we receive logs over the network, the `NetworkLogProvider` will have to make logs received over network appear as one continuous log. \r\n\r\n* **`RecoveryManager`**: The recovery manager replays logs by buffering redo records until we see a commit record, in which case it will execute all buffered redo records. This maintains serial ordering, and we never execute changes from aborted transactions. A consequence of this is that we need to manually clean up varlens from aborted changes because we never create a transaction that we will abort (these are normally cleaned up by the rollback code of the transaction). We do this by passing around a vector of pointers to the varlen entries of a redo record. We delete these entries if we discard the redo records. I don't consider this to be the best solution, but its also what we do during a transaction rollback. For now it works.\r\n\r\n  * Another key point about the `RecoveryManager` is the `RecoveryManager::ProcessSpecialCaseCatalogRecord` method. We need special handling of records that belong to catalog tables in order to correctly process their changes. For example, an insert record into pg_class will not magically make a new table appear. The special cases are outlined in the comment above the `RecoveryManager::IsSpecialCaseCatalogRecord` method, and the code in `RecoveryManager::ProcessSpecialCaseCatalogRecord` is structured with regards to these cases.\r\n\r\nThere is also the addition of the `LargeSqlTableTestObject`. Previously, we had a `LargeTransactionTestObject` (now renamed to `LargeDataTableTestObject`), which could run an OLTP test at the data table layer. The `LargeSqlTableTestObject` allows us to test at the SqlTable layer, which is where higher level components, such as the recovery manager, operate. It also builds on the previous `LargeTransactionTestObject` by testing deletes, as well as using the newly added Catalog for table and database management.\r\n\r\nCurrent TODO list:\r\n\r\n- [x] Create test object to test at the sql table layer. \r\n\r\n- [x] Abstract away source of logs (log file, network, etc)\r\n\r\n- [x] Make recovery non-blocking\r\n\r\n- [x] Add a recovery benchmark\r\n\r\n- [x] Serialize attribute sizes. This resulted in an increase of 5% to overall log size\r\n\r\n- [x] Support catalog recovery and catalog API\r\n\r\n- [x] Recover indexes\r\n\r\n- [x] Test index recovery\r\n\r\n- [ ] Support new DI framework\r\n\r\n- [ ]  Write a wiki page describing the `RecoveryManager` architecture once the API and design of the RecoveryManager has been approved\r\n\r\n- [ ] Make issue for background log deserialization (deserialize logs in the background while recovery is happening)\r\n\r\n- [ ] Make issue for projected row deserialization. This pull request will change it to deserialize them using serialized attribute sizes to avoid needing the layout at deserialization time. What we should do is just deserialize the projected row as a blob, and when we execute it, we will have the layout. A nuance will be to append varlen entries after the projected row blob. Because of the complexity, and lack of dependence to recovery, this should be done in a separte pull request.\r\n\r\nFuture Work for separate PRs:\r\n\r\n* Add `NetworkLogProvider`\r\n* Support checkpoints","created_at":"2019-06-28T16:55:31Z","updated_at":"2019-08-23T18:23:40Z","closed_at":null,"merged_at":null,"merge_commit_sha":"00e5f26fae3189e041b36f6de0ff672b388a3f9c","assignee":{"login":"GustavoAngulo","id":14846265,"node_id":"MDQ6VXNlcjE0ODQ2MjY1","avatar_url":"https://avatars2.githubusercontent.com/u/14846265?v=4","gravatar_id":"","url":"https://api.github.com/users/GustavoAngulo","html_url":"https://github.com/GustavoAngulo","followers_url":"https://api.github.com/users/GustavoAngulo/followers","following_url":"https://api.github.com/users/GustavoAngulo/following{/other_user}","gists_url":"https://api.github.com/users/GustavoAngulo/gists{/gist_id}","starred_url":"https://api.github.com/users/GustavoAngulo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/GustavoAngulo/subscriptions","organizations_url":"https://api.github.com/users/GustavoAngulo/orgs","repos_url":"https://api.github.com/users/GustavoAngulo/repos","events_url":"https://api.github.com/users/GustavoAngulo/events{/privacy}","received_events_url":"https://api.github.com/users/GustavoAngulo/received_events","type":"User","site_admin":false},"assignees":[{"login":"GustavoAngulo","id":14846265,"node_id":"MDQ6VXNlcjE0ODQ2MjY1","avatar_url":"https://avatars2.githubusercontent.com/u/14846265?v=4","gravatar_id":"","url":"https://api.github.com/users/GustavoAngulo","html_url":"https://github.com/GustavoAngulo","followers_url":"https://api.github.com/users/GustavoAngulo/followers","following_url":"https://api.github.com/users/GustavoAngulo/following{/other_user}","gists_url":"https://api.github.com/users/GustavoAngulo/gists{/gist_id}","starred_url":"https://api.github.com/users/GustavoAngulo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/GustavoAngulo/subscriptions","organizations_url":"https://api.github.com/users/GustavoAngulo/orgs","repos_url":"https://api.github.com/users/GustavoAngulo/repos","events_url":"https://api.github.com/users/GustavoAngulo/events{/privacy}","received_events_url":"https://api.github.com/users/GustavoAngulo/received_events","type":"User","site_admin":false}],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":1010456618,"node_id":"MDU6TGFiZWwxMDEwNDU2NjE4","url":"https://api.github.com/repos/cmu-db/terrier/labels/feature","name":"feature","color":"1d76db","default":false},{"id":1010451271,"node_id":"MDU6TGFiZWwxMDEwNDUxMjcx","url":"https://api.github.com/repos/cmu-db/terrier/labels/ready-for-review","name":"ready-for-review","color":"76b726","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/cmu-db/terrier/pulls/459/commits","review_comments_url":"https://api.github.com/repos/cmu-db/terrier/pulls/459/comments","review_comment_url":"https://api.github.com/repos/cmu-db/terrier/pulls/comments{/number}","comments_url":"https://api.github.com/repos/cmu-db/terrier/issues/459/comments","statuses_url":"https://api.github.com/repos/cmu-db/terrier/statuses/341209942bf97ee1124d98e13dceecb803dfc71c","head":{"label":"GustavoAngulo:I_would_like_to_speak_to_your_recovery_manager","ref":"I_would_like_to_speak_to_your_recovery_manager","sha":"341209942bf97ee1124d98e13dceecb803dfc71c","user":{"login":"GustavoAngulo","id":14846265,"node_id":"MDQ6VXNlcjE0ODQ2MjY1","avatar_url":"https://avatars2.githubusercontent.com/u/14846265?v=4","gravatar_id":"","url":"https://api.github.com/users/GustavoAngulo","html_url":"https://github.com/GustavoAngulo","followers_url":"https://api.github.com/users/GustavoAngulo/followers","following_url":"https://api.github.com/users/GustavoAngulo/following{/other_user}","gists_url":"https://api.github.com/users/GustavoAngulo/gists{/gist_id}","starred_url":"https://api.github.com/users/GustavoAngulo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/GustavoAngulo/subscriptions","organizations_url":"https://api.github.com/users/GustavoAngulo/orgs","repos_url":"https://api.github.com/users/GustavoAngulo/repos","events_url":"https://api.github.com/users/GustavoAngulo/events{/privacy}","received_events_url":"https://api.github.com/users/GustavoAngulo/received_events","type":"User","site_admin":false},"repo":{"id":170380103,"node_id":"MDEwOlJlcG9zaXRvcnkxNzAzODAxMDM=","name":"terrier","full_name":"GustavoAngulo/terrier","private":false,"owner":{"login":"GustavoAngulo","id":14846265,"node_id":"MDQ6VXNlcjE0ODQ2MjY1","avatar_url":"https://avatars2.githubusercontent.com/u/14846265?v=4","gravatar_id":"","url":"https://api.github.com/users/GustavoAngulo","html_url":"https://github.com/GustavoAngulo","followers_url":"https://api.github.com/users/GustavoAngulo/followers","following_url":"https://api.github.com/users/GustavoAngulo/following{/other_user}","gists_url":"https://api.github.com/users/GustavoAngulo/gists{/gist_id}","starred_url":"https://api.github.com/users/GustavoAngulo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/GustavoAngulo/subscriptions","organizations_url":"https://api.github.com/users/GustavoAngulo/orgs","repos_url":"https://api.github.com/users/GustavoAngulo/repos","events_url":"https://api.github.com/users/GustavoAngulo/events{/privacy}","received_events_url":"https://api.github.com/users/GustavoAngulo/received_events","type":"User","site_admin":false},"html_url":"https://github.com/GustavoAngulo/terrier","description":"You know what this is...","fork":true,"url":"https://api.github.com/repos/GustavoAngulo/terrier","forks_url":"https://api.github.com/repos/GustavoAngulo/terrier/forks","keys_url":"https://api.github.com/repos/GustavoAngulo/terrier/keys{/key_id}","collaborators_url":"https://api.github.com/repos/GustavoAngulo/terrier/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/GustavoAngulo/terrier/teams","hooks_url":"https://api.github.com/repos/GustavoAngulo/terrier/hooks","issue_events_url":"https://api.github.com/repos/GustavoAngulo/terrier/issues/events{/number}","events_url":"https://api.github.com/repos/GustavoAngulo/terrier/events","assignees_url":"https://api.github.com/repos/GustavoAngulo/terrier/assignees{/user}","branches_url":"https://api.github.com/repos/GustavoAngulo/terrier/branches{/branch}","tags_url":"https://api.github.com/repos/GustavoAngulo/terrier/tags","blobs_url":"https://api.github.com/repos/GustavoAngulo/terrier/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/GustavoAngulo/terrier/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/GustavoAngulo/terrier/git/refs{/sha}","trees_url":"https://api.github.com/repos/GustavoAngulo/terrier/git/trees{/sha}","statuses_url":"https://api.github.com/repos/GustavoAngulo/terrier/statuses/{sha}","languages_url":"https://api.github.com/repos/GustavoAngulo/terrier/languages","stargazers_url":"https://api.github.com/repos/GustavoAngulo/terrier/stargazers","contributors_url":"https://api.github.com/repos/GustavoAngulo/terrier/contributors","subscribers_url":"https://api.github.com/repos/GustavoAngulo/terrier/subscribers","subscription_url":"https://api.github.com/repos/GustavoAngulo/terrier/subscription","commits_url":"https://api.github.com/repos/GustavoAngulo/terrier/commits{/sha}","git_commits_url":"https://api.github.com/repos/GustavoAngulo/terrier/git/commits{/sha}","comments_url":"https://api.github.com/repos/GustavoAngulo/terrier/comments{/number}","issue_comment_url":"https://api.github.com/repos/GustavoAngulo/terrier/issues/comments{/number}","contents_url":"https://api.github.com/repos/GustavoAngulo/terrier/contents/{+path}","compare_url":"https://api.github.com/repos/GustavoAngulo/terrier/compare/{base}...{head}","merges_url":"https://api.github.com/repos/GustavoAngulo/terrier/merges","archive_url":"https://api.github.com/repos/GustavoAngulo/terrier/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/GustavoAngulo/terrier/downloads","issues_url":"https://api.github.com/repos/GustavoAngulo/terrier/issues{/number}","pulls_url":"https://api.github.com/repos/GustavoAngulo/terrier/pulls{/number}","milestones_url":"https://api.github.com/repos/GustavoAngulo/terrier/milestones{/number}","notifications_url":"https://api.github.com/repos/GustavoAngulo/terrier/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/GustavoAngulo/terrier/labels{/name}","releases_url":"https://api.github.com/repos/GustavoAngulo/terrier/releases{/id}","deployments_url":"https://api.github.com/repos/GustavoAngulo/terrier/deployments","created_at":"2019-02-12T19:43:32Z","updated_at":"2019-08-08T16:24:30Z","pushed_at":"2019-08-20T19:58:54Z","git_url":"git://github.com/GustavoAngulo/terrier.git","ssh_url":"git@github.com:GustavoAngulo/terrier.git","clone_url":"https://github.com/GustavoAngulo/terrier.git","svn_url":"https://github.com/GustavoAngulo/terrier","homepage":null,"size":8950,"stargazers_count":0,"watchers_count":0,"language":"C++","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":0,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"cmu-db:master","ref":"master","sha":"c12fbfbbb57363297b3e08c42919ccf5f480e33a","user":{"login":"cmu-db","id":6220241,"node_id":"MDEyOk9yZ2FuaXphdGlvbjYyMjAyNDE=","avatar_url":"https://avatars0.githubusercontent.com/u/6220241?v=4","gravatar_id":"","url":"https://api.github.com/users/cmu-db","html_url":"https://github.com/cmu-db","followers_url":"https://api.github.com/users/cmu-db/followers","following_url":"https://api.github.com/users/cmu-db/following{/other_user}","gists_url":"https://api.github.com/users/cmu-db/gists{/gist_id}","starred_url":"https://api.github.com/users/cmu-db/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cmu-db/subscriptions","organizations_url":"https://api.github.com/users/cmu-db/orgs","repos_url":"https://api.github.com/users/cmu-db/repos","events_url":"https://api.github.com/users/cmu-db/events{/privacy}","received_events_url":"https://api.github.com/users/cmu-db/received_events","type":"Organization","site_admin":false},"repo":{"id":140325970,"node_id":"MDEwOlJlcG9zaXRvcnkxNDAzMjU5NzA=","name":"terrier","full_name":"cmu-db/terrier","private":false,"owner":{"login":"cmu-db","id":6220241,"node_id":"MDEyOk9yZ2FuaXphdGlvbjYyMjAyNDE=","avatar_url":"https://avatars0.githubusercontent.com/u/6220241?v=4","gravatar_id":"","url":"https://api.github.com/users/cmu-db","html_url":"https://github.com/cmu-db","followers_url":"https://api.github.com/users/cmu-db/followers","following_url":"https://api.github.com/users/cmu-db/following{/other_user}","gists_url":"https://api.github.com/users/cmu-db/gists{/gist_id}","starred_url":"https://api.github.com/users/cmu-db/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cmu-db/subscriptions","organizations_url":"https://api.github.com/users/cmu-db/orgs","repos_url":"https://api.github.com/users/cmu-db/repos","events_url":"https://api.github.com/users/cmu-db/events{/privacy}","received_events_url":"https://api.github.com/users/cmu-db/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/cmu-db/terrier","description":"You know what this is...","fork":false,"url":"https://api.github.com/repos/cmu-db/terrier","forks_url":"https://api.github.com/repos/cmu-db/terrier/forks","keys_url":"https://api.github.com/repos/cmu-db/terrier/keys{/key_id}","collaborators_url":"https://api.github.com/repos/cmu-db/terrier/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/cmu-db/terrier/teams","hooks_url":"https://api.github.com/repos/cmu-db/terrier/hooks","issue_events_url":"https://api.github.com/repos/cmu-db/terrier/issues/events{/number}","events_url":"https://api.github.com/repos/cmu-db/terrier/events","assignees_url":"https://api.github.com/repos/cmu-db/terrier/assignees{/user}","branches_url":"https://api.github.com/repos/cmu-db/terrier/branches{/branch}","tags_url":"https://api.github.com/repos/cmu-db/terrier/tags","blobs_url":"https://api.github.com/repos/cmu-db/terrier/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/cmu-db/terrier/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/cmu-db/terrier/git/refs{/sha}","trees_url":"https://api.github.com/repos/cmu-db/terrier/git/trees{/sha}","statuses_url":"https://api.github.com/repos/cmu-db/terrier/statuses/{sha}","languages_url":"https://api.github.com/repos/cmu-db/terrier/languages","stargazers_url":"https://api.github.com/repos/cmu-db/terrier/stargazers","contributors_url":"https://api.github.com/repos/cmu-db/terrier/contributors","subscribers_url":"https://api.github.com/repos/cmu-db/terrier/subscribers","subscription_url":"https://api.github.com/repos/cmu-db/terrier/subscription","commits_url":"https://api.github.com/repos/cmu-db/terrier/commits{/sha}","git_commits_url":"https://api.github.com/repos/cmu-db/terrier/git/commits{/sha}","comments_url":"https://api.github.com/repos/cmu-db/terrier/comments{/number}","issue_comment_url":"https://api.github.com/repos/cmu-db/terrier/issues/comments{/number}","contents_url":"https://api.github.com/repos/cmu-db/terrier/contents/{+path}","compare_url":"https://api.github.com/repos/cmu-db/terrier/compare/{base}...{head}","merges_url":"https://api.github.com/repos/cmu-db/terrier/merges","archive_url":"https://api.github.com/repos/cmu-db/terrier/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/cmu-db/terrier/downloads","issues_url":"https://api.github.com/repos/cmu-db/terrier/issues{/number}","pulls_url":"https://api.github.com/repos/cmu-db/terrier/pulls{/number}","milestones_url":"https://api.github.com/repos/cmu-db/terrier/milestones{/number}","notifications_url":"https://api.github.com/repos/cmu-db/terrier/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/cmu-db/terrier/labels{/name}","releases_url":"https://api.github.com/repos/cmu-db/terrier/releases{/id}","deployments_url":"https://api.github.com/repos/cmu-db/terrier/deployments","created_at":"2018-07-09T18:22:34Z","updated_at":"2019-08-23T02:53:45Z","pushed_at":"2019-08-23T18:10:04Z","git_url":"git://github.com/cmu-db/terrier.git","ssh_url":"git@github.com:cmu-db/terrier.git","clone_url":"https://github.com/cmu-db/terrier.git","svn_url":"https://github.com/cmu-db/terrier","homepage":null,"size":8411,"stargazers_count":218,"watchers_count":218,"language":"C++","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":97,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":78,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"forks":97,"open_issues":78,"watchers":218,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/cmu-db/terrier/pulls/459"},"html":{"href":"https://github.com/cmu-db/terrier/pull/459"},"issue":{"href":"https://api.github.com/repos/cmu-db/terrier/issues/459"},"comments":{"href":"https://api.github.com/repos/cmu-db/terrier/issues/459/comments"},"review_comments":{"href":"https://api.github.com/repos/cmu-db/terrier/pulls/459/comments"},"review_comment":{"href":"https://api.github.com/repos/cmu-db/terrier/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/cmu-db/terrier/pulls/459/commits"},"statuses":{"href":"https://api.github.com/repos/cmu-db/terrier/statuses/341209942bf97ee1124d98e13dceecb803dfc71c"}},"author_association":"MEMBER"}}
other: {"actor":{"display_login":"GustavoAngulo"}}