{"action":"created","comment":{"url":"https://api.github.com/repos/elastic/elasticsearch/pulls/comments/32311351","id":32311351,"diff_hunk":"@@ -0,0 +1,264 @@\n+/*\n+ * Licensed to Elasticsearch under one or more contributor\n+ * license agreements. See the NOTICE file distributed with\n+ * this work for additional information regarding copyright\n+ * ownership. Elasticsearch licenses this file to you under\n+ * the Apache License, Version 2.0 (the \"License\"); you may\n+ * not use this file except in compliance with the License.\n+ * You may obtain a copy of the License at\n+ *\n+ *    http://www.apache.org/licenses/LICENSE-2.0\n+ *\n+ * Unless required by applicable law or agreed to in writing,\n+ * software distributed under the License is distributed on an\n+ * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n+ * KIND, either express or implied.  See the License for the\n+ * specific language governing permissions and limitations\n+ * under the License.\n+ */\n+\n+package org.elasticsearch.action.deletebyquery;\n+\n+import org.elasticsearch.ElasticsearchGenerationException;\n+import org.elasticsearch.action.ActionRequest;\n+import org.elasticsearch.action.ActionRequestValidationException;\n+import org.elasticsearch.action.IndicesRequest;\n+import org.elasticsearch.action.support.IndicesOptions;\n+import org.elasticsearch.action.support.QuerySourceBuilder;\n+import org.elasticsearch.client.Requests;\n+import org.elasticsearch.common.Strings;\n+import org.elasticsearch.common.bytes.BytesArray;\n+import org.elasticsearch.common.bytes.BytesReference;\n+import org.elasticsearch.common.io.stream.StreamInput;\n+import org.elasticsearch.common.io.stream.StreamOutput;\n+import org.elasticsearch.common.unit.TimeValue;\n+import org.elasticsearch.common.xcontent.XContentBuilder;\n+import org.elasticsearch.common.xcontent.XContentFactory;\n+import org.elasticsearch.common.xcontent.XContentHelper;\n+import org.elasticsearch.search.Scroll;\n+\n+import java.io.IOException;\n+import java.util.Arrays;\n+import java.util.Map;\n+\n+import static org.elasticsearch.action.ValidateActions.addValidationError;\n+import static org.elasticsearch.search.Scroll.readScroll;\n+\n+public class DeleteByQueryRequest extends ActionRequest<DeleteByQueryRequest> implements IndicesRequest.Replaceable {\n+\n+    private String[] indices = Strings.EMPTY_ARRAY;\n+    private IndicesOptions indicesOptions = IndicesOptions.fromOptions(false, false, true, false);\n+\n+    private String[] types = Strings.EMPTY_ARRAY;\n+\n+    private BytesReference source;\n+\n+    private String routing;\n+\n+    private Integer size = 1_000;\n+\n+    private Scroll scroll = new Scroll(TimeValue.timeValueMinutes(10));\n+\n+    private Long timeout;\n+\n+    public DeleteByQueryRequest() {\n+    }\n+\n+    /**\n+     * Constructs a new delete by query request to run against the provided indices. No indices means\n+     * it will run against all indices.\n+     */\n+    public DeleteByQueryRequest(String... indices) {\n+        this.indices = indices;\n+    }\n+\n+    @Override\n+    public ActionRequestValidationException validate() {\n+        ActionRequestValidationException validationException = null;\n+        if (source == null) {\n+            validationException = addValidationError(\"source is missing\", validationException);\n+        }\n+        return validationException;\n+    }\n+\n+    @Override\n+    public String[] indices() {\n+        return this.indices;\n+    }\n+\n+    @Override\n+    public DeleteByQueryRequest indices(String... indices) {\n+        this.indices = indices;\n+        return this;\n+    }\n+\n+    @Override\n+    public IndicesOptions indicesOptions() {\n+        return indicesOptions;\n+    }\n+\n+    public DeleteByQueryRequest indicesOptions(IndicesOptions indicesOptions) {\n+        if (indicesOptions == null) {\n+            throw new IllegalArgumentException(\"IndicesOptions must not be null\");\n+        }\n+        this.indicesOptions = indicesOptions;\n+        return this;\n+    }\n+\n+    public String[] types() {\n+        return this.types;\n+    }\n+\n+    public DeleteByQueryRequest types(String... types) {\n+        this.types = types;\n+        return this;\n+    }\n+\n+    public BytesReference source() {\n+        return source;\n+    }\n+\n+    public DeleteByQueryRequest source(QuerySourceBuilder sourceBuilder) {\n+        this.source = sourceBuilder.buildAsBytes(Requests.CONTENT_TYPE);\n+        return this;\n+    }\n+\n+    public DeleteByQueryRequest source(Map querySource) {\n+        try {\n+            XContentBuilder builder = XContentFactory.contentBuilder(Requests.CONTENT_TYPE);\n+            builder.map(querySource);\n+            return source(builder);\n+        } catch (IOException e) {\n+            throw new ElasticsearchGenerationException(\"Failed to generate [\" + querySource + \"]\", e);\n+        }\n+    }\n+\n+    public DeleteByQueryRequest source(XContentBuilder builder) {\n+        this.source = builder.bytes();\n+        return this;\n+    }\n+\n+    public DeleteByQueryRequest source(String querySource) {\n+        this.source = new BytesArray(querySource);\n+        return this;\n+    }\n+\n+    public DeleteByQueryRequest source(byte[] querySource) {\n+        return source(querySource, 0, querySource.length);\n+    }\n+\n+    public DeleteByQueryRequest source(byte[] querySource, int offset, int length) {\n+        return source(new BytesArray(querySource, offset, length));\n+    }\n+\n+    public DeleteByQueryRequest source(BytesReference querySource) {\n+        this.source = querySource;\n+        return this;\n+    }\n+\n+    public String routing() {\n+        return this.routing;\n+    }\n+\n+    public DeleteByQueryRequest routing(String routing) {\n+        this.routing = routing;\n+        return this;\n+    }\n+\n+    public DeleteByQueryRequest routing(String... routings) {\n+        this.routing = Strings.arrayToCommaDelimitedString(routings);\n+        return this;\n+    }\n+\n+    public DeleteByQueryRequest size(int size) {\n+        this.size = size;\n+        return this;\n+    }\n+\n+    public Integer size() {\n+        return size;\n+    }\n+\n+\n+    public Scroll scroll() {\n+        return scroll;\n+    }\n+\n+    public DeleteByQueryRequest scroll(Scroll scroll) {\n+        this.scroll = scroll;\n+        return this;\n+    }\n+\n+    public DeleteByQueryRequest scroll(TimeValue keepAlive) {\n+        return scroll(new Scroll(keepAlive));\n+    }\n+\n+    public DeleteByQueryRequest scroll(String keepAlive) {\n+        return scroll(new Scroll(TimeValue.parseTimeValue(keepAlive, null, getClass().getSimpleName() + \".keepAlive\")));\n+    }\n+\n+    public TimeValue timeout() {\n+        return timeout != null ? new TimeValue(timeout) : null;\n+    }\n+\n+    public DeleteByQueryRequest timeout(TimeValue timeout) {\n+        this.timeout = timeout.millis();\n+        return this;\n+    }\n+\n+    public DeleteByQueryRequest timeout(String timeout) {\n+        this.timeout = TimeValue.parseTimeValue(timeout, null, getClass().getSimpleName() + \".timeout\").millis();\n+        return this;\n+    }\n+\n+    @Override\n+    public void readFrom(StreamInput in) throws IOException {\n+        super.readFrom(in);\n+        indices = in.readStringArray();\n+        indicesOptions = IndicesOptions.readIndicesOptions(in);\n+        types = in.readStringArray();\n+        source = in.readBytesReference();\n+        routing = in.readOptionalString();\n+        size = in.readVInt();\n+        if (in.readBoolean()) {\n+            scroll = readScroll(in);\n+        }\n+        if (in.readBoolean()) {\n+            timeout = in.readVLong();\n+        }\n+    }\n+\n+    @Override\n+    public void writeTo(StreamOutput out) throws IOException {\n+        super.writeTo(out);\n+        out.writeStringArray(indices);\n+        indicesOptions.writeIndicesOptions(out);\n+        out.writeStringArray(types);\n+        out.writeBytesReference(source);\n+        out.writeOptionalString(routing);\n+        out.writeVInt(size);","path":"plugins/delete-by-query/src/main/java/org/elasticsearch/action/deletebyquery/DeleteByQueryRequest.java","position":239,"original_position":239,"commit_id":"6a15d49cf9e3d47da408a7cfc3b835a305751552","original_commit_id":"6a15d49cf9e3d47da408a7cfc3b835a305751552","user":{"login":"s1monw","id":973334,"avatar_url":"https://avatars.githubusercontent.com/u/973334?v=3","gravatar_id":"","url":"https://api.github.com/users/s1monw","html_url":"https://github.com/s1monw","followers_url":"https://api.github.com/users/s1monw/followers","following_url":"https://api.github.com/users/s1monw/following{/other_user}","gists_url":"https://api.github.com/users/s1monw/gists{/gist_id}","starred_url":"https://api.github.com/users/s1monw/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/s1monw/subscriptions","organizations_url":"https://api.github.com/users/s1monw/orgs","repos_url":"https://api.github.com/users/s1monw/repos","events_url":"https://api.github.com/users/s1monw/events{/privacy}","received_events_url":"https://api.github.com/users/s1monw/received_events","type":"User","site_admin":false},"body":"watach out size must be positive here though","created_at":"2015-06-12T12:31:53Z","updated_at":"2015-06-12T12:31:53Z","html_url":"https://github.com/elastic/elasticsearch/pull/11516#discussion_r32311351","pull_request_url":"https://api.github.com/repos/elastic/elasticsearch/pulls/11516","_links":{"self":{"href":"https://api.github.com/repos/elastic/elasticsearch/pulls/comments/32311351"},"html":{"href":"https://github.com/elastic/elasticsearch/pull/11516#discussion_r32311351"},"pull_request":{"href":"https://api.github.com/repos/elastic/elasticsearch/pulls/11516"}}},"pull_request":{"url":"https://api.github.com/repos/elastic/elasticsearch/pulls/11516","id":37049761,"html_url":"https://github.com/elastic/elasticsearch/pull/11516","diff_url":"https://github.com/elastic/elasticsearch/pull/11516.diff","patch_url":"https://github.com/elastic/elasticsearch/pull/11516.patch","issue_url":"https://api.github.com/repos/elastic/elasticsearch/issues/11516","number":11516,"state":"open","locked":false,"title":"Add delete-by-query plugin","user":{"login":"tlrx","id":642733,"avatar_url":"https://avatars.githubusercontent.com/u/642733?v=3","gravatar_id":"","url":"https://api.github.com/users/tlrx","html_url":"https://github.com/tlrx","followers_url":"https://api.github.com/users/tlrx/followers","following_url":"https://api.github.com/users/tlrx/following{/other_user}","gists_url":"https://api.github.com/users/tlrx/gists{/gist_id}","starred_url":"https://api.github.com/users/tlrx/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tlrx/subscriptions","organizations_url":"https://api.github.com/users/tlrx/orgs","repos_url":"https://api.github.com/users/tlrx/repos","events_url":"https://api.github.com/users/tlrx/events{/privacy}","received_events_url":"https://api.github.com/users/tlrx/received_events","type":"User","site_admin":false},"body":"This pull request adds a new plugin called \"delete-by-query\" which implements the now deprecated delete-by-query feature using scan/scroll/bulk requests.\r\n\r\nNotes:\r\n* `size` parameter controls the scroll shard_size and the number of actions in bulk requests (defaults to 1000)\r\n* `timeout` parameter can be used to stop scrolling documents after a given time\r\n* response now looks like this (here a node is killed during the DBQ execution):\r\n```json\r\n{  \r\n   \"took\":60866,\r\n   \"timed_out\":false,\r\n   \"_indices\":{  \r\n      \"_all\":{  \r\n         \"found\":531046,\r\n         \"deleted\":79901,\r\n         \"missing\":0,\r\n         \"failed\":301702\r\n      },\r\n      \"disposants-2014\":{  \r\n         \"found\":375702,\r\n         \"deleted\":74000,\r\n         \"missing\":0,\r\n         \"failed\":301702\r\n      },\r\n      \"beer\":{  \r\n         \"found\":5901,\r\n         \"deleted\":5901,\r\n         \"missing\":0,\r\n         \"failed\":0\r\n      }\r\n   },\r\n   \"failures\":[  \r\n      {  \r\n         \"shard\":-1,\r\n         \"index\":null,\r\n         \"reason\":{  \r\n            \"type\":\"node_not_connected_exception\",\r\n            \"reason\":\"[Puck][inet[/192.168.1.16:9300]] Node not connected\"\r\n         }\r\n      }\r\n   ]\r\n}\r\n```\r\n\r\nSince the process involves the execution of a scan request (which can fail), then successive async scroll requests (which can also fail) we may imagine a better failure reporting. When a scroll request succeed, the scrolled documents are added to a Bulk request executed in an async manner. If the bulk fails, all documents are reported as `failed` documents in the counter.\r\n\r\nRest API documentation and test will be added later.","created_at":"2015-06-05T16:55:31Z","updated_at":"2015-06-12T12:31:53Z","closed_at":null,"merged_at":null,"merge_commit_sha":"3ba33092377182ef35d20c4432dc5b69894450ed","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/elastic/elasticsearch/pulls/11516/commits","review_comments_url":"https://api.github.com/repos/elastic/elasticsearch/pulls/11516/comments","review_comment_url":"https://api.github.com/repos/elastic/elasticsearch/pulls/comments{/number}","comments_url":"https://api.github.com/repos/elastic/elasticsearch/issues/11516/comments","statuses_url":"https://api.github.com/repos/elastic/elasticsearch/statuses/6a15d49cf9e3d47da408a7cfc3b835a305751552","head":{"label":"tlrx:delete-by-query","ref":"delete-by-query","sha":"6a15d49cf9e3d47da408a7cfc3b835a305751552","user":{"login":"tlrx","id":642733,"avatar_url":"https://avatars.githubusercontent.com/u/642733?v=3","gravatar_id":"","url":"https://api.github.com/users/tlrx","html_url":"https://github.com/tlrx","followers_url":"https://api.github.com/users/tlrx/followers","following_url":"https://api.github.com/users/tlrx/following{/other_user}","gists_url":"https://api.github.com/users/tlrx/gists{/gist_id}","starred_url":"https://api.github.com/users/tlrx/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tlrx/subscriptions","organizations_url":"https://api.github.com/users/tlrx/orgs","repos_url":"https://api.github.com/users/tlrx/repos","events_url":"https://api.github.com/users/tlrx/events{/privacy}","received_events_url":"https://api.github.com/users/tlrx/received_events","type":"User","site_admin":false},"repo":{"id":24718639,"name":"elasticsearch","full_name":"tlrx/elasticsearch","owner":{"login":"tlrx","id":642733,"avatar_url":"https://avatars.githubusercontent.com/u/642733?v=3","gravatar_id":"","url":"https://api.github.com/users/tlrx","html_url":"https://github.com/tlrx","followers_url":"https://api.github.com/users/tlrx/followers","following_url":"https://api.github.com/users/tlrx/following{/other_user}","gists_url":"https://api.github.com/users/tlrx/gists{/gist_id}","starred_url":"https://api.github.com/users/tlrx/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tlrx/subscriptions","organizations_url":"https://api.github.com/users/tlrx/orgs","repos_url":"https://api.github.com/users/tlrx/repos","events_url":"https://api.github.com/users/tlrx/events{/privacy}","received_events_url":"https://api.github.com/users/tlrx/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/tlrx/elasticsearch","description":"Open Source, Distributed, RESTful Search Engine","fork":true,"url":"https://api.github.com/repos/tlrx/elasticsearch","forks_url":"https://api.github.com/repos/tlrx/elasticsearch/forks","keys_url":"https://api.github.com/repos/tlrx/elasticsearch/keys{/key_id}","collaborators_url":"https://api.github.com/repos/tlrx/elasticsearch/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/tlrx/elasticsearch/teams","hooks_url":"https://api.github.com/repos/tlrx/elasticsearch/hooks","issue_events_url":"https://api.github.com/repos/tlrx/elasticsearch/issues/events{/number}","events_url":"https://api.github.com/repos/tlrx/elasticsearch/events","assignees_url":"https://api.github.com/repos/tlrx/elasticsearch/assignees{/user}","branches_url":"https://api.github.com/repos/tlrx/elasticsearch/branches{/branch}","tags_url":"https://api.github.com/repos/tlrx/elasticsearch/tags","blobs_url":"https://api.github.com/repos/tlrx/elasticsearch/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/tlrx/elasticsearch/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/tlrx/elasticsearch/git/refs{/sha}","trees_url":"https://api.github.com/repos/tlrx/elasticsearch/git/trees{/sha}","statuses_url":"https://api.github.com/repos/tlrx/elasticsearch/statuses/{sha}","languages_url":"https://api.github.com/repos/tlrx/elasticsearch/languages","stargazers_url":"https://api.github.com/repos/tlrx/elasticsearch/stargazers","contributors_url":"https://api.github.com/repos/tlrx/elasticsearch/contributors","subscribers_url":"https://api.github.com/repos/tlrx/elasticsearch/subscribers","subscription_url":"https://api.github.com/repos/tlrx/elasticsearch/subscription","commits_url":"https://api.github.com/repos/tlrx/elasticsearch/commits{/sha}","git_commits_url":"https://api.github.com/repos/tlrx/elasticsearch/git/commits{/sha}","comments_url":"https://api.github.com/repos/tlrx/elasticsearch/comments{/number}","issue_comment_url":"https://api.github.com/repos/tlrx/elasticsearch/issues/comments{/number}","contents_url":"https://api.github.com/repos/tlrx/elasticsearch/contents/{+path}","compare_url":"https://api.github.com/repos/tlrx/elasticsearch/compare/{base}...{head}","merges_url":"https://api.github.com/repos/tlrx/elasticsearch/merges","archive_url":"https://api.github.com/repos/tlrx/elasticsearch/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/tlrx/elasticsearch/downloads","issues_url":"https://api.github.com/repos/tlrx/elasticsearch/issues{/number}","pulls_url":"https://api.github.com/repos/tlrx/elasticsearch/pulls{/number}","milestones_url":"https://api.github.com/repos/tlrx/elasticsearch/milestones{/number}","notifications_url":"https://api.github.com/repos/tlrx/elasticsearch/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/tlrx/elasticsearch/labels{/name}","releases_url":"https://api.github.com/repos/tlrx/elasticsearch/releases{/id}","created_at":"2014-10-02T12:51:44Z","updated_at":"2014-10-02T08:42:36Z","pushed_at":"2015-06-10T15:24:43Z","git_url":"git://github.com/tlrx/elasticsearch.git","ssh_url":"git@github.com:tlrx/elasticsearch.git","clone_url":"https://github.com/tlrx/elasticsearch.git","svn_url":"https://github.com/tlrx/elasticsearch","homepage":"http://elasticsearch.org","size":125652,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"elastic:master","ref":"master","sha":"3bda78e43b125a678778fe175c2b3fc623e0c515","user":{"login":"elastic","id":6764390,"avatar_url":"https://avatars.githubusercontent.com/u/6764390?v=3","gravatar_id":"","url":"https://api.github.com/users/elastic","html_url":"https://github.com/elastic","followers_url":"https://api.github.com/users/elastic/followers","following_url":"https://api.github.com/users/elastic/following{/other_user}","gists_url":"https://api.github.com/users/elastic/gists{/gist_id}","starred_url":"https://api.github.com/users/elastic/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/elastic/subscriptions","organizations_url":"https://api.github.com/users/elastic/orgs","repos_url":"https://api.github.com/users/elastic/repos","events_url":"https://api.github.com/users/elastic/events{/privacy}","received_events_url":"https://api.github.com/users/elastic/received_events","type":"Organization","site_admin":false},"repo":{"id":507775,"name":"elasticsearch","full_name":"elastic/elasticsearch","owner":{"login":"elastic","id":6764390,"avatar_url":"https://avatars.githubusercontent.com/u/6764390?v=3","gravatar_id":"","url":"https://api.github.com/users/elastic","html_url":"https://github.com/elastic","followers_url":"https://api.github.com/users/elastic/followers","following_url":"https://api.github.com/users/elastic/following{/other_user}","gists_url":"https://api.github.com/users/elastic/gists{/gist_id}","starred_url":"https://api.github.com/users/elastic/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/elastic/subscriptions","organizations_url":"https://api.github.com/users/elastic/orgs","repos_url":"https://api.github.com/users/elastic/repos","events_url":"https://api.github.com/users/elastic/events{/privacy}","received_events_url":"https://api.github.com/users/elastic/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/elastic/elasticsearch","description":"Open Source, Distributed, RESTful Search Engine","fork":false,"url":"https://api.github.com/repos/elastic/elasticsearch","forks_url":"https://api.github.com/repos/elastic/elasticsearch/forks","keys_url":"https://api.github.com/repos/elastic/elasticsearch/keys{/key_id}","collaborators_url":"https://api.github.com/repos/elastic/elasticsearch/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/elastic/elasticsearch/teams","hooks_url":"https://api.github.com/repos/elastic/elasticsearch/hooks","issue_events_url":"https://api.github.com/repos/elastic/elasticsearch/issues/events{/number}","events_url":"https://api.github.com/repos/elastic/elasticsearch/events","assignees_url":"https://api.github.com/repos/elastic/elasticsearch/assignees{/user}","branches_url":"https://api.github.com/repos/elastic/elasticsearch/branches{/branch}","tags_url":"https://api.github.com/repos/elastic/elasticsearch/tags","blobs_url":"https://api.github.com/repos/elastic/elasticsearch/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/elastic/elasticsearch/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/elastic/elasticsearch/git/refs{/sha}","trees_url":"https://api.github.com/repos/elastic/elasticsearch/git/trees{/sha}","statuses_url":"https://api.github.com/repos/elastic/elasticsearch/statuses/{sha}","languages_url":"https://api.github.com/repos/elastic/elasticsearch/languages","stargazers_url":"https://api.github.com/repos/elastic/elasticsearch/stargazers","contributors_url":"https://api.github.com/repos/elastic/elasticsearch/contributors","subscribers_url":"https://api.github.com/repos/elastic/elasticsearch/subscribers","subscription_url":"https://api.github.com/repos/elastic/elasticsearch/subscription","commits_url":"https://api.github.com/repos/elastic/elasticsearch/commits{/sha}","git_commits_url":"https://api.github.com/repos/elastic/elasticsearch/git/commits{/sha}","comments_url":"https://api.github.com/repos/elastic/elasticsearch/comments{/number}","issue_comment_url":"https://api.github.com/repos/elastic/elasticsearch/issues/comments{/number}","contents_url":"https://api.github.com/repos/elastic/elasticsearch/contents/{+path}","compare_url":"https://api.github.com/repos/elastic/elasticsearch/compare/{base}...{head}","merges_url":"https://api.github.com/repos/elastic/elasticsearch/merges","archive_url":"https://api.github.com/repos/elastic/elasticsearch/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/elastic/elasticsearch/downloads","issues_url":"https://api.github.com/repos/elastic/elasticsearch/issues{/number}","pulls_url":"https://api.github.com/repos/elastic/elasticsearch/pulls{/number}","milestones_url":"https://api.github.com/repos/elastic/elasticsearch/milestones{/number}","notifications_url":"https://api.github.com/repos/elastic/elasticsearch/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/elastic/elasticsearch/labels{/name}","releases_url":"https://api.github.com/repos/elastic/elasticsearch/releases{/id}","created_at":"2010-02-08T13:20:56Z","updated_at":"2015-06-12T12:12:17Z","pushed_at":"2015-06-12T12:20:23Z","git_url":"git://github.com/elastic/elasticsearch.git","ssh_url":"git@github.com:elastic/elasticsearch.git","clone_url":"https://github.com/elastic/elasticsearch.git","svn_url":"https://github.com/elastic/elasticsearch","homepage":"https://www.elastic.co/products/elasticsearch","size":1890261,"stargazers_count":11577,"watchers_count":11577,"language":"Java","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":3664,"mirror_url":null,"open_issues_count":1115,"forks":3664,"open_issues":1115,"watchers":11577,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/elastic/elasticsearch/pulls/11516"},"html":{"href":"https://github.com/elastic/elasticsearch/pull/11516"},"issue":{"href":"https://api.github.com/repos/elastic/elasticsearch/issues/11516"},"comments":{"href":"https://api.github.com/repos/elastic/elasticsearch/issues/11516/comments"},"review_comments":{"href":"https://api.github.com/repos/elastic/elasticsearch/pulls/11516/comments"},"review_comment":{"href":"https://api.github.com/repos/elastic/elasticsearch/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/elastic/elasticsearch/pulls/11516/commits"},"statuses":{"href":"https://api.github.com/repos/elastic/elasticsearch/statuses/6a15d49cf9e3d47da408a7cfc3b835a305751552"}}}}