{"action":"created","comment":{"url":"https://api.github.com/repos/druid-io/druid/pulls/comments/75786351","id":75786351,"diff_hunk":"@@ -0,0 +1,108 @@\n+/*\n+ * Licensed to Metamarkets Group Inc. (Metamarkets) under one\n+ * or more contributor license agreements. See the NOTICE file\n+ * distributed with this work for additional information\n+ * regarding copyright ownership. Metamarkets licenses this file\n+ * to you under the Apache License, Version 2.0 (the\n+ * \"License\"); you may not use this file except in compliance\n+ * with the License. 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 io.druid.benchmark;\n+\n+import com.google.common.base.Supplier;\n+import com.google.common.io.Files;\n+import io.druid.segment.data.CompressedLongsIndexedSupplier;\n+import io.druid.segment.data.IndexedLongs;\n+import org.openjdk.jmh.annotations.Benchmark;\n+import org.openjdk.jmh.annotations.BenchmarkMode;\n+import org.openjdk.jmh.annotations.Fork;\n+import org.openjdk.jmh.annotations.Measurement;\n+import org.openjdk.jmh.annotations.Mode;\n+import org.openjdk.jmh.annotations.OutputTimeUnit;\n+import org.openjdk.jmh.annotations.Param;\n+import org.openjdk.jmh.annotations.Scope;\n+import org.openjdk.jmh.annotations.Setup;\n+import org.openjdk.jmh.annotations.State;\n+import org.openjdk.jmh.annotations.Warmup;\n+import org.openjdk.jmh.infra.Blackhole;\n+\n+import java.io.File;\n+import java.io.IOException;\n+import java.nio.ByteBuffer;\n+import java.nio.ByteOrder;\n+import java.util.Random;\n+import java.util.concurrent.TimeUnit;\n+\n+// Run LongCompressionBenchmarkFileGenerator to generate the required files before running this benchmark\n+\n+@State(Scope.Benchmark)\n+@Fork(value = 1)","path":"benchmarks/src/main/java/io/druid/benchmark/LongCompressionBenchmark.java","position":49,"original_position":49,"commit_id":"95fb9943535453e4910c1d29de55dbd04f98d1b1","original_commit_id":"95fb9943535453e4910c1d29de55dbd04f98d1b1","user":{"login":"jon-wei","id":8729063,"avatar_url":"https://avatars.githubusercontent.com/u/8729063?v=3","gravatar_id":"","url":"https://api.github.com/users/jon-wei","html_url":"https://github.com/jon-wei","followers_url":"https://api.github.com/users/jon-wei/followers","following_url":"https://api.github.com/users/jon-wei/following{/other_user}","gists_url":"https://api.github.com/users/jon-wei/gists{/gist_id}","starred_url":"https://api.github.com/users/jon-wei/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jon-wei/subscriptions","organizations_url":"https://api.github.com/users/jon-wei/orgs","repos_url":"https://api.github.com/users/jon-wei/repos","events_url":"https://api.github.com/users/jon-wei/events{/privacy}","received_events_url":"https://api.github.com/users/jon-wei/received_events","type":"User","site_admin":false},"body":"Let's make this:\r\n```\r\n@Fork(jvmArgsPrepend = \"-server\", value = 1)\r\n```\r\n\r\nso that the JVM runs in \"server\" mode:\r\nhttp://www.oracle.com/technetwork/java/whitepaper-135217.html#2","created_at":"2016-08-23T00:47:14Z","updated_at":"2016-08-23T00:47:14Z","html_url":"https://github.com/druid-io/druid/pull/3148#discussion_r75786351","pull_request_url":"https://api.github.com/repos/druid-io/druid/pulls/3148","_links":{"self":{"href":"https://api.github.com/repos/druid-io/druid/pulls/comments/75786351"},"html":{"href":"https://github.com/druid-io/druid/pull/3148#discussion_r75786351"},"pull_request":{"href":"https://api.github.com/repos/druid-io/druid/pulls/3148"}}},"pull_request":{"url":"https://api.github.com/repos/druid-io/druid/pulls/3148","id":73824963,"html_url":"https://github.com/druid-io/druid/pull/3148","diff_url":"https://github.com/druid-io/druid/pull/3148.diff","patch_url":"https://github.com/druid-io/druid/pull/3148.patch","issue_url":"https://api.github.com/repos/druid-io/druid/issues/3148","number":3148,"state":"open","locked":false,"title":"Adds long compression methods","user":{"login":"acslk","id":11131839,"avatar_url":"https://avatars.githubusercontent.com/u/11131839?v=3","gravatar_id":"","url":"https://api.github.com/users/acslk","html_url":"https://github.com/acslk","followers_url":"https://api.github.com/users/acslk/followers","following_url":"https://api.github.com/users/acslk/following{/other_user}","gists_url":"https://api.github.com/users/acslk/gists{/gist_id}","starred_url":"https://api.github.com/users/acslk/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/acslk/subscriptions","organizations_url":"https://api.github.com/users/acslk/orgs","repos_url":"https://api.github.com/users/acslk/repos","events_url":"https://api.github.com/users/acslk/events{/privacy}","received_events_url":"https://api.github.com/users/acslk/received_events","type":"User","site_admin":false},"body":"This PR introduces a few new compression strategies for long values that are not block based (described in #3147).  The enum CompressionFormat is added to control the compression procedure, which could call GenericIndexed for block based compression.\r\n\r\nThe compression format added include delta compression, table compression, and a new uncompressed format. Delta compression finds the smallest value in the segment, and store all values as offsets. Table compression maps unique values and store their id. The offsets and ids are stored by using the smallest number of bits required for the maximum values. For example, if the maximum offset is 200, then all values are stored using 8 bits. The new uncompressed is the uncompressed format without the header for position of each block and empty bytes at beginning of each block.\r\n\r\nDelta and table count as a single compression format. If there are less than 256 unique values, table is used, otherwise delta is used.\r\n\r\nUpdate\r\n\r\nAfter some discussion in #3147 , it's decided that compression strategy, which compress and decompress blocks of data without knowing the data format, and encoding format, which encode data using knowledge of its attributes such as size of each element, should be separated. Users would choose the combination of compression and encoding to use.\r\n\r\nThe existing compressions including LZF, LZ4, and Uncompressed all count as compression strategy. In addition, this PR included the compression NONE, which indicate no compression strategy should be used, and the values should be stored all together instead of in blocks, since this would allow faster random access. The LZF and Uncompressed strategy are still needed for backward compatibility, but they shouldn't be used for new data.\r\n\r\nThe encoding format introduced in this PR are Delta, Table, and Longs. Delta and table are described above, while Longs just indicated values are stored as 8 byte longs. Segments created prior to this PR are viewed as compression strategy used + Longs encoding.\r\n\r\nBelow is a benchmark of combinations of all compression strategies and encoding formats using some generated data sets.\r\n\r\nData sets includes: \r\n- enumerated (value from only a few selections, with probability heavily skewed toward one) \r\n- zipfLow (zipf distribution between 0 to 1000 with low exponent)\r\n- zipfHigh (zipf distribution between 0 to 1000 with high exponent)\r\n- uniform (uniform distribution between 0 to 1000)\r\n- sequential (sequential values starting from a timestamp)\r\n\r\nGenerated files size in kb (5,000,000 values)\r\n```\r\nzipfLow-LZ4-DELTA: 6870\r\nzipfLow-LZ4-LONGS: 9495\r\nzipfLow-NONE-DELTA: 7324\r\nzipfLow-NONE-LONGS: 39062\r\nuniform-LZ4-DELTA: 7354\r\nuniform-LZ4-LONGS: 11184\r\nuniform-NONE-DELTA: 7324\r\nuniform-NONE-LONGS: 39062\r\nsequential-LZ4-DELTA: 14706\r\nsequential-LZ4-LONGS: 19542\r\nsequential-NONE-DELTA: 14648\r\nsequential-NONE-LONGS: 39062\r\nenumerate-LZ4-DELTA: 442\r\nenumerate-LZ4-LONGS: 711\r\nenumerate-NONE-DELTA: 2441\r\nenumerate-NONE-LONGS: 39062\r\nzipfHigh-LZ4-DELTA: 1201\r\nzipfHigh-LZ4-LONGS: 1784\r\nzipfHigh-NONE-DELTA: 4884\r\nzipfHigh-NONE-LONGS: 39062\r\n```\r\n\r\nBenchmarks:\r\nreadContinuous reads every value, while readSkipping skips randomly between 0 - 10000 values on each read\r\n```\r\nCompressionBenchmark.readContinuous   enumerate     delta         lz4  avgt   25  30.648 ±  2.626  ms/op\r\nCompressionBenchmark.readContinuous   enumerate     delta        none  avgt   25   7.650 ±  0.526  ms/op\r\nCompressionBenchmark.readContinuous   enumerate     longs         lz4  avgt   25  19.126 ±  0.588  ms/op\r\nCompressionBenchmark.readContinuous   enumerate     longs        none  avgt   25   2.885 ±  0.172  ms/op\r\nCompressionBenchmark.readContinuous     zipfLow     delta         lz4  avgt   25  36.759 ±  2.715  ms/op\r\nCompressionBenchmark.readContinuous     zipfLow     delta        none  avgt   25  11.347 ±  0.733  ms/op\r\nCompressionBenchmark.readContinuous     zipfLow     longs         lz4  avgt   25  32.491 ±  2.123  ms/op\r\nCompressionBenchmark.readContinuous     zipfLow     longs        none  avgt   25   2.991 ±  0.267  ms/op\r\nCompressionBenchmark.readContinuous    zipfHigh     delta         lz4  avgt   25  26.057 ±  1.361  ms/op\r\nCompressionBenchmark.readContinuous    zipfHigh     delta        none  avgt   25   3.545 ±  0.227  ms/op\r\nCompressionBenchmark.readContinuous    zipfHigh     longs         lz4  avgt   25  21.950 ±  1.035  ms/op\r\nCompressionBenchmark.readContinuous    zipfHigh     longs        none  avgt   25   2.883 ±  0.175  ms/op\r\nCompressionBenchmark.readContinuous  sequential     delta         lz4  avgt   25  28.658 ±  0.567  ms/op\r\nCompressionBenchmark.readContinuous  sequential     delta        none  avgt   25   7.557 ±  0.495  ms/op\r\nCompressionBenchmark.readContinuous  sequential     longs         lz4  avgt   25  53.250 ±  1.897  ms/op\r\nCompressionBenchmark.readContinuous  sequential     longs        none  avgt   25   3.117 ±  0.270  ms/op\r\nCompressionBenchmark.readContinuous     uniform     delta         lz4  avgt   25  32.909 ±  2.348  ms/op\r\nCompressionBenchmark.readContinuous     uniform     delta        none  avgt   25  20.803 ± 11.509  ms/op\r\nCompressionBenchmark.readContinuous     uniform     longs         lz4  avgt   25  30.252 ±  0.674  ms/op\r\nCompressionBenchmark.readContinuous     uniform     longs        none  avgt   25   2.944 ±  0.130  ms/op\r\nCompressionBenchmark.readSkipping     enumerate     delta         lz4  avgt   25   1.462 ±  0.091  ms/op\r\nCompressionBenchmark.readSkipping     enumerate     delta        none  avgt   25   0.016 ±  0.001  ms/op\r\nCompressionBenchmark.readSkipping     enumerate     longs         lz4  avgt   25   5.476 ±  1.154  ms/op\r\nCompressionBenchmark.readSkipping     enumerate     longs        none  avgt   25   0.055 ±  0.001  ms/op\r\nCompressionBenchmark.readSkipping       zipfLow     delta         lz4  avgt   25   4.786 ±  0.153  ms/op\r\nCompressionBenchmark.readSkipping       zipfLow     delta        none  avgt   25   0.034 ±  0.001  ms/op\r\nCompressionBenchmark.readSkipping       zipfLow     longs         lz4  avgt   25  17.017 ±  0.565  ms/op\r\nCompressionBenchmark.readSkipping       zipfLow     longs        none  avgt   25   0.054 ±  0.001  ms/op\r\nCompressionBenchmark.readSkipping      zipfHigh     delta         lz4  avgt   25   2.745 ±  0.078  ms/op\r\nCompressionBenchmark.readSkipping      zipfHigh     delta        none  avgt   25   0.023 ±  0.001  ms/op\r\nCompressionBenchmark.readSkipping      zipfHigh     longs         lz4  avgt   25   7.876 ±  0.972  ms/op\r\nCompressionBenchmark.readSkipping      zipfHigh     longs        none  avgt   25   0.055 ±  0.001  ms/op\r\nCompressionBenchmark.readSkipping    sequential     delta         lz4  avgt   25   1.239 ±  0.374  ms/op\r\nCompressionBenchmark.readSkipping    sequential     delta        none  avgt   25   0.048 ±  0.001  ms/op\r\nCompressionBenchmark.readSkipping    sequential     longs         lz4  avgt   25  36.913 ±  0.918  ms/op\r\nCompressionBenchmark.readSkipping    sequential     longs        none  avgt   25   0.054 ±  0.001  ms/op\r\nCompressionBenchmark.readSkipping       uniform     delta         lz4  avgt   25   0.660 ±  0.218  ms/op\r\nCompressionBenchmark.readSkipping       uniform     delta        none  avgt   25   0.033 ±  0.001  ms/op\r\nCompressionBenchmark.readSkipping       uniform     longs         lz4  avgt   25  17.497 ±  0.561  ms/op\r\nCompressionBenchmark.readSkipping       uniform     longs        none  avgt   25   0.054 ±  0.001  ms/op\r\n```","created_at":"2016-06-14T22:30:03Z","updated_at":"2016-08-23T00:47:14Z","closed_at":null,"merged_at":null,"merge_commit_sha":"47949a78108f49f3ce9d1f2a156172ff1dec55f0","assignee":null,"assignees":[],"milestone":{"url":"https://api.github.com/repos/druid-io/druid/milestones/20","html_url":"https://github.com/druid-io/druid/milestones/0.9.2","labels_url":"https://api.github.com/repos/druid-io/druid/milestones/20/labels","id":1571409,"number":20,"title":"0.9.2","description":"","creator":{"login":"fjy","id":428325,"avatar_url":"https://avatars.githubusercontent.com/u/428325?v=3","gravatar_id":"","url":"https://api.github.com/users/fjy","html_url":"https://github.com/fjy","followers_url":"https://api.github.com/users/fjy/followers","following_url":"https://api.github.com/users/fjy/following{/other_user}","gists_url":"https://api.github.com/users/fjy/gists{/gist_id}","starred_url":"https://api.github.com/users/fjy/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/fjy/subscriptions","organizations_url":"https://api.github.com/users/fjy/orgs","repos_url":"https://api.github.com/users/fjy/repos","events_url":"https://api.github.com/users/fjy/events{/privacy}","received_events_url":"https://api.github.com/users/fjy/received_events","type":"User","site_admin":false},"open_issues":15,"closed_issues":126,"state":"open","created_at":"2016-02-08T22:01:21Z","updated_at":"2016-08-22T14:51:03Z","due_on":null,"closed_at":null},"commits_url":"https://api.github.com/repos/druid-io/druid/pulls/3148/commits","review_comments_url":"https://api.github.com/repos/druid-io/druid/pulls/3148/comments","review_comment_url":"https://api.github.com/repos/druid-io/druid/pulls/comments{/number}","comments_url":"https://api.github.com/repos/druid-io/druid/issues/3148/comments","statuses_url":"https://api.github.com/repos/druid-io/druid/statuses/95fb9943535453e4910c1d29de55dbd04f98d1b1","head":{"label":"acslk:feature-compress","ref":"feature-compress","sha":"95fb9943535453e4910c1d29de55dbd04f98d1b1","user":{"login":"acslk","id":11131839,"avatar_url":"https://avatars.githubusercontent.com/u/11131839?v=3","gravatar_id":"","url":"https://api.github.com/users/acslk","html_url":"https://github.com/acslk","followers_url":"https://api.github.com/users/acslk/followers","following_url":"https://api.github.com/users/acslk/following{/other_user}","gists_url":"https://api.github.com/users/acslk/gists{/gist_id}","starred_url":"https://api.github.com/users/acslk/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/acslk/subscriptions","organizations_url":"https://api.github.com/users/acslk/orgs","repos_url":"https://api.github.com/users/acslk/repos","events_url":"https://api.github.com/users/acslk/events{/privacy}","received_events_url":"https://api.github.com/users/acslk/received_events","type":"User","site_admin":false},"repo":{"id":58234003,"name":"druid","full_name":"acslk/druid","owner":{"login":"acslk","id":11131839,"avatar_url":"https://avatars.githubusercontent.com/u/11131839?v=3","gravatar_id":"","url":"https://api.github.com/users/acslk","html_url":"https://github.com/acslk","followers_url":"https://api.github.com/users/acslk/followers","following_url":"https://api.github.com/users/acslk/following{/other_user}","gists_url":"https://api.github.com/users/acslk/gists{/gist_id}","starred_url":"https://api.github.com/users/acslk/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/acslk/subscriptions","organizations_url":"https://api.github.com/users/acslk/orgs","repos_url":"https://api.github.com/users/acslk/repos","events_url":"https://api.github.com/users/acslk/events{/privacy}","received_events_url":"https://api.github.com/users/acslk/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/acslk/druid","description":"Column oriented distributed data store ideal for powering interactive applications","fork":true,"url":"https://api.github.com/repos/acslk/druid","forks_url":"https://api.github.com/repos/acslk/druid/forks","keys_url":"https://api.github.com/repos/acslk/druid/keys{/key_id}","collaborators_url":"https://api.github.com/repos/acslk/druid/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/acslk/druid/teams","hooks_url":"https://api.github.com/repos/acslk/druid/hooks","issue_events_url":"https://api.github.com/repos/acslk/druid/issues/events{/number}","events_url":"https://api.github.com/repos/acslk/druid/events","assignees_url":"https://api.github.com/repos/acslk/druid/assignees{/user}","branches_url":"https://api.github.com/repos/acslk/druid/branches{/branch}","tags_url":"https://api.github.com/repos/acslk/druid/tags","blobs_url":"https://api.github.com/repos/acslk/druid/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/acslk/druid/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/acslk/druid/git/refs{/sha}","trees_url":"https://api.github.com/repos/acslk/druid/git/trees{/sha}","statuses_url":"https://api.github.com/repos/acslk/druid/statuses/{sha}","languages_url":"https://api.github.com/repos/acslk/druid/languages","stargazers_url":"https://api.github.com/repos/acslk/druid/stargazers","contributors_url":"https://api.github.com/repos/acslk/druid/contributors","subscribers_url":"https://api.github.com/repos/acslk/druid/subscribers","subscription_url":"https://api.github.com/repos/acslk/druid/subscription","commits_url":"https://api.github.com/repos/acslk/druid/commits{/sha}","git_commits_url":"https://api.github.com/repos/acslk/druid/git/commits{/sha}","comments_url":"https://api.github.com/repos/acslk/druid/comments{/number}","issue_comment_url":"https://api.github.com/repos/acslk/druid/issues/comments{/number}","contents_url":"https://api.github.com/repos/acslk/druid/contents/{+path}","compare_url":"https://api.github.com/repos/acslk/druid/compare/{base}...{head}","merges_url":"https://api.github.com/repos/acslk/druid/merges","archive_url":"https://api.github.com/repos/acslk/druid/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/acslk/druid/downloads","issues_url":"https://api.github.com/repos/acslk/druid/issues{/number}","pulls_url":"https://api.github.com/repos/acslk/druid/pulls{/number}","milestones_url":"https://api.github.com/repos/acslk/druid/milestones{/number}","notifications_url":"https://api.github.com/repos/acslk/druid/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/acslk/druid/labels{/name}","releases_url":"https://api.github.com/repos/acslk/druid/releases{/id}","deployments_url":"https://api.github.com/repos/acslk/druid/deployments","created_at":"2016-05-06T20:47:11Z","updated_at":"2016-05-06T20:47:19Z","pushed_at":"2016-08-20T01:09:44Z","git_url":"git://github.com/acslk/druid.git","ssh_url":"git@github.com:acslk/druid.git","clone_url":"https://github.com/acslk/druid.git","svn_url":"https://github.com/acslk/druid","homepage":"http://druid.io","size":127892,"stargazers_count":0,"watchers_count":0,"language":"Java","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"druid-io:master","ref":"master","sha":"03cfcf002b681255a7c9e1db2aea1201ef155a67","user":{"login":"druid-io","id":4203474,"avatar_url":"https://avatars.githubusercontent.com/u/4203474?v=3","gravatar_id":"","url":"https://api.github.com/users/druid-io","html_url":"https://github.com/druid-io","followers_url":"https://api.github.com/users/druid-io/followers","following_url":"https://api.github.com/users/druid-io/following{/other_user}","gists_url":"https://api.github.com/users/druid-io/gists{/gist_id}","starred_url":"https://api.github.com/users/druid-io/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/druid-io/subscriptions","organizations_url":"https://api.github.com/users/druid-io/orgs","repos_url":"https://api.github.com/users/druid-io/repos","events_url":"https://api.github.com/users/druid-io/events{/privacy}","received_events_url":"https://api.github.com/users/druid-io/received_events","type":"Organization","site_admin":false},"repo":{"id":6358188,"name":"druid","full_name":"druid-io/druid","owner":{"login":"druid-io","id":4203474,"avatar_url":"https://avatars.githubusercontent.com/u/4203474?v=3","gravatar_id":"","url":"https://api.github.com/users/druid-io","html_url":"https://github.com/druid-io","followers_url":"https://api.github.com/users/druid-io/followers","following_url":"https://api.github.com/users/druid-io/following{/other_user}","gists_url":"https://api.github.com/users/druid-io/gists{/gist_id}","starred_url":"https://api.github.com/users/druid-io/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/druid-io/subscriptions","organizations_url":"https://api.github.com/users/druid-io/orgs","repos_url":"https://api.github.com/users/druid-io/repos","events_url":"https://api.github.com/users/druid-io/events{/privacy}","received_events_url":"https://api.github.com/users/druid-io/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/druid-io/druid","description":"Column oriented distributed data store ideal for powering interactive applications","fork":false,"url":"https://api.github.com/repos/druid-io/druid","forks_url":"https://api.github.com/repos/druid-io/druid/forks","keys_url":"https://api.github.com/repos/druid-io/druid/keys{/key_id}","collaborators_url":"https://api.github.com/repos/druid-io/druid/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/druid-io/druid/teams","hooks_url":"https://api.github.com/repos/druid-io/druid/hooks","issue_events_url":"https://api.github.com/repos/druid-io/druid/issues/events{/number}","events_url":"https://api.github.com/repos/druid-io/druid/events","assignees_url":"https://api.github.com/repos/druid-io/druid/assignees{/user}","branches_url":"https://api.github.com/repos/druid-io/druid/branches{/branch}","tags_url":"https://api.github.com/repos/druid-io/druid/tags","blobs_url":"https://api.github.com/repos/druid-io/druid/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/druid-io/druid/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/druid-io/druid/git/refs{/sha}","trees_url":"https://api.github.com/repos/druid-io/druid/git/trees{/sha}","statuses_url":"https://api.github.com/repos/druid-io/druid/statuses/{sha}","languages_url":"https://api.github.com/repos/druid-io/druid/languages","stargazers_url":"https://api.github.com/repos/druid-io/druid/stargazers","contributors_url":"https://api.github.com/repos/druid-io/druid/contributors","subscribers_url":"https://api.github.com/repos/druid-io/druid/subscribers","subscription_url":"https://api.github.com/repos/druid-io/druid/subscription","commits_url":"https://api.github.com/repos/druid-io/druid/commits{/sha}","git_commits_url":"https://api.github.com/repos/druid-io/druid/git/commits{/sha}","comments_url":"https://api.github.com/repos/druid-io/druid/comments{/number}","issue_comment_url":"https://api.github.com/repos/druid-io/druid/issues/comments{/number}","contents_url":"https://api.github.com/repos/druid-io/druid/contents/{+path}","compare_url":"https://api.github.com/repos/druid-io/druid/compare/{base}...{head}","merges_url":"https://api.github.com/repos/druid-io/druid/merges","archive_url":"https://api.github.com/repos/druid-io/druid/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/druid-io/druid/downloads","issues_url":"https://api.github.com/repos/druid-io/druid/issues{/number}","pulls_url":"https://api.github.com/repos/druid-io/druid/pulls{/number}","milestones_url":"https://api.github.com/repos/druid-io/druid/milestones{/number}","notifications_url":"https://api.github.com/repos/druid-io/druid/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/druid-io/druid/labels{/name}","releases_url":"https://api.github.com/repos/druid-io/druid/releases{/id}","deployments_url":"https://api.github.com/repos/druid-io/druid/deployments","created_at":"2012-10-23T19:08:07Z","updated_at":"2016-08-22T19:32:33Z","pushed_at":"2016-08-22T20:44:27Z","git_url":"git://github.com/druid-io/druid.git","ssh_url":"git@github.com:druid-io/druid.git","clone_url":"https://github.com/druid-io/druid.git","svn_url":"https://github.com/druid-io/druid","homepage":"http://druid.io","size":154182,"stargazers_count":3615,"watchers_count":3615,"language":"Java","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":836,"mirror_url":null,"open_issues_count":500,"forks":836,"open_issues":500,"watchers":3615,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/druid-io/druid/pulls/3148"},"html":{"href":"https://github.com/druid-io/druid/pull/3148"},"issue":{"href":"https://api.github.com/repos/druid-io/druid/issues/3148"},"comments":{"href":"https://api.github.com/repos/druid-io/druid/issues/3148/comments"},"review_comments":{"href":"https://api.github.com/repos/druid-io/druid/pulls/3148/comments"},"review_comment":{"href":"https://api.github.com/repos/druid-io/druid/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/druid-io/druid/pulls/3148/commits"},"statuses":{"href":"https://api.github.com/repos/druid-io/druid/statuses/95fb9943535453e4910c1d29de55dbd04f98d1b1"}}}}
{"actor":{"display_login":"jon-wei"}}