{"action":"created","comment":{"url":"https://api.github.com/repos/apache/trafficserver/pulls/comments/201083413","pull_request_review_id":135510596,"id":201083413,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIwMTA4MzQxMw==","diff_hunk":"@@ -14,223 +14,134 @@\n    KIND, either express or implied.  See the License for the\n    specific language governing permissions and limitations\n    under the License.\n-   \n-.. include:: ../../common.defs\n \n+.. include:: ../../common.defs\n .. highlight:: cpp\n .. default-domain:: cpp\n-.. |MemArena| replace:: :class:`MemArena`\n \n .. _MemArena:\n \n MemArena\n *************\n \n-|MemArena| provides a memory arena or pool for allocating memory. The intended use is for allocating many small chunks of memory - few, large allocations are best handled independently. The purpose is to amortize the cost of allocation of each chunk across larger allocations in a heap style. In addition the allocated memory is presumed to have similar lifetimes so that all of the memory in the arena can be de-allocatred en masse. This is a memory allocation style used by many cotainers - elements are small and allocated frequently, but all elements are discarded when the container itself is destroyed.\n+:class:`MemArena` provides a memory arena or pool for allocating memory. Internally\n+:class:`MemArena` allocates memory in large blocks and allocates pieces of those blocks when memory\n+is requested. Upon destruction all of the memory blocks are de-allocated. This is useful when the\n+goal is any (or all) of trying to\n+\n+*  amortize allocation costs for many small allocations.\n+*  create better memory locality for containers.\n+*  de-allocate memory in bulk.\n \n Description\n +++++++++++\n \n-|MemArena| manages an internal list of memory blocks, out of which it provides allocated\n-blocks of memory. When an instance is destructed all the internal blocks are also freed. The\n-expected use of this class is as an embedded memory manager for a container class.\n-\n-To support coalescence and compaction of memory, the methods :func:`MemArena::freeze` and\n-:func:`MemArena::thaw` are provided. These create in effect generations of memory allocation.\n-Calling :func:`MemArena::freeze` marks a generation. After this call any further allocations will\n-be in new internal memory blocks. The corresponding call to :func:`MemArena::thaw` cause older\n-generations of internal memory to be freed. The general logic for the container would be to freeze,\n-re-allocate and copy the container elements, then thaw. This would result in compacted memory\n-allocation in a single internal block. The uses cases would be either a process static data\n-structure after initialization (coalescing for locality performence) or a container that naturally\n-re-allocates (such as a hash table during a bucket expansion). A container could also provide its\n-own API for its clients to cause a coalesence.\n-\n-Other than freeze / thaw, this class does not offer any mechanism to release memory beyond its destruction. This is not an issue for either process globals or transient arenas.\n-\n-Internals\n-+++++++++\n-\n-|MemArena| opperates in *generations* of internal blocks of memory. Each generation marks a series internal block of memory. Allocations always occur from the most recent block within a generation, as it is always the largest and has the most unallocated space. The most recent block (current) is also the head of the linked list of memory blocks. Allocations are given in the form of a :class:`MemSpan`. Once an internal block of memory has exhausted it's avaliable space, a new, larger, internal block will be added to the generation. Say this is the current arena state:\n-\n-.. uml::\n-   :align: center\n-\n-   component [block] as b1\n-   component [block] as b2\n-   component [block] as b3\n-   component [block] as b4\n-   component [block] as b5\n-   component [block] as b6\n-\n-   b1 -> b2 \n-   b2 -> b3\n-   b3 -> b4\n-   b4 -> b5\n-   b5 -> b6\n-\n-   generation -u- b3\n-   current -u- b1\n-\n-A call to :func:`MemArena::thaw` will deallocate any generation that is not the current generation. Thus, currently it is impossible to deallocate ie. just the third generation. Everything after the generation pointer is in previous generations and everything before, and including, the generation pointer is in the current generation. Since blocks are reference counted, thawing is just a single assignment to drop everything after the generation pointer. After a :func:`MemArena::thaw`:\n-\n-.. uml::\n-   :align: center\n-\n-   component [block] as b3\n-   component [block] as b4\n-   component [block] as b5\n-   component [block] as b6\n-\n-\n-   b3 -> b4\n-   b4 -> b5\n-   b5 -> b6\n-\n-   current -u- b3\n-   generation -u- b6\n-\n-A generation can only be updated with an explicit call to :func:`MemArena::freeze`. The next generation is not actually allocated until a call to :func:`MemArena::alloc` happens. On the :func:`MemArena::alloc` following a :func:`MemArena::freeze` the next internal block of memory is the larger of the sum of all current allocations or the number of bytes requested. The reason for this is that the caller could :func:`MemArena::alloc` a size larger than all current allocations at which point if we were to resize earlier, an internal block would be wasted. After a :func:`MemArena::freeze`:\n-\n-.. uml::\n-   :align: center\n-\n-   component [block] as b3\n-   component [block] as b4\n-   component [block] as b5\n-   component [block] as b6\n-\n-\n-   b3 -> b4\n-   b4 -> b5\n-   b5 -> b6\n-\n-   current -u- b3\n-\n-After the next :func:`MemArena::alloc`:\n-\n-.. uml::\n-   :align: center\n-\n-   component [block\\nnew generation] as b3\n-   component [block] as b4\n-   component [block] as b5\n-   component [block] as b6\n-   component [block] as b7\n-\n-\n-   b3 -> b4\n-   b4 -> b5\n-   b5 -> b6\n-   b6 -> b7\n-\n-   generation -u- b3\n-   current -u- b3\n-\n-A caller can actually :func:`MemArena::alloc` **any** number of bytes. Internally, if the arena is unable to allocate enough memory for the allocation, it will create a new internal block of memory large enough and allocate from that. So if the arena is allocated like:\n-\n-.. code-block:: cpp\n-   \n-   ts::MemArena *arena = new ts::MemArena(64);\n-\n-The caller can actually allocate more than 64 bytes. \n-\n-.. code-block:: cpp\n-\n-   ts::MemSpan span1 = arena->alloc(16);\n-   ts::MemSpan span1 = arena->alloc(256);\n-\n-Now, span1 and span2 are in the same generation and can both be safely used. After:\n-\n-.. code-block:: cpp\n-\n-   arena->freeze();\n-   ts::MemSpan span3 = arena->alloc(512);\n-   arena->thaw();\n-\n-span3 can still be used but span1 and span2 have been deallocated and usage is undefined. \n-\n-Internal blocks are adjusted for optimization. Each :class:`MemArena::Block` is just a header for the underlying memory it manages. The header and memory are allocated together for locality such that each :class:`MemArena::Block` is immediately followed with the memory it manages. If a :class:`MemArena::Block` is larger than a page (defaulted at 4KB), it is aligned to a power of two. The actual memory that a :class:`MemArena::Block` can allocate out is slightly smaller. This is because a portion of the allocated memory is reserved for the header. Another 16 bytes is reserved to track the allocation headers used by malloc; for page alignment. ie, the default block size is 32768 bytes, but it will only be able to allocate out 32720 bytes. \n+When a :class:`MemArena` instance is constructed it can be constructed with either no allocated\n+memory or an initial memory block of a specific size. :func:`MemArena::reserve` can be used to\n+specify the size of the next internally allocated block if a specific allocation size is needed.\n+This allows allocation to be delayed until memory is actually needed (via a call to\n+:func:`MemArena::alloc`).\n+\n+In normal use memory is allocated from :class:`MemArena` using :func:`MemArena::alloc` to get chunks\n+of memory or classes via :func:`MemArena::make` which is effectively :code:`new`.\n+:func:`MemArena::make` takes an arbitrary set of arguments which it attempts to pass to a\n+constructor for the type :code:`T` after allocating memory for the object. if there isn't enough\n+memory a new internal block is allocated, each block being larger than the previous one. The size\n+can be controlled using the :func:`MemArena::reserve`. In general it is not as useful to use\n+:class:`MemArena` for classes that allocate their own internal memeory (such as :code:`std::string`","path":"doc/developer-guide/internal-libraries/MemArena.en.rst","position":162,"original_position":162,"commit_id":"680b3f896dcef9e3c014b32c6a38f2575b19699b","original_commit_id":"680b3f896dcef9e3c014b32c6a38f2575b19699b","user":{"login":"d2r","id":905298,"node_id":"MDQ6VXNlcjkwNTI5OA==","avatar_url":"https://avatars1.githubusercontent.com/u/905298?v=4","gravatar_id":"","url":"https://api.github.com/users/d2r","html_url":"https://github.com/d2r","followers_url":"https://api.github.com/users/d2r/followers","following_url":"https://api.github.com/users/d2r/following{/other_user}","gists_url":"https://api.github.com/users/d2r/gists{/gist_id}","starred_url":"https://api.github.com/users/d2r/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/d2r/subscriptions","organizations_url":"https://api.github.com/users/d2r/orgs","repos_url":"https://api.github.com/users/d2r/repos","events_url":"https://api.github.com/users/d2r/events{/privacy}","received_events_url":"https://api.github.com/users/d2r/received_events","type":"User","site_admin":false},"body":"`memory`","created_at":"2018-07-09T17:24:12Z","updated_at":"2018-07-09T17:46:18Z","html_url":"https://github.com/apache/trafficserver/pull/3901#discussion_r201083413","pull_request_url":"https://api.github.com/repos/apache/trafficserver/pulls/3901","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/apache/trafficserver/pulls/comments/201083413"},"html":{"href":"https://github.com/apache/trafficserver/pull/3901#discussion_r201083413"},"pull_request":{"href":"https://api.github.com/repos/apache/trafficserver/pulls/3901"}}},"pull_request":{"url":"https://api.github.com/repos/apache/trafficserver/pulls/3901","id":198197747,"node_id":"MDExOlB1bGxSZXF1ZXN0MTk4MTk3NzQ3","html_url":"https://github.com/apache/trafficserver/pull/3901","diff_url":"https://github.com/apache/trafficserver/pull/3901.diff","patch_url":"https://github.com/apache/trafficserver/pull/3901.patch","issue_url":"https://api.github.com/repos/apache/trafficserver/issues/3901","number":3901,"state":"open","locked":false,"title":"MemArena: Add make method to construct objects in the arena.","user":{"login":"SolidWallOfCode","id":1545753,"node_id":"MDQ6VXNlcjE1NDU3NTM=","avatar_url":"https://avatars2.githubusercontent.com/u/1545753?v=4","gravatar_id":"","url":"https://api.github.com/users/SolidWallOfCode","html_url":"https://github.com/SolidWallOfCode","followers_url":"https://api.github.com/users/SolidWallOfCode/followers","following_url":"https://api.github.com/users/SolidWallOfCode/following{/other_user}","gists_url":"https://api.github.com/users/SolidWallOfCode/gists{/gist_id}","starred_url":"https://api.github.com/users/SolidWallOfCode/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SolidWallOfCode/subscriptions","organizations_url":"https://api.github.com/users/SolidWallOfCode/orgs","repos_url":"https://api.github.com/users/SolidWallOfCode/repos","events_url":"https://api.github.com/users/SolidWallOfCode/events{/privacy}","received_events_url":"https://api.github.com/users/SolidWallOfCode/received_events","type":"User","site_admin":false},"body":"Update documentation.","created_at":"2018-06-29T02:10:11Z","updated_at":"2018-07-09T17:46:18Z","closed_at":null,"merged_at":null,"merge_commit_sha":"e29ecb4c2acf73e5a3fb3b6cee5a935fb388ead1","assignee":{"login":"SolidWallOfCode","id":1545753,"node_id":"MDQ6VXNlcjE1NDU3NTM=","avatar_url":"https://avatars2.githubusercontent.com/u/1545753?v=4","gravatar_id":"","url":"https://api.github.com/users/SolidWallOfCode","html_url":"https://github.com/SolidWallOfCode","followers_url":"https://api.github.com/users/SolidWallOfCode/followers","following_url":"https://api.github.com/users/SolidWallOfCode/following{/other_user}","gists_url":"https://api.github.com/users/SolidWallOfCode/gists{/gist_id}","starred_url":"https://api.github.com/users/SolidWallOfCode/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SolidWallOfCode/subscriptions","organizations_url":"https://api.github.com/users/SolidWallOfCode/orgs","repos_url":"https://api.github.com/users/SolidWallOfCode/repos","events_url":"https://api.github.com/users/SolidWallOfCode/events{/privacy}","received_events_url":"https://api.github.com/users/SolidWallOfCode/received_events","type":"User","site_admin":false},"assignees":[{"login":"SolidWallOfCode","id":1545753,"node_id":"MDQ6VXNlcjE1NDU3NTM=","avatar_url":"https://avatars2.githubusercontent.com/u/1545753?v=4","gravatar_id":"","url":"https://api.github.com/users/SolidWallOfCode","html_url":"https://github.com/SolidWallOfCode","followers_url":"https://api.github.com/users/SolidWallOfCode/followers","following_url":"https://api.github.com/users/SolidWallOfCode/following{/other_user}","gists_url":"https://api.github.com/users/SolidWallOfCode/gists{/gist_id}","starred_url":"https://api.github.com/users/SolidWallOfCode/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SolidWallOfCode/subscriptions","organizations_url":"https://api.github.com/users/SolidWallOfCode/orgs","repos_url":"https://api.github.com/users/SolidWallOfCode/repos","events_url":"https://api.github.com/users/SolidWallOfCode/events{/privacy}","received_events_url":"https://api.github.com/users/SolidWallOfCode/received_events","type":"User","site_admin":false}],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":374860755,"node_id":"MDU6TGFiZWwzNzQ4NjA3NTU=","url":"https://api.github.com/repos/apache/trafficserver/labels/Core","name":"Core","color":"006b75","default":false}],"milestone":{"url":"https://api.github.com/repos/apache/trafficserver/milestones/19","html_url":"https://github.com/apache/trafficserver/milestone/19","labels_url":"https://api.github.com/repos/apache/trafficserver/milestones/19/labels","id":3358032,"node_id":"MDk6TWlsZXN0b25lMzM1ODAzMg==","number":19,"title":"9.0.0","description":"","creator":{"login":"bryancall","id":216749,"node_id":"MDQ6VXNlcjIxNjc0OQ==","avatar_url":"https://avatars3.githubusercontent.com/u/216749?v=4","gravatar_id":"","url":"https://api.github.com/users/bryancall","html_url":"https://github.com/bryancall","followers_url":"https://api.github.com/users/bryancall/followers","following_url":"https://api.github.com/users/bryancall/following{/other_user}","gists_url":"https://api.github.com/users/bryancall/gists{/gist_id}","starred_url":"https://api.github.com/users/bryancall/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bryancall/subscriptions","organizations_url":"https://api.github.com/users/bryancall/orgs","repos_url":"https://api.github.com/users/bryancall/repos","events_url":"https://api.github.com/users/bryancall/events{/privacy}","received_events_url":"https://api.github.com/users/bryancall/received_events","type":"User","site_admin":false},"open_issues":34,"closed_issues":23,"state":"open","created_at":"2018-05-18T19:12:59Z","updated_at":"2018-07-09T17:26:17Z","due_on":"2019-06-30T07:00:00Z","closed_at":null},"commits_url":"https://api.github.com/repos/apache/trafficserver/pulls/3901/commits","review_comments_url":"https://api.github.com/repos/apache/trafficserver/pulls/3901/comments","review_comment_url":"https://api.github.com/repos/apache/trafficserver/pulls/comments{/number}","comments_url":"https://api.github.com/repos/apache/trafficserver/issues/3901/comments","statuses_url":"https://api.github.com/repos/apache/trafficserver/statuses/680b3f896dcef9e3c014b32c6a38f2575b19699b","head":{"label":"SolidWallOfCode:memarena-make","ref":"memarena-make","sha":"680b3f896dcef9e3c014b32c6a38f2575b19699b","user":{"login":"SolidWallOfCode","id":1545753,"node_id":"MDQ6VXNlcjE1NDU3NTM=","avatar_url":"https://avatars2.githubusercontent.com/u/1545753?v=4","gravatar_id":"","url":"https://api.github.com/users/SolidWallOfCode","html_url":"https://github.com/SolidWallOfCode","followers_url":"https://api.github.com/users/SolidWallOfCode/followers","following_url":"https://api.github.com/users/SolidWallOfCode/following{/other_user}","gists_url":"https://api.github.com/users/SolidWallOfCode/gists{/gist_id}","starred_url":"https://api.github.com/users/SolidWallOfCode/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SolidWallOfCode/subscriptions","organizations_url":"https://api.github.com/users/SolidWallOfCode/orgs","repos_url":"https://api.github.com/users/SolidWallOfCode/repos","events_url":"https://api.github.com/users/SolidWallOfCode/events{/privacy}","received_events_url":"https://api.github.com/users/SolidWallOfCode/received_events","type":"User","site_admin":false},"repo":{"id":3744058,"node_id":"MDEwOlJlcG9zaXRvcnkzNzQ0MDU4","name":"trafficserver","full_name":"SolidWallOfCode/trafficserver","owner":{"login":"SolidWallOfCode","id":1545753,"node_id":"MDQ6VXNlcjE1NDU3NTM=","avatar_url":"https://avatars2.githubusercontent.com/u/1545753?v=4","gravatar_id":"","url":"https://api.github.com/users/SolidWallOfCode","html_url":"https://github.com/SolidWallOfCode","followers_url":"https://api.github.com/users/SolidWallOfCode/followers","following_url":"https://api.github.com/users/SolidWallOfCode/following{/other_user}","gists_url":"https://api.github.com/users/SolidWallOfCode/gists{/gist_id}","starred_url":"https://api.github.com/users/SolidWallOfCode/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SolidWallOfCode/subscriptions","organizations_url":"https://api.github.com/users/SolidWallOfCode/orgs","repos_url":"https://api.github.com/users/SolidWallOfCode/repos","events_url":"https://api.github.com/users/SolidWallOfCode/events{/privacy}","received_events_url":"https://api.github.com/users/SolidWallOfCode/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/SolidWallOfCode/trafficserver","description":"Mirror of Apache Traffic Server","fork":true,"url":"https://api.github.com/repos/SolidWallOfCode/trafficserver","forks_url":"https://api.github.com/repos/SolidWallOfCode/trafficserver/forks","keys_url":"https://api.github.com/repos/SolidWallOfCode/trafficserver/keys{/key_id}","collaborators_url":"https://api.github.com/repos/SolidWallOfCode/trafficserver/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/SolidWallOfCode/trafficserver/teams","hooks_url":"https://api.github.com/repos/SolidWallOfCode/trafficserver/hooks","issue_events_url":"https://api.github.com/repos/SolidWallOfCode/trafficserver/issues/events{/number}","events_url":"https://api.github.com/repos/SolidWallOfCode/trafficserver/events","assignees_url":"https://api.github.com/repos/SolidWallOfCode/trafficserver/assignees{/user}","branches_url":"https://api.github.com/repos/SolidWallOfCode/trafficserver/branches{/branch}","tags_url":"https://api.github.com/repos/SolidWallOfCode/trafficserver/tags","blobs_url":"https://api.github.com/repos/SolidWallOfCode/trafficserver/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/SolidWallOfCode/trafficserver/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/SolidWallOfCode/trafficserver/git/refs{/sha}","trees_url":"https://api.github.com/repos/SolidWallOfCode/trafficserver/git/trees{/sha}","statuses_url":"https://api.github.com/repos/SolidWallOfCode/trafficserver/statuses/{sha}","languages_url":"https://api.github.com/repos/SolidWallOfCode/trafficserver/languages","stargazers_url":"https://api.github.com/repos/SolidWallOfCode/trafficserver/stargazers","contributors_url":"https://api.github.com/repos/SolidWallOfCode/trafficserver/contributors","subscribers_url":"https://api.github.com/repos/SolidWallOfCode/trafficserver/subscribers","subscription_url":"https://api.github.com/repos/SolidWallOfCode/trafficserver/subscription","commits_url":"https://api.github.com/repos/SolidWallOfCode/trafficserver/commits{/sha}","git_commits_url":"https://api.github.com/repos/SolidWallOfCode/trafficserver/git/commits{/sha}","comments_url":"https://api.github.com/repos/SolidWallOfCode/trafficserver/comments{/number}","issue_comment_url":"https://api.github.com/repos/SolidWallOfCode/trafficserver/issues/comments{/number}","contents_url":"https://api.github.com/repos/SolidWallOfCode/trafficserver/contents/{+path}","compare_url":"https://api.github.com/repos/SolidWallOfCode/trafficserver/compare/{base}...{head}","merges_url":"https://api.github.com/repos/SolidWallOfCode/trafficserver/merges","archive_url":"https://api.github.com/repos/SolidWallOfCode/trafficserver/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/SolidWallOfCode/trafficserver/downloads","issues_url":"https://api.github.com/repos/SolidWallOfCode/trafficserver/issues{/number}","pulls_url":"https://api.github.com/repos/SolidWallOfCode/trafficserver/pulls{/number}","milestones_url":"https://api.github.com/repos/SolidWallOfCode/trafficserver/milestones{/number}","notifications_url":"https://api.github.com/repos/SolidWallOfCode/trafficserver/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/SolidWallOfCode/trafficserver/labels{/name}","releases_url":"https://api.github.com/repos/SolidWallOfCode/trafficserver/releases{/id}","deployments_url":"https://api.github.com/repos/SolidWallOfCode/trafficserver/deployments","created_at":"2012-03-16T23:25:24Z","updated_at":"2018-07-07T20:08:00Z","pushed_at":"2018-07-09T17:38:08Z","git_url":"git://github.com/SolidWallOfCode/trafficserver.git","ssh_url":"git@github.com:SolidWallOfCode/trafficserver.git","clone_url":"https://github.com/SolidWallOfCode/trafficserver.git","svn_url":"https://github.com/SolidWallOfCode/trafficserver","homepage":null,"size":86022,"stargazers_count":4,"watchers_count":4,"language":"C++","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":1,"mirror_url":null,"archived":false,"open_issues_count":4,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0","node_id":"MDc6TGljZW5zZTI="},"forks":1,"open_issues":4,"watchers":4,"default_branch":"master"}},"base":{"label":"apache:master","ref":"master","sha":"f7e3cf7a92b7deb1bfafd6bf16a3c0a9dac3d37c","user":{"login":"apache","id":47359,"node_id":"MDEyOk9yZ2FuaXphdGlvbjQ3MzU5","avatar_url":"https://avatars0.githubusercontent.com/u/47359?v=4","gravatar_id":"","url":"https://api.github.com/users/apache","html_url":"https://github.com/apache","followers_url":"https://api.github.com/users/apache/followers","following_url":"https://api.github.com/users/apache/following{/other_user}","gists_url":"https://api.github.com/users/apache/gists{/gist_id}","starred_url":"https://api.github.com/users/apache/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/apache/subscriptions","organizations_url":"https://api.github.com/users/apache/orgs","repos_url":"https://api.github.com/users/apache/repos","events_url":"https://api.github.com/users/apache/events{/privacy}","received_events_url":"https://api.github.com/users/apache/received_events","type":"Organization","site_admin":false},"repo":{"id":356066,"node_id":"MDEwOlJlcG9zaXRvcnkzNTYwNjY=","name":"trafficserver","full_name":"apache/trafficserver","owner":{"login":"apache","id":47359,"node_id":"MDEyOk9yZ2FuaXphdGlvbjQ3MzU5","avatar_url":"https://avatars0.githubusercontent.com/u/47359?v=4","gravatar_id":"","url":"https://api.github.com/users/apache","html_url":"https://github.com/apache","followers_url":"https://api.github.com/users/apache/followers","following_url":"https://api.github.com/users/apache/following{/other_user}","gists_url":"https://api.github.com/users/apache/gists{/gist_id}","starred_url":"https://api.github.com/users/apache/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/apache/subscriptions","organizations_url":"https://api.github.com/users/apache/orgs","repos_url":"https://api.github.com/users/apache/repos","events_url":"https://api.github.com/users/apache/events{/privacy}","received_events_url":"https://api.github.com/users/apache/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/apache/trafficserver","description":"Mirror of Apache Traffic Server","fork":false,"url":"https://api.github.com/repos/apache/trafficserver","forks_url":"https://api.github.com/repos/apache/trafficserver/forks","keys_url":"https://api.github.com/repos/apache/trafficserver/keys{/key_id}","collaborators_url":"https://api.github.com/repos/apache/trafficserver/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/apache/trafficserver/teams","hooks_url":"https://api.github.com/repos/apache/trafficserver/hooks","issue_events_url":"https://api.github.com/repos/apache/trafficserver/issues/events{/number}","events_url":"https://api.github.com/repos/apache/trafficserver/events","assignees_url":"https://api.github.com/repos/apache/trafficserver/assignees{/user}","branches_url":"https://api.github.com/repos/apache/trafficserver/branches{/branch}","tags_url":"https://api.github.com/repos/apache/trafficserver/tags","blobs_url":"https://api.github.com/repos/apache/trafficserver/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/apache/trafficserver/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/apache/trafficserver/git/refs{/sha}","trees_url":"https://api.github.com/repos/apache/trafficserver/git/trees{/sha}","statuses_url":"https://api.github.com/repos/apache/trafficserver/statuses/{sha}","languages_url":"https://api.github.com/repos/apache/trafficserver/languages","stargazers_url":"https://api.github.com/repos/apache/trafficserver/stargazers","contributors_url":"https://api.github.com/repos/apache/trafficserver/contributors","subscribers_url":"https://api.github.com/repos/apache/trafficserver/subscribers","subscription_url":"https://api.github.com/repos/apache/trafficserver/subscription","commits_url":"https://api.github.com/repos/apache/trafficserver/commits{/sha}","git_commits_url":"https://api.github.com/repos/apache/trafficserver/git/commits{/sha}","comments_url":"https://api.github.com/repos/apache/trafficserver/comments{/number}","issue_comment_url":"https://api.github.com/repos/apache/trafficserver/issues/comments{/number}","contents_url":"https://api.github.com/repos/apache/trafficserver/contents/{+path}","compare_url":"https://api.github.com/repos/apache/trafficserver/compare/{base}...{head}","merges_url":"https://api.github.com/repos/apache/trafficserver/merges","archive_url":"https://api.github.com/repos/apache/trafficserver/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/apache/trafficserver/downloads","issues_url":"https://api.github.com/repos/apache/trafficserver/issues{/number}","pulls_url":"https://api.github.com/repos/apache/trafficserver/pulls{/number}","milestones_url":"https://api.github.com/repos/apache/trafficserver/milestones{/number}","notifications_url":"https://api.github.com/repos/apache/trafficserver/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/apache/trafficserver/labels{/name}","releases_url":"https://api.github.com/repos/apache/trafficserver/releases{/id}","deployments_url":"https://api.github.com/repos/apache/trafficserver/deployments","created_at":"2009-10-31T08:00:10Z","updated_at":"2018-07-09T17:26:25Z","pushed_at":"2018-07-09T17:38:11Z","git_url":"git://github.com/apache/trafficserver.git","ssh_url":"git@github.com:apache/trafficserver.git","clone_url":"https://github.com/apache/trafficserver.git","svn_url":"https://github.com/apache/trafficserver","homepage":null,"size":86821,"stargazers_count":751,"watchers_count":751,"language":"C++","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":525,"mirror_url":null,"archived":false,"open_issues_count":315,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0","node_id":"MDc6TGljZW5zZTI="},"forks":525,"open_issues":315,"watchers":751,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/apache/trafficserver/pulls/3901"},"html":{"href":"https://github.com/apache/trafficserver/pull/3901"},"issue":{"href":"https://api.github.com/repos/apache/trafficserver/issues/3901"},"comments":{"href":"https://api.github.com/repos/apache/trafficserver/issues/3901/comments"},"review_comments":{"href":"https://api.github.com/repos/apache/trafficserver/pulls/3901/comments"},"review_comment":{"href":"https://api.github.com/repos/apache/trafficserver/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/apache/trafficserver/pulls/3901/commits"},"statuses":{"href":"https://api.github.com/repos/apache/trafficserver/statuses/680b3f896dcef9e3c014b32c6a38f2575b19699b"}},"author_association":"MEMBER"}}
{"actor":{"display_login":"d2r"}}