{"action":"created","comment":{"url":"https://api.github.com/repos/Azure/sonic-swss/pulls/comments/223171515","pull_request_review_id":162244474,"id":223171515,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIyMzE3MTUxNQ==","diff_hunk":"@@ -789,3 +789,670 @@ def test_swss_port_state_syncup(dvs):\n             assert oper_status == \"down\"\n         else:\n             assert oper_status == \"up\"\n+\n+\n+#############################################################################\n+#                                                                           #\n+#                        Routing Warm-Reboot Testing                        #\n+#                                                                           #\n+#############################################################################\n+\n+\n+def clear_logs(dvs):\n+    dvs.runcmd(['sh', '-c', '> /var/log/syslog'])\n+    dvs.runcmd(['sh', '-c', '> /var/log/swss/swss.rec'])\n+    dvs.runcmd(['sh', '-c', '> /var/log/swss/sairedis.rec'])\n+\n+\n+def start_zebra(dvs):\n+    dvs.runcmd(['sh', '-c', 'supervisorctl start zebra'])\n+\n+    # Let's give zebra a chance to connect to FPM.\n+    time.sleep(5)\n+\n+\n+def stop_zebra(dvs):\n+    dvs.runcmd(['sh', '-c', 'pkill -x zebra'])\n+    time.sleep(1)\n+\n+\n+def start_fpmsyncd(dvs):\n+    dvs.runcmd(['sh', '-c', 'supervisorctl start fpmsyncd'])\n+\n+    # Let's give zebra a chance to connect to Zebra.\n+    time.sleep(5)\n+\n+\n+def stop_fpmsyncd(dvs):\n+    dvs.runcmd(['sh', '-c', 'pkill -x fpmsyncd'])\n+    time.sleep(1)\n+\n+\n+def enable_warmrestart(dvs, db, app_name):\n+    create_entry_tbl(\n+        db,\n+        swsscommon.CFG_WARM_RESTART_TABLE_NAME, app_name,\n+        [\n+            (\"enable\", \"true\"),\n+        ]\n+    )\n+\n+\n+def disable_warmrestart(dvs, db, app_name):\n+    create_entry_tbl(\n+        db,\n+        swsscommon.CFG_WARM_RESTART_TABLE_NAME, app_name,\n+        [\n+            (\"enable\", \"false\"),\n+        ]\n+    )\n+\n+\n+def set_restart_timer(dvs, db, app_name, value):\n+    create_entry_tbl(\n+        db,\n+        swsscommon.CFG_WARM_RESTART_TABLE_NAME, app_name,\n+        [\n+            (app_name + \"_timer\", value),\n+        ]\n+    )\n+\n+\n+# function to check neighbor entry reconciliation status written in syslog\n+def check_syslog_change(dvs, entry, action):#new_cnt, delete_cnt, iptype):\n+    (exitcode, buf) = dvs.runcmd(['sh', '-c', 'egrep entry /var/log/syslog'])\n+    assert buf.find(action) != -1\n+\n+\n+#\n+# Verifies that a single change matching the passed parameters has been seen in\n+# swss logs.\n+#\n+# Input parameters (example):\n+#\n+#       table:   ROUTE\n+#       entry:   192.168.1.0/30\n+#       action:  SET, CREATE, DELETE\n+#       attribs: { nexthop:10.1.2.1,10.2.2.1,10.3.2.1|ifname:Ethernet112,Ethernet116,Ethernet120 }\n+#\n+# The above example would match this swss log entry:\n+#\n+# .* ROUTE_TABLE:192.168.1.0/30|SET|nexthop:10.1.2.1,10.2.2.1,10.3.2.1|ifname:Ethernet112,Ethernet116,Ethernet120 .*\n+#\n+def check_swss_change(dvs, table, entry, action, attribs):\n+\n+    if action == 'SET':\n+        (exitcode, num) = dvs.runcmd(['sh', '-c', \"egrep \\\"{}\\\" /var/log/swss/swss.rec | wc -l\".\n+                                      format(table + \".*\" + entry + \".*\" + \"SET\\|\" + attribs)])\n+\n+    elif action == 'CREATE':\n+        (exitcode, num) = dvs.runcmd(['sh', '-c', \"egrep \\\"{}\\\" /var/log/swss/swss.rec | wc -l\".\n+                                      format(table + \".*\" + entry + \".*\" + \"CREATE\\|\" + attribs)])\n+\n+    elif action == 'DELETE':\n+        (exitcode, num) = dvs.runcmd(['sh', '-c', \"egrep \\\"{}\\\" /var/log/swss/swss.rec | wc -l\".\n+                                      format(table + \".*\" + entry + \".*\" + \"DEL\")])\n+\n+    print exitcode","path":"tests/test_warm_reboot.py","position":108,"original_position":108,"commit_id":"819f442c033b0416ac193275f898e94356866c22","original_commit_id":"819f442c033b0416ac193275f898e94356866c22","user":{"login":"rodnymolina","id":17346005,"node_id":"MDQ6VXNlcjE3MzQ2MDA1","avatar_url":"https://avatars0.githubusercontent.com/u/17346005?v=4","gravatar_id":"","url":"https://api.github.com/users/rodnymolina","html_url":"https://github.com/rodnymolina","followers_url":"https://api.github.com/users/rodnymolina/followers","following_url":"https://api.github.com/users/rodnymolina/following{/other_user}","gists_url":"https://api.github.com/users/rodnymolina/gists{/gist_id}","starred_url":"https://api.github.com/users/rodnymolina/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rodnymolina/subscriptions","organizations_url":"https://api.github.com/users/rodnymolina/orgs","repos_url":"https://api.github.com/users/rodnymolina/repos","events_url":"https://api.github.com/users/rodnymolina/events{/privacy}","received_events_url":"https://api.github.com/users/rodnymolina/received_events","type":"User","site_admin":false},"body":"Yep, forgot to remove these two, will send another patch...","created_at":"2018-10-06T04:41:11Z","updated_at":"2018-10-06T04:41:11Z","html_url":"https://github.com/Azure/sonic-swss/pull/602#discussion_r223171515","pull_request_url":"https://api.github.com/repos/Azure/sonic-swss/pulls/602","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/Azure/sonic-swss/pulls/comments/223171515"},"html":{"href":"https://github.com/Azure/sonic-swss/pull/602#discussion_r223171515"},"pull_request":{"href":"https://api.github.com/repos/Azure/sonic-swss/pulls/602"}}},"pull_request":{"url":"https://api.github.com/repos/Azure/sonic-swss/pulls/602","id":211829365,"node_id":"MDExOlB1bGxSZXF1ZXN0MjExODI5MzY1","html_url":"https://github.com/Azure/sonic-swss/pull/602","diff_url":"https://github.com/Azure/sonic-swss/pull/602.diff","patch_url":"https://github.com/Azure/sonic-swss/pull/602.patch","issue_url":"https://api.github.com/repos/Azure/sonic-swss/issues/602","number":602,"state":"open","locked":false,"title":"Routing-stack warm-reboot feature.","user":{"login":"rodnymolina","id":17346005,"node_id":"MDQ6VXNlcjE3MzQ2MDA1","avatar_url":"https://avatars0.githubusercontent.com/u/17346005?v=4","gravatar_id":"","url":"https://api.github.com/users/rodnymolina","html_url":"https://github.com/rodnymolina","followers_url":"https://api.github.com/users/rodnymolina/followers","following_url":"https://api.github.com/users/rodnymolina/following{/other_user}","gists_url":"https://api.github.com/users/rodnymolina/gists{/gist_id}","starred_url":"https://api.github.com/users/rodnymolina/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rodnymolina/subscriptions","organizations_url":"https://api.github.com/users/rodnymolina/orgs","repos_url":"https://api.github.com/users/rodnymolina/repos","events_url":"https://api.github.com/users/rodnymolina/events{/privacy}","received_events_url":"https://api.github.com/users/rodnymolina/received_events","type":"User","site_admin":false},"body":"[ dependencies with PR/600: https://github.com/Azure/sonic-swss/pull/600 ]\r\n\r\nPlease refer to the corresponding design document for more details: https://github.com/Azure/SONiC/pull/239\r\n\r\nThe following manual UT plan has been successfully executed. UT automation pending.\r\n\r\nPhysical topology formed by various BGP peers connecting to the DUT. Both non-ecmp and ecmp prefixes are learned/tested.\r\n\r\n```\r\nTestcase Suite 1: Making use of “pkill -9 bgpd && pkill -9 zebra” as trigger.\r\n=============\r\n\r\nIPv4 prefixes\r\n==========\r\n\r\n    * Restart zebra/bgpd:\r\n            - Verify that all prefixes are properly stale-marked and that no\r\n    change is pushed to AppDB during reconciliation.\r\n            - Result: PASSED\r\n\r\n    * Restart zebra/bgpd and add one new non-ecmp IPv4 prefix.\r\n            - To produce a route-state-inconsistency, add prefix in adjacent\r\n    node before bgp sessions are re-established.\r\n            - Verify that new-prefix msg is NOT pushed down to AppDB till\r\n    reconciliation takes place.\r\n            - Result: PASSED\r\n\r\n    * Restart zebra/bgpd and withdraw one non-ecmp IPv4 prefix.\r\n            - To produce a route-state-inconsistency, remove prefix in adjacent\r\n    node before bgp sessions are re-established.\r\n            - Verify that deleted-prefix msg is NOT pushed down to AppDB till\r\n    reconciliation takes place.\r\n            - Result: PASSED\r\n\r\n    * Restart zebra/bgpd and add one new path to an IPv4 ecmp-prefix.\r\n            - To produce a route-state-inconsistency, add prefix-path in\r\n    adjacent node before bgp sessions are re-established.\r\n            - Verify that new prefix-path msg is NOT pushed down to AppDB till\r\n    reconciliation takes place.\r\n            - Result: PASSED\r\n\r\n    * Restart zebra/bgpd and withdraw one ecmp-path from an existing ecmp IPv4\r\n      prefix.\r\n              - To produce a route-state-inconsistency, remove prefix-path in\r\n      adjacent node before bgp sessions are re-established.\r\n              - Verify that deleted-prefix-path msg is NOT pushed down to AppDB\r\n      till reconciliation takes place.\r\n              - Eventually, during reconciliation, this path will be eliminated\r\n      as it’s not being refreshed by remote-peer.\r\n              - Result: PASSED\r\n\r\nIPv6 prefixes\r\n==========\r\n\r\n    * Restart zebra/bgpd:\r\n            - Verify that all prefixes are properly stale-marked and that no\r\n    change is pushed to AppDB during reconciliation.\r\n            - Result: PASSED\r\n\r\n    * Restart zebra/bgpd and add one new non-ecmp IPv6 prefix.\r\n            - To produce a route-state-inconsistency, add prefix in adjacent\r\n    node before bgp sessions are re-established.\r\n            - Verify that new-prefix msg is NOT pushed down to AppDB till\r\n    reconciliation takes place.\r\n            - Result: PASSED\r\n\r\n    * Restart zebra/bgpd and withdraw one non-ecmp IPv6 prefix.\r\n            - To produce a route-state-inconsistency, remove prefix in adjacent\r\n    node before bgp sessions are re-established.\r\n            - Verify that deleted-prefix msg is NOT pushed down to AppDB till\r\n    reconciliation takes place.\r\n            - Result: PASSED\r\n\r\n    * Restart zebra/bgpd and add one new path to an IPv6 ecmp-prefix.\r\n            - To produce a route-state-inconsistency, add prefix-path in\r\n    adjacent node before bgp sessions are re-established.\r\n            - Verify that new prefix-path msg is NOT pushed down to AppDB till\r\n    reconciliation takes place.\r\n            - Result: PASSED\r\n\r\n    * Restart zebra/bgpd and withdraw one ecmp-path from an existing ecmp IPv6\r\n      prefix.\r\n              - To produce a route-state-inconsistency, remove prefix-path in\r\n      adjacent node before bgp sessions are re-established.\r\n              - Verify that deleted-prefix-path msg is NOT pushed down to AppDB\r\n      till reconciliation takes place.\r\n              - Eventually, during reconciliation, this path will be eliminated\r\n      as it’s not being refreshed by remote-peer.\r\n              - Result: PASSED\r\n\r\nTestcase Suite 2: Making use of sudo service bgp restart” as trigger.\r\n=============\r\n\r\nIPv4 prefixes\r\n==========\r\n\r\n    * Restart bgp service/docker:\r\n            - Verify that all prefixes are properly stale-marked and that no\r\n    change is pushed to AppDB during reconciliation.\r\n            - Result: PASSED\r\n\r\n    * Restart bgp service/docker and add one new non-ecmp IPv4 prefix.\r\n            - To produce a route-state-inconsistency, add prefix in adjacent\r\n    node before bgp sessions are re-established.\r\n            - Verify that new-prefix msg is NOT pushed down to AppDB till\r\n    reconciliation takes place.\r\n            - Result: PASSED\r\n\r\n    * Restart bgp service/docker and withdraw one non-ecmp IPv4 prefix.\r\n            - To produce a route-state-inconsistency, remove prefix in adjacent\r\n    node before bgp sessions are re-established.\r\n            - Verify that deleted-prefix msg is NOT pushed down to AppDB till\r\n    reconciliation takes place.\r\n            - Result: PASSED\r\n\r\n    * Restart bgp service/docker and add one new path to an IPv4 ecmp-prefix.\r\n            - To produce a route-state-inconsistency, add prefix-path in\r\n    adjacent node before bgp sessions are re-established.\r\n            - Verify that new prefix-path msg is NOT pushed down to AppDB till\r\n    reconciliation takes place.\r\n            - Result: PASSED\r\n\r\n    * Restart bgp service/docker and withdraw one ecmp-path from an existing\r\n      ecmp IPv4 prefix.\r\n              - To produce a route-state-inconsistency, remove prefix-path in\r\n      adjacent node before bgp sessions are re-established.\r\n              - Verify that deleted-prefix-path msg is NOT pushed down to AppDB\r\n      till reconciliation takes place.\r\n              - Eventually, during reconciliation, this path will be eliminated\r\n      as it’s not being refreshed by remote-peer.\r\n              - Result: PASSED\r\n\r\nIPv6 prefixes\r\n==========\r\n\r\n    * Restart bgp service/docker:\r\n            - Verify that all prefixes are properly stale-marked and that no\r\n    change is pushed to AppDB during reconciliation.\r\n            - Result: PASSED\r\n\r\n    * Restart bgp service/docker and add one new non-ecmp IPv6 prefix.\r\n            - To produce a route-state-inconsistency, add prefix in adjacent\r\n    node before bgp sessions are re-established.\r\n            - Verify that new-prefix msg is NOT pushed down to AppDB till\r\n    reconciliation takes place.\r\n            - Result: PASSED\r\n\r\n    * Restart bgp service/docker and withdraw one non-ecmp IPv6 prefix.\r\n            - To produce a route-state-inconsistency, remove prefix in adjacent\r\n    node before bgp sessions are re-established.\r\n            - Verify that deleted-prefix msg is NOT pushed down to AppDB till\r\n    reconciliation takes place.\r\n            - Result: PASSED\r\n\r\n    * Restart bgp service/docker and add one new path to an IPv6 ecmp-prefix.\r\n            - To produce a route-state-inconsistency, add prefix-path in\r\n    adjacent node before bgp sessions are re-established.\r\n            - Verify that new prefix-path msg is NOT pushed down to AppDB till\r\n    reconciliation takes place.\r\n            - Result: PASSED\r\n\r\n    * Restart bgp service/docker and withdraw one ecmp-path from an existing\r\n      ecmp IPv6 prefix.\r\n              - To produce a route-state-inconsistency, remove prefix-path in\r\n      adjacent node before bgp sessions are re-established.\r\n              - Verify that deleted-prefix-path msg is NOT pushed down to AppDB\r\n      till reconciliation takes place.\r\n              - Eventually, during reconciliation, this path will be eliminated\r\n      as it’s not being refreshed by remote-peer.\r\n              - Result: PASSED\r\n```\r\n\r\nSigned-off-by: Rodny Molina <rmolina@linkedin.com>\r\n","created_at":"2018-08-29T17:25:07Z","updated_at":"2018-10-06T04:41:11Z","closed_at":null,"merged_at":null,"merge_commit_sha":"8c3780885c0f7b6d91838f02b9e4b111c84216c1","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":338891657,"node_id":"MDU6TGFiZWwzMzg4OTE2NTc=","url":"https://api.github.com/repos/Azure/sonic-swss/labels/enhancement","name":"enhancement","color":"84b6eb","default":true}],"milestone":null,"commits_url":"https://api.github.com/repos/Azure/sonic-swss/pulls/602/commits","review_comments_url":"https://api.github.com/repos/Azure/sonic-swss/pulls/602/comments","review_comment_url":"https://api.github.com/repos/Azure/sonic-swss/pulls/comments{/number}","comments_url":"https://api.github.com/repos/Azure/sonic-swss/issues/602/comments","statuses_url":"https://api.github.com/repos/Azure/sonic-swss/statuses/819f442c033b0416ac193275f898e94356866c22","head":{"label":"rodnymolina:routing_warmreboot","ref":"routing_warmreboot","sha":"819f442c033b0416ac193275f898e94356866c22","user":{"login":"rodnymolina","id":17346005,"node_id":"MDQ6VXNlcjE3MzQ2MDA1","avatar_url":"https://avatars0.githubusercontent.com/u/17346005?v=4","gravatar_id":"","url":"https://api.github.com/users/rodnymolina","html_url":"https://github.com/rodnymolina","followers_url":"https://api.github.com/users/rodnymolina/followers","following_url":"https://api.github.com/users/rodnymolina/following{/other_user}","gists_url":"https://api.github.com/users/rodnymolina/gists{/gist_id}","starred_url":"https://api.github.com/users/rodnymolina/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rodnymolina/subscriptions","organizations_url":"https://api.github.com/users/rodnymolina/orgs","repos_url":"https://api.github.com/users/rodnymolina/repos","events_url":"https://api.github.com/users/rodnymolina/events{/privacy}","received_events_url":"https://api.github.com/users/rodnymolina/received_events","type":"User","site_admin":false},"repo":{"id":98824003,"node_id":"MDEwOlJlcG9zaXRvcnk5ODgyNDAwMw==","name":"sonic-swss","full_name":"rodnymolina/sonic-swss","private":false,"owner":{"login":"rodnymolina","id":17346005,"node_id":"MDQ6VXNlcjE3MzQ2MDA1","avatar_url":"https://avatars0.githubusercontent.com/u/17346005?v=4","gravatar_id":"","url":"https://api.github.com/users/rodnymolina","html_url":"https://github.com/rodnymolina","followers_url":"https://api.github.com/users/rodnymolina/followers","following_url":"https://api.github.com/users/rodnymolina/following{/other_user}","gists_url":"https://api.github.com/users/rodnymolina/gists{/gist_id}","starred_url":"https://api.github.com/users/rodnymolina/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rodnymolina/subscriptions","organizations_url":"https://api.github.com/users/rodnymolina/orgs","repos_url":"https://api.github.com/users/rodnymolina/repos","events_url":"https://api.github.com/users/rodnymolina/events{/privacy}","received_events_url":"https://api.github.com/users/rodnymolina/received_events","type":"User","site_admin":false},"html_url":"https://github.com/rodnymolina/sonic-swss","description":"SONiC Switch State Service (SwSS)","fork":true,"url":"https://api.github.com/repos/rodnymolina/sonic-swss","forks_url":"https://api.github.com/repos/rodnymolina/sonic-swss/forks","keys_url":"https://api.github.com/repos/rodnymolina/sonic-swss/keys{/key_id}","collaborators_url":"https://api.github.com/repos/rodnymolina/sonic-swss/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/rodnymolina/sonic-swss/teams","hooks_url":"https://api.github.com/repos/rodnymolina/sonic-swss/hooks","issue_events_url":"https://api.github.com/repos/rodnymolina/sonic-swss/issues/events{/number}","events_url":"https://api.github.com/repos/rodnymolina/sonic-swss/events","assignees_url":"https://api.github.com/repos/rodnymolina/sonic-swss/assignees{/user}","branches_url":"https://api.github.com/repos/rodnymolina/sonic-swss/branches{/branch}","tags_url":"https://api.github.com/repos/rodnymolina/sonic-swss/tags","blobs_url":"https://api.github.com/repos/rodnymolina/sonic-swss/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/rodnymolina/sonic-swss/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/rodnymolina/sonic-swss/git/refs{/sha}","trees_url":"https://api.github.com/repos/rodnymolina/sonic-swss/git/trees{/sha}","statuses_url":"https://api.github.com/repos/rodnymolina/sonic-swss/statuses/{sha}","languages_url":"https://api.github.com/repos/rodnymolina/sonic-swss/languages","stargazers_url":"https://api.github.com/repos/rodnymolina/sonic-swss/stargazers","contributors_url":"https://api.github.com/repos/rodnymolina/sonic-swss/contributors","subscribers_url":"https://api.github.com/repos/rodnymolina/sonic-swss/subscribers","subscription_url":"https://api.github.com/repos/rodnymolina/sonic-swss/subscription","commits_url":"https://api.github.com/repos/rodnymolina/sonic-swss/commits{/sha}","git_commits_url":"https://api.github.com/repos/rodnymolina/sonic-swss/git/commits{/sha}","comments_url":"https://api.github.com/repos/rodnymolina/sonic-swss/comments{/number}","issue_comment_url":"https://api.github.com/repos/rodnymolina/sonic-swss/issues/comments{/number}","contents_url":"https://api.github.com/repos/rodnymolina/sonic-swss/contents/{+path}","compare_url":"https://api.github.com/repos/rodnymolina/sonic-swss/compare/{base}...{head}","merges_url":"https://api.github.com/repos/rodnymolina/sonic-swss/merges","archive_url":"https://api.github.com/repos/rodnymolina/sonic-swss/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/rodnymolina/sonic-swss/downloads","issues_url":"https://api.github.com/repos/rodnymolina/sonic-swss/issues{/number}","pulls_url":"https://api.github.com/repos/rodnymolina/sonic-swss/pulls{/number}","milestones_url":"https://api.github.com/repos/rodnymolina/sonic-swss/milestones{/number}","notifications_url":"https://api.github.com/repos/rodnymolina/sonic-swss/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/rodnymolina/sonic-swss/labels{/name}","releases_url":"https://api.github.com/repos/rodnymolina/sonic-swss/releases{/id}","deployments_url":"https://api.github.com/repos/rodnymolina/sonic-swss/deployments","created_at":"2017-07-30T20:49:55Z","updated_at":"2018-10-03T23:52:26Z","pushed_at":"2018-10-06T04:38:02Z","git_url":"git://github.com/rodnymolina/sonic-swss.git","ssh_url":"git@github.com:rodnymolina/sonic-swss.git","clone_url":"https://github.com/rodnymolina/sonic-swss.git","svn_url":"https://github.com/rodnymolina/sonic-swss","homepage":"https://azure.github.io/SONiC","size":2031,"stargazers_count":0,"watchers_count":0,"language":"C++","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"other","name":"NOASSERTION","spdx_id":"NOASSERTION","url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"Azure:master","ref":"master","sha":"94fbcd96c2476bb0a0f6e71a570ad6abe1e51f61","user":{"login":"Azure","id":6844498,"node_id":"MDEyOk9yZ2FuaXphdGlvbjY4NDQ0OTg=","avatar_url":"https://avatars0.githubusercontent.com/u/6844498?v=4","gravatar_id":"","url":"https://api.github.com/users/Azure","html_url":"https://github.com/Azure","followers_url":"https://api.github.com/users/Azure/followers","following_url":"https://api.github.com/users/Azure/following{/other_user}","gists_url":"https://api.github.com/users/Azure/gists{/gist_id}","starred_url":"https://api.github.com/users/Azure/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Azure/subscriptions","organizations_url":"https://api.github.com/users/Azure/orgs","repos_url":"https://api.github.com/users/Azure/repos","events_url":"https://api.github.com/users/Azure/events{/privacy}","received_events_url":"https://api.github.com/users/Azure/received_events","type":"Organization","site_admin":false},"repo":{"id":53515475,"node_id":"MDEwOlJlcG9zaXRvcnk1MzUxNTQ3NQ==","name":"sonic-swss","full_name":"Azure/sonic-swss","private":false,"owner":{"login":"Azure","id":6844498,"node_id":"MDEyOk9yZ2FuaXphdGlvbjY4NDQ0OTg=","avatar_url":"https://avatars0.githubusercontent.com/u/6844498?v=4","gravatar_id":"","url":"https://api.github.com/users/Azure","html_url":"https://github.com/Azure","followers_url":"https://api.github.com/users/Azure/followers","following_url":"https://api.github.com/users/Azure/following{/other_user}","gists_url":"https://api.github.com/users/Azure/gists{/gist_id}","starred_url":"https://api.github.com/users/Azure/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Azure/subscriptions","organizations_url":"https://api.github.com/users/Azure/orgs","repos_url":"https://api.github.com/users/Azure/repos","events_url":"https://api.github.com/users/Azure/events{/privacy}","received_events_url":"https://api.github.com/users/Azure/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/Azure/sonic-swss","description":"SONiC Switch State Service (SwSS)","fork":false,"url":"https://api.github.com/repos/Azure/sonic-swss","forks_url":"https://api.github.com/repos/Azure/sonic-swss/forks","keys_url":"https://api.github.com/repos/Azure/sonic-swss/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Azure/sonic-swss/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Azure/sonic-swss/teams","hooks_url":"https://api.github.com/repos/Azure/sonic-swss/hooks","issue_events_url":"https://api.github.com/repos/Azure/sonic-swss/issues/events{/number}","events_url":"https://api.github.com/repos/Azure/sonic-swss/events","assignees_url":"https://api.github.com/repos/Azure/sonic-swss/assignees{/user}","branches_url":"https://api.github.com/repos/Azure/sonic-swss/branches{/branch}","tags_url":"https://api.github.com/repos/Azure/sonic-swss/tags","blobs_url":"https://api.github.com/repos/Azure/sonic-swss/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Azure/sonic-swss/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Azure/sonic-swss/git/refs{/sha}","trees_url":"https://api.github.com/repos/Azure/sonic-swss/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Azure/sonic-swss/statuses/{sha}","languages_url":"https://api.github.com/repos/Azure/sonic-swss/languages","stargazers_url":"https://api.github.com/repos/Azure/sonic-swss/stargazers","contributors_url":"https://api.github.com/repos/Azure/sonic-swss/contributors","subscribers_url":"https://api.github.com/repos/Azure/sonic-swss/subscribers","subscription_url":"https://api.github.com/repos/Azure/sonic-swss/subscription","commits_url":"https://api.github.com/repos/Azure/sonic-swss/commits{/sha}","git_commits_url":"https://api.github.com/repos/Azure/sonic-swss/git/commits{/sha}","comments_url":"https://api.github.com/repos/Azure/sonic-swss/comments{/number}","issue_comment_url":"https://api.github.com/repos/Azure/sonic-swss/issues/comments{/number}","contents_url":"https://api.github.com/repos/Azure/sonic-swss/contents/{+path}","compare_url":"https://api.github.com/repos/Azure/sonic-swss/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Azure/sonic-swss/merges","archive_url":"https://api.github.com/repos/Azure/sonic-swss/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Azure/sonic-swss/downloads","issues_url":"https://api.github.com/repos/Azure/sonic-swss/issues{/number}","pulls_url":"https://api.github.com/repos/Azure/sonic-swss/pulls{/number}","milestones_url":"https://api.github.com/repos/Azure/sonic-swss/milestones{/number}","notifications_url":"https://api.github.com/repos/Azure/sonic-swss/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Azure/sonic-swss/labels{/name}","releases_url":"https://api.github.com/repos/Azure/sonic-swss/releases{/id}","deployments_url":"https://api.github.com/repos/Azure/sonic-swss/deployments","created_at":"2016-03-09T17:01:09Z","updated_at":"2018-10-01T21:27:28Z","pushed_at":"2018-10-06T04:38:04Z","git_url":"git://github.com/Azure/sonic-swss.git","ssh_url":"git@github.com:Azure/sonic-swss.git","clone_url":"https://github.com/Azure/sonic-swss.git","svn_url":"https://github.com/Azure/sonic-swss","homepage":"https://azure.github.io/SONiC","size":2043,"stargazers_count":35,"watchers_count":35,"language":"C++","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":71,"mirror_url":null,"archived":false,"open_issues_count":64,"license":{"key":"other","name":"NOASSERTION","spdx_id":"NOASSERTION","url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":71,"open_issues":64,"watchers":35,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/Azure/sonic-swss/pulls/602"},"html":{"href":"https://github.com/Azure/sonic-swss/pull/602"},"issue":{"href":"https://api.github.com/repos/Azure/sonic-swss/issues/602"},"comments":{"href":"https://api.github.com/repos/Azure/sonic-swss/issues/602/comments"},"review_comments":{"href":"https://api.github.com/repos/Azure/sonic-swss/pulls/602/comments"},"review_comment":{"href":"https://api.github.com/repos/Azure/sonic-swss/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/Azure/sonic-swss/pulls/602/commits"},"statuses":{"href":"https://api.github.com/repos/Azure/sonic-swss/statuses/819f442c033b0416ac193275f898e94356866c22"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"rodnymolina"}}