{"action":"created","comment":{"url":"https://api.github.com/repos/apache/spark/pulls/comments/32297179","id":32297179,"diff_hunk":"@@ -174,6 +186,183 @@ class ReceivedBlockHandlerSuite\n     }\n   }\n \n+  test(\"BlockManagerBasedBlockHandler-MEMORY_ONLY-ByteBufferBlock - count messages\") {\n+    storageLevel = StorageLevel.MEMORY_ONLY\n+    // Create a non-trivial (not all zeros) byte array\n+    val bytes = Array.tabulate(100)(i => i.toByte)\n+    val byteBufferBlock = ByteBuffer.wrap(bytes)\n+    withBlockManagerBasedBlockHandler { handler =>\n+      val blockStoreResult = storeBlock(handler, ByteBufferBlock(byteBufferBlock))\n+      // ByteBufferBlock is counted as single record\n+      assert(blockStoreResult.numRecords === Some(1))\n+    }\n+  }\n+\n+  test(\"WriteAheadLogBasedBlockHandler-MEMORY_ONLY-ByteBufferBlock - count messages\") {\n+    storageLevel = StorageLevel.MEMORY_ONLY\n+    // Create a non-trivial (not all zeros) byte array\n+    val bytes = Array.tabulate(100)(i => i.toByte)\n+    val byteBufferBlock = ByteBuffer.wrap(bytes)\n+    withWriteAheadLogBasedBlockHandler { handler =>\n+      val blockStoreResult = storeBlock(handler, ByteBufferBlock(byteBufferBlock))\n+      // ByteBufferBlock is counted as single record\n+      assert(blockStoreResult.numRecords === Some(1))\n+    }\n+  }\n+\n+  test(\"BlockManagerBasedBlockHandler-MEMORY_ONLY-ArrayBufferBlock - count messages\") {\n+    storageLevel = StorageLevel.MEMORY_ONLY\n+    val block = ArrayBuffer.fill(100)(0)\n+    withBlockManagerBasedBlockHandler { handler =>\n+      val blockStoreResult = storeBlock(handler, ArrayBufferBlock(block))\n+      assert(blockStoreResult.numRecords === Some(100))\n+    }\n+  }\n+\n+  test(\"BlockManagerBasedBlockHandler-DISK_ONLY-ArrayBufferBlock - count messages\") {\n+    storageLevel = StorageLevel.DISK_ONLY\n+    val block = ArrayBuffer.fill(100)(0)\n+    withBlockManagerBasedBlockHandler { handler =>\n+      val blockStoreResult = storeBlock(handler, ArrayBufferBlock(block))\n+      assert(blockStoreResult.numRecords === Some(100))\n+    }\n+  }\n+\n+  test(\"BlockManagerBasedBlockHandler-MEMORY_AND_DISK-ArrayBufferBlock - count messages\") {\n+    storageLevel = StorageLevel.MEMORY_AND_DISK\n+    val block = ArrayBuffer.fill(100)(0)\n+    withBlockManagerBasedBlockHandler { handler =>\n+      val blockStoreResult = storeBlock(handler, ArrayBufferBlock(block))\n+      assert(blockStoreResult.numRecords === Some(100))\n+    }\n+  }\n+\n+  test(\"BlockManagerBasedBlockHandler-MEMORY_ONLY-IteratorBlock - count messages\") {\n+    storageLevel = StorageLevel.MEMORY_ONLY\n+    val block = ArrayBuffer.fill(100)(0)\n+    withBlockManagerBasedBlockHandler { handler =>\n+      val blockStoreResult = storeBlock(handler, IteratorBlock(block.iterator))\n+      assert(blockStoreResult.numRecords === Some(100))\n+    }\n+  }\n+\n+  test(\"BlockManagerBasedBlockHandler-DISK_ONLY-IteratorBlock - count messages\") {\n+    storageLevel = StorageLevel.DISK_ONLY\n+    val block = ArrayBuffer.fill(100)(0)\n+    withBlockManagerBasedBlockHandler { handler =>\n+      val blockStoreResult = storeBlock(handler, IteratorBlock(block.iterator))\n+      assert(blockStoreResult.numRecords === Some(100))\n+    }\n+  }\n+\n+  test(\"BlockManagerBasedBlockHandler-MEMORY_AND_DISK-IteratorBlock - count messages\") {\n+    storageLevel = StorageLevel.MEMORY_AND_DISK\n+    val block = ArrayBuffer.fill(100)(0)\n+    withBlockManagerBasedBlockHandler { handler =>\n+      val blockStoreResult = storeBlock(handler, IteratorBlock(block.iterator))\n+      assert(blockStoreResult.numRecords === Some(100))\n+    }\n+  }\n+\n+  test(\"WriteAheadLogBasedBlockHandler-MEMORY_ONLY-ArrayBufferBlock - count messages\") {\n+    storageLevel = StorageLevel.MEMORY_ONLY\n+    val block = ArrayBuffer.fill(100)(0)\n+    withWriteAheadLogBasedBlockHandler { handler =>\n+      val blockStoreResult = storeBlock(handler, ArrayBufferBlock(block))\n+      assert(blockStoreResult.numRecords === Some(100))\n+    }\n+  }\n+\n+  test(\"WriteAheadLogBasedBlockHandler-DISK_ONLY-ArrayBufferBlock - count messages\") {\n+    storageLevel = StorageLevel.DISK_ONLY\n+    val block = ArrayBuffer.fill(100)(0)\n+    withWriteAheadLogBasedBlockHandler { handler =>\n+      val blockStoreResult = storeBlock(handler, ArrayBufferBlock(block))\n+      assert(blockStoreResult.numRecords === Some(100))\n+    }\n+  }\n+\n+  test(\"WriteAheadLogBasedBlockHandler-MEMORY_AND_DISK-ArrayBufferBlock - count messages\") {\n+    storageLevel = StorageLevel.MEMORY_AND_DISK\n+    val block = ArrayBuffer.fill(100)(0)\n+    withWriteAheadLogBasedBlockHandler { handler =>\n+      val blockStoreResult = storeBlock(handler, ArrayBufferBlock(block))\n+      assert(blockStoreResult.numRecords === Some(100))\n+    }\n+  }\n+\n+  test(\"WriteAheadLogBasedBlockHandler-MEMORY_ONLY-IteratorBlock - count messages\") {\n+    storageLevel = StorageLevel.MEMORY_ONLY\n+    val block = ArrayBuffer.fill(100)(0)\n+    withWriteAheadLogBasedBlockHandler { handler =>\n+      val blockStoreResult = storeBlock(handler, IteratorBlock(block.iterator))\n+      assert(blockStoreResult.numRecords === Some(100))\n+    }\n+  }\n+\n+  test(\"WriteAheadLogBasedBlockHandler-DISK_ONLY-IteratorBlock - count messages \") {\n+    storageLevel = StorageLevel.DISK_ONLY\n+    val block = ArrayBuffer.fill(100)(0)\n+    withWriteAheadLogBasedBlockHandler { handler =>\n+      val blockStoreResult = storeBlock(handler, IteratorBlock(block.iterator))\n+      assert(blockStoreResult.numRecords === Some(100))\n+    }\n+  }\n+\n+  test(\"WriteAheadLogBasedBlockHandler-MEMORY_AND_DISK-IteratorBlock - count messages\") {\n+    storageLevel = StorageLevel.MEMORY_AND_DISK\n+    val block = ArrayBuffer.fill(100)(0)\n+    withWriteAheadLogBasedBlockHandler { handler =>\n+      val blockStoreResult = storeBlock(handler, IteratorBlock(block.iterator))\n+      assert(blockStoreResult.numRecords === Some(100))\n+    }\n+  }\n+\n+  test(\"BlockManagerBasedBlockHandler - isFullyConsumed-MEMORY_ONLY\") {\n+    storageLevel = StorageLevel.MEMORY_ONLY\n+    blockManager = createBlockManager(12000)\n+    val block = List.fill(70)(new Array[Byte](100))\n+    // spark.storage.unrollFraction set to 0.4 for BlockManager\n+    // With 12000 * 0.4 = 4800 bytes of free space for unroll , there is not enough space to store\n+    // this block With MEMORY_ONLY StorageLevel. BlockManager will not be able to unroll this block\n+    // and hence it will not tryToPut this block , resulting the SparkException\n+    withBlockManagerBasedBlockHandler { handler =>\n+      val thrown = intercept[SparkException] {\n+        val blockStoreResult = storeBlock(handler, IteratorBlock(block.iterator))\n+      }\n+      assert(thrown.getMessage ===\n+        \"Could not store input-1-1000 to block manager with storage level \" + storageLevel)\n+    }\n+  }\n+\n+  test(\"BlockManagerBasedBlockHandler - isFullyConsumed-MEMORY_AND_DISK\") {\n+    storageLevel = StorageLevel.MEMORY_AND_DISK\n+    blockManager = createBlockManager(12000)\n+    val block = List.fill(70)(new Array[Byte](100))\n+    // spark.storage.unrollFraction set to 0.4 for BlockManager\n+    // With 12000 * 0.4 = 4800 bytes of free space for unroll , there is not enough space to store\n+    // this block in MEMORY , But BlockManager will be able to sereliaze this block to DISK\n+    // and hence count returns correct value.\n+    withBlockManagerBasedBlockHandler { handler =>\n+      val blockStoreResult = storeBlock(handler, IteratorBlock(block.iterator))\n+      assert(blockStoreResult.numRecords === Some(70))\n+    }\n+  }\n+\n+  test(\"WriteAheadLogBasedBlockHandler - isFullyConsumed-MEMORY_ONLY\") {\n+    storageLevel = StorageLevel.MEMORY_ONLY\n+    blockManager = createBlockManager(12000)\n+    val block = List.fill(70)(new Array[Byte](100))\n+    // spark.storage.unrollFraction set to 0.4 for BlockManager\n+    // With 12000 * 0.4 = 4800 bytes of free space for unroll , there is not enough space to store","path":"streaming/src/test/scala/org/apache/spark/streaming/ReceivedBlockHandlerSuite.scala","position":200,"original_position":200,"commit_id":"5a8344ae2258ed5c2af0c1c5231a54e88b4bba62","original_commit_id":"5a8344ae2258ed5c2af0c1c5231a54e88b4bba62","user":{"login":"tdas","id":663212,"avatar_url":"https://avatars.githubusercontent.com/u/663212?v=3","gravatar_id":"","url":"https://api.github.com/users/tdas","html_url":"https://github.com/tdas","followers_url":"https://api.github.com/users/tdas/followers","following_url":"https://api.github.com/users/tdas/following{/other_user}","gists_url":"https://api.github.com/users/tdas/gists{/gist_id}","starred_url":"https://api.github.com/users/tdas/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tdas/subscriptions","organizations_url":"https://api.github.com/users/tdas/orgs","repos_url":"https://api.github.com/users/tdas/repos","events_url":"https://api.github.com/users/tdas/events{/privacy}","received_events_url":"https://api.github.com/users/tdas/received_events","type":"User","site_admin":false},"body":"nit: extra space before , on both lines.","created_at":"2015-06-12T08:10:49Z","updated_at":"2015-06-12T08:10:49Z","html_url":"https://github.com/apache/spark/pull/6707#discussion_r32297179","pull_request_url":"https://api.github.com/repos/apache/spark/pulls/6707","_links":{"self":{"href":"https://api.github.com/repos/apache/spark/pulls/comments/32297179"},"html":{"href":"https://github.com/apache/spark/pull/6707#discussion_r32297179"},"pull_request":{"href":"https://api.github.com/repos/apache/spark/pulls/6707"}}},"pull_request":{"url":"https://api.github.com/repos/apache/spark/pulls/6707","id":37163779,"html_url":"https://github.com/apache/spark/pull/6707","diff_url":"https://github.com/apache/spark/pull/6707.diff","patch_url":"https://github.com/apache/spark/pull/6707.patch","issue_url":"https://api.github.com/repos/apache/spark/issues/6707","number":6707,"state":"open","locked":false,"title":"[SPARK-8080][STREAMING] Receiver.store with Iterator does not give correct count at Spark UI","user":{"login":"dibbhatt","id":4491803,"avatar_url":"https://avatars.githubusercontent.com/u/4491803?v=3","gravatar_id":"","url":"https://api.github.com/users/dibbhatt","html_url":"https://github.com/dibbhatt","followers_url":"https://api.github.com/users/dibbhatt/followers","following_url":"https://api.github.com/users/dibbhatt/following{/other_user}","gists_url":"https://api.github.com/users/dibbhatt/gists{/gist_id}","starred_url":"https://api.github.com/users/dibbhatt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dibbhatt/subscriptions","organizations_url":"https://api.github.com/users/dibbhatt/orgs","repos_url":"https://api.github.com/users/dibbhatt/repos","events_url":"https://api.github.com/users/dibbhatt/events{/privacy}","received_events_url":"https://api.github.com/users/dibbhatt/received_events","type":"User","site_admin":false},"body":"@tdas  @zsxwing this is the new PR for Spark-8080\r\n\r\nI have merged https://github.com/apache/spark/pull/6659\r\n\r\nAlso to mention , for MEMORY_ONLY settings , when Block is not able to unrollSafely to memory if enough space is not there, BlockManager won't try to put the block and ReceivedBlockHandler will throw SparkException as it could not find the block id in PutResult. Thus number of records in block won't be counted if Block failed to unroll in memory. Which is fine. \r\n\r\nFor MEMORY_DISK settings , if BlockManager not able to unroll block to memory, block will still get deseralized to Disk. Same for WAL based store. So for those cases ( storage level = memory + disk )  number of records will be counted even though the block not able to unroll to memory.\r\n\r\nthus I added the isFullyConsumed in the CountingIterator but have not used it as such case will never happen that block not fully consumed and ReceivedBlockHandler still get the block ID.\r\n\r\nI have added few test cases to cover those block unrolling scenarios also.","created_at":"2015-06-08T15:14:53Z","updated_at":"2015-06-12T08:10:49Z","closed_at":null,"merged_at":null,"merge_commit_sha":"deb0018877e2f48438cf050a42034c2e6d7ba0f8","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/apache/spark/pulls/6707/commits","review_comments_url":"https://api.github.com/repos/apache/spark/pulls/6707/comments","review_comment_url":"https://api.github.com/repos/apache/spark/pulls/comments{/number}","comments_url":"https://api.github.com/repos/apache/spark/issues/6707/comments","statuses_url":"https://api.github.com/repos/apache/spark/statuses/5a8344ae2258ed5c2af0c1c5231a54e88b4bba62","head":{"label":"dibbhatt:master","ref":"master","sha":"5a8344ae2258ed5c2af0c1c5231a54e88b4bba62","user":{"login":"dibbhatt","id":4491803,"avatar_url":"https://avatars.githubusercontent.com/u/4491803?v=3","gravatar_id":"","url":"https://api.github.com/users/dibbhatt","html_url":"https://github.com/dibbhatt","followers_url":"https://api.github.com/users/dibbhatt/followers","following_url":"https://api.github.com/users/dibbhatt/following{/other_user}","gists_url":"https://api.github.com/users/dibbhatt/gists{/gist_id}","starred_url":"https://api.github.com/users/dibbhatt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dibbhatt/subscriptions","organizations_url":"https://api.github.com/users/dibbhatt/orgs","repos_url":"https://api.github.com/users/dibbhatt/repos","events_url":"https://api.github.com/users/dibbhatt/events{/privacy}","received_events_url":"https://api.github.com/users/dibbhatt/received_events","type":"User","site_admin":false},"repo":{"id":36807693,"name":"spark","full_name":"dibbhatt/spark","owner":{"login":"dibbhatt","id":4491803,"avatar_url":"https://avatars.githubusercontent.com/u/4491803?v=3","gravatar_id":"","url":"https://api.github.com/users/dibbhatt","html_url":"https://github.com/dibbhatt","followers_url":"https://api.github.com/users/dibbhatt/followers","following_url":"https://api.github.com/users/dibbhatt/following{/other_user}","gists_url":"https://api.github.com/users/dibbhatt/gists{/gist_id}","starred_url":"https://api.github.com/users/dibbhatt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dibbhatt/subscriptions","organizations_url":"https://api.github.com/users/dibbhatt/orgs","repos_url":"https://api.github.com/users/dibbhatt/repos","events_url":"https://api.github.com/users/dibbhatt/events{/privacy}","received_events_url":"https://api.github.com/users/dibbhatt/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/dibbhatt/spark","description":"Mirror of Apache Spark","fork":true,"url":"https://api.github.com/repos/dibbhatt/spark","forks_url":"https://api.github.com/repos/dibbhatt/spark/forks","keys_url":"https://api.github.com/repos/dibbhatt/spark/keys{/key_id}","collaborators_url":"https://api.github.com/repos/dibbhatt/spark/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/dibbhatt/spark/teams","hooks_url":"https://api.github.com/repos/dibbhatt/spark/hooks","issue_events_url":"https://api.github.com/repos/dibbhatt/spark/issues/events{/number}","events_url":"https://api.github.com/repos/dibbhatt/spark/events","assignees_url":"https://api.github.com/repos/dibbhatt/spark/assignees{/user}","branches_url":"https://api.github.com/repos/dibbhatt/spark/branches{/branch}","tags_url":"https://api.github.com/repos/dibbhatt/spark/tags","blobs_url":"https://api.github.com/repos/dibbhatt/spark/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/dibbhatt/spark/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/dibbhatt/spark/git/refs{/sha}","trees_url":"https://api.github.com/repos/dibbhatt/spark/git/trees{/sha}","statuses_url":"https://api.github.com/repos/dibbhatt/spark/statuses/{sha}","languages_url":"https://api.github.com/repos/dibbhatt/spark/languages","stargazers_url":"https://api.github.com/repos/dibbhatt/spark/stargazers","contributors_url":"https://api.github.com/repos/dibbhatt/spark/contributors","subscribers_url":"https://api.github.com/repos/dibbhatt/spark/subscribers","subscription_url":"https://api.github.com/repos/dibbhatt/spark/subscription","commits_url":"https://api.github.com/repos/dibbhatt/spark/commits{/sha}","git_commits_url":"https://api.github.com/repos/dibbhatt/spark/git/commits{/sha}","comments_url":"https://api.github.com/repos/dibbhatt/spark/comments{/number}","issue_comment_url":"https://api.github.com/repos/dibbhatt/spark/issues/comments{/number}","contents_url":"https://api.github.com/repos/dibbhatt/spark/contents/{+path}","compare_url":"https://api.github.com/repos/dibbhatt/spark/compare/{base}...{head}","merges_url":"https://api.github.com/repos/dibbhatt/spark/merges","archive_url":"https://api.github.com/repos/dibbhatt/spark/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/dibbhatt/spark/downloads","issues_url":"https://api.github.com/repos/dibbhatt/spark/issues{/number}","pulls_url":"https://api.github.com/repos/dibbhatt/spark/pulls{/number}","milestones_url":"https://api.github.com/repos/dibbhatt/spark/milestones{/number}","notifications_url":"https://api.github.com/repos/dibbhatt/spark/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/dibbhatt/spark/labels{/name}","releases_url":"https://api.github.com/repos/dibbhatt/spark/releases{/id}","created_at":"2015-06-03T14:06:06Z","updated_at":"2015-06-08T11:47:30Z","pushed_at":"2015-06-10T01:27:50Z","git_url":"git://github.com/dibbhatt/spark.git","ssh_url":"git@github.com:dibbhatt/spark.git","clone_url":"https://github.com/dibbhatt/spark.git","svn_url":"https://github.com/dibbhatt/spark","homepage":null,"size":108623,"stargazers_count":0,"watchers_count":0,"language":"Scala","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":"apache:master","ref":"master","sha":"e3e9c70384028cc0c322ccea14f19d3b6d6b39eb","user":{"login":"apache","id":47359,"avatar_url":"https://avatars.githubusercontent.com/u/47359?v=3","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":17165658,"name":"spark","full_name":"apache/spark","owner":{"login":"apache","id":47359,"avatar_url":"https://avatars.githubusercontent.com/u/47359?v=3","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/spark","description":"Mirror of Apache Spark","fork":false,"url":"https://api.github.com/repos/apache/spark","forks_url":"https://api.github.com/repos/apache/spark/forks","keys_url":"https://api.github.com/repos/apache/spark/keys{/key_id}","collaborators_url":"https://api.github.com/repos/apache/spark/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/apache/spark/teams","hooks_url":"https://api.github.com/repos/apache/spark/hooks","issue_events_url":"https://api.github.com/repos/apache/spark/issues/events{/number}","events_url":"https://api.github.com/repos/apache/spark/events","assignees_url":"https://api.github.com/repos/apache/spark/assignees{/user}","branches_url":"https://api.github.com/repos/apache/spark/branches{/branch}","tags_url":"https://api.github.com/repos/apache/spark/tags","blobs_url":"https://api.github.com/repos/apache/spark/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/apache/spark/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/apache/spark/git/refs{/sha}","trees_url":"https://api.github.com/repos/apache/spark/git/trees{/sha}","statuses_url":"https://api.github.com/repos/apache/spark/statuses/{sha}","languages_url":"https://api.github.com/repos/apache/spark/languages","stargazers_url":"https://api.github.com/repos/apache/spark/stargazers","contributors_url":"https://api.github.com/repos/apache/spark/contributors","subscribers_url":"https://api.github.com/repos/apache/spark/subscribers","subscription_url":"https://api.github.com/repos/apache/spark/subscription","commits_url":"https://api.github.com/repos/apache/spark/commits{/sha}","git_commits_url":"https://api.github.com/repos/apache/spark/git/commits{/sha}","comments_url":"https://api.github.com/repos/apache/spark/comments{/number}","issue_comment_url":"https://api.github.com/repos/apache/spark/issues/comments{/number}","contents_url":"https://api.github.com/repos/apache/spark/contents/{+path}","compare_url":"https://api.github.com/repos/apache/spark/compare/{base}...{head}","merges_url":"https://api.github.com/repos/apache/spark/merges","archive_url":"https://api.github.com/repos/apache/spark/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/apache/spark/downloads","issues_url":"https://api.github.com/repos/apache/spark/issues{/number}","pulls_url":"https://api.github.com/repos/apache/spark/pulls{/number}","milestones_url":"https://api.github.com/repos/apache/spark/milestones{/number}","notifications_url":"https://api.github.com/repos/apache/spark/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/apache/spark/labels{/name}","releases_url":"https://api.github.com/repos/apache/spark/releases{/id}","created_at":"2014-02-25T08:00:08Z","updated_at":"2015-06-12T07:49:58Z","pushed_at":"2015-06-12T07:59:59Z","git_url":"git://github.com/apache/spark.git","ssh_url":"git@github.com:apache/spark.git","clone_url":"https://github.com/apache/spark.git","svn_url":"https://github.com/apache/spark","homepage":null,"size":1465242,"stargazers_count":4326,"watchers_count":4326,"language":"Scala","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":3797,"mirror_url":"git://git.apache.org/spark.git","open_issues_count":356,"forks":3797,"open_issues":356,"watchers":4326,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/apache/spark/pulls/6707"},"html":{"href":"https://github.com/apache/spark/pull/6707"},"issue":{"href":"https://api.github.com/repos/apache/spark/issues/6707"},"comments":{"href":"https://api.github.com/repos/apache/spark/issues/6707/comments"},"review_comments":{"href":"https://api.github.com/repos/apache/spark/pulls/6707/comments"},"review_comment":{"href":"https://api.github.com/repos/apache/spark/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/apache/spark/pulls/6707/commits"},"statuses":{"href":"https://api.github.com/repos/apache/spark/statuses/5a8344ae2258ed5c2af0c1c5231a54e88b4bba62"}}}}