{"action":"created","comment":{"url":"https://api.github.com/repos/ow2-proactive/scheduling/pulls/comments/207546148","pull_request_review_id":143182982,"id":207546148,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIwNzU0NjE0OA==","diff_hunk":"@@ -0,0 +1,314 @@\n+/*\n+ * ProActive Parallel Suite(TM):\n+ * The Open Source library for parallel and distributed\n+ * Workflows & Scheduling, Orchestration, Cloud Automation\n+ * and Big Data Analysis on Enterprise Grids & Clouds.\n+ *\n+ * Copyright (c) 2007 - 2017 ActiveEon\n+ * Contact: contact@activeeon.com\n+ *\n+ * This library is free software: you can redistribute it and/or\n+ * modify it under the terms of the GNU Affero General Public License\n+ * as published by the Free Software Foundation: version 3 of\n+ * the License.\n+ *\n+ * This program is distributed in the hope that it will be useful,\n+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\n+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n+ * GNU Affero General Public License for more details.\n+ *\n+ * You should have received a copy of the GNU Affero General Public License\n+ * along with this program. If not, see <http://www.gnu.org/licenses/>.\n+ *\n+ * If needed, contact us to obtain a release under GPL Version 2 or 3\n+ * or a different license than the AGPL.\n+ */\n+package functionaltests.job;\n+\n+import static functionaltests.utils.SchedulerTHelper.log;\n+import static org.junit.Assert.assertEquals;\n+import static org.junit.Assert.assertNull;\n+import static org.junit.Assert.assertTrue;\n+\n+import java.io.File;\n+import java.io.Serializable;\n+import java.nio.file.Path;\n+import java.util.Arrays;\n+import java.util.List;\n+import java.util.concurrent.ExecutorService;\n+import java.util.concurrent.Executors;\n+\n+import org.junit.After;\n+import org.junit.Assert;\n+import org.junit.Before;\n+import org.junit.BeforeClass;\n+import org.junit.Test;\n+import org.mockito.internal.util.collections.Sets;\n+import org.objectweb.proactive.ActiveObjectCreationException;\n+import org.objectweb.proactive.core.node.NodeException;\n+import org.ow2.proactive.resourcemanager.common.NodeState;\n+import org.ow2.proactive.resourcemanager.common.event.RMEventType;\n+import org.ow2.proactive.resourcemanager.common.event.RMNodeEvent;\n+import org.ow2.proactive.resourcemanager.utils.TargetType;\n+import org.ow2.proactive.scheduler.common.Scheduler;\n+import org.ow2.proactive.scheduler.common.job.JobId;\n+import org.ow2.proactive.scheduler.common.job.JobResult;\n+import org.ow2.proactive.scheduler.common.job.TaskFlowJob;\n+import org.ow2.proactive.scheduler.common.task.JavaTask;\n+import org.ow2.proactive.scheduler.common.task.OnTaskError;\n+import org.ow2.proactive.scheduler.common.task.TaskResult;\n+import org.ow2.proactive.scheduler.common.task.executable.JavaExecutable;\n+import org.ow2.proactive.scheduler.util.FileLock;\n+import org.ow2.proactive.scripting.ScriptHandler;\n+import org.ow2.proactive.scripting.ScriptResult;\n+import org.ow2.proactive.scripting.SelectionScript;\n+\n+import functionaltests.utils.SchedulerFunctionalTestWithCustomConfigAndRestart;\n+import functionaltests.utils.SchedulerTHelper;\n+import functionaltests.utils.TestNode;\n+\n+\n+/**\n+ * Test checks that when executing \"node scripts\" on busy nodes, the script execution does not impact the task occupying it\n+ *\n+ * It checks as well that a task starting on a node currently executing a \"node script\" does not impact its execution\n+ * \n+ * @author ProActive team\n+ *\n+ */\n+public class TestExecuteScriptsOnBusyNode extends SchedulerFunctionalTestWithCustomConfigAndRestart {\n+\n+    private static final long TIMEOUT = 60000;\n+\n+    private static int startedNodesCounter;\n+\n+    ExecutorService executorService;\n+\n+    public static class TestJavaTaskWithLock extends JavaExecutable {\n+\n+        private String fileLockPath;\n+\n+        @Override\n+        public Serializable execute(TaskResult... results) throws Throwable {\n+            getOut().println(\"OK\");\n+            FileLock.waitUntilUnlocked(fileLockPath);\n+            return \"OK\";\n+        }\n+\n+    }\n+\n+    public static class TestJavaTask extends JavaExecutable {\n+\n+        private String fileLockPath;\n+\n+        @Override\n+        public Serializable execute(TaskResult... results) throws Throwable {\n+            getOut().println(\"OK\");\n+            return \"OK\";\n+        }\n+\n+    }\n+\n+    /**\n+     * Starts an scheduler in non-fork mode with an empty rm\n+     *\n+     * @throws Exception\n+     */\n+    @BeforeClass\n+    public static void startDedicatedScheduler() throws Exception {\n+        schedulerHelper = new SchedulerTHelper(false,\n+                                               new File(SchedulerTHelper.class.getResource(\"/functionaltests/config/scheduler-nonforkedscripttasks.ini\")\n+                                                                              .toURI()).getAbsolutePath(),\n+                                               null,\n+                                               null);\n+    }\n+\n+    @Before\n+    public void deployNode() throws Exception {\n+        startNode();\n+        executorService = Executors.newSingleThreadExecutor();\n+    }\n+\n+    @Test\n+    public void testExecuteScriptOnBusyNode() throws Exception {\n+        FileLock fileLock = new FileLock();\n+        Path fileLockPath = fileLock.lock();\n+\n+        log(\"Submit job\");\n+        final JobId jobId = schedulerHelper.submitJob(createJobWithLock(fileLockPath.toString()));\n+\n+        log(\"Wait when node becomes busy\");\n+        RMNodeEvent event;\n+        do {\n+            event = schedulerHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED, TIMEOUT);\n+        } while (!event.getNodeState().equals(NodeState.BUSY));\n+\n+        log(\"Wait when task starts\");\n+        schedulerHelper.waitForEventTaskRunning(jobId, \"Test task\");\n+\n+        log(\"Wait some time until task launcher is started\");\n+        Thread.sleep(5000);\n+\n+        List<ScriptResult<Object>> results = schedulerHelper.getResourceManager()\n+                                                            .executeScript(\"println \\\"Executing Script\\\";\",\n+                                                                           \"groovy\",\n+                                                                           TargetType.NODE_URL.name(),\n+                                                                           Sets.newSet(testNode.getNodeURL()));\n+        Assert.assertEquals(1, results.size());\n+        ScriptResult result = results.get(0);\n+        if (result.errorOccured()) {\n+            result.getException().printStackTrace();\n+            Assert.fail(\"Script execution failed\");\n+        }\n+\n+        log(\"Let task finish\");\n+        fileLock.unlock();\n+\n+        log(\"Wait when job finish\");\n+        schedulerHelper.waitForEventJobFinished(jobId, TIMEOUT);\n+\n+        schedulerHelper.waitUntilState(testNode.getNodeURL(), NodeState.FREE, TIMEOUT);\n+\n+        log(\"Check job result\");\n+        checkJobResult(schedulerHelper.getSchedulerInterface(), jobId);\n+        checkActiveObjects();\n+    }\n+\n+    private void checkActiveObjects() throws NodeException, ActiveObjectCreationException, InterruptedException {\n+        try {\n+            // This is to avoid slight asynchronous delays in active objects termination\n+            Thread.sleep(1000);","path":"scheduler/scheduler-server/src/test/java/functionaltests/job/TestExecuteScriptsOnBusyNode.java","position":180,"original_position":180,"commit_id":"d474a894076c9579fff9d7b2e81ac37e692e58ee","original_commit_id":"d474a894076c9579fff9d7b2e81ac37e692e58ee","user":{"login":"sonarqube-activeeon","id":14940028,"node_id":"MDQ6VXNlcjE0OTQwMDI4","avatar_url":"https://avatars1.githubusercontent.com/u/14940028?v=4","gravatar_id":"","url":"https://api.github.com/users/sonarqube-activeeon","html_url":"https://github.com/sonarqube-activeeon","followers_url":"https://api.github.com/users/sonarqube-activeeon/followers","following_url":"https://api.github.com/users/sonarqube-activeeon/following{/other_user}","gists_url":"https://api.github.com/users/sonarqube-activeeon/gists{/gist_id}","starred_url":"https://api.github.com/users/sonarqube-activeeon/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sonarqube-activeeon/subscriptions","organizations_url":"https://api.github.com/users/sonarqube-activeeon/orgs","repos_url":"https://api.github.com/users/sonarqube-activeeon/repos","events_url":"https://api.github.com/users/sonarqube-activeeon/events{/privacy}","received_events_url":"https://api.github.com/users/sonarqube-activeeon/received_events","type":"User","site_admin":false},"body":"![MAJOR](https://sonarsource.github.io/sonar-github/severity-major.png 'Severity: MAJOR') Remove this use of \"Thread.sleep()\". [![rule](https://sonarsource.github.io/sonar-github/rule.png)](https://sonarcloud.io/coding_rules#rule_key=squid%3AS2925)\n","created_at":"2018-08-03T13:36:24Z","updated_at":"2018-08-03T13:36:24Z","html_url":"https://github.com/ow2-proactive/scheduling/pull/3283#discussion_r207546148","pull_request_url":"https://api.github.com/repos/ow2-proactive/scheduling/pulls/3283","author_association":"NONE","_links":{"self":{"href":"https://api.github.com/repos/ow2-proactive/scheduling/pulls/comments/207546148"},"html":{"href":"https://github.com/ow2-proactive/scheduling/pull/3283#discussion_r207546148"},"pull_request":{"href":"https://api.github.com/repos/ow2-proactive/scheduling/pulls/3283"}}},"pull_request":{"url":"https://api.github.com/repos/ow2-proactive/scheduling/pulls/3283","id":205802560,"node_id":"MDExOlB1bGxSZXF1ZXN0MjA1ODAyNTYw","html_url":"https://github.com/ow2-proactive/scheduling/pull/3283","diff_url":"https://github.com/ow2-proactive/scheduling/pull/3283.diff","patch_url":"https://github.com/ow2-proactive/scheduling/pull/3283.patch","issue_url":"https://api.github.com/repos/ow2-proactive/scheduling/issues/3283","number":3283,"state":"open","locked":false,"title":"fix for #3281 Executing a node script through the RM restapi \"node/script\" on a busy node makes the task running forever","user":{"login":"fviale","id":3063713,"node_id":"MDQ6VXNlcjMwNjM3MTM=","avatar_url":"https://avatars0.githubusercontent.com/u/3063713?v=4","gravatar_id":"","url":"https://api.github.com/users/fviale","html_url":"https://github.com/fviale","followers_url":"https://api.github.com/users/fviale/followers","following_url":"https://api.github.com/users/fviale/following{/other_user}","gists_url":"https://api.github.com/users/fviale/gists{/gist_id}","starred_url":"https://api.github.com/users/fviale/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/fviale/subscriptions","organizations_url":"https://api.github.com/users/fviale/orgs","repos_url":"https://api.github.com/users/fviale/repos","events_url":"https://api.github.com/users/fviale/events{/privacy}","received_events_url":"https://api.github.com/users/fviale/received_events","type":"User","site_admin":false},"body":" - when executing a \"node script\", only terminate the script handler associated with the script execution, don't kill all active objects on the node\r\n - in ScriptExecutor, notify the manager only the node has been cleaned (to avoid asynchronous clean)\r\n - functional tests associated","created_at":"2018-08-02T17:07:37Z","updated_at":"2018-08-03T13:36:24Z","closed_at":null,"merged_at":null,"merge_commit_sha":"1e84dccb008f9ff38ddcbfc08d2a6dae8657f2c2","assignee":null,"assignees":[],"requested_reviewers":[{"login":"marcocast","id":706746,"node_id":"MDQ6VXNlcjcwNjc0Ng==","avatar_url":"https://avatars1.githubusercontent.com/u/706746?v=4","gravatar_id":"","url":"https://api.github.com/users/marcocast","html_url":"https://github.com/marcocast","followers_url":"https://api.github.com/users/marcocast/followers","following_url":"https://api.github.com/users/marcocast/following{/other_user}","gists_url":"https://api.github.com/users/marcocast/gists{/gist_id}","starred_url":"https://api.github.com/users/marcocast/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/marcocast/subscriptions","organizations_url":"https://api.github.com/users/marcocast/orgs","repos_url":"https://api.github.com/users/marcocast/repos","events_url":"https://api.github.com/users/marcocast/events{/privacy}","received_events_url":"https://api.github.com/users/marcocast/received_events","type":"User","site_admin":false},{"login":"Mykhailenko","id":761558,"node_id":"MDQ6VXNlcjc2MTU1OA==","avatar_url":"https://avatars3.githubusercontent.com/u/761558?v=4","gravatar_id":"","url":"https://api.github.com/users/Mykhailenko","html_url":"https://github.com/Mykhailenko","followers_url":"https://api.github.com/users/Mykhailenko/followers","following_url":"https://api.github.com/users/Mykhailenko/following{/other_user}","gists_url":"https://api.github.com/users/Mykhailenko/gists{/gist_id}","starred_url":"https://api.github.com/users/Mykhailenko/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Mykhailenko/subscriptions","organizations_url":"https://api.github.com/users/Mykhailenko/orgs","repos_url":"https://api.github.com/users/Mykhailenko/repos","events_url":"https://api.github.com/users/Mykhailenko/events{/privacy}","received_events_url":"https://api.github.com/users/Mykhailenko/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/ow2-proactive/scheduling/pulls/3283/commits","review_comments_url":"https://api.github.com/repos/ow2-proactive/scheduling/pulls/3283/comments","review_comment_url":"https://api.github.com/repos/ow2-proactive/scheduling/pulls/comments{/number}","comments_url":"https://api.github.com/repos/ow2-proactive/scheduling/issues/3283/comments","statuses_url":"https://api.github.com/repos/ow2-proactive/scheduling/statuses/d474a894076c9579fff9d7b2e81ac37e692e58ee","head":{"label":"fviale:master","ref":"master","sha":"d474a894076c9579fff9d7b2e81ac37e692e58ee","user":{"login":"fviale","id":3063713,"node_id":"MDQ6VXNlcjMwNjM3MTM=","avatar_url":"https://avatars0.githubusercontent.com/u/3063713?v=4","gravatar_id":"","url":"https://api.github.com/users/fviale","html_url":"https://github.com/fviale","followers_url":"https://api.github.com/users/fviale/followers","following_url":"https://api.github.com/users/fviale/following{/other_user}","gists_url":"https://api.github.com/users/fviale/gists{/gist_id}","starred_url":"https://api.github.com/users/fviale/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/fviale/subscriptions","organizations_url":"https://api.github.com/users/fviale/orgs","repos_url":"https://api.github.com/users/fviale/repos","events_url":"https://api.github.com/users/fviale/events{/privacy}","received_events_url":"https://api.github.com/users/fviale/received_events","type":"User","site_admin":false},"repo":{"id":78038357,"node_id":"MDEwOlJlcG9zaXRvcnk3ODAzODM1Nw==","name":"scheduling","full_name":"fviale/scheduling","owner":{"login":"fviale","id":3063713,"node_id":"MDQ6VXNlcjMwNjM3MTM=","avatar_url":"https://avatars0.githubusercontent.com/u/3063713?v=4","gravatar_id":"","url":"https://api.github.com/users/fviale","html_url":"https://github.com/fviale","followers_url":"https://api.github.com/users/fviale/followers","following_url":"https://api.github.com/users/fviale/following{/other_user}","gists_url":"https://api.github.com/users/fviale/gists{/gist_id}","starred_url":"https://api.github.com/users/fviale/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/fviale/subscriptions","organizations_url":"https://api.github.com/users/fviale/orgs","repos_url":"https://api.github.com/users/fviale/repos","events_url":"https://api.github.com/users/fviale/events{/privacy}","received_events_url":"https://api.github.com/users/fviale/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/fviale/scheduling","description":"Multi-platform Scheduling and Workflows Engine","fork":true,"url":"https://api.github.com/repos/fviale/scheduling","forks_url":"https://api.github.com/repos/fviale/scheduling/forks","keys_url":"https://api.github.com/repos/fviale/scheduling/keys{/key_id}","collaborators_url":"https://api.github.com/repos/fviale/scheduling/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/fviale/scheduling/teams","hooks_url":"https://api.github.com/repos/fviale/scheduling/hooks","issue_events_url":"https://api.github.com/repos/fviale/scheduling/issues/events{/number}","events_url":"https://api.github.com/repos/fviale/scheduling/events","assignees_url":"https://api.github.com/repos/fviale/scheduling/assignees{/user}","branches_url":"https://api.github.com/repos/fviale/scheduling/branches{/branch}","tags_url":"https://api.github.com/repos/fviale/scheduling/tags","blobs_url":"https://api.github.com/repos/fviale/scheduling/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/fviale/scheduling/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/fviale/scheduling/git/refs{/sha}","trees_url":"https://api.github.com/repos/fviale/scheduling/git/trees{/sha}","statuses_url":"https://api.github.com/repos/fviale/scheduling/statuses/{sha}","languages_url":"https://api.github.com/repos/fviale/scheduling/languages","stargazers_url":"https://api.github.com/repos/fviale/scheduling/stargazers","contributors_url":"https://api.github.com/repos/fviale/scheduling/contributors","subscribers_url":"https://api.github.com/repos/fviale/scheduling/subscribers","subscription_url":"https://api.github.com/repos/fviale/scheduling/subscription","commits_url":"https://api.github.com/repos/fviale/scheduling/commits{/sha}","git_commits_url":"https://api.github.com/repos/fviale/scheduling/git/commits{/sha}","comments_url":"https://api.github.com/repos/fviale/scheduling/comments{/number}","issue_comment_url":"https://api.github.com/repos/fviale/scheduling/issues/comments{/number}","contents_url":"https://api.github.com/repos/fviale/scheduling/contents/{+path}","compare_url":"https://api.github.com/repos/fviale/scheduling/compare/{base}...{head}","merges_url":"https://api.github.com/repos/fviale/scheduling/merges","archive_url":"https://api.github.com/repos/fviale/scheduling/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/fviale/scheduling/downloads","issues_url":"https://api.github.com/repos/fviale/scheduling/issues{/number}","pulls_url":"https://api.github.com/repos/fviale/scheduling/pulls{/number}","milestones_url":"https://api.github.com/repos/fviale/scheduling/milestones{/number}","notifications_url":"https://api.github.com/repos/fviale/scheduling/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/fviale/scheduling/labels{/name}","releases_url":"https://api.github.com/repos/fviale/scheduling/releases{/id}","deployments_url":"https://api.github.com/repos/fviale/scheduling/deployments","created_at":"2017-01-04T17:41:08Z","updated_at":"2018-08-03T11:12:57Z","pushed_at":"2018-08-03T11:12:55Z","git_url":"git://github.com/fviale/scheduling.git","ssh_url":"git@github.com:fviale/scheduling.git","clone_url":"https://github.com/fviale/scheduling.git","svn_url":"https://github.com/fviale/scheduling","homepage":"http://www.activeeon.com/workflows-scheduling","size":72839,"stargazers_count":0,"watchers_count":0,"language":"Java","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"agpl-3.0","name":"GNU Affero General Public License v3.0","spdx_id":"AGPL-3.0","url":"https://api.github.com/licenses/agpl-3.0","node_id":"MDc6TGljZW5zZTE="},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"ow2-proactive:master","ref":"master","sha":"79bf2440511d8b62a085f43a5e2f3f426590d256","user":{"login":"ow2-proactive","id":11553998,"node_id":"MDEyOk9yZ2FuaXphdGlvbjExNTUzOTk4","avatar_url":"https://avatars1.githubusercontent.com/u/11553998?v=4","gravatar_id":"","url":"https://api.github.com/users/ow2-proactive","html_url":"https://github.com/ow2-proactive","followers_url":"https://api.github.com/users/ow2-proactive/followers","following_url":"https://api.github.com/users/ow2-proactive/following{/other_user}","gists_url":"https://api.github.com/users/ow2-proactive/gists{/gist_id}","starred_url":"https://api.github.com/users/ow2-proactive/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ow2-proactive/subscriptions","organizations_url":"https://api.github.com/users/ow2-proactive/orgs","repos_url":"https://api.github.com/users/ow2-proactive/repos","events_url":"https://api.github.com/users/ow2-proactive/events{/privacy}","received_events_url":"https://api.github.com/users/ow2-proactive/received_events","type":"Organization","site_admin":false},"repo":{"id":35725079,"node_id":"MDEwOlJlcG9zaXRvcnkzNTcyNTA3OQ==","name":"scheduling","full_name":"ow2-proactive/scheduling","owner":{"login":"ow2-proactive","id":11553998,"node_id":"MDEyOk9yZ2FuaXphdGlvbjExNTUzOTk4","avatar_url":"https://avatars1.githubusercontent.com/u/11553998?v=4","gravatar_id":"","url":"https://api.github.com/users/ow2-proactive","html_url":"https://github.com/ow2-proactive","followers_url":"https://api.github.com/users/ow2-proactive/followers","following_url":"https://api.github.com/users/ow2-proactive/following{/other_user}","gists_url":"https://api.github.com/users/ow2-proactive/gists{/gist_id}","starred_url":"https://api.github.com/users/ow2-proactive/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ow2-proactive/subscriptions","organizations_url":"https://api.github.com/users/ow2-proactive/orgs","repos_url":"https://api.github.com/users/ow2-proactive/repos","events_url":"https://api.github.com/users/ow2-proactive/events{/privacy}","received_events_url":"https://api.github.com/users/ow2-proactive/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/ow2-proactive/scheduling","description":"Multi-platform Scheduling and Workflows Engine","fork":false,"url":"https://api.github.com/repos/ow2-proactive/scheduling","forks_url":"https://api.github.com/repos/ow2-proactive/scheduling/forks","keys_url":"https://api.github.com/repos/ow2-proactive/scheduling/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ow2-proactive/scheduling/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ow2-proactive/scheduling/teams","hooks_url":"https://api.github.com/repos/ow2-proactive/scheduling/hooks","issue_events_url":"https://api.github.com/repos/ow2-proactive/scheduling/issues/events{/number}","events_url":"https://api.github.com/repos/ow2-proactive/scheduling/events","assignees_url":"https://api.github.com/repos/ow2-proactive/scheduling/assignees{/user}","branches_url":"https://api.github.com/repos/ow2-proactive/scheduling/branches{/branch}","tags_url":"https://api.github.com/repos/ow2-proactive/scheduling/tags","blobs_url":"https://api.github.com/repos/ow2-proactive/scheduling/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ow2-proactive/scheduling/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ow2-proactive/scheduling/git/refs{/sha}","trees_url":"https://api.github.com/repos/ow2-proactive/scheduling/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ow2-proactive/scheduling/statuses/{sha}","languages_url":"https://api.github.com/repos/ow2-proactive/scheduling/languages","stargazers_url":"https://api.github.com/repos/ow2-proactive/scheduling/stargazers","contributors_url":"https://api.github.com/repos/ow2-proactive/scheduling/contributors","subscribers_url":"https://api.github.com/repos/ow2-proactive/scheduling/subscribers","subscription_url":"https://api.github.com/repos/ow2-proactive/scheduling/subscription","commits_url":"https://api.github.com/repos/ow2-proactive/scheduling/commits{/sha}","git_commits_url":"https://api.github.com/repos/ow2-proactive/scheduling/git/commits{/sha}","comments_url":"https://api.github.com/repos/ow2-proactive/scheduling/comments{/number}","issue_comment_url":"https://api.github.com/repos/ow2-proactive/scheduling/issues/comments{/number}","contents_url":"https://api.github.com/repos/ow2-proactive/scheduling/contents/{+path}","compare_url":"https://api.github.com/repos/ow2-proactive/scheduling/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ow2-proactive/scheduling/merges","archive_url":"https://api.github.com/repos/ow2-proactive/scheduling/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ow2-proactive/scheduling/downloads","issues_url":"https://api.github.com/repos/ow2-proactive/scheduling/issues{/number}","pulls_url":"https://api.github.com/repos/ow2-proactive/scheduling/pulls{/number}","milestones_url":"https://api.github.com/repos/ow2-proactive/scheduling/milestones{/number}","notifications_url":"https://api.github.com/repos/ow2-proactive/scheduling/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ow2-proactive/scheduling/labels{/name}","releases_url":"https://api.github.com/repos/ow2-proactive/scheduling/releases{/id}","deployments_url":"https://api.github.com/repos/ow2-proactive/scheduling/deployments","created_at":"2015-05-16T13:38:55Z","updated_at":"2018-08-02T11:05:16Z","pushed_at":"2018-08-03T11:12:57Z","git_url":"git://github.com/ow2-proactive/scheduling.git","ssh_url":"git@github.com:ow2-proactive/scheduling.git","clone_url":"https://github.com/ow2-proactive/scheduling.git","svn_url":"https://github.com/ow2-proactive/scheduling","homepage":"http://www.activeeon.com/workflows-scheduling","size":74083,"stargazers_count":29,"watchers_count":29,"language":"Java","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":40,"mirror_url":null,"archived":false,"open_issues_count":183,"license":{"key":"agpl-3.0","name":"GNU Affero General Public License v3.0","spdx_id":"AGPL-3.0","url":"https://api.github.com/licenses/agpl-3.0","node_id":"MDc6TGljZW5zZTE="},"forks":40,"open_issues":183,"watchers":29,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/ow2-proactive/scheduling/pulls/3283"},"html":{"href":"https://github.com/ow2-proactive/scheduling/pull/3283"},"issue":{"href":"https://api.github.com/repos/ow2-proactive/scheduling/issues/3283"},"comments":{"href":"https://api.github.com/repos/ow2-proactive/scheduling/issues/3283/comments"},"review_comments":{"href":"https://api.github.com/repos/ow2-proactive/scheduling/pulls/3283/comments"},"review_comment":{"href":"https://api.github.com/repos/ow2-proactive/scheduling/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/ow2-proactive/scheduling/pulls/3283/commits"},"statuses":{"href":"https://api.github.com/repos/ow2-proactive/scheduling/statuses/d474a894076c9579fff9d7b2e81ac37e692e58ee"}},"author_association":"MEMBER"}}
{"actor":{"display_login":"sonarqube-activeeon"}}