{"action":"created","comment":{"url":"https://api.github.com/repos/wiredtiger/wiredtiger/pulls/comments/50118475","id":50118475,"diff_hunk":"@@ -0,0 +1,485 @@\n+/*-\n+ * Copyright (c) 2014-2016 MongoDB, Inc.\n+ * Copyright (c) 2008-2014 WiredTiger, Inc.\n+ *\tAll rights reserved.\n+ *\n+ * See the file LICENSE for redistribution information.\n+ */\n+\n+#include \"wt_internal.h\"\n+\n+/*\n+ * Shared rebalance information.\n+ */\n+typedef struct {\n+\tWT_REF **leaf;\t\t\t\t/* List of leaf pages */\n+\tsize_t\t leaf_next;\t\t\t/* Next entry */\n+\tsize_t   leaf_allocated;\t\t/* Allocated bytes */\n+\n+\tWT_ADDR *fl;\t\t\t\t/* List of objects to free */\n+\tsize_t\t fl_next;\t\t\t/* Next entry */\n+\tsize_t   fl_allocated;\t\t\t/* Allocated bytes */\n+\n+\tWT_PAGE *root;\t\t\t\t/* Created root page */\n+\n+\tuint8_t\t type;\t\t\t\t/* Internal page type */\n+\n+#define\tWT_REBALANCE_PROGRESS_INTERVAL\t100\n+\tuint64_t progress;\t\t\t/* Progress counter */\n+\n+\tWT_ITEM *tmp1;\t\t\t\t/* Temporary buffers */\n+\tWT_ITEM *tmp2;\n+} WT_REBALANCE_STUFF;\n+\n+/*\n+ * __rebalance_discard --\n+ *\tFree the allocated information.\n+ */\n+static void\n+__rebalance_discard(WT_SESSION_IMPL *session, WT_REBALANCE_STUFF *rs)\n+{\n+\twhile (rs->leaf_next > 0) {\n+\t\t--rs->leaf_next;\n+\t\t__wt_free_ref(\n+\t\t    session, rs->leaf[rs->leaf_next], rs->type, false);\n+\t}\n+\t__wt_free(session, rs->leaf);\n+\n+\twhile (rs->fl_next > 0) {\n+\t\t--rs->fl_next;\n+\t\t__wt_free(session, rs->fl[rs->fl_next].addr);\n+\t}\n+\t__wt_free(session, rs->fl);\n+}\n+\n+/*\n+ * __rebalance_leaf_append --\n+ *\tAdd a new entry to the list of leaf pages.\n+ */\n+static int\n+__rebalance_leaf_append(WT_SESSION_IMPL *session,\n+    const uint8_t *key, size_t key_len, uint64_t recno,\n+    const uint8_t *addr, size_t addr_len, u_int addr_type,\n+    WT_REBALANCE_STUFF *rs)\n+{\n+\tWT_ADDR *copy_addr;\n+\tWT_REF *copy;\n+\n+\tWT_RET(__wt_verbose(session, WT_VERB_REBALANCE,\n+\t    \"rebalance leaf-list append %s, %s\",\n+\t    __wt_buf_set_printable(session, key, key_len, rs->tmp2),\n+\t    __wt_addr_string(session, addr, addr_len, rs->tmp1)));\n+\n+\t/* Allocate and initialize a new leaf page reference. */\n+\tWT_RET(__wt_realloc_def(\n+\t    session, &rs->leaf_allocated, rs->leaf_next + 1, &rs->leaf));\n+\tWT_RET(__wt_calloc_one(session, &copy));\n+\trs->leaf[rs->leaf_next++] = copy;\n+\n+\tcopy->page = NULL;\n+\tcopy->home = NULL;\n+\tcopy->pindex_hint = 0;\n+\tcopy->state = WT_REF_DISK;\n+\n+\tWT_RET(__wt_calloc_one(session, &copy_addr));\n+\tcopy->addr = copy_addr;\n+\tWT_RET(__wt_strndup(session, addr, addr_len, &copy_addr->addr));\n+\tcopy_addr->size = (uint8_t)addr_len;\n+\tcopy_addr->type = (uint8_t)addr_type;\n+\n+\tif (recno == WT_RECNO_OOB)\n+\t\tWT_RET(__wt_row_ikey(session, 0, key, key_len, copy));\n+\telse\n+\t\tcopy->key.recno = recno;\n+\n+\tcopy->page_del = NULL;\n+\treturn (0);\n+}\n+\n+/*\n+ * __rebalance_fl_append --\n+ *\tAdd a new entry to the free list.\n+ */\n+static int\n+__rebalance_fl_append(WT_SESSION_IMPL *session,\n+    const uint8_t *addr, size_t addr_len, WT_REBALANCE_STUFF *rs)\n+{\n+\tWT_ADDR *copy;\n+\n+\tWT_RET(__wt_realloc_def(\n+\t    session, &rs->fl_allocated, rs->fl_next + 1, &rs->fl));\n+\tcopy = &rs->fl[rs->fl_next++];\n+\n+\tWT_RET(__wt_strndup(session, addr, addr_len, &copy->addr));\n+\tcopy->size = (uint8_t)addr_len;\n+\tcopy->type = 0;\n+\n+\treturn (0);\n+}\n+\n+/*\n+ * __rebalance_internal --\n+ *\tBuild an in-memory page that references all of the leaf pages we've\n+ * found.\n+ */\n+static int\n+__rebalance_internal(WT_SESSION_IMPL *session, WT_REBALANCE_STUFF *rs)\n+{\n+\tWT_BTREE *btree;\n+\tWT_DECL_RET;\n+\tWT_PAGE *page;\n+\tWT_PAGE_INDEX *pindex;\n+\tWT_REF **refp;\n+\tuint32_t i, leaf_next;\n+\n+\tbtree = S2BT(session);\n+\n+\t/*\n+\t * There's a limit to the number of pages we can rebalance: the number\n+\t * of elements on a page is a 4B quantity and it's technically possible\n+\t * there could be more pages than that in a tree.\n+\t */","path":"src/btree/bt_rebalance.c","position":141,"original_position":141,"commit_id":"6b6da4be5993126ed59770dfb028b2820019f4fa","original_commit_id":"6b6da4be5993126ed59770dfb028b2820019f4fa","user":{"login":"keithbostic","id":1393186,"avatar_url":"https://avatars.githubusercontent.com/u/1393186?v=3","gravatar_id":"","url":"https://api.github.com/users/keithbostic","html_url":"https://github.com/keithbostic","followers_url":"https://api.github.com/users/keithbostic/followers","following_url":"https://api.github.com/users/keithbostic/following{/other_user}","gists_url":"https://api.github.com/users/keithbostic/gists{/gist_id}","starred_url":"https://api.github.com/users/keithbostic/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/keithbostic/subscriptions","organizations_url":"https://api.github.com/users/keithbostic/orgs","repos_url":"https://api.github.com/users/keithbostic/repos","events_url":"https://api.github.com/users/keithbostic/events{/privacy}","received_events_url":"https://api.github.com/users/keithbostic/received_events","type":"User","site_admin":false},"body":"@agorrod \r\n> will this rebalance operation create a single level btree? i.e: It only ever creates a single internal page.\r\n\r\nRebalance creates a single in-memory internal page, but reconciliation splits that page until it's under the maximum internal page size on disk, reconciliation creates multiple Btree levels as needed. (It's the `rec_root_write` code inside reconciliation.)\r\n\r\nThe problem with that, of course, is rebalance (along with bulk-load and salvage), requires the entire tree's internal key/value information fit in memory -- we're probably going to need to fix that at some point.","created_at":"2016-01-19T14:37:02Z","updated_at":"2016-01-19T14:37:02Z","html_url":"https://github.com/wiredtiger/wiredtiger/pull/2399#discussion_r50118475","pull_request_url":"https://api.github.com/repos/wiredtiger/wiredtiger/pulls/2399","_links":{"self":{"href":"https://api.github.com/repos/wiredtiger/wiredtiger/pulls/comments/50118475"},"html":{"href":"https://github.com/wiredtiger/wiredtiger/pull/2399#discussion_r50118475"},"pull_request":{"href":"https://api.github.com/repos/wiredtiger/wiredtiger/pulls/2399"}}},"pull_request":{"url":"https://api.github.com/repos/wiredtiger/wiredtiger/pulls/2399","id":54008314,"html_url":"https://github.com/wiredtiger/wiredtiger/pull/2399","diff_url":"https://github.com/wiredtiger/wiredtiger/pull/2399.diff","patch_url":"https://github.com/wiredtiger/wiredtiger/pull/2399.patch","issue_url":"https://api.github.com/repos/wiredtiger/wiredtiger/issues/2399","number":2399,"state":"open","locked":false,"title":"WT-2287: WT_SESSION.rebalance support.","user":{"login":"keithbostic","id":1393186,"avatar_url":"https://avatars.githubusercontent.com/u/1393186?v=3","gravatar_id":"","url":"https://api.github.com/users/keithbostic","html_url":"https://github.com/keithbostic","followers_url":"https://api.github.com/users/keithbostic/followers","following_url":"https://api.github.com/users/keithbostic/following{/other_user}","gists_url":"https://api.github.com/users/keithbostic/gists{/gist_id}","starred_url":"https://api.github.com/users/keithbostic/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/keithbostic/subscriptions","organizations_url":"https://api.github.com/users/keithbostic/orgs","repos_url":"https://api.github.com/users/keithbostic/repos","events_url":"https://api.github.com/users/keithbostic/events{/privacy}","received_events_url":"https://api.github.com/users/keithbostic/received_events","type":"User","site_admin":false},"body":"@agorrod, @michaelcahill: initial WT_SESSION.rebalance support.\r\n\r\nOne big question (well, aside from whether we want this change at all), is the rebalance method lies between normal processing (which opens an underlying checkpoint/file) and salvage and verify (that don't open an underlying checkpoint/file at all), by opening the checkpoint/file but only loading the root page. It does this because it was easier to use the standard checkpoint/cache-flush mechanisms to create a checkpoint in the underlying file, but I think it's potentially fragile. A better idea or comments would be welcome.","created_at":"2015-12-17T17:45:51Z","updated_at":"2016-01-19T14:37:02Z","closed_at":null,"merged_at":null,"merge_commit_sha":"8b76b34f548a70a4a49bf4c3c15a5152013e5ed2","assignee":{"login":"keithbostic","id":1393186,"avatar_url":"https://avatars.githubusercontent.com/u/1393186?v=3","gravatar_id":"","url":"https://api.github.com/users/keithbostic","html_url":"https://github.com/keithbostic","followers_url":"https://api.github.com/users/keithbostic/followers","following_url":"https://api.github.com/users/keithbostic/following{/other_user}","gists_url":"https://api.github.com/users/keithbostic/gists{/gist_id}","starred_url":"https://api.github.com/users/keithbostic/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/keithbostic/subscriptions","organizations_url":"https://api.github.com/users/keithbostic/orgs","repos_url":"https://api.github.com/users/keithbostic/repos","events_url":"https://api.github.com/users/keithbostic/events{/privacy}","received_events_url":"https://api.github.com/users/keithbostic/received_events","type":"User","site_admin":false},"milestone":null,"commits_url":"https://api.github.com/repos/wiredtiger/wiredtiger/pulls/2399/commits","review_comments_url":"https://api.github.com/repos/wiredtiger/wiredtiger/pulls/2399/comments","review_comment_url":"https://api.github.com/repos/wiredtiger/wiredtiger/pulls/comments{/number}","comments_url":"https://api.github.com/repos/wiredtiger/wiredtiger/issues/2399/comments","statuses_url":"https://api.github.com/repos/wiredtiger/wiredtiger/statuses/6b6da4be5993126ed59770dfb028b2820019f4fa","head":{"label":"wiredtiger:wt-2287-rebalance","ref":"wt-2287-rebalance","sha":"6b6da4be5993126ed59770dfb028b2820019f4fa","user":{"login":"wiredtiger","id":1251095,"avatar_url":"https://avatars.githubusercontent.com/u/1251095?v=3","gravatar_id":"","url":"https://api.github.com/users/wiredtiger","html_url":"https://github.com/wiredtiger","followers_url":"https://api.github.com/users/wiredtiger/followers","following_url":"https://api.github.com/users/wiredtiger/following{/other_user}","gists_url":"https://api.github.com/users/wiredtiger/gists{/gist_id}","starred_url":"https://api.github.com/users/wiredtiger/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wiredtiger/subscriptions","organizations_url":"https://api.github.com/users/wiredtiger/orgs","repos_url":"https://api.github.com/users/wiredtiger/repos","events_url":"https://api.github.com/users/wiredtiger/events{/privacy}","received_events_url":"https://api.github.com/users/wiredtiger/received_events","type":"Organization","site_admin":false},"repo":{"id":2944302,"name":"wiredtiger","full_name":"wiredtiger/wiredtiger","owner":{"login":"wiredtiger","id":1251095,"avatar_url":"https://avatars.githubusercontent.com/u/1251095?v=3","gravatar_id":"","url":"https://api.github.com/users/wiredtiger","html_url":"https://github.com/wiredtiger","followers_url":"https://api.github.com/users/wiredtiger/followers","following_url":"https://api.github.com/users/wiredtiger/following{/other_user}","gists_url":"https://api.github.com/users/wiredtiger/gists{/gist_id}","starred_url":"https://api.github.com/users/wiredtiger/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wiredtiger/subscriptions","organizations_url":"https://api.github.com/users/wiredtiger/orgs","repos_url":"https://api.github.com/users/wiredtiger/repos","events_url":"https://api.github.com/users/wiredtiger/events{/privacy}","received_events_url":"https://api.github.com/users/wiredtiger/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/wiredtiger/wiredtiger","description":"WiredTiger's source tree","fork":false,"url":"https://api.github.com/repos/wiredtiger/wiredtiger","forks_url":"https://api.github.com/repos/wiredtiger/wiredtiger/forks","keys_url":"https://api.github.com/repos/wiredtiger/wiredtiger/keys{/key_id}","collaborators_url":"https://api.github.com/repos/wiredtiger/wiredtiger/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/wiredtiger/wiredtiger/teams","hooks_url":"https://api.github.com/repos/wiredtiger/wiredtiger/hooks","issue_events_url":"https://api.github.com/repos/wiredtiger/wiredtiger/issues/events{/number}","events_url":"https://api.github.com/repos/wiredtiger/wiredtiger/events","assignees_url":"https://api.github.com/repos/wiredtiger/wiredtiger/assignees{/user}","branches_url":"https://api.github.com/repos/wiredtiger/wiredtiger/branches{/branch}","tags_url":"https://api.github.com/repos/wiredtiger/wiredtiger/tags","blobs_url":"https://api.github.com/repos/wiredtiger/wiredtiger/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/wiredtiger/wiredtiger/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/wiredtiger/wiredtiger/git/refs{/sha}","trees_url":"https://api.github.com/repos/wiredtiger/wiredtiger/git/trees{/sha}","statuses_url":"https://api.github.com/repos/wiredtiger/wiredtiger/statuses/{sha}","languages_url":"https://api.github.com/repos/wiredtiger/wiredtiger/languages","stargazers_url":"https://api.github.com/repos/wiredtiger/wiredtiger/stargazers","contributors_url":"https://api.github.com/repos/wiredtiger/wiredtiger/contributors","subscribers_url":"https://api.github.com/repos/wiredtiger/wiredtiger/subscribers","subscription_url":"https://api.github.com/repos/wiredtiger/wiredtiger/subscription","commits_url":"https://api.github.com/repos/wiredtiger/wiredtiger/commits{/sha}","git_commits_url":"https://api.github.com/repos/wiredtiger/wiredtiger/git/commits{/sha}","comments_url":"https://api.github.com/repos/wiredtiger/wiredtiger/comments{/number}","issue_comment_url":"https://api.github.com/repos/wiredtiger/wiredtiger/issues/comments{/number}","contents_url":"https://api.github.com/repos/wiredtiger/wiredtiger/contents/{+path}","compare_url":"https://api.github.com/repos/wiredtiger/wiredtiger/compare/{base}...{head}","merges_url":"https://api.github.com/repos/wiredtiger/wiredtiger/merges","archive_url":"https://api.github.com/repos/wiredtiger/wiredtiger/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/wiredtiger/wiredtiger/downloads","issues_url":"https://api.github.com/repos/wiredtiger/wiredtiger/issues{/number}","pulls_url":"https://api.github.com/repos/wiredtiger/wiredtiger/pulls{/number}","milestones_url":"https://api.github.com/repos/wiredtiger/wiredtiger/milestones{/number}","notifications_url":"https://api.github.com/repos/wiredtiger/wiredtiger/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/wiredtiger/wiredtiger/labels{/name}","releases_url":"https://api.github.com/repos/wiredtiger/wiredtiger/releases{/id}","created_at":"2011-12-09T00:43:19Z","updated_at":"2016-01-19T08:45:03Z","pushed_at":"2016-01-19T14:07:04Z","git_url":"git://github.com/wiredtiger/wiredtiger.git","ssh_url":"git@github.com:wiredtiger/wiredtiger.git","clone_url":"https://github.com/wiredtiger/wiredtiger.git","svn_url":"https://github.com/wiredtiger/wiredtiger","homepage":"http://source.wiredtiger.com/","size":81316,"stargazers_count":659,"watchers_count":659,"language":"C","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":116,"mirror_url":null,"open_issues_count":9,"forks":116,"open_issues":9,"watchers":659,"default_branch":"master"}},"base":{"label":"wiredtiger:develop","ref":"develop","sha":"5bc2a7ab2a8cde3bddc9f4b6e0087057c965667f","user":{"login":"wiredtiger","id":1251095,"avatar_url":"https://avatars.githubusercontent.com/u/1251095?v=3","gravatar_id":"","url":"https://api.github.com/users/wiredtiger","html_url":"https://github.com/wiredtiger","followers_url":"https://api.github.com/users/wiredtiger/followers","following_url":"https://api.github.com/users/wiredtiger/following{/other_user}","gists_url":"https://api.github.com/users/wiredtiger/gists{/gist_id}","starred_url":"https://api.github.com/users/wiredtiger/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wiredtiger/subscriptions","organizations_url":"https://api.github.com/users/wiredtiger/orgs","repos_url":"https://api.github.com/users/wiredtiger/repos","events_url":"https://api.github.com/users/wiredtiger/events{/privacy}","received_events_url":"https://api.github.com/users/wiredtiger/received_events","type":"Organization","site_admin":false},"repo":{"id":2944302,"name":"wiredtiger","full_name":"wiredtiger/wiredtiger","owner":{"login":"wiredtiger","id":1251095,"avatar_url":"https://avatars.githubusercontent.com/u/1251095?v=3","gravatar_id":"","url":"https://api.github.com/users/wiredtiger","html_url":"https://github.com/wiredtiger","followers_url":"https://api.github.com/users/wiredtiger/followers","following_url":"https://api.github.com/users/wiredtiger/following{/other_user}","gists_url":"https://api.github.com/users/wiredtiger/gists{/gist_id}","starred_url":"https://api.github.com/users/wiredtiger/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wiredtiger/subscriptions","organizations_url":"https://api.github.com/users/wiredtiger/orgs","repos_url":"https://api.github.com/users/wiredtiger/repos","events_url":"https://api.github.com/users/wiredtiger/events{/privacy}","received_events_url":"https://api.github.com/users/wiredtiger/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/wiredtiger/wiredtiger","description":"WiredTiger's source tree","fork":false,"url":"https://api.github.com/repos/wiredtiger/wiredtiger","forks_url":"https://api.github.com/repos/wiredtiger/wiredtiger/forks","keys_url":"https://api.github.com/repos/wiredtiger/wiredtiger/keys{/key_id}","collaborators_url":"https://api.github.com/repos/wiredtiger/wiredtiger/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/wiredtiger/wiredtiger/teams","hooks_url":"https://api.github.com/repos/wiredtiger/wiredtiger/hooks","issue_events_url":"https://api.github.com/repos/wiredtiger/wiredtiger/issues/events{/number}","events_url":"https://api.github.com/repos/wiredtiger/wiredtiger/events","assignees_url":"https://api.github.com/repos/wiredtiger/wiredtiger/assignees{/user}","branches_url":"https://api.github.com/repos/wiredtiger/wiredtiger/branches{/branch}","tags_url":"https://api.github.com/repos/wiredtiger/wiredtiger/tags","blobs_url":"https://api.github.com/repos/wiredtiger/wiredtiger/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/wiredtiger/wiredtiger/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/wiredtiger/wiredtiger/git/refs{/sha}","trees_url":"https://api.github.com/repos/wiredtiger/wiredtiger/git/trees{/sha}","statuses_url":"https://api.github.com/repos/wiredtiger/wiredtiger/statuses/{sha}","languages_url":"https://api.github.com/repos/wiredtiger/wiredtiger/languages","stargazers_url":"https://api.github.com/repos/wiredtiger/wiredtiger/stargazers","contributors_url":"https://api.github.com/repos/wiredtiger/wiredtiger/contributors","subscribers_url":"https://api.github.com/repos/wiredtiger/wiredtiger/subscribers","subscription_url":"https://api.github.com/repos/wiredtiger/wiredtiger/subscription","commits_url":"https://api.github.com/repos/wiredtiger/wiredtiger/commits{/sha}","git_commits_url":"https://api.github.com/repos/wiredtiger/wiredtiger/git/commits{/sha}","comments_url":"https://api.github.com/repos/wiredtiger/wiredtiger/comments{/number}","issue_comment_url":"https://api.github.com/repos/wiredtiger/wiredtiger/issues/comments{/number}","contents_url":"https://api.github.com/repos/wiredtiger/wiredtiger/contents/{+path}","compare_url":"https://api.github.com/repos/wiredtiger/wiredtiger/compare/{base}...{head}","merges_url":"https://api.github.com/repos/wiredtiger/wiredtiger/merges","archive_url":"https://api.github.com/repos/wiredtiger/wiredtiger/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/wiredtiger/wiredtiger/downloads","issues_url":"https://api.github.com/repos/wiredtiger/wiredtiger/issues{/number}","pulls_url":"https://api.github.com/repos/wiredtiger/wiredtiger/pulls{/number}","milestones_url":"https://api.github.com/repos/wiredtiger/wiredtiger/milestones{/number}","notifications_url":"https://api.github.com/repos/wiredtiger/wiredtiger/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/wiredtiger/wiredtiger/labels{/name}","releases_url":"https://api.github.com/repos/wiredtiger/wiredtiger/releases{/id}","created_at":"2011-12-09T00:43:19Z","updated_at":"2016-01-19T08:45:03Z","pushed_at":"2016-01-19T14:07:04Z","git_url":"git://github.com/wiredtiger/wiredtiger.git","ssh_url":"git@github.com:wiredtiger/wiredtiger.git","clone_url":"https://github.com/wiredtiger/wiredtiger.git","svn_url":"https://github.com/wiredtiger/wiredtiger","homepage":"http://source.wiredtiger.com/","size":81316,"stargazers_count":659,"watchers_count":659,"language":"C","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":116,"mirror_url":null,"open_issues_count":9,"forks":116,"open_issues":9,"watchers":659,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/wiredtiger/wiredtiger/pulls/2399"},"html":{"href":"https://github.com/wiredtiger/wiredtiger/pull/2399"},"issue":{"href":"https://api.github.com/repos/wiredtiger/wiredtiger/issues/2399"},"comments":{"href":"https://api.github.com/repos/wiredtiger/wiredtiger/issues/2399/comments"},"review_comments":{"href":"https://api.github.com/repos/wiredtiger/wiredtiger/pulls/2399/comments"},"review_comment":{"href":"https://api.github.com/repos/wiredtiger/wiredtiger/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/wiredtiger/wiredtiger/pulls/2399/commits"},"statuses":{"href":"https://api.github.com/repos/wiredtiger/wiredtiger/statuses/6b6da4be5993126ed59770dfb028b2820019f4fa"}}}}