{"action":"created","comment":{"url":"https://api.github.com/repos/apache/flink/pulls/comments/49451808","id":49451808,"diff_hunk":"@@ -0,0 +1,223 @@\n+/*\n+ * Licensed to the Apache Software Foundation (ASF) under one\n+ * or more contributor license agreements.  See the NOTICE file\n+ * distributed with this work for additional information\n+ * regarding copyright ownership.  The ASF 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, software\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n+ * See the License for the specific language governing permissions and\n+ * limitations under the License.\n+ */\n+package org.apache.flink.runtime.executiongraph;\n+\n+import java.lang.reflect.Field;\n+import java.util.ArrayList;\n+import java.util.Arrays;\n+import java.util.List;\n+\n+import org.apache.flink.api.common.JobID;\n+import org.apache.flink.api.common.JobType;\n+import org.apache.flink.configuration.Configuration;\n+import org.apache.flink.runtime.StoppingException;\n+import org.apache.flink.runtime.akka.AkkaUtils;\n+import org.apache.flink.runtime.jobgraph.JobVertex;\n+import org.apache.flink.runtime.jobgraph.DistributionPattern;\n+import org.apache.flink.runtime.jobgraph.JobStatus;\n+import org.apache.flink.runtime.testingUtils.TestingUtils;\n+import org.junit.Assert;\n+import org.junit.Before;\n+import org.junit.Test;\n+import org.junit.runner.RunWith;\n+import org.powermock.core.classloader.annotations.PrepareForTest;\n+import org.powermock.modules.junit4.PowerMockRunner;\n+import org.powermock.api.mockito.PowerMockito;\n+\n+import scala.concurrent.duration.FiniteDuration;\n+import static org.mockito.Mockito.any;\n+import static org.mockito.Mockito.mock;\n+import static org.mockito.Mockito.same;\n+import static org.mockito.Mockito.times;\n+import static org.mockito.Mockito.verify;\n+import static org.mockito.Mockito.when;\n+\n+@RunWith(PowerMockRunner.class)\n+@PrepareForTest(ExecutionGraph.class)\n+public class ExecutionGraphSignalsTest {\n+\tprivate ExecutionJobVertex[] mockEJV = new ExecutionJobVertex[5];\n+\tprivate int[] dop = new int[] { 5, 7, 2, 11, 4 };\n+\tprivate ExecutionVertex[][] mockEV = new ExecutionVertex[mockEJV.length][];\n+\tprivate ExecutionGraph eg;\n+\tprivate Field f;\n+\n+\t@Before\n+\tpublic void prepare() throws Exception {\n+\t\tfinal JobID jobId = new JobID();\n+\t\tfinal String jobName = \"Test Job Sample Name\";\n+\t\tfinal Configuration cfg = new Configuration();\n+\n+\n+\t\tassert (mockEJV.length == 5);\n+\t\tJobVertex v1 = new JobVertex(\"vertex1\");\n+\t\tJobVertex v2 = new JobVertex(\"vertex2\");\n+\t\tJobVertex v3 = new JobVertex(\"vertex3\");\n+\t\tJobVertex v4 = new JobVertex(\"vertex4\");\n+\t\tJobVertex v5 = new JobVertex(\"vertex5\");\n+\n+\t\tfor(int i = 0; i < mockEJV.length; ++i) {\n+\t\t\tmockEJV[i] = mock(ExecutionJobVertex.class);\n+\n+\t\t\tthis.mockEV[i] = new ExecutionVertex[dop[i]];\n+\t\t\tfor (int j = 0; j < dop[i]; ++j) {\n+\t\t\t\tthis.mockEV[i][j] = mock(ExecutionVertex.class);\n+\t\t\t}\n+\n+\t\t\twhen(mockEJV[i].getProducedDataSets()).thenReturn(new IntermediateResult[0]);\n+\t\t\twhen(mockEJV[i].getTaskVertices()).thenReturn(this.mockEV[i]);\n+\t\t}\n+\n+\t\tPowerMockito\n+\t\t\t.whenNew(ExecutionJobVertex.class)\n+\t\t\t.withArguments(any(ExecutionGraph.class), same(v1), any(Integer.class).intValue(),\n+\t\t\t\tany(FiniteDuration.class), any(Long.class).longValue()).thenReturn(mockEJV[0]);\n+\t\tPowerMockito\n+\t\t\t.whenNew(ExecutionJobVertex.class)\n+\t\t\t.withArguments(any(ExecutionGraph.class), same(v2), any(Integer.class).intValue(),\n+\t\t\t\tany(FiniteDuration.class), any(Long.class).longValue()).thenReturn(mockEJV[1]);\n+\t\tPowerMockito\n+\t\t\t.whenNew(ExecutionJobVertex.class)\n+\t\t\t.withArguments(any(ExecutionGraph.class), same(v3), any(Integer.class).intValue(),\n+\t\t\t\tany(FiniteDuration.class), any(Long.class).longValue()).thenReturn(mockEJV[2]);\n+\t\tPowerMockito\n+\t\t\t.whenNew(ExecutionJobVertex.class)\n+\t\t\t.withArguments(any(ExecutionGraph.class), same(v4), any(Integer.class).intValue(),\n+\t\t\t\tany(FiniteDuration.class), any(Long.class).longValue()).thenReturn(mockEJV[3]);\n+\t\tPowerMockito\n+\t\t\t.whenNew(ExecutionJobVertex.class)\n+\t\t\t.withArguments(any(ExecutionGraph.class), same(v5), any(Integer.class).intValue(),\n+\t\t\t\tany(FiniteDuration.class), any(Long.class).longValue()).thenReturn(mockEJV[4]);\n+\n+\t\tv1.setParallelism(dop[0]);\n+\t\tv2.setParallelism(dop[1]);\n+\t\tv3.setParallelism(dop[2]);\n+\t\tv4.setParallelism(dop[3]);\n+\t\tv5.setParallelism(dop[4]);\n+\n+\t\tv2.connectNewDataSetAsInput(v1, DistributionPattern.ALL_TO_ALL);\n+\t\tmockNumberOfInputs(1,0);\n+\t\tv4.connectNewDataSetAsInput(v2, DistributionPattern.ALL_TO_ALL);\n+\t\tmockNumberOfInputs(3,1);\n+\t\tv4.connectNewDataSetAsInput(v3, DistributionPattern.ALL_TO_ALL);\n+\t\tmockNumberOfInputs(3,2);\n+\t\tv5.connectNewDataSetAsInput(v4, DistributionPattern.ALL_TO_ALL);\n+\t\tmockNumberOfInputs(4,3);\n+\t\tv5.connectNewDataSetAsInput(v3, DistributionPattern.ALL_TO_ALL);\n+\t\tmockNumberOfInputs(4,2);\n+\n+\t\tList<JobVertex> ordered = new ArrayList<JobVertex>(Arrays.asList(v1, v2, v3, v4, v5));\n+\n+\t\teg = new ExecutionGraph(TestingUtils.defaultExecutionContext(), jobId, jobName,\n+\t\t\t\tJobType.BATCHING, cfg, AkkaUtils.getDefaultTimeout());\n+\t\teg.attachJobGraph(ordered);\n+\n+\t\tf = eg.getClass().getDeclaredField(\"state\");\n+\t\tf.setAccessible(true);\n+\t}\n+\n+\tprivate void mockNumberOfInputs(int nodeIndex, int predecessorIndex) {\n+\t\tfor(int j = 0; j < dop[nodeIndex]; ++j) {\n+\t\t\twhen(mockEV[nodeIndex][j].getNumberOfInputs()).thenReturn(dop[predecessorIndex]);\n+\t\t}\n+\t}\n+\n+\t@Test\n+\tpublic void testCancel() throws Exception {\n+\t\tAssert.assertEquals(JobStatus.CREATED, eg.getState());\n+\t\teg.cancel();\n+\n+\t\tverifyCancel(1);\n+\n+\t\tf.set(eg, JobStatus.RUNNING);\n+\t\teg.cancel();\n+\n+\t\tverifyCancel(2);\n+\t\tAssert.assertEquals(JobStatus.CANCELLING, eg.getState());\n+\n+\t\teg.cancel();\n+\n+\t\tverifyCancel(2);\n+\t\tAssert.assertEquals(JobStatus.CANCELLING, eg.getState());\n+\n+\t\tf.set(eg, JobStatus.CANCELED);\n+\t\teg.cancel();\n+\n+\t\tverifyCancel(2);\n+\t\tAssert.assertEquals(JobStatus.CANCELED, eg.getState());\n+\n+\t\tf.set(eg, JobStatus.FAILED);\n+\t\teg.cancel();\n+\n+\t\tverifyCancel(2);\n+\t\tAssert.assertEquals(JobStatus.FAILED, eg.getState());\n+\n+\t\tf.set(eg, JobStatus.FAILING);\n+\t\teg.cancel();\n+\n+\t\tverifyCancel(2);\n+\t\tAssert.assertEquals(JobStatus.CANCELLING, eg.getState());\n+\n+\t\tf.set(eg, JobStatus.FINISHED);\n+\t\teg.cancel();\n+\n+\t\tverifyCancel(2);\n+\t\tAssert.assertEquals(JobStatus.FINISHED, eg.getState());\n+\n+\t\tf.set(eg, JobStatus.RESTARTING);\n+\t\teg.cancel();\n+\n+\t\tverifyCancel(2);\n+\t\tAssert.assertEquals(JobStatus.CANCELED, eg.getState());\n+\t}\n+\n+\tprivate void verifyCancel(int times) {\n+\t\tfor (int i = 0; i < mockEJV.length; ++i) {\n+\t\t\tverify(mockEJV[i], times(times)).cancel();\n+\t\t}\n+\n+\t}\n+\n+\t@Test\n+\tpublic void testStop() throws Exception {","path":"flink-runtime/src/test/java/org/apache/flink/runtime/executiongraph/ExecutionGraphSignalsTest.java","position":196,"original_position":196,"commit_id":"b7aa2b149c11598f42e6154d602d8a0ce5a9a58c","original_commit_id":"b7aa2b149c11598f42e6154d602d8a0ce5a9a58c","user":{"login":"tillrohrmann","id":5756858,"avatar_url":"https://avatars.githubusercontent.com/u/5756858?v=3","gravatar_id":"","url":"https://api.github.com/users/tillrohrmann","html_url":"https://github.com/tillrohrmann","followers_url":"https://api.github.com/users/tillrohrmann/followers","following_url":"https://api.github.com/users/tillrohrmann/following{/other_user}","gists_url":"https://api.github.com/users/tillrohrmann/gists{/gist_id}","starred_url":"https://api.github.com/users/tillrohrmann/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tillrohrmann/subscriptions","organizations_url":"https://api.github.com/users/tillrohrmann/orgs","repos_url":"https://api.github.com/users/tillrohrmann/repos","events_url":"https://api.github.com/users/tillrohrmann/events{/privacy}","received_events_url":"https://api.github.com/users/tillrohrmann/received_events","type":"User","site_admin":false},"body":"A short comment what we're testing here would be helpful","created_at":"2016-01-12T13:12:23Z","updated_at":"2016-01-12T13:12:23Z","html_url":"https://github.com/apache/flink/pull/750#discussion_r49451808","pull_request_url":"https://api.github.com/repos/apache/flink/pulls/750","_links":{"self":{"href":"https://api.github.com/repos/apache/flink/pulls/comments/49451808"},"html":{"href":"https://github.com/apache/flink/pull/750#discussion_r49451808"},"pull_request":{"href":"https://api.github.com/repos/apache/flink/pulls/750"}}},"pull_request":{"url":"https://api.github.com/repos/apache/flink/pulls/750","id":36557373,"html_url":"https://github.com/apache/flink/pull/750","diff_url":"https://github.com/apache/flink/pull/750.diff","patch_url":"https://github.com/apache/flink/pull/750.patch","issue_url":"https://api.github.com/repos/apache/flink/issues/750","number":750,"state":"open","locked":false,"title":"[FLINK-2111] Add \"stop\" signal to cleanly shutdown streaming jobs","user":{"login":"mjsax","id":8959638,"avatar_url":"https://avatars.githubusercontent.com/u/8959638?v=3","gravatar_id":"","url":"https://api.github.com/users/mjsax","html_url":"https://github.com/mjsax","followers_url":"https://api.github.com/users/mjsax/followers","following_url":"https://api.github.com/users/mjsax/following{/other_user}","gists_url":"https://api.github.com/users/mjsax/gists{/gist_id}","starred_url":"https://api.github.com/users/mjsax/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mjsax/subscriptions","organizations_url":"https://api.github.com/users/mjsax/orgs","repos_url":"https://api.github.com/users/mjsax/repos","events_url":"https://api.github.com/users/mjsax/events{/privacy}","received_events_url":"https://api.github.com/users/mjsax/received_events","type":"User","site_admin":false},"body":"added TERMINATE signal\r\n  - JobManager, TaskManager, ExecutionGraph\r\n  - CliFrontend, JobManagerFrontend\r\n  - StreamTask, StreamSource","created_at":"2015-05-30T01:25:42Z","updated_at":"2016-01-12T13:12:23Z","closed_at":null,"merged_at":null,"merge_commit_sha":"4d18def7dc80e9ce2184d10d9b577f54ab76995b","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/apache/flink/pulls/750/commits","review_comments_url":"https://api.github.com/repos/apache/flink/pulls/750/comments","review_comment_url":"https://api.github.com/repos/apache/flink/pulls/comments{/number}","comments_url":"https://api.github.com/repos/apache/flink/issues/750/comments","statuses_url":"https://api.github.com/repos/apache/flink/statuses/b7aa2b149c11598f42e6154d602d8a0ce5a9a58c","head":{"label":"mjsax:flink-2111-terminate","ref":"flink-2111-terminate","sha":"b7aa2b149c11598f42e6154d602d8a0ce5a9a58c","user":{"login":"mjsax","id":8959638,"avatar_url":"https://avatars.githubusercontent.com/u/8959638?v=3","gravatar_id":"","url":"https://api.github.com/users/mjsax","html_url":"https://github.com/mjsax","followers_url":"https://api.github.com/users/mjsax/followers","following_url":"https://api.github.com/users/mjsax/following{/other_user}","gists_url":"https://api.github.com/users/mjsax/gists{/gist_id}","starred_url":"https://api.github.com/users/mjsax/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mjsax/subscriptions","organizations_url":"https://api.github.com/users/mjsax/orgs","repos_url":"https://api.github.com/users/mjsax/repos","events_url":"https://api.github.com/users/mjsax/events{/privacy}","received_events_url":"https://api.github.com/users/mjsax/received_events","type":"User","site_admin":false},"repo":{"id":28905963,"name":"flink","full_name":"mjsax/flink","owner":{"login":"mjsax","id":8959638,"avatar_url":"https://avatars.githubusercontent.com/u/8959638?v=3","gravatar_id":"","url":"https://api.github.com/users/mjsax","html_url":"https://github.com/mjsax","followers_url":"https://api.github.com/users/mjsax/followers","following_url":"https://api.github.com/users/mjsax/following{/other_user}","gists_url":"https://api.github.com/users/mjsax/gists{/gist_id}","starred_url":"https://api.github.com/users/mjsax/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mjsax/subscriptions","organizations_url":"https://api.github.com/users/mjsax/orgs","repos_url":"https://api.github.com/users/mjsax/repos","events_url":"https://api.github.com/users/mjsax/events{/privacy}","received_events_url":"https://api.github.com/users/mjsax/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/mjsax/flink","description":"Mirror of Apache Flink","fork":true,"url":"https://api.github.com/repos/mjsax/flink","forks_url":"https://api.github.com/repos/mjsax/flink/forks","keys_url":"https://api.github.com/repos/mjsax/flink/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mjsax/flink/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mjsax/flink/teams","hooks_url":"https://api.github.com/repos/mjsax/flink/hooks","issue_events_url":"https://api.github.com/repos/mjsax/flink/issues/events{/number}","events_url":"https://api.github.com/repos/mjsax/flink/events","assignees_url":"https://api.github.com/repos/mjsax/flink/assignees{/user}","branches_url":"https://api.github.com/repos/mjsax/flink/branches{/branch}","tags_url":"https://api.github.com/repos/mjsax/flink/tags","blobs_url":"https://api.github.com/repos/mjsax/flink/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mjsax/flink/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mjsax/flink/git/refs{/sha}","trees_url":"https://api.github.com/repos/mjsax/flink/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mjsax/flink/statuses/{sha}","languages_url":"https://api.github.com/repos/mjsax/flink/languages","stargazers_url":"https://api.github.com/repos/mjsax/flink/stargazers","contributors_url":"https://api.github.com/repos/mjsax/flink/contributors","subscribers_url":"https://api.github.com/repos/mjsax/flink/subscribers","subscription_url":"https://api.github.com/repos/mjsax/flink/subscription","commits_url":"https://api.github.com/repos/mjsax/flink/commits{/sha}","git_commits_url":"https://api.github.com/repos/mjsax/flink/git/commits{/sha}","comments_url":"https://api.github.com/repos/mjsax/flink/comments{/number}","issue_comment_url":"https://api.github.com/repos/mjsax/flink/issues/comments{/number}","contents_url":"https://api.github.com/repos/mjsax/flink/contents/{+path}","compare_url":"https://api.github.com/repos/mjsax/flink/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mjsax/flink/merges","archive_url":"https://api.github.com/repos/mjsax/flink/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mjsax/flink/downloads","issues_url":"https://api.github.com/repos/mjsax/flink/issues{/number}","pulls_url":"https://api.github.com/repos/mjsax/flink/pulls{/number}","milestones_url":"https://api.github.com/repos/mjsax/flink/milestones{/number}","notifications_url":"https://api.github.com/repos/mjsax/flink/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mjsax/flink/labels{/name}","releases_url":"https://api.github.com/repos/mjsax/flink/releases{/id}","created_at":"2015-01-07T08:38:24Z","updated_at":"2015-05-05T14:52:09Z","pushed_at":"2016-01-12T09:34:15Z","git_url":"git://github.com/mjsax/flink.git","ssh_url":"git@github.com:mjsax/flink.git","clone_url":"https://github.com/mjsax/flink.git","svn_url":"https://github.com/mjsax/flink","homepage":null,"size":68976,"stargazers_count":0,"watchers_count":0,"language":"Java","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":"dcf86c27b91170f99c4d575950c72db8d14617dc","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":20587599,"name":"flink","full_name":"apache/flink","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/flink","description":"Mirror of Apache Flink","fork":false,"url":"https://api.github.com/repos/apache/flink","forks_url":"https://api.github.com/repos/apache/flink/forks","keys_url":"https://api.github.com/repos/apache/flink/keys{/key_id}","collaborators_url":"https://api.github.com/repos/apache/flink/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/apache/flink/teams","hooks_url":"https://api.github.com/repos/apache/flink/hooks","issue_events_url":"https://api.github.com/repos/apache/flink/issues/events{/number}","events_url":"https://api.github.com/repos/apache/flink/events","assignees_url":"https://api.github.com/repos/apache/flink/assignees{/user}","branches_url":"https://api.github.com/repos/apache/flink/branches{/branch}","tags_url":"https://api.github.com/repos/apache/flink/tags","blobs_url":"https://api.github.com/repos/apache/flink/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/apache/flink/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/apache/flink/git/refs{/sha}","trees_url":"https://api.github.com/repos/apache/flink/git/trees{/sha}","statuses_url":"https://api.github.com/repos/apache/flink/statuses/{sha}","languages_url":"https://api.github.com/repos/apache/flink/languages","stargazers_url":"https://api.github.com/repos/apache/flink/stargazers","contributors_url":"https://api.github.com/repos/apache/flink/contributors","subscribers_url":"https://api.github.com/repos/apache/flink/subscribers","subscription_url":"https://api.github.com/repos/apache/flink/subscription","commits_url":"https://api.github.com/repos/apache/flink/commits{/sha}","git_commits_url":"https://api.github.com/repos/apache/flink/git/commits{/sha}","comments_url":"https://api.github.com/repos/apache/flink/comments{/number}","issue_comment_url":"https://api.github.com/repos/apache/flink/issues/comments{/number}","contents_url":"https://api.github.com/repos/apache/flink/contents/{+path}","compare_url":"https://api.github.com/repos/apache/flink/compare/{base}...{head}","merges_url":"https://api.github.com/repos/apache/flink/merges","archive_url":"https://api.github.com/repos/apache/flink/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/apache/flink/downloads","issues_url":"https://api.github.com/repos/apache/flink/issues{/number}","pulls_url":"https://api.github.com/repos/apache/flink/pulls{/number}","milestones_url":"https://api.github.com/repos/apache/flink/milestones{/number}","notifications_url":"https://api.github.com/repos/apache/flink/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/apache/flink/labels{/name}","releases_url":"https://api.github.com/repos/apache/flink/releases{/id}","created_at":"2014-06-07T07:00:10Z","updated_at":"2016-01-12T08:27:22Z","pushed_at":"2016-01-12T09:34:42Z","git_url":"git://github.com/apache/flink.git","ssh_url":"git@github.com:apache/flink.git","clone_url":"https://github.com/apache/flink.git","svn_url":"https://github.com/apache/flink","homepage":null,"size":86896,"stargazers_count":865,"watchers_count":865,"language":"Java","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":576,"mirror_url":"git://git.apache.org/flink.git","open_issues_count":76,"forks":576,"open_issues":76,"watchers":865,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/apache/flink/pulls/750"},"html":{"href":"https://github.com/apache/flink/pull/750"},"issue":{"href":"https://api.github.com/repos/apache/flink/issues/750"},"comments":{"href":"https://api.github.com/repos/apache/flink/issues/750/comments"},"review_comments":{"href":"https://api.github.com/repos/apache/flink/pulls/750/comments"},"review_comment":{"href":"https://api.github.com/repos/apache/flink/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/apache/flink/pulls/750/commits"},"statuses":{"href":"https://api.github.com/repos/apache/flink/statuses/b7aa2b149c11598f42e6154d602d8a0ce5a9a58c"}}}}