{"action":"created","issue":{"url":"https://api.github.com/repos/apache/spark/issues/7385","labels_url":"https://api.github.com/repos/apache/spark/issues/7385/labels{/name}","comments_url":"https://api.github.com/repos/apache/spark/issues/7385/comments","events_url":"https://api.github.com/repos/apache/spark/issues/7385/events","html_url":"https://github.com/apache/spark/pull/7385","id":94855627,"number":7385,"title":"[SPARK-9026] Refactor SimpleFutureAction.onComplete to not launch separate thread for every callback","user":{"login":"JoshRosen","id":50748,"avatar_url":"https://avatars.githubusercontent.com/u/50748?v=3","gravatar_id":"","url":"https://api.github.com/users/JoshRosen","html_url":"https://github.com/JoshRosen","followers_url":"https://api.github.com/users/JoshRosen/followers","following_url":"https://api.github.com/users/JoshRosen/following{/other_user}","gists_url":"https://api.github.com/users/JoshRosen/gists{/gist_id}","starred_url":"https://api.github.com/users/JoshRosen/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/JoshRosen/subscriptions","organizations_url":"https://api.github.com/users/JoshRosen/orgs","repos_url":"https://api.github.com/users/JoshRosen/repos","events_url":"https://api.github.com/users/JoshRosen/events{/privacy}","received_events_url":"https://api.github.com/users/JoshRosen/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":143,"created_at":"2015-07-14T02:47:56Z","updated_at":"2015-07-27T18:12:15Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/apache/spark/pulls/7385","html_url":"https://github.com/apache/spark/pull/7385","diff_url":"https://github.com/apache/spark/pull/7385.diff","patch_url":"https://github.com/apache/spark/pull/7385.patch"},"body":"This commit refactors SimpleFutureAction so that registering a callback with `onComplete` does not immediately tie up a thread in the provided execution context.\r\n\r\nAs @zsxwing noticed in https://github.com/apache/spark/pull/7276#issuecomment-121097747, the existing implementation of SimpleFutureAction.onComplete creates a separate thread to wrap the blocking `awaitResult()` callback:\r\n\r\n```scala\r\n  override def onComplete[U](func: (Try[T]) => U)(implicit executor: ExecutionContext) {\r\n    executor.execute(new Runnable {\r\n      override def run() {\r\n        func(awaitResult())\r\n      }\r\n    })\r\n  }\r\n```\r\n\r\nThis PR addresses this issue by making JobWaiter into a Future using that future in the implementation of SimpleFutureAction's future methods.\r\n\r\nThis patch was pair-programmed with @tdas."},"comment":{"url":"https://api.github.com/repos/apache/spark/issues/comments/125292302","html_url":"https://github.com/apache/spark/pull/7385#issuecomment-125292302","issue_url":"https://api.github.com/repos/apache/spark/issues/7385","id":125292302,"user":{"login":"AmplabJenkins","id":4031291,"avatar_url":"https://avatars.githubusercontent.com/u/4031291?v=3","gravatar_id":"","url":"https://api.github.com/users/AmplabJenkins","html_url":"https://github.com/AmplabJenkins","followers_url":"https://api.github.com/users/AmplabJenkins/followers","following_url":"https://api.github.com/users/AmplabJenkins/following{/other_user}","gists_url":"https://api.github.com/users/AmplabJenkins/gists{/gist_id}","starred_url":"https://api.github.com/users/AmplabJenkins/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/AmplabJenkins/subscriptions","organizations_url":"https://api.github.com/users/AmplabJenkins/orgs","repos_url":"https://api.github.com/users/AmplabJenkins/repos","events_url":"https://api.github.com/users/AmplabJenkins/events{/privacy}","received_events_url":"https://api.github.com/users/AmplabJenkins/received_events","type":"User","site_admin":false},"created_at":"2015-07-27T18:12:15Z","updated_at":"2015-07-27T18:12:15Z","body":" Merged build triggered."}}