{"action":"created","comment":{"url":"https://api.github.com/repos/telstra/open-kilda/pulls/comments/229378971","pull_request_review_id":169866252,"id":229378971,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIyOTM3ODk3MQ==","diff_hunk":"@@ -0,0 +1,219 @@\n+/* Copyright 2018 Telstra Open Source\n+ *\n+ *   Licensed under the Apache License, Version 2.0 (the \"License\");\n+ *   you may not use this file except in compliance with the License.\n+ *   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+\n+package org.openkilda.wfm.topology.flow.service;\n+\n+import org.openkilda.model.Flow;\n+import org.openkilda.model.FlowPair;\n+import org.openkilda.model.FlowPair.FlowPairBuilder;\n+import org.openkilda.model.FlowStatus;\n+import org.openkilda.model.Switch;\n+import org.openkilda.persistence.PersistenceManager;\n+import org.openkilda.persistence.TransactionManager;\n+import org.openkilda.persistence.repositories.FlowRepository;\n+import org.openkilda.persistence.repositories.FlowSegmentRepository;\n+import org.openkilda.persistence.repositories.IslRepository;\n+import org.openkilda.persistence.repositories.SwitchRepository;\n+\n+import java.time.Instant;\n+import java.util.ArrayList;\n+import java.util.Collection;\n+import java.util.HashMap;\n+import java.util.List;\n+import java.util.Map;\n+\n+public class FlowService {\n+    private PersistenceManager persistenceManager;\n+    private FlowRepository flowRepository;\n+    private FlowSegmentRepository flowSegmentRepository;\n+    private SwitchRepository switchRepository;\n+    private IslRepository islRepository;\n+\n+    public FlowService(PersistenceManager persistenceManager) {\n+        this.persistenceManager = persistenceManager;\n+        flowRepository = persistenceManager.getRepositoryFactory().createFlowRepository();\n+        flowSegmentRepository = persistenceManager.getRepositoryFactory().createFlowSegmentRepository();\n+        switchRepository = persistenceManager.getRepositoryFactory().createSwitchRepository();\n+        islRepository = persistenceManager.getRepositoryFactory().createIslRepository();\n+    }\n+\n+    public Iterable<Flow> getFlow(String flowId) {\n+        return flowRepository.findById(flowId);\n+    }\n+\n+    /**\n+     * Stores flow and it's segments into DB.\n+     *\n+     * @param flowPair - forward and reverse flows to be saved.\n+     */\n+    public void createFlow(FlowPair flowPair) {\n+        TransactionManager transactionManager = persistenceManager.getTransactionManager();\n+        transactionManager.begin();\n+        try {\n+            createFlowForPair(flowPair);\n+            transactionManager.commit();\n+        } catch (Exception e) {\n+            transactionManager.rollback();\n+            throw e;\n+        }\n+    }\n+\n+    private void createFlowForPair(FlowPair flowPair) {\n+        Flow flow = flowPair.getForward();\n+        flowSegmentRepository.deleteFlowSegments(flow);\n+        processCreateFlow(flow);\n+        flow = flowPair.getReverse();\n+        processCreateFlow(flow);\n+    }\n+\n+    private void processCreateFlow(Flow flow) {\n+        Switch srcSwitch = switchRepository.findBySwitchId(flow.getSrcSwitchId());\n+        Switch dstSwitch = switchRepository.findBySwitchId(flow.getDestSwitchId());\n+        flow.setSrcSwitch(srcSwitch);\n+        flow.setDestSwitch(dstSwitch);\n+        flow.setLastUpdated(Instant.now());\n+        flowRepository.createOrUpdate(flow);\n+        flowSegmentRepository.mergeFlowSegments(flow);\n+        islRepository.updateIslBandwidth(flow);\n+    }\n+\n+    /**\n+     * Deletes flow and it's segments from DB.\n+     *\n+     * @param flowId - flow id to be removed.\n+     */\n+    public void deleteFlow(String flowId) {\n+        TransactionManager transactionManager = persistenceManager.getTransactionManager();\n+        transactionManager.begin();\n+        try {\n+            Iterable<Flow> flows = flowRepository.findById(flowId);\n+            for (Flow flow : flows) {\n+                processDeleteFlow(flow);\n+            }\n+            transactionManager.commit();\n+        } catch (Exception e) {\n+            transactionManager.rollback();\n+            throw e;\n+        }\n+    }\n+\n+    /**\n+     * Get FlowPair by the FlowId.\n+     * @param flowId - flow identificator\n+     * @return FlowPair object\n+     */\n+    public FlowPair getFlowPair(String flowId) {\n+        Iterable<Flow> flows = flowRepository.findById(flowId);\n+        FlowPair.FlowPairBuilder flowPairBuilder = FlowPair.builder();\n+        for (Flow flow: flows) {\n+            if (flow.isForward()) {\n+                flowPairBuilder.forward(flow);\n+            } else {\n+                flowPairBuilder.reverse(flow);\n+            }\n+        }\n+        return flowPairBuilder.build();\n+    }\n+\n+    /**\n+     * Get all flows grouped in FlowPairs.\n+     * @return List of flow pairs\n+     */\n+    public List<FlowPair> getFlows() {\n+        Collection<Flow> flows = flowRepository.findAll();\n+        Map<String, FlowPairBuilder> flowPairs = new HashMap<>();\n+        for (Flow f : flows) {\n+            String flowId = f.getFlowId();\n+            FlowPair.FlowPairBuilder flowPairBuilder;\n+            if (flowPairs.containsKey(flowId)) {\n+                flowPairBuilder = flowPairs.get(flowId);\n+            } else {\n+                flowPairBuilder = FlowPair.builder();\n+                flowPairs.put(flowId, flowPairBuilder);\n+            }\n+            if (f.isForward()) {\n+                flowPairBuilder.forward(f);\n+            } else {\n+                flowPairBuilder.reverse(f);\n+            }\n+\n+        }\n+        List<FlowPair> flowPairList = new ArrayList<>();\n+        for (FlowPairBuilder builder :flowPairs.values()) {\n+            flowPairList.add(builder.build());\n+        }\n+        return flowPairList;\n+    }\n+\n+    /**\n+     * Update status for selected flow.\n+     * @param flowId - target flow to update\n+     * @param flowStatus - new status\n+     * @return target FlowPair\n+     */\n+    public FlowPair updateFlowStatus(String flowId, FlowStatus flowStatus) {\n+        TransactionManager transactionManager = this.persistenceManager.getTransactionManager();\n+        transactionManager.begin();\n+        try {\n+            FlowPair pair = getFlowPair(flowId);\n+            Flow forward = pair.getForward();\n+            Flow reverse = pair.getReverse();\n+            if (forward != null && reverse != null) {\n+                forward.setStatus(flowStatus);\n+                flowRepository.createOrUpdate(forward);\n+\n+                reverse.setStatus(flowStatus);\n+                flowRepository.createOrUpdate(reverse);\n+            }\n+            transactionManager.commit();\n+            return pair;\n+        } catch (Exception e) {\n+            transactionManager.rollback();\n+            throw e;\n+        }\n+    }\n+\n+    private void deleteFlowForPair(FlowPair flowPair) {","path":"services/wfm/src/main/java/org/openkilda/wfm/topology/flow/service/FlowService.java","position":188,"original_position":188,"commit_id":"cef18d55d4d0c5e79f954061a0345478a7435859","original_commit_id":"cef18d55d4d0c5e79f954061a0345478a7435859","user":{"login":"sonarcloud[bot]","id":39514782,"node_id":"MDM6Qm90Mzk1MTQ3ODI=","avatar_url":"https://avatars2.githubusercontent.com/in/12526?v=4","gravatar_id":"","url":"https://api.github.com/users/sonarcloud%5Bbot%5D","html_url":"https://github.com/apps/sonarcloud","followers_url":"https://api.github.com/users/sonarcloud%5Bbot%5D/followers","following_url":"https://api.github.com/users/sonarcloud%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/sonarcloud%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/sonarcloud%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sonarcloud%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/sonarcloud%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/sonarcloud%5Bbot%5D/repos","events_url":"https://api.github.com/users/sonarcloud%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/sonarcloud%5Bbot%5D/received_events","type":"Bot","site_admin":false},"body":"![Code Smell](https://sonarsource.github.io/sonar-github/code_smell.png 'Code Smell') Code Smell: Remove this unused private \"deleteFlowForPair\" method. ([squid:UnusedPrivateMethod](https://sonarcloud.io/organizations/open-kilda/rules#rule_key=squid%3AUnusedPrivateMethod))\n\n[See it in SonarCloud](https://sonarcloud.io/project/issues?id=org.openkilda.wfm%3AWorkflowManager&pullRequest=1494&issues=AWbFxzzjO08i52vdS9fh&open=AWbFxzzjO08i52vdS9fh)\n\n[ISSUE_KEY]: AWbFxzzjO08i52vdS9fh","created_at":"2018-10-30T16:21:09Z","updated_at":"2018-10-30T16:21:10Z","html_url":"https://github.com/telstra/open-kilda/pull/1494#discussion_r229378971","pull_request_url":"https://api.github.com/repos/telstra/open-kilda/pulls/1494","author_association":"NONE","_links":{"self":{"href":"https://api.github.com/repos/telstra/open-kilda/pulls/comments/229378971"},"html":{"href":"https://github.com/telstra/open-kilda/pull/1494#discussion_r229378971"},"pull_request":{"href":"https://api.github.com/repos/telstra/open-kilda/pulls/1494"}}},"pull_request":{"url":"https://api.github.com/repos/telstra/open-kilda/pulls/1494","id":225673957,"node_id":"MDExOlB1bGxSZXF1ZXN0MjI1NjczOTU3","html_url":"https://github.com/telstra/open-kilda/pull/1494","diff_url":"https://github.com/telstra/open-kilda/pull/1494.diff","patch_url":"https://github.com/telstra/open-kilda/pull/1494.patch","issue_url":"https://api.github.com/repos/telstra/open-kilda/issues/1494","number":1494,"state":"open","locked":false,"title":"Feature/poc tpe to wfm flow topology","user":{"login":"timofei-durakov","id":1677153,"node_id":"MDQ6VXNlcjE2NzcxNTM=","avatar_url":"https://avatars3.githubusercontent.com/u/1677153?v=4","gravatar_id":"","url":"https://api.github.com/users/timofei-durakov","html_url":"https://github.com/timofei-durakov","followers_url":"https://api.github.com/users/timofei-durakov/followers","following_url":"https://api.github.com/users/timofei-durakov/following{/other_user}","gists_url":"https://api.github.com/users/timofei-durakov/gists{/gist_id}","starred_url":"https://api.github.com/users/timofei-durakov/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/timofei-durakov/subscriptions","organizations_url":"https://api.github.com/users/timofei-durakov/orgs","repos_url":"https://api.github.com/users/timofei-durakov/repos","events_url":"https://api.github.com/users/timofei-durakov/events{/privacy}","received_events_url":"https://api.github.com/users/timofei-durakov/received_events","type":"User","site_admin":false},"body":"","created_at":"2018-10-25T08:53:21Z","updated_at":"2018-10-30T16:21:10Z","closed_at":null,"merged_at":null,"merge_commit_sha":"e021297f6f0f049c1b0458ec03b4d478381a9816","assignee":null,"assignees":[],"requested_reviewers":[{"login":"surabujin","id":2862761,"node_id":"MDQ6VXNlcjI4NjI3NjE=","avatar_url":"https://avatars2.githubusercontent.com/u/2862761?v=4","gravatar_id":"","url":"https://api.github.com/users/surabujin","html_url":"https://github.com/surabujin","followers_url":"https://api.github.com/users/surabujin/followers","following_url":"https://api.github.com/users/surabujin/following{/other_user}","gists_url":"https://api.github.com/users/surabujin/gists{/gist_id}","starred_url":"https://api.github.com/users/surabujin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/surabujin/subscriptions","organizations_url":"https://api.github.com/users/surabujin/orgs","repos_url":"https://api.github.com/users/surabujin/repos","events_url":"https://api.github.com/users/surabujin/events{/privacy}","received_events_url":"https://api.github.com/users/surabujin/received_events","type":"User","site_admin":false},{"login":"nikitamarchenko","id":3450363,"node_id":"MDQ6VXNlcjM0NTAzNjM=","avatar_url":"https://avatars3.githubusercontent.com/u/3450363?v=4","gravatar_id":"","url":"https://api.github.com/users/nikitamarchenko","html_url":"https://github.com/nikitamarchenko","followers_url":"https://api.github.com/users/nikitamarchenko/followers","following_url":"https://api.github.com/users/nikitamarchenko/following{/other_user}","gists_url":"https://api.github.com/users/nikitamarchenko/gists{/gist_id}","starred_url":"https://api.github.com/users/nikitamarchenko/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nikitamarchenko/subscriptions","organizations_url":"https://api.github.com/users/nikitamarchenko/orgs","repos_url":"https://api.github.com/users/nikitamarchenko/repos","events_url":"https://api.github.com/users/nikitamarchenko/events{/privacy}","received_events_url":"https://api.github.com/users/nikitamarchenko/received_events","type":"User","site_admin":false},{"login":"sergii-iakovenko","id":7511304,"node_id":"MDQ6VXNlcjc1MTEzMDQ=","avatar_url":"https://avatars0.githubusercontent.com/u/7511304?v=4","gravatar_id":"","url":"https://api.github.com/users/sergii-iakovenko","html_url":"https://github.com/sergii-iakovenko","followers_url":"https://api.github.com/users/sergii-iakovenko/followers","following_url":"https://api.github.com/users/sergii-iakovenko/following{/other_user}","gists_url":"https://api.github.com/users/sergii-iakovenko/gists{/gist_id}","starred_url":"https://api.github.com/users/sergii-iakovenko/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sergii-iakovenko/subscriptions","organizations_url":"https://api.github.com/users/sergii-iakovenko/orgs","repos_url":"https://api.github.com/users/sergii-iakovenko/repos","events_url":"https://api.github.com/users/sergii-iakovenko/events{/privacy}","received_events_url":"https://api.github.com/users/sergii-iakovenko/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/telstra/open-kilda/pulls/1494/commits","review_comments_url":"https://api.github.com/repos/telstra/open-kilda/pulls/1494/comments","review_comment_url":"https://api.github.com/repos/telstra/open-kilda/pulls/comments{/number}","comments_url":"https://api.github.com/repos/telstra/open-kilda/issues/1494/comments","statuses_url":"https://api.github.com/repos/telstra/open-kilda/statuses/cef18d55d4d0c5e79f954061a0345478a7435859","head":{"label":"telstra:feature/poc-tpe-to-wfm-flow-topology","ref":"feature/poc-tpe-to-wfm-flow-topology","sha":"cef18d55d4d0c5e79f954061a0345478a7435859","user":{"login":"telstra","id":3914896,"node_id":"MDEyOk9yZ2FuaXphdGlvbjM5MTQ4OTY=","avatar_url":"https://avatars2.githubusercontent.com/u/3914896?v=4","gravatar_id":"","url":"https://api.github.com/users/telstra","html_url":"https://github.com/telstra","followers_url":"https://api.github.com/users/telstra/followers","following_url":"https://api.github.com/users/telstra/following{/other_user}","gists_url":"https://api.github.com/users/telstra/gists{/gist_id}","starred_url":"https://api.github.com/users/telstra/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/telstra/subscriptions","organizations_url":"https://api.github.com/users/telstra/orgs","repos_url":"https://api.github.com/users/telstra/repos","events_url":"https://api.github.com/users/telstra/events{/privacy}","received_events_url":"https://api.github.com/users/telstra/received_events","type":"Organization","site_admin":false},"repo":{"id":104974693,"node_id":"MDEwOlJlcG9zaXRvcnkxMDQ5NzQ2OTM=","name":"open-kilda","full_name":"telstra/open-kilda","private":false,"owner":{"login":"telstra","id":3914896,"node_id":"MDEyOk9yZ2FuaXphdGlvbjM5MTQ4OTY=","avatar_url":"https://avatars2.githubusercontent.com/u/3914896?v=4","gravatar_id":"","url":"https://api.github.com/users/telstra","html_url":"https://github.com/telstra","followers_url":"https://api.github.com/users/telstra/followers","following_url":"https://api.github.com/users/telstra/following{/other_user}","gists_url":"https://api.github.com/users/telstra/gists{/gist_id}","starred_url":"https://api.github.com/users/telstra/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/telstra/subscriptions","organizations_url":"https://api.github.com/users/telstra/orgs","repos_url":"https://api.github.com/users/telstra/repos","events_url":"https://api.github.com/users/telstra/events{/privacy}","received_events_url":"https://api.github.com/users/telstra/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/telstra/open-kilda","description":"OpenKilda is an open-source OpenFlow controller initially designed for use in a global network with high control-plane latency and a heavy emphasis on latency-centric data path optimisation.","fork":false,"url":"https://api.github.com/repos/telstra/open-kilda","forks_url":"https://api.github.com/repos/telstra/open-kilda/forks","keys_url":"https://api.github.com/repos/telstra/open-kilda/keys{/key_id}","collaborators_url":"https://api.github.com/repos/telstra/open-kilda/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/telstra/open-kilda/teams","hooks_url":"https://api.github.com/repos/telstra/open-kilda/hooks","issue_events_url":"https://api.github.com/repos/telstra/open-kilda/issues/events{/number}","events_url":"https://api.github.com/repos/telstra/open-kilda/events","assignees_url":"https://api.github.com/repos/telstra/open-kilda/assignees{/user}","branches_url":"https://api.github.com/repos/telstra/open-kilda/branches{/branch}","tags_url":"https://api.github.com/repos/telstra/open-kilda/tags","blobs_url":"https://api.github.com/repos/telstra/open-kilda/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/telstra/open-kilda/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/telstra/open-kilda/git/refs{/sha}","trees_url":"https://api.github.com/repos/telstra/open-kilda/git/trees{/sha}","statuses_url":"https://api.github.com/repos/telstra/open-kilda/statuses/{sha}","languages_url":"https://api.github.com/repos/telstra/open-kilda/languages","stargazers_url":"https://api.github.com/repos/telstra/open-kilda/stargazers","contributors_url":"https://api.github.com/repos/telstra/open-kilda/contributors","subscribers_url":"https://api.github.com/repos/telstra/open-kilda/subscribers","subscription_url":"https://api.github.com/repos/telstra/open-kilda/subscription","commits_url":"https://api.github.com/repos/telstra/open-kilda/commits{/sha}","git_commits_url":"https://api.github.com/repos/telstra/open-kilda/git/commits{/sha}","comments_url":"https://api.github.com/repos/telstra/open-kilda/comments{/number}","issue_comment_url":"https://api.github.com/repos/telstra/open-kilda/issues/comments{/number}","contents_url":"https://api.github.com/repos/telstra/open-kilda/contents/{+path}","compare_url":"https://api.github.com/repos/telstra/open-kilda/compare/{base}...{head}","merges_url":"https://api.github.com/repos/telstra/open-kilda/merges","archive_url":"https://api.github.com/repos/telstra/open-kilda/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/telstra/open-kilda/downloads","issues_url":"https://api.github.com/repos/telstra/open-kilda/issues{/number}","pulls_url":"https://api.github.com/repos/telstra/open-kilda/pulls{/number}","milestones_url":"https://api.github.com/repos/telstra/open-kilda/milestones{/number}","notifications_url":"https://api.github.com/repos/telstra/open-kilda/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/telstra/open-kilda/labels{/name}","releases_url":"https://api.github.com/repos/telstra/open-kilda/releases{/id}","deployments_url":"https://api.github.com/repos/telstra/open-kilda/deployments","created_at":"2017-09-27T05:13:18Z","updated_at":"2018-10-30T16:02:29Z","pushed_at":"2018-10-30T16:11:53Z","git_url":"git://github.com/telstra/open-kilda.git","ssh_url":"git@github.com:telstra/open-kilda.git","clone_url":"https://github.com/telstra/open-kilda.git","svn_url":"https://github.com/telstra/open-kilda","homepage":"","size":210455,"stargazers_count":33,"watchers_count":33,"language":"Java","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":32,"mirror_url":null,"archived":false,"open_issues_count":268,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0","node_id":"MDc6TGljZW5zZTI="},"forks":32,"open_issues":268,"watchers":33,"default_branch":"develop"}},"base":{"label":"telstra:feature/pce-with-dao-refactoring","ref":"feature/pce-with-dao-refactoring","sha":"dc4337832aefa92d7d04494424f529e1e1e34b03","user":{"login":"telstra","id":3914896,"node_id":"MDEyOk9yZ2FuaXphdGlvbjM5MTQ4OTY=","avatar_url":"https://avatars2.githubusercontent.com/u/3914896?v=4","gravatar_id":"","url":"https://api.github.com/users/telstra","html_url":"https://github.com/telstra","followers_url":"https://api.github.com/users/telstra/followers","following_url":"https://api.github.com/users/telstra/following{/other_user}","gists_url":"https://api.github.com/users/telstra/gists{/gist_id}","starred_url":"https://api.github.com/users/telstra/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/telstra/subscriptions","organizations_url":"https://api.github.com/users/telstra/orgs","repos_url":"https://api.github.com/users/telstra/repos","events_url":"https://api.github.com/users/telstra/events{/privacy}","received_events_url":"https://api.github.com/users/telstra/received_events","type":"Organization","site_admin":false},"repo":{"id":104974693,"node_id":"MDEwOlJlcG9zaXRvcnkxMDQ5NzQ2OTM=","name":"open-kilda","full_name":"telstra/open-kilda","private":false,"owner":{"login":"telstra","id":3914896,"node_id":"MDEyOk9yZ2FuaXphdGlvbjM5MTQ4OTY=","avatar_url":"https://avatars2.githubusercontent.com/u/3914896?v=4","gravatar_id":"","url":"https://api.github.com/users/telstra","html_url":"https://github.com/telstra","followers_url":"https://api.github.com/users/telstra/followers","following_url":"https://api.github.com/users/telstra/following{/other_user}","gists_url":"https://api.github.com/users/telstra/gists{/gist_id}","starred_url":"https://api.github.com/users/telstra/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/telstra/subscriptions","organizations_url":"https://api.github.com/users/telstra/orgs","repos_url":"https://api.github.com/users/telstra/repos","events_url":"https://api.github.com/users/telstra/events{/privacy}","received_events_url":"https://api.github.com/users/telstra/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/telstra/open-kilda","description":"OpenKilda is an open-source OpenFlow controller initially designed for use in a global network with high control-plane latency and a heavy emphasis on latency-centric data path optimisation.","fork":false,"url":"https://api.github.com/repos/telstra/open-kilda","forks_url":"https://api.github.com/repos/telstra/open-kilda/forks","keys_url":"https://api.github.com/repos/telstra/open-kilda/keys{/key_id}","collaborators_url":"https://api.github.com/repos/telstra/open-kilda/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/telstra/open-kilda/teams","hooks_url":"https://api.github.com/repos/telstra/open-kilda/hooks","issue_events_url":"https://api.github.com/repos/telstra/open-kilda/issues/events{/number}","events_url":"https://api.github.com/repos/telstra/open-kilda/events","assignees_url":"https://api.github.com/repos/telstra/open-kilda/assignees{/user}","branches_url":"https://api.github.com/repos/telstra/open-kilda/branches{/branch}","tags_url":"https://api.github.com/repos/telstra/open-kilda/tags","blobs_url":"https://api.github.com/repos/telstra/open-kilda/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/telstra/open-kilda/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/telstra/open-kilda/git/refs{/sha}","trees_url":"https://api.github.com/repos/telstra/open-kilda/git/trees{/sha}","statuses_url":"https://api.github.com/repos/telstra/open-kilda/statuses/{sha}","languages_url":"https://api.github.com/repos/telstra/open-kilda/languages","stargazers_url":"https://api.github.com/repos/telstra/open-kilda/stargazers","contributors_url":"https://api.github.com/repos/telstra/open-kilda/contributors","subscribers_url":"https://api.github.com/repos/telstra/open-kilda/subscribers","subscription_url":"https://api.github.com/repos/telstra/open-kilda/subscription","commits_url":"https://api.github.com/repos/telstra/open-kilda/commits{/sha}","git_commits_url":"https://api.github.com/repos/telstra/open-kilda/git/commits{/sha}","comments_url":"https://api.github.com/repos/telstra/open-kilda/comments{/number}","issue_comment_url":"https://api.github.com/repos/telstra/open-kilda/issues/comments{/number}","contents_url":"https://api.github.com/repos/telstra/open-kilda/contents/{+path}","compare_url":"https://api.github.com/repos/telstra/open-kilda/compare/{base}...{head}","merges_url":"https://api.github.com/repos/telstra/open-kilda/merges","archive_url":"https://api.github.com/repos/telstra/open-kilda/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/telstra/open-kilda/downloads","issues_url":"https://api.github.com/repos/telstra/open-kilda/issues{/number}","pulls_url":"https://api.github.com/repos/telstra/open-kilda/pulls{/number}","milestones_url":"https://api.github.com/repos/telstra/open-kilda/milestones{/number}","notifications_url":"https://api.github.com/repos/telstra/open-kilda/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/telstra/open-kilda/labels{/name}","releases_url":"https://api.github.com/repos/telstra/open-kilda/releases{/id}","deployments_url":"https://api.github.com/repos/telstra/open-kilda/deployments","created_at":"2017-09-27T05:13:18Z","updated_at":"2018-10-30T16:02:29Z","pushed_at":"2018-10-30T16:11:53Z","git_url":"git://github.com/telstra/open-kilda.git","ssh_url":"git@github.com:telstra/open-kilda.git","clone_url":"https://github.com/telstra/open-kilda.git","svn_url":"https://github.com/telstra/open-kilda","homepage":"","size":210455,"stargazers_count":33,"watchers_count":33,"language":"Java","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":32,"mirror_url":null,"archived":false,"open_issues_count":268,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0","node_id":"MDc6TGljZW5zZTI="},"forks":32,"open_issues":268,"watchers":33,"default_branch":"develop"}},"_links":{"self":{"href":"https://api.github.com/repos/telstra/open-kilda/pulls/1494"},"html":{"href":"https://github.com/telstra/open-kilda/pull/1494"},"issue":{"href":"https://api.github.com/repos/telstra/open-kilda/issues/1494"},"comments":{"href":"https://api.github.com/repos/telstra/open-kilda/issues/1494/comments"},"review_comments":{"href":"https://api.github.com/repos/telstra/open-kilda/pulls/1494/comments"},"review_comment":{"href":"https://api.github.com/repos/telstra/open-kilda/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/telstra/open-kilda/pulls/1494/commits"},"statuses":{"href":"https://api.github.com/repos/telstra/open-kilda/statuses/cef18d55d4d0c5e79f954061a0345478a7435859"}},"author_association":"COLLABORATOR"}}
{"actor":{"display_login":"sonarcloud"}}