)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"3cb1b8599d83cbe09bebc95aff8b44057295a90a","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     vikram.choudhary \u003cvikram.choudhary@huawei.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-07-31 02:39:11 +0530"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"[WIP] BGP Dynamic Routing: introduce dragent agent"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Dynamic routing needs a new agent that will host the BgpSpeaker driver"},{"line_number":10,"context_line":"and will do the actual communication between the BgpPeers via a BgpSpeaker."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"3a50d1a3_f9c38588","line":7,"updated":"2015-08-01 05:50:00.000000000","message":"nit: \"agent\" notion already conveyed in \"dragent\", remove one","commit_id":"4a6b37408e813dfda0f75fe8a51be99fcff31fc6"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"6b9d1d5e899b41023571ae16806bc5a24991c3d3","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     vikram.choudhary \u003cvikram.choudhary@huawei.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-07-31 02:39:11 +0530"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"[WIP] BGP Dynamic Routing: introduce dragent agent"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Dynamic routing needs a new agent that will host the BgpSpeaker driver"},{"line_number":10,"context_line":"and will do the actual communication between the BgpPeers via a BgpSpeaker."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"1a4dcd0f_36292e8a","line":7,"in_reply_to":"3a50d1a3_f9c38588","updated":"2015-08-11 06:20:48.000000000","message":"Done.","commit_id":"4a6b37408e813dfda0f75fe8a51be99fcff31fc6"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"3cb1b8599d83cbe09bebc95aff8b44057295a90a","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"[WIP] BGP Dynamic Routing: introduce dragent agent"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Dynamic routing needs a new agent that will host the BgpSpeaker driver"},{"line_number":10,"context_line":"and will do the actual communication between the BgpPeers via a BgpSpeaker."},{"line_number":11,"context_line":"This agent will take information from a single BgpSpeaker entity,"},{"line_number":12,"context_line":"that has all the information that the agent needs to do the routing"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"3a50d1a3_19bf51fd","line":9,"updated":"2015-08-01 05:50:00.000000000","message":"Can we say \"BGP Dynamic Routing\"?","commit_id":"4a6b37408e813dfda0f75fe8a51be99fcff31fc6"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"6b9d1d5e899b41023571ae16806bc5a24991c3d3","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"[WIP] BGP Dynamic Routing: introduce dragent agent"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Dynamic routing needs a new agent that will host the BgpSpeaker driver"},{"line_number":10,"context_line":"and will do the actual communication between the BgpPeers via a BgpSpeaker."},{"line_number":11,"context_line":"This agent will take information from a single BgpSpeaker entity,"},{"line_number":12,"context_line":"that has all the information that the agent needs to do the routing"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"1a4dcd0f_d61faa59","line":9,"in_reply_to":"3a50d1a3_19bf51fd","updated":"2015-08-11 06:20:48.000000000","message":"Done.","commit_id":"4a6b37408e813dfda0f75fe8a51be99fcff31fc6"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"afeaeaf00324e3925f589de17830724d69561a20","unresolved":false,"context_lines":[{"line_number":11,"context_line":"peering session/s for neutron. The agent takes the needed \"peer/s and"},{"line_number":12,"context_line":"route/s\" information from the BGP speaker entity and synchronize the"},{"line_number":13,"context_line":"same to the registerd driver."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Note:"},{"line_number":16,"context_line":" - In this approach, an agent can only host one BGP speaker to avoid"},{"line_number":17,"context_line":"   conflicts."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"fa1b9901_e5cd6f5e","line":14,"updated":"2015-08-22 10:30:38.000000000","message":"Please add below section over here:\n\"There is also an auto-scheduling feature that will assign a BGP\nSpeaker to the first BGP DRAgent that asks for synchronization.\"","commit_id":"b0ce0d8d7ecd76c8a80952550b0aa402d97a4d3e"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"6c7c7aef1ae5ba463d5fa812d1a0bf1abbd4291b","unresolved":false,"context_lines":[{"line_number":22,"context_line":"Outestanding Items:"},{"line_number":23,"context_line":" - API tests."},{"line_number":24,"context_line":" - Notify BgpDrScheduler about the maximum speaker support."},{"line_number":25,"context_line":" - Provide interfaces for passing BGP speaker and Peer statistics to"},{"line_number":26,"context_line":"   the neutron server."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"Partially-Implements: blueprint bgp-dynamic-routing"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":25,"id":"3a7e1126_ef0b7922","line":25,"range":{"start_line":25,"start_character":34,"end_line":25,"end_character":35},"updated":"2015-12-19 11:07:53.000000000","message":"Let\u0027s raise RFE\u0027s for the features which needs to be addressed later.","commit_id":"ad122367e98dd25a333143ce82c999ccb9f3d6ef"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"dcb44a890e662a074db585f1417d4ade15150d02","unresolved":false,"context_lines":[{"line_number":22,"context_line":"Outestanding Items:"},{"line_number":23,"context_line":" - API tests."},{"line_number":24,"context_line":" - Notify BgpDrScheduler about the maximum speaker support."},{"line_number":25,"context_line":" - Provide interfaces for passing BGP speaker and Peer statistics to"},{"line_number":26,"context_line":"   the neutron server."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"Partially-Implements: blueprint bgp-dynamic-routing"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":25,"id":"fa69d971_3ef39375","line":25,"range":{"start_line":25,"start_character":34,"end_line":25,"end_character":35},"in_reply_to":"3a7e1126_ef0b7922","updated":"2015-12-30 09:04:31.000000000","message":"Done.","commit_id":"ad122367e98dd25a333143ce82c999ccb9f3d6ef"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"0412f5f77db3d1bc9461ec00b0a4117f12e81a4f","unresolved":false,"context_lines":[{"line_number":28,"context_line":"Partially-Implements: blueprint bgp-dynamic-routing"},{"line_number":29,"context_line":"Co-Authored-By: Ryan Tidwell \u003cryan.tidwell@hpe.com\u003e"},{"line_number":30,"context_line":"Co-Authored-By: Jaume Devesa \u003cdevvesa@gmail.com\u003e"},{"line_number":31,"context_line":"Co-Authored-By: Numan Siddique \u003cnusiddiq@redhat.com\u003e"},{"line_number":32,"context_line":"Change-Id: I3217795bdd0fa2d9d4b39274f4f95fc013c8d29d"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":30,"id":"da6ed579_426ad4b4","line":31,"updated":"2016-01-13 14:10:36.000000000","message":"I think that you need to add in a release note here\n\nIn addition to this you need DocImpact flags","commit_id":"40ab863b9af41f1ec691669dad269bf752c4cba0"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"8c30f6ca87f7d826685cedbbc43724cbfa97b002","unresolved":false,"context_lines":[{"line_number":12,"context_line":"route/s\" information from the BGP speaker entity and synchronize the"},{"line_number":13,"context_line":"same to the registerd driver."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"For realizing HA, two BgpDrAgents should host the same BGP speaker."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Partially-Implements: blueprint bgp-dynamic-routing"},{"line_number":18,"context_line":"Co-Authored-By: Ryan Tidwell \u003cryan.tidwell@hpe.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":34,"id":"9a68dd71_3585c058","line":15,"updated":"2016-01-27 09:07:56.000000000","message":"Add release notes and DocImpact flag","commit_id":"2286cd2ba579edd825efbf895f2c41764ea75d92"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"4eaa477b176f3aa51015133fb4af1017ab956a8a","unresolved":false,"context_lines":[{"line_number":13,"context_line":"same to the registerd driver."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"For realizing HA, two BgpDrAgents should host the same BGP speaker."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Partially-Implements: blueprint bgp-dynamic-routing"},{"line_number":18,"context_line":"Co-Authored-By: Ryan Tidwell \u003cryan.tidwell@hpe.com\u003e"},{"line_number":19,"context_line":"Co-Authored-By: Jaume Devesa \u003cdevvesa@gmail.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":50,"id":"dae33548_3009d632","line":16,"updated":"2016-02-14 08:11:38.000000000","message":"Please add DocImpact and a release note for the new configuration varaiable","commit_id":"ba7807a82af6a1926086b131322a84f32844d705"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"f819952a2fb3d323766e0208307961ed920f0afd","unresolved":false,"context_lines":[{"line_number":13,"context_line":"same to the registerd driver."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"For realizing HA, two BgpDrAgents should host the same BGP speaker."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Partially-Implements: blueprint bgp-dynamic-routing"},{"line_number":18,"context_line":"Co-Authored-By: Ryan Tidwell \u003cryan.tidwell@hpe.com\u003e"},{"line_number":19,"context_line":"Co-Authored-By: Jaume Devesa \u003cdevvesa@gmail.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":50,"id":"dae33548_5b68fbba","line":16,"in_reply_to":"dae33548_3009d632","updated":"2016-02-14 08:18:41.000000000","message":"IMO, let\u0027s add DocImpact and release notes in the last PS of the review chain.","commit_id":"ba7807a82af6a1926086b131322a84f32844d705"}],"devstack/lib/bgp":[{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"d41c47118585ad51f77bec57d0a084458a8d0f09","unresolved":false,"context_lines":[{"line_number":11,"context_line":""},{"line_number":12,"context_line":"    iniset $Q_BGP_DRAGENT_CONF_FILE DEFAULT verbose True"},{"line_number":13,"context_line":"    iniset $Q_BGP_DRAGENT_CONF_FILE DEFAULT debug $ENABLE_DEBUG_LOG_LEVEL"},{"line_number":14,"context_line":"    if [[ -n \"$BGP_ROUTER_ID\" ]]; then"},{"line_number":15,"context_line":"        iniset $Q_BGP_DRAGENT_CONF_FILE BGP bgp_router_id $BGP_ROUTER_ID"},{"line_number":16,"context_line":"    fi"},{"line_number":17,"context_line":"}"}],"source_content_type":"application/octet-stream","patch_set":48,"id":"3a57f1b5_682ebb44","line":14,"range":{"start_line":14,"start_character":8,"end_line":14,"end_character":9},"updated":"2016-02-11 21:38:26.000000000","message":"nit:  doesn\u0027t require double [[.  But, I\u0027m just pointing that out, it isn\u0027t a big deal.  I have a nasty habit of pointing out everything I notice.  :)","commit_id":"2d369ef727ff8de656a2fc2523cc6dfe8a1002da"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"866607b3c45b4f70fda77aff6ee07f92e9159370","unresolved":false,"context_lines":[{"line_number":11,"context_line":""},{"line_number":12,"context_line":"    iniset $Q_BGP_DRAGENT_CONF_FILE DEFAULT verbose True"},{"line_number":13,"context_line":"    iniset $Q_BGP_DRAGENT_CONF_FILE DEFAULT debug $ENABLE_DEBUG_LOG_LEVEL"},{"line_number":14,"context_line":"    if [[ -n \"$BGP_ROUTER_ID\" ]]; then"},{"line_number":15,"context_line":"        iniset $Q_BGP_DRAGENT_CONF_FILE BGP bgp_router_id $BGP_ROUTER_ID"},{"line_number":16,"context_line":"    fi"},{"line_number":17,"context_line":"}"}],"source_content_type":"application/octet-stream","patch_set":48,"id":"3a57f1b5_fe96c5ee","line":14,"range":{"start_line":14,"start_character":8,"end_line":14,"end_character":9},"in_reply_to":"3a57f1b5_1b67334e","updated":"2016-02-12 11:29:17.000000000","message":"Done","commit_id":"2d369ef727ff8de656a2fc2523cc6dfe8a1002da"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"ef63cfdc8fe0beda0c6406d631beec051d88664b","unresolved":false,"context_lines":[{"line_number":11,"context_line":""},{"line_number":12,"context_line":"    iniset $Q_BGP_DRAGENT_CONF_FILE DEFAULT verbose True"},{"line_number":13,"context_line":"    iniset $Q_BGP_DRAGENT_CONF_FILE DEFAULT debug $ENABLE_DEBUG_LOG_LEVEL"},{"line_number":14,"context_line":"    if [[ -n \"$BGP_ROUTER_ID\" ]]; then"},{"line_number":15,"context_line":"        iniset $Q_BGP_DRAGENT_CONF_FILE BGP bgp_router_id $BGP_ROUTER_ID"},{"line_number":16,"context_line":"    fi"},{"line_number":17,"context_line":"}"}],"source_content_type":"application/octet-stream","patch_set":48,"id":"3a57f1b5_1b67334e","line":14,"range":{"start_line":14,"start_character":8,"end_line":14,"end_character":9},"in_reply_to":"3a57f1b5_682ebb44","updated":"2016-02-12 09:05:54.000000000","message":"Will remove.","commit_id":"2d369ef727ff8de656a2fc2523cc6dfe8a1002da"}],"devstack/plugin.sh":[{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"d41c47118585ad51f77bec57d0a084458a8d0f09","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":48,"id":"3a57f1b5_08ce2782","updated":"2016-02-11 21:38:26.000000000","message":"Honestly, I\u0027ll leave the rest of the devstack stuff up to other reviewers.","commit_id":"2d369ef727ff8de656a2fc2523cc6dfe8a1002da"}],"etc/bgp_dragent.ini":[{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"3cb1b8599d83cbe09bebc95aff8b44057295a90a","unresolved":false,"context_lines":[{"line_number":13,"context_line":"# functionality work."},{"line_number":14,"context_line":"#"},{"line_number":15,"context_line":"#   http://www.ietf.org/rfc/rfc4271.txt"},{"line_number":16,"context_line":"# router_id \u003d 1.1.1.1"}],"source_content_type":"text/x-properties","patch_set":1,"id":"3a50d1a3_799a15c7","line":16,"updated":"2015-08-01 05:50:00.000000000","message":"Since, this is a mandatory attribute what if the user don\u0027t specify it? I feel we should throw error while loading the driver if this is not specified.","commit_id":"4a6b37408e813dfda0f75fe8a51be99fcff31fc6"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"6b9d1d5e899b41023571ae16806bc5a24991c3d3","unresolved":false,"context_lines":[{"line_number":13,"context_line":"# functionality work."},{"line_number":14,"context_line":"#"},{"line_number":15,"context_line":"#   http://www.ietf.org/rfc/rfc4271.txt"},{"line_number":16,"context_line":"# router_id \u003d 1.1.1.1"}],"source_content_type":"text/x-properties","patch_set":1,"id":"1a4dcd0f_0694e0df","line":16,"in_reply_to":"3a50d1a3_799a15c7","updated":"2015-08-11 06:20:48.000000000","message":"Should be taken care by the driver. Agent should not worry about this.","commit_id":"4a6b37408e813dfda0f75fe8a51be99fcff31fc6"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"6b1a5e9c3cd9d6bc74fd00f6c25f7d46b1dac4b0","unresolved":false,"context_lines":[{"line_number":9,"context_line":"# functionality work."},{"line_number":10,"context_line":"#"},{"line_number":11,"context_line":"# http://www.ietf.org/rfc/rfc4271.txt"},{"line_number":12,"context_line":"# router_id \u003d 1.1.1.1"}],"source_content_type":"text/x-properties","patch_set":11,"id":"da20952f_4cb16900","line":12,"updated":"2015-09-04 08:11:18.000000000","message":"change this to \"bgp_router_id\"","commit_id":"fece8ee684f4663cfa5434342b044aecca42d06b"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"0d597e691f824d713c4d4a1afc11a6cf14cd9550","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Show debugging output in log (sets DEBUG log level output)."},{"line_number":2,"context_line":"# debug \u003d False"}],"source_content_type":"text/x-properties","patch_set":13,"id":"da20952f_5a5c8c4a","line":2,"updated":"2015-09-06 07:03:55.000000000","message":"This is not being used anywhere. Please check for its applicability. If not needed then please remove.","commit_id":"d4d7a23df852354dbec257cfb9b0cad09b063082"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"6be087d43fbaf3b77c03cab60d0cda86d81ef6d1","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Show debugging output in log (sets DEBUG log level output)."},{"line_number":2,"context_line":"# debug \u003d False"}],"source_content_type":"text/x-properties","patch_set":13,"id":"da20952f_b84799bb","line":2,"in_reply_to":"da20952f_5a5c8c4a","updated":"2015-09-08 22:16:55.000000000","message":"It is used by the oslo logger, however it should be specified in the DEFAULT group, not the BGP group. Should read like this:\n\n[DEFAULT]\n\n# Show debugging output in log (sets DEBUG log level output).\n# debug \u003d False\n\n[BGP]\n\n(agent config options here)\n.......","commit_id":"d4d7a23df852354dbec257cfb9b0cad09b063082"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"85efc40ec572cc8dc0ad7f1815dbca3ab2ceee30","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Show debugging output in log (sets DEBUG log level output)."},{"line_number":2,"context_line":"# debug \u003d False"}],"source_content_type":"text/x-properties","patch_set":13,"id":"da20952f_17f8c248","line":2,"in_reply_to":"da20952f_b84799bb","updated":"2015-09-09 10:03:25.000000000","message":"Ok. Will add it in the default section.","commit_id":"d4d7a23df852354dbec257cfb9b0cad09b063082"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"0412f5f77db3d1bc9461ec00b0a4117f12e81a4f","unresolved":false,"context_lines":[{"line_number":1,"context_line":"[DEFAULT]"},{"line_number":2,"context_line":"# Show debugging output in log (sets DEBUG log level output)."},{"line_number":3,"context_line":"# debug \u003d False"}],"source_content_type":"text/x-properties","patch_set":30,"id":"da6ed579_c2832455","line":1,"updated":"2016-01-13 14:10:36.000000000","message":"why not use the neutron conf file here? why do we need another configuration file?","commit_id":"40ab863b9af41f1ec691669dad269bf752c4cba0"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"3191d8391cea6b91c2c3c876044cb594addf011c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"[DEFAULT]"},{"line_number":2,"context_line":"# Show debugging output in log (sets DEBUG log level output)."},{"line_number":3,"context_line":"# debug \u003d False"}],"source_content_type":"text/x-properties","patch_set":30,"id":"9a68dd71_15375cb1","line":1,"in_reply_to":"da6ed579_c2832455","updated":"2016-01-27 09:06:35.000000000","message":"created a bgp_dragent specific file. The file will contain BGP specific config.","commit_id":"40ab863b9af41f1ec691669dad269bf752c4cba0"}],"etc/neutron.conf":[{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"3cb1b8599d83cbe09bebc95aff8b44057295a90a","unresolved":false,"context_lines":[{"line_number":217,"context_line":"# router_auto_schedule \u003d True"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"# Allow auto scheduling of bgp speakers to a dr agent. It will schedule"},{"line_number":220,"context_line":"# bgp speaker to first Dr agent which sends sync_peers message to neutron server"},{"line_number":221,"context_line":"# bgp_dr_auto_schedule \u003d True"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"# Allow automatic rescheduling of routers from dead L3 agents with"}],"source_content_type":"text/plain","patch_set":1,"id":"3a50d1a3_19aaf1d2","line":220,"updated":"2015-08-01 05:50:00.000000000","message":"\u0027Dr\u0027 is well know abbreviation for Doctor. Can we use BGP DRAgent instead \"dr agent\"","commit_id":"4a6b37408e813dfda0f75fe8a51be99fcff31fc6"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"6b9d1d5e899b41023571ae16806bc5a24991c3d3","unresolved":false,"context_lines":[{"line_number":217,"context_line":"# router_auto_schedule \u003d True"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"# Allow auto scheduling of bgp speakers to a dr agent. It will schedule"},{"line_number":220,"context_line":"# bgp speaker to first Dr agent which sends sync_peers message to neutron server"},{"line_number":221,"context_line":"# bgp_dr_auto_schedule \u003d True"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"# Allow automatic rescheduling of routers from dead L3 agents with"}],"source_content_type":"text/plain","patch_set":1,"id":"1a4dcd0f_5c4979cf","line":220,"in_reply_to":"3a50d1a3_19aaf1d2","updated":"2015-08-11 06:20:48.000000000","message":"Done.","commit_id":"4a6b37408e813dfda0f75fe8a51be99fcff31fc6"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"3cb1b8599d83cbe09bebc95aff8b44057295a90a","unresolved":false,"context_lines":[{"line_number":218,"context_line":""},{"line_number":219,"context_line":"# Allow auto scheduling of bgp speakers to a dr agent. It will schedule"},{"line_number":220,"context_line":"# bgp speaker to first Dr agent which sends sync_peers message to neutron server"},{"line_number":221,"context_line":"# bgp_dr_auto_schedule \u003d True"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"# Allow automatic rescheduling of routers from dead L3 agents with"},{"line_number":224,"context_line":"# admin_state_up set to True to alive agents."}],"source_content_type":"text/plain","patch_set":1,"id":"3a50d1a3_d9b3294c","line":221,"updated":"2015-08-01 05:50:00.000000000","message":"Does BGP DRAgent sends sync_peers message to the neutron server? I feel this part is not implemented in this patch. Please check.","commit_id":"4a6b37408e813dfda0f75fe8a51be99fcff31fc6"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"6b9d1d5e899b41023571ae16806bc5a24991c3d3","unresolved":false,"context_lines":[{"line_number":218,"context_line":""},{"line_number":219,"context_line":"# Allow auto scheduling of bgp speakers to a dr agent. It will schedule"},{"line_number":220,"context_line":"# bgp speaker to first Dr agent which sends sync_peers message to neutron server"},{"line_number":221,"context_line":"# bgp_dr_auto_schedule \u003d True"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"# Allow automatic rescheduling of routers from dead L3 agents with"},{"line_number":224,"context_line":"# admin_state_up set to True to alive agents."}],"source_content_type":"text/plain","patch_set":1,"id":"1a4dcd0f_1c1211b5","line":221,"in_reply_to":"3a50d1a3_d9b3294c","updated":"2015-08-11 06:20:48.000000000","message":"Done.","commit_id":"4a6b37408e813dfda0f75fe8a51be99fcff31fc6"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"8a0915d97accd734b50415edacd736c57627bb4e","unresolved":false,"context_lines":[{"line_number":221,"context_line":""},{"line_number":222,"context_line":"# Allow auto scheduling of BGP speakers to a DR agent."},{"line_number":223,"context_line":"# This option schedules BGP speaker to the first DR agent which"},{"line_number":224,"context_line":"# send get_all_bgp_speakers message to the neutron server."},{"line_number":225,"context_line":"# bgp_dr_auto_schedule \u003d True"},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"# Allow automatic rescheduling of routers from dead L3 agents with"}],"source_content_type":"text/plain","patch_set":8,"id":"da20952f_5775dac8","line":224,"updated":"2015-08-27 13:16:36.000000000","message":"I think \"which send get_all_bgp_speakers message to the neutron server\" is not required. This is too much specific to implementation.","commit_id":"498b383f65cebd65f4e89eca28b89ee742fcb2a9"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"6cff25d48d3f73660b846955582fb44d906527b7","unresolved":false,"context_lines":[{"line_number":221,"context_line":""},{"line_number":222,"context_line":"# Allow auto scheduling of BGP speakers to a DR agent."},{"line_number":223,"context_line":"# This option schedules BGP speaker to the first DR agent which"},{"line_number":224,"context_line":"# send get_all_bgp_speakers message to the neutron server."},{"line_number":225,"context_line":"# bgp_dr_auto_schedule \u003d True"},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"# Allow automatic rescheduling of routers from dead L3 agents with"}],"source_content_type":"text/plain","patch_set":8,"id":"da20952f_b08717b4","line":224,"in_reply_to":"da20952f_5775dac8","updated":"2015-09-05 04:38:33.000000000","message":"Done. Addressed in PS12.","commit_id":"498b383f65cebd65f4e89eca28b89ee742fcb2a9"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"0d597e691f824d713c4d4a1afc11a6cf14cd9550","unresolved":false,"context_lines":[{"line_number":224,"context_line":"# routers to first L3 agent which sends sync_routers message to neutron server"},{"line_number":225,"context_line":"# router_auto_schedule \u003d True"},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"# Allow auto scheduling of BGP speakers to a BGP DRAgent."},{"line_number":228,"context_line":"# This option schedules BGP speaker to the first BGP DRAgent which initiates"},{"line_number":229,"context_line":"# smooth for by sending get_all_bgp_speakers message to the neutron server."},{"line_number":230,"context_line":"# bgp_dr_auto_schedule \u003d True"}],"source_content_type":"text/plain","patch_set":13,"id":"da20952f_9a3c64e2","line":227,"updated":"2015-09-06 07:03:55.000000000","message":"Change BGP Speakers \u003d\u003d\u003e BgpSpeakers and BGP DrAgent \u003d\u003d\u003e BgpDrAgent for keeping it consistent with the code.","commit_id":"d4d7a23df852354dbec257cfb9b0cad09b063082"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"0d597e691f824d713c4d4a1afc11a6cf14cd9550","unresolved":false,"context_lines":[{"line_number":226,"context_line":""},{"line_number":227,"context_line":"# Allow auto scheduling of BGP speakers to a BGP DRAgent."},{"line_number":228,"context_line":"# This option schedules BGP speaker to the first BGP DRAgent which initiates"},{"line_number":229,"context_line":"# smooth for by sending get_all_bgp_speakers message to the neutron server."},{"line_number":230,"context_line":"# bgp_dr_auto_schedule \u003d True"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"# Allow automatic rescheduling of routers from dead L3 agents with"}],"source_content_type":"text/plain","patch_set":13,"id":"da20952f_3a28b899","line":229,"updated":"2015-09-06 07:03:55.000000000","message":"remove \u0027for\u0027","commit_id":"d4d7a23df852354dbec257cfb9b0cad09b063082"},{"author":{"_account_id":7505,"name":"Jaume Devesa","email":"devvesa@gmail.com","username":"devesa"},"change_message_id":"e45cab91a933f128d90f8a84620fedc0a2e891bd","unresolved":false,"context_lines":[{"line_number":226,"context_line":""},{"line_number":227,"context_line":"# Allow auto scheduling of BGP Speakers to a BGP DrAgent."},{"line_number":228,"context_line":"# This option schedules BGP Speakers to the first active Bgp DrAgent which"},{"line_number":229,"context_line":"# initiates smooth by sending get_all_bgp_speakers message to the neutron server."},{"line_number":230,"context_line":"# bgp_dr_auto_schedule \u003d True"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"# Allow automatic rescheduling of routers from dead L3 agents with"}],"source_content_type":"text/plain","patch_set":21,"id":"9a1a9d01_ab1f0f5a","line":229,"updated":"2015-10-03 15:41:47.000000000","message":"Nit: for maintenance purposes, I always avoid method names on comments. If the method name changes, there are a lot of chances to forget this reference and it may confuse a future contributor.\n\nI propose:\n  initiates smooth by requesting all bgp speakers available to the neutron server","commit_id":"97d1599ccee6f49be5f920e451a1452adb2948f0"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"930c9b5286f7001da0c12f0703e1a2083668e417","unresolved":false,"context_lines":[{"line_number":226,"context_line":""},{"line_number":227,"context_line":"# Allow auto scheduling of BGP Speakers to a BGP DrAgent."},{"line_number":228,"context_line":"# This option schedules BGP Speakers to the first active Bgp DrAgent which"},{"line_number":229,"context_line":"# initiates smooth by sending get_all_bgp_speakers message to the neutron server."},{"line_number":230,"context_line":"# bgp_dr_auto_schedule \u003d True"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"# Allow automatic rescheduling of routers from dead L3 agents with"}],"source_content_type":"text/plain","patch_set":21,"id":"9a1a9d01_c179fafd","line":229,"in_reply_to":"9a1a9d01_ab1f0f5a","updated":"2015-10-05 04:15:37.000000000","message":"+1. Will change.","commit_id":"97d1599ccee6f49be5f920e451a1452adb2948f0"}],"etc/oslo-config-generator/bgp_dragent.ini":[{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"d41c47118585ad51f77bec57d0a084458a8d0f09","unresolved":false,"context_lines":[{"line_number":1,"context_line":"[DEFAULT]"},{"line_number":2,"context_line":"output_file \u003d etc/bgp_dragent.ini.sample"},{"line_number":3,"context_line":"wrap_width \u003d 79"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"namespace \u003d neutron.base.agent"},{"line_number":6,"context_line":"namespace \u003d neutron.bgp.agent"}],"source_content_type":"text/x-properties","patch_set":48,"id":"3a57f1b5_e8cceb6b","line":3,"range":{"start_line":3,"start_character":0,"end_line":3,"end_character":10},"updated":"2016-02-11 21:38:26.000000000","message":"no action:  Why we need to keep specifying this everywhere is beyond me.","commit_id":"2d369ef727ff8de656a2fc2523cc6dfe8a1002da"}],"neutron/agent/bgp/agent.py":[{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"0c04ccc8a6c1308dd2b2553e283b3403ca713049","unresolved":false,"context_lines":[{"line_number":181,"context_line":"                  \u0027from the neutron server.\u0027,"},{"line_number":182,"context_line":"                  {\u0027speaker_id\u0027: bgp_speaker_id,"},{"line_number":183,"context_line":"                   \u0027prefix\u0027: payload[\u0027route\u0027][\u0027destination\u0027]})"},{"line_number":184,"context_line":"        self.add_route_helper(bgp_speaker_id, payload[\u0027route\u0027])"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"    @utils.synchronized(\u0027bgp-dr-agent\u0027)"},{"line_number":187,"context_line":"    def bgp_route_withdrawal_end(self, context, payload):"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a4dcd0f_4fae182f","line":184,"updated":"2015-08-12 17:51:30.000000000","message":"This should expect a list of routes so we can send bulk updates","commit_id":"2a9bf2309144564372fe5f1ebc67040ae43c9128"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"1093ce632763f72ebcc15d4c125d03d9e6b98982","unresolved":false,"context_lines":[{"line_number":181,"context_line":"                  \u0027from the neutron server.\u0027,"},{"line_number":182,"context_line":"                  {\u0027speaker_id\u0027: bgp_speaker_id,"},{"line_number":183,"context_line":"                   \u0027prefix\u0027: payload[\u0027route\u0027][\u0027destination\u0027]})"},{"line_number":184,"context_line":"        self.add_route_helper(bgp_speaker_id, payload[\u0027route\u0027])"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"    @utils.synchronized(\u0027bgp-dr-agent\u0027)"},{"line_number":187,"context_line":"    def bgp_route_withdrawal_end(self, context, payload):"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a4dcd0f_63919b46","line":184,"in_reply_to":"1a4dcd0f_4fae182f","updated":"2015-08-13 04:32:56.000000000","message":"Will Change.","commit_id":"2a9bf2309144564372fe5f1ebc67040ae43c9128"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"0c04ccc8a6c1308dd2b2553e283b3403ca713049","unresolved":false,"context_lines":[{"line_number":192,"context_line":"                  \u0027speaker_id\u003d%(speaker_id)s cidr\u003d%(prefix)s \u0027"},{"line_number":193,"context_line":"                  \u0027from the neutron server.\u0027,"},{"line_number":194,"context_line":"                  {\u0027speaker_id\u0027: bgp_speaker_id,"},{"line_number":195,"context_line":"                   \u0027prefix\u0027: payload[\u0027route\u0027][\u0027destination\u0027]})"},{"line_number":196,"context_line":"        self.withdraw_route_via_bgp_speaker(bgp_speaker_id, payload[\u0027route\u0027])"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"    def add_bgp_speaker_helper(self, bgp_speaker_id):"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a4dcd0f_efa84422","line":195,"updated":"2015-08-12 17:51:30.000000000","message":"Ditto","commit_id":"2a9bf2309144564372fe5f1ebc67040ae43c9128"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"1093ce632763f72ebcc15d4c125d03d9e6b98982","unresolved":false,"context_lines":[{"line_number":192,"context_line":"                  \u0027speaker_id\u003d%(speaker_id)s cidr\u003d%(prefix)s \u0027"},{"line_number":193,"context_line":"                  \u0027from the neutron server.\u0027,"},{"line_number":194,"context_line":"                  {\u0027speaker_id\u0027: bgp_speaker_id,"},{"line_number":195,"context_line":"                   \u0027prefix\u0027: payload[\u0027route\u0027][\u0027destination\u0027]})"},{"line_number":196,"context_line":"        self.withdraw_route_via_bgp_speaker(bgp_speaker_id, payload[\u0027route\u0027])"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"    def add_bgp_speaker_helper(self, bgp_speaker_id):"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a4dcd0f_2397133b","line":195,"in_reply_to":"1a4dcd0f_efa84422","updated":"2015-08-13 04:32:56.000000000","message":"Will Change.","commit_id":"2a9bf2309144564372fe5f1ebc67040ae43c9128"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"0c04ccc8a6c1308dd2b2553e283b3403ca713049","unresolved":false,"context_lines":[{"line_number":216,"context_line":"        # route lookup with the server and re-smooth if out-of-sync?"},{"line_number":217,"context_line":"        # I feel since the number of routes could be large and we"},{"line_number":218,"context_line":"        # should probably not do a frequent lookup. This can impact"},{"line_number":219,"context_line":"        # performance."},{"line_number":220,"context_line":"        self.advertise_route_via_bgp_speaker(bgp_speaker_id, route)"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"    def safe_get_bgp_speaker_info(self, bgp_speaker_id):"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a4dcd0f_cf1d4874","line":219,"updated":"2015-08-12 17:51:30.000000000","message":"I would not be opposed to the agent running an automatic re-sync with the server every 5 minutes (maybe a little more frequently???).  That shouldn\u0027t put too much stress on the server, but it will allow us to keep the route cache in sync in case of some failure.","commit_id":"2a9bf2309144564372fe5f1ebc67040ae43c9128"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"f52802830e70bf410046626b3b09cf3ba2a638c1","unresolved":false,"context_lines":[{"line_number":296,"context_line":"        for route in bgp_speaker[\u0027advertised_routes\u0027]:"},{"line_number":297,"context_line":"            self.advertise_route_via_bgp_speaker(bgp_speaker_id, route)"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"    def advertise_route_via_bgp_speaker(self, bgp_speaker_id, route):"},{"line_number":300,"context_line":"        LOG.debug(\u0027Calling driver for advertising prefix: %(cidr)s, \u0027"},{"line_number":301,"context_line":"                  \u0027next_hop: %(nexthop)s\u0027,"},{"line_number":302,"context_line":"                  {\u0027cidr\u0027: route[\u0027destination\u0027],"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_bbbd95b2","line":299,"updated":"2015-08-12 21:14:30.000000000","message":"Just a question: Is this method idempotent?  Is it dependent on the driver backend? I\u0027d like to be able to pass the same route to the same speaker repeatedly without the agent raising an exception, regardless of the driver implementation.  Should simply be a no-op if the route already exists and hasn\u0027t changed.","commit_id":"054e037accd060b74011ed415f53200e8a473de0"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"b213f619cb8446870596e10fd3902ee43e5e9027","unresolved":false,"context_lines":[{"line_number":296,"context_line":"        for route in bgp_speaker[\u0027advertised_routes\u0027]:"},{"line_number":297,"context_line":"            self.advertise_route_via_bgp_speaker(bgp_speaker_id, route)"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"    def advertise_route_via_bgp_speaker(self, bgp_speaker_id, route):"},{"line_number":300,"context_line":"        LOG.debug(\u0027Calling driver for advertising prefix: %(cidr)s, \u0027"},{"line_number":301,"context_line":"                  \u0027next_hop: %(nexthop)s\u0027,"},{"line_number":302,"context_line":"                  {\u0027cidr\u0027: route[\u0027destination\u0027],"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_e3b12b48","line":299,"in_reply_to":"1a4dcd0f_bbbd95b2","updated":"2015-08-13 04:26:55.000000000","message":"Currently, this function just pass on the received info to the driver. I don\u0027t feel if the same route gets advertised multiple times. But anyways, if we really want to control this then we can probably save the route information in BGPSpeakerCache and do lookup before advertisement.","commit_id":"054e037accd060b74011ed415f53200e8a473de0"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"f52802830e70bf410046626b3b09cf3ba2a638c1","unresolved":false,"context_lines":[{"line_number":308,"context_line":"        for route in bgp_speaker[\u0027advertise_routes\u0027]:"},{"line_number":309,"context_line":"            self.withdraw_route_via_bgp_speaker(bgp_speaker_id, route)"},{"line_number":310,"context_line":""},{"line_number":311,"context_line":"    def withdraw_route_via_bgp_speaker(self, bgp_speaker_id, route):"},{"line_number":312,"context_line":"        LOG.debug(\u0027Calling driver for withdrawing prefix: %(cidr)s \u0027,"},{"line_number":313,"context_line":"                  {\u0027cidr\u0027: route[\u0027destination\u0027]})"},{"line_number":314,"context_line":"        # TODO(Vikram): Send this information to the registered driver."}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_dbcc216c","line":311,"updated":"2015-08-12 21:14:30.000000000","message":"See L299","commit_id":"054e037accd060b74011ed415f53200e8a473de0"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"b213f619cb8446870596e10fd3902ee43e5e9027","unresolved":false,"context_lines":[{"line_number":308,"context_line":"        for route in bgp_speaker[\u0027advertise_routes\u0027]:"},{"line_number":309,"context_line":"            self.withdraw_route_via_bgp_speaker(bgp_speaker_id, route)"},{"line_number":310,"context_line":""},{"line_number":311,"context_line":"    def withdraw_route_via_bgp_speaker(self, bgp_speaker_id, route):"},{"line_number":312,"context_line":"        LOG.debug(\u0027Calling driver for withdrawing prefix: %(cidr)s \u0027,"},{"line_number":313,"context_line":"                  {\u0027cidr\u0027: route[\u0027destination\u0027]})"},{"line_number":314,"context_line":"        # TODO(Vikram): Send this information to the registered driver."}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_a3b7a338","line":311,"in_reply_to":"1a4dcd0f_dbcc216c","updated":"2015-08-13 04:26:55.000000000","message":"Justified @ L299","commit_id":"054e037accd060b74011ed415f53200e8a473de0"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"8adbcd6ad117115b793bf68c3b8b58dec230b5aa","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        \"\"\"Activate BGP Dynamic Routing agent.\"\"\""},{"line_number":69,"context_line":"        self.sync_state(context\u003dself.context)"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    @utils.synchronized(\u0027bgp-dr-agent\u0027)"},{"line_number":72,"context_line":"    def sync_state(self, bgp_speakers\u003dNone, context\u003dNone):"},{"line_number":73,"context_line":"        \"\"\"Sync the local BGP DRAgent state with Neutron. If no BGP speakers"},{"line_number":74,"context_line":"        are passed, or \u0027None\u0027 is one of the BGP speakers, sync all of the"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a4dcd0f_d3b79d83","line":71,"updated":"2015-08-16 16:46:56.000000000","message":"We need to rewrite the logic of this function.\n\n1. Let\u0027s reduce the scope of this function to only one speaker.\n\n2. For a speaker, we got to check the consistency of it\u0027s peers \u0026 routes.","commit_id":"b0ce0d8d7ecd76c8a80952550b0aa402d97a4d3e"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"8adbcd6ad117115b793bf68c3b8b58dec230b5aa","unresolved":false,"context_lines":[{"line_number":117,"context_line":"                              {\"reason\": r, \"bgp_speaker\": bgp_speaker})"},{"line_number":118,"context_line":"                self.sync_state(reasons.keys(), context)"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"    @periodic_task.periodic_task"},{"line_number":121,"context_line":"    def periodic_resync(self, context):"},{"line_number":122,"context_line":"        LOG.debug(\"Started periodic resync.\")"},{"line_number":123,"context_line":"        self._periodic_resync_helper(context)"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a4dcd0f_1333c514","line":120,"updated":"2015-08-16 16:46:56.000000000","message":"I was thinking to have a configurable parameter for periodic sync\u0027ing.","commit_id":"b0ce0d8d7ecd76c8a80952550b0aa402d97a4d3e"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"8adbcd6ad117115b793bf68c3b8b58dec230b5aa","unresolved":false,"context_lines":[{"line_number":175,"context_line":"        LOG.debug(\u0027Received routes advertisement end notification \u0027"},{"line_number":176,"context_line":"                  \u0027for speaker_id\u003d%(speaker_id)s from the neutron server.\u0027,"},{"line_number":177,"context_line":"                  {\u0027speaker_id\u0027: bgp_speaker_id})"},{"line_number":178,"context_line":"        routes \u003d payload[\u0027routes\u0027][\u0027routes\u0027]"},{"line_number":179,"context_line":"        for route in routes:"},{"line_number":180,"context_line":"            self.add_route_helper(bgp_speaker_id, route)"},{"line_number":181,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1a4dcd0f_d3a0fd44","line":178,"updated":"2015-08-16 16:46:56.000000000","message":"IMHO, [\u0027routes\u0027][\u0027routes\u0027] sounds confusing. Can we rename it as [\u0027advertised_routes\u0027][\u0027route\u0027] or [\u0027routes_info\u0027][\u0027route\u0027]","commit_id":"b0ce0d8d7ecd76c8a80952550b0aa402d97a4d3e"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"8adbcd6ad117115b793bf68c3b8b58dec230b5aa","unresolved":false,"context_lines":[{"line_number":303,"context_line":"                  \u0027next_hop: %(nexthop)s\u0027,"},{"line_number":304,"context_line":"                  {\u0027cidr\u0027: route[\u0027destination\u0027],"},{"line_number":305,"context_line":"                   \u0027nexthop\u0027: route[\u0027next_hop\u0027]})"},{"line_number":306,"context_line":"        if self.cache.is_bgp_speaker_adv_route_present(bgp_speaker_id, route):"},{"line_number":307,"context_line":"            # nothing to be done"},{"line_number":308,"context_line":"            return"},{"line_number":309,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1a4dcd0f_b3b45182","line":306,"updated":"2015-08-16 16:46:56.000000000","message":"Since the class name is \"BGPSpeakerCache\" renaming this function as \"is_route_already_advertised\" will be better..","commit_id":"b0ce0d8d7ecd76c8a80952550b0aa402d97a4d3e"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"8adbcd6ad117115b793bf68c3b8b58dec230b5aa","unresolved":false,"context_lines":[{"line_number":308,"context_line":"            return"},{"line_number":309,"context_line":""},{"line_number":310,"context_line":"        # TODO(Vikram): Send this information to the registered driver."},{"line_number":311,"context_line":"        self.cache.put_bgp_speaker_adv_route(bgp_speaker_id, route)"},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"    def withdraw_routes_via_bgp_speaker(self, bgp_speaker):"},{"line_number":314,"context_line":"        bgp_speaker_id \u003d bgp_speaker[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a4dcd0f_13be6564","line":311,"updated":"2015-08-16 16:46:56.000000000","message":"self.cache.put_adv_route","commit_id":"b0ce0d8d7ecd76c8a80952550b0aa402d97a4d3e"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"8adbcd6ad117115b793bf68c3b8b58dec230b5aa","unresolved":false,"context_lines":[{"line_number":405,"context_line":"        del self.cache[bgp_speaker_id]"},{"line_number":406,"context_line":""},{"line_number":407,"context_line":"    def put_bgp_peer(self, bgp_speaker_id, bgp_peer):"},{"line_number":408,"context_line":"        if bgp_speaker_id not in self.cache:"},{"line_number":409,"context_line":"            return"},{"line_number":410,"context_line":"        if bgp_peer[\u0027ip\u0027] in self.get_bgp_peer_ips(bgp_speaker_id):"},{"line_number":411,"context_line":"            del self.cache[bgp_speaker_id][\u0027peers\u0027][bgp_peer[\u0027ip\u0027]]"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a4dcd0f_d36ebdff","line":408,"updated":"2015-08-16 16:46:56.000000000","message":"Why we couldn\u0027t find the speaker? Probably this could be a reason for resync.","commit_id":"b0ce0d8d7ecd76c8a80952550b0aa402d97a4d3e"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"8adbcd6ad117115b793bf68c3b8b58dec230b5aa","unresolved":false,"context_lines":[{"line_number":425,"context_line":""},{"line_number":426,"context_line":"    def put_bgp_speaker_adv_route(self, bgp_speaker_id, route):"},{"line_number":427,"context_line":"        if bgp_speaker_id not in self.cache:"},{"line_number":428,"context_line":"            return"},{"line_number":429,"context_line":""},{"line_number":430,"context_line":"        self.cache[bgp_speaker_id][\u0027adv_route_list\u0027].append(route)"},{"line_number":431,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1a4dcd0f_93aa7519","line":428,"updated":"2015-08-16 16:46:56.000000000","message":"Why we couldn\u0027t find the speaker? Probably this could be a reason for resync.","commit_id":"b0ce0d8d7ecd76c8a80952550b0aa402d97a4d3e"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"8adbcd6ad117115b793bf68c3b8b58dec230b5aa","unresolved":false,"context_lines":[{"line_number":429,"context_line":""},{"line_number":430,"context_line":"        self.cache[bgp_speaker_id][\u0027adv_route_list\u0027].append(route)"},{"line_number":431,"context_line":""},{"line_number":432,"context_line":"    def set_bgp_speaker_adv_routes(self, bgp_speaker_id, routes):"},{"line_number":433,"context_line":"        if bgp_speaker_id in self.cache:"},{"line_number":434,"context_line":"            self.cache[bgp_speaker_id][\u0027adv_route_list\u0027] \u003d routes"},{"line_number":435,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1a4dcd0f_53a4ed49","line":432,"updated":"2015-08-16 16:46:56.000000000","message":"If the nexthop of an existing route changes then also we got to update the same record.","commit_id":"b0ce0d8d7ecd76c8a80952550b0aa402d97a4d3e"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"8a0915d97accd734b50415edacd736c57627bb4e","unresolved":false,"context_lines":[{"line_number":70,"context_line":"    @utils.synchronized(\u0027bgp-dr-agent\u0027)"},{"line_number":71,"context_line":"    def sync_state(self, context):"},{"line_number":72,"context_line":"        try:"},{"line_number":73,"context_line":"            # Even though only one bgp speaker can be hosted on a dr agent"},{"line_number":74,"context_line":"            # keeping the code generic"},{"line_number":75,"context_line":"            hosted_bgp_speakers \u003d self.plugin_rpc.get_bgp_speakers(context)"},{"line_number":76,"context_line":"            hosted_bgp_speaker_ids \u003d [bgp_speaker[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":8,"id":"da20952f_d736ca02","line":73,"updated":"2015-08-27 13:16:36.000000000","message":"Let\u0027s make \"dr agent\" as a single word and ensure uniformity all across.","commit_id":"498b383f65cebd65f4e89eca28b89ee742fcb2a9"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"6cff25d48d3f73660b846955582fb44d906527b7","unresolved":false,"context_lines":[{"line_number":70,"context_line":"    @utils.synchronized(\u0027bgp-dr-agent\u0027)"},{"line_number":71,"context_line":"    def sync_state(self, context):"},{"line_number":72,"context_line":"        try:"},{"line_number":73,"context_line":"            # Even though only one bgp speaker can be hosted on a dr agent"},{"line_number":74,"context_line":"            # keeping the code generic"},{"line_number":75,"context_line":"            hosted_bgp_speakers \u003d self.plugin_rpc.get_bgp_speakers(context)"},{"line_number":76,"context_line":"            hosted_bgp_speaker_ids \u003d [bgp_speaker[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":8,"id":"da20952f_701adfc7","line":73,"in_reply_to":"da20952f_d736ca02","updated":"2015-09-05 04:38:33.000000000","message":"Done. Addressed in PS12.","commit_id":"498b383f65cebd65f4e89eca28b89ee742fcb2a9"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"8a0915d97accd734b50415edacd736c57627bb4e","unresolved":false,"context_lines":[{"line_number":81,"context_line":"                    self.remove_bgp_speaker_from_dragent(bgp_speaker_id)"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"            if not hosted_bgp_speaker_ids:"},{"line_number":84,"context_line":"                self.cache.clear_cache()"},{"line_number":85,"context_line":"                return"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"            for hosted_bgp_speaker in hosted_bgp_speakers:"}],"source_content_type":"text/x-python","patch_set":8,"id":"da20952f_f2b99c2f","line":84,"updated":"2015-08-27 13:16:36.000000000","message":"Ideally above code #L79-L81 should have cleared the cache. I think we can assert for an empty cache here rather than clearing it off.","commit_id":"498b383f65cebd65f4e89eca28b89ee742fcb2a9"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"6cff25d48d3f73660b846955582fb44d906527b7","unresolved":false,"context_lines":[{"line_number":81,"context_line":"                    self.remove_bgp_speaker_from_dragent(bgp_speaker_id)"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"            if not hosted_bgp_speaker_ids:"},{"line_number":84,"context_line":"                self.cache.clear_cache()"},{"line_number":85,"context_line":"                return"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"            for hosted_bgp_speaker in hosted_bgp_speakers:"}],"source_content_type":"text/x-python","patch_set":8,"id":"da20952f_d00babd3","line":84,"in_reply_to":"da20952f_f2b99c2f","updated":"2015-09-05 04:38:33.000000000","message":"Done. Addressed in PS10.","commit_id":"498b383f65cebd65f4e89eca28b89ee742fcb2a9"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"d7098fd315084f0968cf065248fd3320ccf92fc1","unresolved":false,"context_lines":[{"line_number":106,"context_line":"        for bgp_peer_ip in removed_bgp_peer_ips:"},{"line_number":107,"context_line":"            self.remove_bgp_peer_from_bgp_speaker(bgp_speaker[\u0027id\u0027],"},{"line_number":108,"context_line":"                                                  bgp_peer_ip)"},{"line_number":109,"context_line":"        if bgp_peer_ips:"},{"line_number":110,"context_line":"            self.add_bgp_peers_to_bgp_speaker(bgp_speaker)"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"        # sync advertise routes"}],"source_content_type":"text/x-python","patch_set":8,"id":"da20952f_66700edd","line":109,"updated":"2015-08-29 06:02:43.000000000","message":"I think we will re-add peers which is present in both cached_bgp_peer_ips and  bgp_peer_ips. We must skip the peers which were already added before.","commit_id":"498b383f65cebd65f4e89eca28b89ee742fcb2a9"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"6cff25d48d3f73660b846955582fb44d906527b7","unresolved":false,"context_lines":[{"line_number":106,"context_line":"        for bgp_peer_ip in removed_bgp_peer_ips:"},{"line_number":107,"context_line":"            self.remove_bgp_peer_from_bgp_speaker(bgp_speaker[\u0027id\u0027],"},{"line_number":108,"context_line":"                                                  bgp_peer_ip)"},{"line_number":109,"context_line":"        if bgp_peer_ips:"},{"line_number":110,"context_line":"            self.add_bgp_peers_to_bgp_speaker(bgp_speaker)"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"        # sync advertise routes"}],"source_content_type":"text/x-python","patch_set":8,"id":"da20952f_3066a751","line":109,"in_reply_to":"da20952f_66700edd","updated":"2015-09-05 04:38:33.000000000","message":"Already taken care by \u0027add_bgp_peers_to_bgp_speaker\u0027","commit_id":"498b383f65cebd65f4e89eca28b89ee742fcb2a9"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"d7098fd315084f0968cf065248fd3320ccf92fc1","unresolved":false,"context_lines":[{"line_number":112,"context_line":"        # sync advertise routes"},{"line_number":113,"context_line":"        cached_adv_routes \u003d self.cache.get_adv_routes(bgp_speaker[\u0027id\u0027])"},{"line_number":114,"context_line":"        adv_routes \u003d bgp_speaker[\u0027advertised_routes\u0027]"},{"line_number":115,"context_line":"        if cached_adv_routes \u003d\u003d adv_routes:"},{"line_number":116,"context_line":"            return"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"        for cached_route in cached_adv_routes:"}],"source_content_type":"text/x-python","patch_set":8,"id":"da20952f_e6a5fe46","line":115,"updated":"2015-08-29 06:02:43.000000000","message":"You don\u0027t have to perform the set operation here? Does \u0027\u003d\u003d\u0027 will take care is the contents of cached_adv_routes and adv_routes are same but arranged in different orders?","commit_id":"498b383f65cebd65f4e89eca28b89ee742fcb2a9"},{"author":{"_account_id":10237,"name":"Numan Siddique","email":"nusiddiq@redhat.com","username":"numansiddique"},"change_message_id":"edf6287f87ba98aa70de348344bad53477dd2e61","unresolved":false,"context_lines":[{"line_number":112,"context_line":"        # sync advertise routes"},{"line_number":113,"context_line":"        cached_adv_routes \u003d self.cache.get_adv_routes(bgp_speaker[\u0027id\u0027])"},{"line_number":114,"context_line":"        adv_routes \u003d bgp_speaker[\u0027advertised_routes\u0027]"},{"line_number":115,"context_line":"        if cached_adv_routes \u003d\u003d adv_routes:"},{"line_number":116,"context_line":"            return"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"        for cached_route in cached_adv_routes:"}],"source_content_type":"text/x-python","patch_set":8,"id":"da20952f_41e56fd9","line":115,"in_reply_to":"da20952f_e6a5fe46","updated":"2015-09-07 08:44:57.000000000","message":"Yes.","commit_id":"498b383f65cebd65f4e89eca28b89ee742fcb2a9"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"d7098fd315084f0968cf065248fd3320ccf92fc1","unresolved":false,"context_lines":[{"line_number":115,"context_line":"        if cached_adv_routes \u003d\u003d adv_routes:"},{"line_number":116,"context_line":"            return"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"        for cached_route in cached_adv_routes:"},{"line_number":119,"context_line":"            if cached_route not in adv_routes:"},{"line_number":120,"context_line":"                self.withdraw_route_via_bgp_speaker(bgp_speaker[\u0027id\u0027],"},{"line_number":121,"context_line":"                                                    cached_route)"}],"source_content_type":"text/x-python","patch_set":8,"id":"da20952f_e67c1eb7","line":118,"updated":"2015-08-29 06:02:43.000000000","message":"Why we are unconditionally removing all the routes? I think we must not remove the routes which are still there to be advertised. If we don\u0027t remove them then probably we will save a delete and add operation for the same route.","commit_id":"498b383f65cebd65f4e89eca28b89ee742fcb2a9"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"6cff25d48d3f73660b846955582fb44d906527b7","unresolved":false,"context_lines":[{"line_number":115,"context_line":"        if cached_adv_routes \u003d\u003d adv_routes:"},{"line_number":116,"context_line":"            return"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"        for cached_route in cached_adv_routes:"},{"line_number":119,"context_line":"            if cached_route not in adv_routes:"},{"line_number":120,"context_line":"                self.withdraw_route_via_bgp_speaker(bgp_speaker[\u0027id\u0027],"},{"line_number":121,"context_line":"                                                    cached_route)"}],"source_content_type":"text/x-python","patch_set":8,"id":"da20952f_10bda367","line":118,"in_reply_to":"da20952f_e67c1eb7","updated":"2015-09-05 04:38:33.000000000","message":"Please note \"if cached_route not in adv_routes:\" at L119.","commit_id":"498b383f65cebd65f4e89eca28b89ee742fcb2a9"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"2215a016e7dbf1023d5c3d9388ec3ca28998d21d","unresolved":false,"context_lines":[{"line_number":130,"context_line":"            self.needs_resync_reasons \u003d []"},{"line_number":131,"context_line":"            for r in reasons:"},{"line_number":132,"context_line":"                LOG.debug(\"resync (%(bgp_speaker_id)s): %(reason)s\","},{"line_number":133,"context_line":"                          {\"bgp_speaker_id\": r.get(\u0027bgp_speaker_id\u0027),"},{"line_number":134,"context_line":"                           \"reason\": r.get(\u0027reason\u0027)})"},{"line_number":135,"context_line":"            self.sync_state(context)"},{"line_number":136,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"da20952f_f1713a45","line":133,"updated":"2015-08-29 06:54:09.000000000","message":"bgp_speaker_id is not passed to \"schedule_resync\". Either pass bgp_speaker_id or remove it from the log message.","commit_id":"498b383f65cebd65f4e89eca28b89ee742fcb2a9"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"6cff25d48d3f73660b846955582fb44d906527b7","unresolved":false,"context_lines":[{"line_number":130,"context_line":"            self.needs_resync_reasons \u003d []"},{"line_number":131,"context_line":"            for r in reasons:"},{"line_number":132,"context_line":"                LOG.debug(\"resync (%(bgp_speaker_id)s): %(reason)s\","},{"line_number":133,"context_line":"                          {\"bgp_speaker_id\": r.get(\u0027bgp_speaker_id\u0027),"},{"line_number":134,"context_line":"                           \"reason\": r.get(\u0027reason\u0027)})"},{"line_number":135,"context_line":"            self.sync_state(context)"},{"line_number":136,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"da20952f_f05b4f84","line":133,"in_reply_to":"da20952f_f1713a45","updated":"2015-09-05 04:38:33.000000000","message":"Already taken care. No worries.","commit_id":"498b383f65cebd65f4e89eca28b89ee742fcb2a9"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"8a0915d97accd734b50415edacd736c57627bb4e","unresolved":false,"context_lines":[{"line_number":134,"context_line":"                           \"reason\": r.get(\u0027reason\u0027)})"},{"line_number":135,"context_line":"            self.sync_state(context)"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    # NOTE: spacing is set 1. The actual interval is controlled"},{"line_number":138,"context_line":"    # by neutron/service.py which defaults to CONF.periodic_interval"},{"line_number":139,"context_line":"    @periodic_task.periodic_task(spacing\u003d1)"},{"line_number":140,"context_line":"    def periodic_resync(self, context):"}],"source_content_type":"text/x-python","patch_set":8,"id":"da20952f_32cb9455","line":137,"updated":"2015-08-27 13:16:36.000000000","message":"you mean 1 sec?","commit_id":"498b383f65cebd65f4e89eca28b89ee742fcb2a9"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"6cff25d48d3f73660b846955582fb44d906527b7","unresolved":false,"context_lines":[{"line_number":134,"context_line":"                           \"reason\": r.get(\u0027reason\u0027)})"},{"line_number":135,"context_line":"            self.sync_state(context)"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    # NOTE: spacing is set 1. The actual interval is controlled"},{"line_number":138,"context_line":"    # by neutron/service.py which defaults to CONF.periodic_interval"},{"line_number":139,"context_line":"    @periodic_task.periodic_task(spacing\u003d1)"},{"line_number":140,"context_line":"    def periodic_resync(self, context):"}],"source_content_type":"text/x-python","patch_set":8,"id":"da20952f_3069c7f9","line":137,"in_reply_to":"da20952f_32cb9455","updated":"2015-09-05 04:38:33.000000000","message":"Yes.","commit_id":"498b383f65cebd65f4e89eca28b89ee742fcb2a9"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"5dd7616d5ae5fd0bcdaedd1e4ec263177f9c56d7","unresolved":false,"context_lines":[{"line_number":143,"context_line":""},{"line_number":144,"context_line":"    @utils.synchronized(\u0027bgp-dr-agent\u0027)"},{"line_number":145,"context_line":"    def bgp_speaker_create_end(self, context, payload):"},{"line_number":146,"context_line":"        \"\"\"Handle bgp_speaker_create_end notification event.\"\"\""},{"line_number":147,"context_line":"        bgp_speaker_id \u003d payload[\u0027bgp_speaker\u0027][\u0027id\u0027]"},{"line_number":148,"context_line":"        LOG.debug(\u0027Received BGP speaker create notification for \u0027"},{"line_number":149,"context_line":"                  \u0027speaker_id\u003d%(speaker_id)s from the neutron server.\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"da20952f_00c7b564","line":146,"updated":"2015-08-29 10:08:39.000000000","message":"I think no point proceeding further if self.needs_resync_reasons is not none for the current bgp_speaker. Same logic can be applied before processing any message from the neutron server.","commit_id":"498b383f65cebd65f4e89eca28b89ee742fcb2a9"},{"author":{"_account_id":10237,"name":"Numan Siddique","email":"nusiddiq@redhat.com","username":"numansiddique"},"change_message_id":"edf6287f87ba98aa70de348344bad53477dd2e61","unresolved":false,"context_lines":[{"line_number":143,"context_line":""},{"line_number":144,"context_line":"    @utils.synchronized(\u0027bgp-dr-agent\u0027)"},{"line_number":145,"context_line":"    def bgp_speaker_create_end(self, context, payload):"},{"line_number":146,"context_line":"        \"\"\"Handle bgp_speaker_create_end notification event.\"\"\""},{"line_number":147,"context_line":"        bgp_speaker_id \u003d payload[\u0027bgp_speaker\u0027][\u0027id\u0027]"},{"line_number":148,"context_line":"        LOG.debug(\u0027Received BGP speaker create notification for \u0027"},{"line_number":149,"context_line":"                  \u0027speaker_id\u003d%(speaker_id)s from the neutron server.\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"da20952f_3ca98290","line":146,"in_reply_to":"da20952f_00c7b564","updated":"2015-09-07 08:44:57.000000000","message":"I think its better to handle the requests from the server immediately even if needs_resync_reasons is set to true","commit_id":"498b383f65cebd65f4e89eca28b89ee742fcb2a9"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"2215a016e7dbf1023d5c3d9388ec3ca28998d21d","unresolved":false,"context_lines":[{"line_number":238,"context_line":"            return bgp_speaker"},{"line_number":239,"context_line":"        except Exception as e:"},{"line_number":240,"context_line":"            self.schedule_resync(e)"},{"line_number":241,"context_line":"            LOG.exception(_LE(\u0027BGP Speaker %s info call failed.\u0027),"},{"line_number":242,"context_line":"                          bgp_speaker_id)"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"    def safe_get_bgp_peer_info(self, bgp_speaker_id, bgp_peer_id):"}],"source_content_type":"text/x-python","patch_set":8,"id":"da20952f_719c4a5d","line":241,"updated":"2015-08-29 06:54:09.000000000","message":"How about displaying exception detail as well.\n\nLOG.exception(_LE(\u0027BGP Speaker %(bgp_speaker)s info call \u0027\n                              \u0027failed with reason\u003d%(e)s.\u0027),\n                          {\u0027bgp_speaker\u0027: bgp_speaker_id, \u0027e\u0027: e})","commit_id":"498b383f65cebd65f4e89eca28b89ee742fcb2a9"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"6cff25d48d3f73660b846955582fb44d906527b7","unresolved":false,"context_lines":[{"line_number":238,"context_line":"            return bgp_speaker"},{"line_number":239,"context_line":"        except Exception as e:"},{"line_number":240,"context_line":"            self.schedule_resync(e)"},{"line_number":241,"context_line":"            LOG.exception(_LE(\u0027BGP Speaker %s info call failed.\u0027),"},{"line_number":242,"context_line":"                          bgp_speaker_id)"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"    def safe_get_bgp_peer_info(self, bgp_speaker_id, bgp_peer_id):"}],"source_content_type":"text/x-python","patch_set":8,"id":"da20952f_104b6388","line":241,"in_reply_to":"da20952f_719c4a5d","updated":"2015-09-05 04:38:33.000000000","message":"Done. Addressed in PS12.","commit_id":"498b383f65cebd65f4e89eca28b89ee742fcb2a9"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"2215a016e7dbf1023d5c3d9388ec3ca28998d21d","unresolved":false,"context_lines":[{"line_number":250,"context_line":"            return bgp_peer"},{"line_number":251,"context_line":"        except Exception as e:"},{"line_number":252,"context_line":"            self.schedule_resync(e)"},{"line_number":253,"context_line":"            LOG.exception(_LE(\u0027BGP peer %s info call failed. \u0027"},{"line_number":254,"context_line":"                              \u0027Time to resmooth.\u0027), bgp_peer_id)"},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"    @utils.exception_logger()"}],"source_content_type":"text/x-python","patch_set":8,"id":"da20952f_5197c639","line":253,"updated":"2015-08-29 06:54:09.000000000","message":"How about displaying exception detail as well.\n\nLOG.exception(_LE(\u0027BGP peer %(bgp_peer)s info call \u0027\n                              \u0027failed with reason\u003d%(e)s.\u0027),\n                          {\u0027bgp_peer\u0027: bgp_peer_id, \u0027e\u0027: e})","commit_id":"498b383f65cebd65f4e89eca28b89ee742fcb2a9"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"6cff25d48d3f73660b846955582fb44d906527b7","unresolved":false,"context_lines":[{"line_number":250,"context_line":"            return bgp_peer"},{"line_number":251,"context_line":"        except Exception as e:"},{"line_number":252,"context_line":"            self.schedule_resync(e)"},{"line_number":253,"context_line":"            LOG.exception(_LE(\u0027BGP peer %s info call failed. \u0027"},{"line_number":254,"context_line":"                              \u0027Time to resmooth.\u0027), bgp_peer_id)"},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"    @utils.exception_logger()"}],"source_content_type":"text/x-python","patch_set":8,"id":"da20952f_b05cf74b","line":253,"in_reply_to":"da20952f_5197c639","updated":"2015-09-05 04:38:33.000000000","message":"Done. Addressed in PS12.","commit_id":"498b383f65cebd65f4e89eca28b89ee742fcb2a9"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"8a0915d97accd734b50415edacd736c57627bb4e","unresolved":false,"context_lines":[{"line_number":279,"context_line":"        self.advertise_routes_via_bgp_speaker(bgp_speaker)"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"    def remove_bgp_speaker_from_dragent(self, bgp_speaker_id):"},{"line_number":282,"context_line":"        self.cache.remove_bgp_speaker_by_id(bgp_speaker_id)"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"        # Send this information to the registered driver."},{"line_number":285,"context_line":"        LOG.debug(\u0027Calling driver for removing BGP speaker %(speaker_id)s\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"da20952f_7257cc02","line":282,"updated":"2015-08-27 13:16:36.000000000","message":"I think better to check the cache before notifying delete to the driver. What you think?","commit_id":"498b383f65cebd65f4e89eca28b89ee742fcb2a9"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"6cff25d48d3f73660b846955582fb44d906527b7","unresolved":false,"context_lines":[{"line_number":279,"context_line":"        self.advertise_routes_via_bgp_speaker(bgp_speaker)"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"    def remove_bgp_speaker_from_dragent(self, bgp_speaker_id):"},{"line_number":282,"context_line":"        self.cache.remove_bgp_speaker_by_id(bgp_speaker_id)"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"        # Send this information to the registered driver."},{"line_number":285,"context_line":"        LOG.debug(\u0027Calling driver for removing BGP speaker %(speaker_id)s\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"da20952f_2b539618","line":282,"in_reply_to":"da20952f_7257cc02","updated":"2015-09-05 04:38:33.000000000","message":"Done. Addressed in PS12.","commit_id":"498b383f65cebd65f4e89eca28b89ee742fcb2a9"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"24d9ceca49a734b38050da67bf4f2b9d2b741819","unresolved":false,"context_lines":[{"line_number":290,"context_line":"        for bgp_peer in bgp_speaker[\u0027peers\u0027]:"},{"line_number":291,"context_line":"            self.add_bgp_peer_to_bgp_speaker(bgp_speaker_id, bgp_peer)"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"    def add_bgp_peer_to_bgp_speaker(self, bgp_speaker_id, bgp_peer):"},{"line_number":294,"context_line":"        if self.cache.get_bgp_peer_by_ip(bgp_speaker_id, bgp_peer[\u0027ip\u0027]):"},{"line_number":295,"context_line":"            # Requested route already advertised. Hence, Nothing to be done."},{"line_number":296,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":8,"id":"da20952f_10e2d19f","line":293,"updated":"2015-08-28 11:21:43.000000000","message":"How we want to handle password change? Does the server need to send a delete and add for password change if not then we need to handle it here.","commit_id":"498b383f65cebd65f4e89eca28b89ee742fcb2a9"},{"author":{"_account_id":10237,"name":"Numan Siddique","email":"nusiddiq@redhat.com","username":"numansiddique"},"change_message_id":"edf6287f87ba98aa70de348344bad53477dd2e61","unresolved":false,"context_lines":[{"line_number":290,"context_line":"        for bgp_peer in bgp_speaker[\u0027peers\u0027]:"},{"line_number":291,"context_line":"            self.add_bgp_peer_to_bgp_speaker(bgp_speaker_id, bgp_peer)"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"    def add_bgp_peer_to_bgp_speaker(self, bgp_speaker_id, bgp_peer):"},{"line_number":294,"context_line":"        if self.cache.get_bgp_peer_by_ip(bgp_speaker_id, bgp_peer[\u0027ip\u0027]):"},{"line_number":295,"context_line":"            # Requested route already advertised. Hence, Nothing to be done."},{"line_number":296,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":8,"id":"da20952f_9c8d2e33","line":293,"in_reply_to":"da20952f_10e2d19f","updated":"2015-09-07 08:44:57.000000000","message":"May be we need a update notification ?","commit_id":"498b383f65cebd65f4e89eca28b89ee742fcb2a9"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"8a0915d97accd734b50415edacd736c57627bb4e","unresolved":false,"context_lines":[{"line_number":292,"context_line":""},{"line_number":293,"context_line":"    def add_bgp_peer_to_bgp_speaker(self, bgp_speaker_id, bgp_peer):"},{"line_number":294,"context_line":"        if self.cache.get_bgp_peer_by_ip(bgp_speaker_id, bgp_peer[\u0027ip\u0027]):"},{"line_number":295,"context_line":"            # Requested route already advertised. Hence, Nothing to be done."},{"line_number":296,"context_line":"            return"},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"        self.cache.put_bgp_peer(bgp_speaker_id, bgp_peer)"}],"source_content_type":"text/x-python","patch_set":8,"id":"da20952f_72834ccd","line":295,"updated":"2015-08-27 13:16:36.000000000","message":"peer","commit_id":"498b383f65cebd65f4e89eca28b89ee742fcb2a9"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"6cff25d48d3f73660b846955582fb44d906527b7","unresolved":false,"context_lines":[{"line_number":292,"context_line":""},{"line_number":293,"context_line":"    def add_bgp_peer_to_bgp_speaker(self, bgp_speaker_id, bgp_peer):"},{"line_number":294,"context_line":"        if self.cache.get_bgp_peer_by_ip(bgp_speaker_id, bgp_peer[\u0027ip\u0027]):"},{"line_number":295,"context_line":"            # Requested route already advertised. Hence, Nothing to be done."},{"line_number":296,"context_line":"            return"},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"        self.cache.put_bgp_peer(bgp_speaker_id, bgp_peer)"}],"source_content_type":"text/x-python","patch_set":8,"id":"da20952f_90dc53e5","line":295,"in_reply_to":"da20952f_72834ccd","updated":"2015-09-05 04:38:33.000000000","message":"This is removed in the latest patch.","commit_id":"498b383f65cebd65f4e89eca28b89ee742fcb2a9"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"8a0915d97accd734b50415edacd736c57627bb4e","unresolved":false,"context_lines":[{"line_number":312,"context_line":"                      {\u0027peer_ip\u0027: bgp_peer_ip})"},{"line_number":313,"context_line":"        else:"},{"line_number":314,"context_line":"            # Something went wrong. Let\u0027s resync"},{"line_number":315,"context_line":"            self.schedule_resync(\"Peer Out-of-sync\")"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"    def advertise_routes_via_bgp_speaker(self, bgp_speaker):"},{"line_number":318,"context_line":"        bgp_speaker_id \u003d bgp_speaker[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":8,"id":"da20952f_12e3f0a4","line":315,"updated":"2015-08-27 13:16:36.000000000","message":"information should be passed to the caller to stop his work immediately as resync is initiated.","commit_id":"498b383f65cebd65f4e89eca28b89ee742fcb2a9"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"6cff25d48d3f73660b846955582fb44d906527b7","unresolved":false,"context_lines":[{"line_number":312,"context_line":"                      {\u0027peer_ip\u0027: bgp_peer_ip})"},{"line_number":313,"context_line":"        else:"},{"line_number":314,"context_line":"            # Something went wrong. Let\u0027s resync"},{"line_number":315,"context_line":"            self.schedule_resync(\"Peer Out-of-sync\")"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"    def advertise_routes_via_bgp_speaker(self, bgp_speaker):"},{"line_number":318,"context_line":"        bgp_speaker_id \u003d bgp_speaker[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":8,"id":"da20952f_8b142244","line":315,"in_reply_to":"da20952f_12e3f0a4","updated":"2015-09-05 04:38:33.000000000","message":"This is not required as peers are not removed in bunch i.e. \u0027remove_bgp_peer_from_bgp_speaker\u0027 is not called in a loop.","commit_id":"498b383f65cebd65f4e89eca28b89ee742fcb2a9"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"8a0915d97accd734b50415edacd736c57627bb4e","unresolved":false,"context_lines":[{"line_number":345,"context_line":"                   \u0027nexthop\u0027: route[\u0027next_hop\u0027]})"},{"line_number":346,"context_line":"        else:"},{"line_number":347,"context_line":"            # Something went wrong. Let\u0027s resync"},{"line_number":348,"context_line":"            self.schedule_resync(\"Routes Out-of-sync\")"},{"line_number":349,"context_line":""},{"line_number":350,"context_line":"    def schedule_resync(self, reason):"},{"line_number":351,"context_line":"        \"\"\"Schedule a resync.\"\"\""}],"source_content_type":"text/x-python","patch_set":8,"id":"da20952f_f2e51ca8","line":348,"updated":"2015-08-27 13:16:36.000000000","message":"information should be passed to the caller to stop his work immediately as resync is initiated.","commit_id":"498b383f65cebd65f4e89eca28b89ee742fcb2a9"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"6cff25d48d3f73660b846955582fb44d906527b7","unresolved":false,"context_lines":[{"line_number":345,"context_line":"                   \u0027nexthop\u0027: route[\u0027next_hop\u0027]})"},{"line_number":346,"context_line":"        else:"},{"line_number":347,"context_line":"            # Something went wrong. Let\u0027s resync"},{"line_number":348,"context_line":"            self.schedule_resync(\"Routes Out-of-sync\")"},{"line_number":349,"context_line":""},{"line_number":350,"context_line":"    def schedule_resync(self, reason):"},{"line_number":351,"context_line":"        \"\"\"Schedule a resync.\"\"\""}],"source_content_type":"text/x-python","patch_set":8,"id":"da20952f_4b1a8a70","line":348,"in_reply_to":"da20952f_f2e51ca8","updated":"2015-09-05 04:38:33.000000000","message":"Done. Addressed in PS12.","commit_id":"498b383f65cebd65f4e89eca28b89ee742fcb2a9"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"2215a016e7dbf1023d5c3d9388ec3ca28998d21d","unresolved":false,"context_lines":[{"line_number":348,"context_line":"            self.schedule_resync(\"Routes Out-of-sync\")"},{"line_number":349,"context_line":""},{"line_number":350,"context_line":"    def schedule_resync(self, reason):"},{"line_number":351,"context_line":"        \"\"\"Schedule a resync.\"\"\""},{"line_number":352,"context_line":"        self.needs_resync_reasons.append(reason)"},{"line_number":353,"context_line":""},{"line_number":354,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"da20952f_d1abd673","line":351,"updated":"2015-08-29 06:54:09.000000000","message":"Let\u0027s add a log for this. Can be useful while debugging.","commit_id":"498b383f65cebd65f4e89eca28b89ee742fcb2a9"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"6cff25d48d3f73660b846955582fb44d906527b7","unresolved":false,"context_lines":[{"line_number":348,"context_line":"            self.schedule_resync(\"Routes Out-of-sync\")"},{"line_number":349,"context_line":""},{"line_number":350,"context_line":"    def schedule_resync(self, reason):"},{"line_number":351,"context_line":"        \"\"\"Schedule a resync.\"\"\""},{"line_number":352,"context_line":"        self.needs_resync_reasons.append(reason)"},{"line_number":353,"context_line":""},{"line_number":354,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"da20952f_f0e90f80","line":351,"in_reply_to":"da20952f_d1abd673","updated":"2015-09-05 04:38:33.000000000","message":"Done. Addressed in PS12.","commit_id":"498b383f65cebd65f4e89eca28b89ee742fcb2a9"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"8ef8f2b41bcd541980f4458da89f58619e9fede1","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Huawei Technologies India Pvt. Ltd."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":4,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":10,"id":"da20952f_9850ac60","line":1,"updated":"2015-09-01 16:41:21.000000000","message":"See comments in https://review.openstack.org/#/c/196452/8/doc/source/devref/bgp_speaker.rst at L269.  We should move neutron/agent/bgp directory to neutron/services/bgp_speaker/agent.","commit_id":"94d07959fc9390061a8faab2d63f4e0ed1407f92"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"1ce4d31366f4357fe22f0130daf0b79387209170","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Huawei Technologies India Pvt. Ltd."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":4,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":10,"id":"da20952f_c02c944c","line":1,"in_reply_to":"da20952f_9850ac60","updated":"2015-09-03 06:28:19.000000000","message":"+1","commit_id":"94d07959fc9390061a8faab2d63f4e0ed1407f92"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"c46ebeb3598747b4c9a3827c7c100bf206522904","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Huawei Technologies India Pvt. Ltd."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":4,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":12,"id":"da20952f_cbc69a9b","line":1,"updated":"2015-09-05 04:50:06.000000000","message":"Address PS10 comment.","commit_id":"908037d4e51597d365e97e82bbc8d30aecd8bcd2"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"c46ebeb3598747b4c9a3827c7c100bf206522904","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        if cached_adv_routes \u003d\u003d adv_routes:"},{"line_number":112,"context_line":"            return"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"        for cached_route in cached_adv_routes:"},{"line_number":115,"context_line":"            if cached_route not in adv_routes:"},{"line_number":116,"context_line":"                self.withdraw_route_via_bgp_speaker(bgp_speaker[\u0027id\u0027],"},{"line_number":117,"context_line":"                                                    cached_route)"}],"source_content_type":"text/x-python","patch_set":12,"id":"da20952f_abc24683","line":114,"updated":"2015-09-05 04:50:06.000000000","message":"Confirm PS8 query.","commit_id":"908037d4e51597d365e97e82bbc8d30aecd8bcd2"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"c46ebeb3598747b4c9a3827c7c100bf206522904","unresolved":false,"context_lines":[{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    @utils.synchronized(\u0027bgp-dr-agent\u0027)"},{"line_number":141,"context_line":"    def bgp_speaker_create_end(self, context, payload):"},{"line_number":142,"context_line":"        \"\"\"Handle bgp_speaker_create_end notification event.\"\"\""},{"line_number":143,"context_line":"        bgp_speaker_id \u003d payload[\u0027bgp_speaker\u0027][\u0027id\u0027]"},{"line_number":144,"context_line":"        LOG.debug(\u0027Received BGP speaker create notification for \u0027"},{"line_number":145,"context_line":"                  \u0027speaker_id\u003d%(speaker_id)s from the neutron server.\u0027,"}],"source_content_type":"text/x-python","patch_set":12,"id":"da20952f_4bbb6a0f","line":142,"updated":"2015-09-05 04:50:06.000000000","message":"Address PS8 comment.","commit_id":"908037d4e51597d365e97e82bbc8d30aecd8bcd2"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"c46ebeb3598747b4c9a3827c7c100bf206522904","unresolved":false,"context_lines":[{"line_number":263,"context_line":"    def add_bgp_speaker_on_dragent(self, bgp_speaker):"},{"line_number":264,"context_line":"        # Caching BGP speaker details in BGPSpeakerCache. Will be used"},{"line_number":265,"context_line":"        # during smooth. Currently, only one BGP speaker can be hosted by"},{"line_number":266,"context_line":"        # a DrAgent so this make not be that useful now."},{"line_number":267,"context_line":"        self.cache.put_bgp_speaker(bgp_speaker)"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"        # Send this information to the registered driver."}],"source_content_type":"text/x-python","patch_set":12,"id":"da20952f_eb427e0e","line":266,"updated":"2015-09-05 04:50:06.000000000","message":"DrAgent \u003d\u003d\u003e BgpDrAgent","commit_id":"908037d4e51597d365e97e82bbc8d30aecd8bcd2"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"c46ebeb3598747b4c9a3827c7c100bf206522904","unresolved":false,"context_lines":[{"line_number":292,"context_line":"        for bgp_peer in bgp_speaker[\u0027peers\u0027]:"},{"line_number":293,"context_line":"            self.add_bgp_peer_to_bgp_speaker(bgp_speaker_id, bgp_peer)"},{"line_number":294,"context_line":""},{"line_number":295,"context_line":"    def add_bgp_peer_to_bgp_speaker(self, bgp_speaker_id, bgp_peer):"},{"line_number":296,"context_line":"        if self.cache.get_bgp_peer_by_ip(bgp_speaker_id, bgp_peer[\u0027ip\u0027]):"},{"line_number":297,"context_line":"            return"},{"line_number":298,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"da20952f_6bb8ae11","line":295,"updated":"2015-09-05 04:50:06.000000000","message":"Address PS8 comment.","commit_id":"908037d4e51597d365e97e82bbc8d30aecd8bcd2"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"c46ebeb3598747b4c9a3827c7c100bf206522904","unresolved":false,"context_lines":[{"line_number":338,"context_line":"            if self.needs_resync_reasons:"},{"line_number":339,"context_line":"                # BgpSpeaker will re-smooth as re-sync is scheduled."},{"line_number":340,"context_line":"                # No point adding any information for the Speaker."},{"line_number":341,"context_line":"                # Let\u0027s stop process and sit back."},{"line_number":342,"context_line":"                break"},{"line_number":343,"context_line":"            self.withdraw_route_via_bgp_speaker(bgp_speaker_id, route)"},{"line_number":344,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"da20952f_cb3d3a8f","line":341,"updated":"2015-09-05 04:50:06.000000000","message":"process \u003d\u003d\u003e processing.","commit_id":"908037d4e51597d365e97e82bbc8d30aecd8bcd2"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"a797fbce38797afe091f8f80f642fadb481a3a60","unresolved":false,"context_lines":[{"line_number":402,"context_line":""},{"line_number":403,"context_line":"    This class is designed to support the advertisement for"},{"line_number":404,"context_line":"    multiple BGP speaker via a single driver interface. As per the"},{"line_number":405,"context_line":"    current design only one speaker can be deployed per DrAgent as"},{"line_number":406,"context_line":"    of now but this class is generic enough to cache multiple BGP"},{"line_number":407,"context_line":"    speakers as well."},{"line_number":408,"context_line":"    Version history:"}],"source_content_type":"text/x-python","patch_set":12,"id":"da20952f_8bfae2bb","line":405,"updated":"2015-09-05 04:54:51.000000000","message":"DrAgent \u003d\u003d\u003e BgpDrAgent. Replace all such occurrences.","commit_id":"908037d4e51597d365e97e82bbc8d30aecd8bcd2"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"a797fbce38797afe091f8f80f642fadb481a3a60","unresolved":false,"context_lines":[{"line_number":532,"context_line":""},{"line_number":533,"context_line":"    def agent_updated(self, context, payload):"},{"line_number":534,"context_line":"        \"\"\"Handle the agent_updated notification event.\"\"\""},{"line_number":535,"context_line":"        self.schedule_resync(_(\"Agent updated: %(payload)s\") %"},{"line_number":536,"context_line":"                             {\"payload\": payload})"},{"line_number":537,"context_line":"        LOG.info(_LI(\"agent_updated by server side %s!\"), payload)"},{"line_number":538,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"da20952f_abf7a6d1","line":535,"updated":"2015-09-05 04:54:51.000000000","message":"Agent \u003d\u003d\u003e BgpDrAgent.","commit_id":"908037d4e51597d365e97e82bbc8d30aecd8bcd2"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"0d597e691f824d713c4d4a1afc11a6cf14cd9550","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        removed_bgp_peer_ips \u003d cached_bgp_peer_ips - bgp_peer_ips"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        for bgp_peer_ip in removed_bgp_peer_ips:"},{"line_number":103,"context_line":"            self.remove_bgp_peer_from_bgp_speaker(bgp_speaker[\u0027id\u0027],"},{"line_number":104,"context_line":"                                                  bgp_peer_ip)"},{"line_number":105,"context_line":"        if bgp_peer_ips:"},{"line_number":106,"context_line":"            self.add_bgp_peers_to_bgp_speaker(bgp_speaker)"}],"source_content_type":"text/x-python","patch_set":13,"id":"da20952f_dd2bb680","line":103,"updated":"2015-09-06 07:03:55.000000000","message":"I feel we can stop, if \u0027remove_bgp_peer_from_bgp_speaker\u0027 returns error.","commit_id":"d4d7a23df852354dbec257cfb9b0cad09b063082"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"85efc40ec572cc8dc0ad7f1815dbca3ab2ceee30","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        removed_bgp_peer_ips \u003d cached_bgp_peer_ips - bgp_peer_ips"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        for bgp_peer_ip in removed_bgp_peer_ips:"},{"line_number":103,"context_line":"            self.remove_bgp_peer_from_bgp_speaker(bgp_speaker[\u0027id\u0027],"},{"line_number":104,"context_line":"                                                  bgp_peer_ip)"},{"line_number":105,"context_line":"        if bgp_peer_ips:"},{"line_number":106,"context_line":"            self.add_bgp_peers_to_bgp_speaker(bgp_speaker)"}],"source_content_type":"text/x-python","patch_set":13,"id":"da20952f_f7042e19","line":103,"in_reply_to":"da20952f_1bc6bf49","updated":"2015-09-09 10:03:25.000000000","message":"Refer to L315.","commit_id":"d4d7a23df852354dbec257cfb9b0cad09b063082"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"023620f03d87ca7574940a6f22c536777b6e991f","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        removed_bgp_peer_ips \u003d cached_bgp_peer_ips - bgp_peer_ips"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        for bgp_peer_ip in removed_bgp_peer_ips:"},{"line_number":103,"context_line":"            self.remove_bgp_peer_from_bgp_speaker(bgp_speaker[\u0027id\u0027],"},{"line_number":104,"context_line":"                                                  bgp_peer_ip)"},{"line_number":105,"context_line":"        if bgp_peer_ips:"},{"line_number":106,"context_line":"            self.add_bgp_peers_to_bgp_speaker(bgp_speaker)"}],"source_content_type":"text/x-python","patch_set":13,"id":"da20952f_777b95f5","line":103,"in_reply_to":"da20952f_1e2356be","updated":"2015-09-07 09:14:10.000000000","message":"\u0027remove_bgp_peer_from_bgp_speaker\u0027 will return error in the driver patch. Let me move this comment over there there.","commit_id":"d4d7a23df852354dbec257cfb9b0cad09b063082"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"a4e92d5aaa8564cd4a6c97748eb26cf7bd0822dd","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        removed_bgp_peer_ips \u003d cached_bgp_peer_ips - bgp_peer_ips"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        for bgp_peer_ip in removed_bgp_peer_ips:"},{"line_number":103,"context_line":"            self.remove_bgp_peer_from_bgp_speaker(bgp_speaker[\u0027id\u0027],"},{"line_number":104,"context_line":"                                                  bgp_peer_ip)"},{"line_number":105,"context_line":"        if bgp_peer_ips:"},{"line_number":106,"context_line":"            self.add_bgp_peers_to_bgp_speaker(bgp_speaker)"}],"source_content_type":"text/x-python","patch_set":13,"id":"da20952f_d7f5c150","line":103,"in_reply_to":"da20952f_777b95f5","updated":"2015-09-07 09:16:35.000000000","message":"Can we stop processing if sync is scheduled by \u0027remove_bgp_peer_from_bgp_speaker\u0027.?","commit_id":"d4d7a23df852354dbec257cfb9b0cad09b063082"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"6be087d43fbaf3b77c03cab60d0cda86d81ef6d1","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        removed_bgp_peer_ips \u003d cached_bgp_peer_ips - bgp_peer_ips"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        for bgp_peer_ip in removed_bgp_peer_ips:"},{"line_number":103,"context_line":"            self.remove_bgp_peer_from_bgp_speaker(bgp_speaker[\u0027id\u0027],"},{"line_number":104,"context_line":"                                                  bgp_peer_ip)"},{"line_number":105,"context_line":"        if bgp_peer_ips:"},{"line_number":106,"context_line":"            self.add_bgp_peers_to_bgp_speaker(bgp_speaker)"}],"source_content_type":"text/x-python","patch_set":13,"id":"da20952f_1bc6bf49","line":103,"in_reply_to":"da20952f_d7f5c150","updated":"2015-09-08 22:16:55.000000000","message":"See comment at L315, there shouldn\u0027t be an error to catch here.  I wouldn\u0027t expect a re-sync to be scheduled on a miss, so this seems fine.","commit_id":"d4d7a23df852354dbec257cfb9b0cad09b063082"},{"author":{"_account_id":10237,"name":"Numan Siddique","email":"nusiddiq@redhat.com","username":"numansiddique"},"change_message_id":"c89bed50000f9a89ff196ccf37a6cd37e1e61282","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        removed_bgp_peer_ips \u003d cached_bgp_peer_ips - bgp_peer_ips"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        for bgp_peer_ip in removed_bgp_peer_ips:"},{"line_number":103,"context_line":"            self.remove_bgp_peer_from_bgp_speaker(bgp_speaker[\u0027id\u0027],"},{"line_number":104,"context_line":"                                                  bgp_peer_ip)"},{"line_number":105,"context_line":"        if bgp_peer_ips:"},{"line_number":106,"context_line":"            self.add_bgp_peers_to_bgp_speaker(bgp_speaker)"}],"source_content_type":"text/x-python","patch_set":13,"id":"da20952f_1e2356be","line":103,"in_reply_to":"da20952f_dd2bb680","updated":"2015-09-07 08:44:43.000000000","message":"i think its ok to continue.  \u0027remove_bgp_peer_from_bgp_speaker\u0027 is not returning any value either.","commit_id":"d4d7a23df852354dbec257cfb9b0cad09b063082"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"bf37dc90bd578cc10cca9a460cbe85e52f75cb46","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        removed_bgp_peer_ips \u003d cached_bgp_peer_ips - bgp_peer_ips"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        for bgp_peer_ip in removed_bgp_peer_ips:"},{"line_number":103,"context_line":"            self.remove_bgp_peer_from_bgp_speaker(bgp_speaker[\u0027id\u0027],"},{"line_number":104,"context_line":"                                                  bgp_peer_ip)"},{"line_number":105,"context_line":"        if bgp_peer_ips:"},{"line_number":106,"context_line":"            self.add_bgp_peers_to_bgp_speaker(bgp_speaker)"}],"source_content_type":"text/x-python","patch_set":13,"id":"da20952f_a7c9965c","line":103,"in_reply_to":"da20952f_f7042e19","updated":"2015-09-09 15:02:24.000000000","message":"Given the discussion around L354, I think this is fine as written","commit_id":"d4d7a23df852354dbec257cfb9b0cad09b063082"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"0d597e691f824d713c4d4a1afc11a6cf14cd9550","unresolved":false,"context_lines":[{"line_number":113,"context_line":""},{"line_number":114,"context_line":"        for cached_route in cached_adv_routes:"},{"line_number":115,"context_line":"            if cached_route not in adv_routes:"},{"line_number":116,"context_line":"                self.withdraw_route_via_bgp_speaker(bgp_speaker[\u0027id\u0027],"},{"line_number":117,"context_line":"                                                    cached_route)"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"        self.advertise_routes_via_bgp_speaker(bgp_speaker)"}],"source_content_type":"text/x-python","patch_set":13,"id":"da20952f_7d1e2a60","line":116,"updated":"2015-09-06 07:03:55.000000000","message":"I feel we can stop, if \u0027withdraw_route_via_bgp_speaker\u0027 returns error.","commit_id":"d4d7a23df852354dbec257cfb9b0cad09b063082"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"6be087d43fbaf3b77c03cab60d0cda86d81ef6d1","unresolved":false,"context_lines":[{"line_number":113,"context_line":""},{"line_number":114,"context_line":"        for cached_route in cached_adv_routes:"},{"line_number":115,"context_line":"            if cached_route not in adv_routes:"},{"line_number":116,"context_line":"                self.withdraw_route_via_bgp_speaker(bgp_speaker[\u0027id\u0027],"},{"line_number":117,"context_line":"                                                    cached_route)"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"        self.advertise_routes_via_bgp_speaker(bgp_speaker)"}],"source_content_type":"text/x-python","patch_set":13,"id":"da20952f_3bdb8351","line":116,"in_reply_to":"da20952f_1787b9b5","updated":"2015-09-08 22:16:55.000000000","message":"See comments at L354. There shouldn\u0027t be any error to catch here. I wouldn\u0027t expect a re-sync to be scheduled on a cache miss (as withdraw_route_via_bgp_speaker() seems to do), so this seems fine.","commit_id":"d4d7a23df852354dbec257cfb9b0cad09b063082"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"bf37dc90bd578cc10cca9a460cbe85e52f75cb46","unresolved":false,"context_lines":[{"line_number":113,"context_line":""},{"line_number":114,"context_line":"        for cached_route in cached_adv_routes:"},{"line_number":115,"context_line":"            if cached_route not in adv_routes:"},{"line_number":116,"context_line":"                self.withdraw_route_via_bgp_speaker(bgp_speaker[\u0027id\u0027],"},{"line_number":117,"context_line":"                                                    cached_route)"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"        self.advertise_routes_via_bgp_speaker(bgp_speaker)"}],"source_content_type":"text/x-python","patch_set":13,"id":"da20952f_a7d0b6f8","line":116,"in_reply_to":"da20952f_370b862d","updated":"2015-09-09 15:02:24.000000000","message":"Given the discussion around L354 I think this is fine as written.","commit_id":"d4d7a23df852354dbec257cfb9b0cad09b063082"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"85efc40ec572cc8dc0ad7f1815dbca3ab2ceee30","unresolved":false,"context_lines":[{"line_number":113,"context_line":""},{"line_number":114,"context_line":"        for cached_route in cached_adv_routes:"},{"line_number":115,"context_line":"            if cached_route not in adv_routes:"},{"line_number":116,"context_line":"                self.withdraw_route_via_bgp_speaker(bgp_speaker[\u0027id\u0027],"},{"line_number":117,"context_line":"                                                    cached_route)"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"        self.advertise_routes_via_bgp_speaker(bgp_speaker)"}],"source_content_type":"text/x-python","patch_set":13,"id":"da20952f_370b862d","line":116,"in_reply_to":"da20952f_3bdb8351","updated":"2015-09-09 10:03:25.000000000","message":"Refer to L354.","commit_id":"d4d7a23df852354dbec257cfb9b0cad09b063082"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"a4e92d5aaa8564cd4a6c97748eb26cf7bd0822dd","unresolved":false,"context_lines":[{"line_number":113,"context_line":""},{"line_number":114,"context_line":"        for cached_route in cached_adv_routes:"},{"line_number":115,"context_line":"            if cached_route not in adv_routes:"},{"line_number":116,"context_line":"                self.withdraw_route_via_bgp_speaker(bgp_speaker[\u0027id\u0027],"},{"line_number":117,"context_line":"                                                    cached_route)"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"        self.advertise_routes_via_bgp_speaker(bgp_speaker)"}],"source_content_type":"text/x-python","patch_set":13,"id":"da20952f_1787b9b5","line":116,"in_reply_to":"da20952f_578451d1","updated":"2015-09-07 09:16:35.000000000","message":"Can we stop processing if sync is scheduled by \u0027withdraw_route_via_bgp_speaker\u0027.?","commit_id":"d4d7a23df852354dbec257cfb9b0cad09b063082"},{"author":{"_account_id":10237,"name":"Numan Siddique","email":"nusiddiq@redhat.com","username":"numansiddique"},"change_message_id":"c89bed50000f9a89ff196ccf37a6cd37e1e61282","unresolved":false,"context_lines":[{"line_number":113,"context_line":""},{"line_number":114,"context_line":"        for cached_route in cached_adv_routes:"},{"line_number":115,"context_line":"            if cached_route not in adv_routes:"},{"line_number":116,"context_line":"                self.withdraw_route_via_bgp_speaker(bgp_speaker[\u0027id\u0027],"},{"line_number":117,"context_line":"                                                    cached_route)"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"        self.advertise_routes_via_bgp_speaker(bgp_speaker)"}],"source_content_type":"text/x-python","patch_set":13,"id":"da20952f_be2d8aa9","line":116,"in_reply_to":"da20952f_7d1e2a60","updated":"2015-09-07 08:44:43.000000000","message":"same as above","commit_id":"d4d7a23df852354dbec257cfb9b0cad09b063082"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"023620f03d87ca7574940a6f22c536777b6e991f","unresolved":false,"context_lines":[{"line_number":113,"context_line":""},{"line_number":114,"context_line":"        for cached_route in cached_adv_routes:"},{"line_number":115,"context_line":"            if cached_route not in adv_routes:"},{"line_number":116,"context_line":"                self.withdraw_route_via_bgp_speaker(bgp_speaker[\u0027id\u0027],"},{"line_number":117,"context_line":"                                                    cached_route)"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"        self.advertise_routes_via_bgp_speaker(bgp_speaker)"}],"source_content_type":"text/x-python","patch_set":13,"id":"da20952f_578451d1","line":116,"in_reply_to":"da20952f_be2d8aa9","updated":"2015-09-07 09:14:10.000000000","message":"ditto","commit_id":"d4d7a23df852354dbec257cfb9b0cad09b063082"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"0d597e691f824d713c4d4a1afc11a6cf14cd9550","unresolved":false,"context_lines":[{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    @utils.exception_logger()"},{"line_number":122,"context_line":"    def _periodic_resync_helper(self, context):"},{"line_number":123,"context_line":"        \"\"\"Resync DrAgent state periodically, if required.\"\"\""},{"line_number":124,"context_line":"        if self.needs_resync_reasons:"},{"line_number":125,"context_line":"            reasons \u003d self.needs_resync_reasons"},{"line_number":126,"context_line":"            self.needs_resync_reasons \u003d []"}],"source_content_type":"text/x-python","patch_set":13,"id":"da20952f_9a130465","line":123,"updated":"2015-09-06 07:03:55.000000000","message":"DrAgent \u003d\u003d\u003e BgpDrAgent","commit_id":"d4d7a23df852354dbec257cfb9b0cad09b063082"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"25c66983bf39080427cbac86cf9e2008e42af384","unresolved":false,"context_lines":[{"line_number":126,"context_line":"            self.needs_resync_reasons \u003d []"},{"line_number":127,"context_line":"            for r in reasons:"},{"line_number":128,"context_line":"                LOG.debug(\"resync (%(bgp_speaker_id)s): %(reason)s\","},{"line_number":129,"context_line":"                          {\"bgp_speaker_id\": r.get(\u0027bgp_speaker_id\u0027),"},{"line_number":130,"context_line":"                           \"reason\": r.get(\u0027reason\u0027)})"},{"line_number":131,"context_line":"            self.sync_state(context)"},{"line_number":132,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"da20952f_8e879d11","line":129,"updated":"2015-09-10 15:38:35.000000000","message":"Please fix: Received reason may not be a dict. Could be a simple string as well.\n\nException Seen:\n\n2015-09-10 19:57:46.350 ERROR neutron.agent.bgp.agent [req-b1fd7b7d-1121-4fca-9c48-6eb6997d7708 admin demo] Call to driver for remove_bgp_speaker has failed with exception 200.1 - No runtime is active. Call start to create a runtime.\n2015-09-10 19:57:46.350 26461 ERROR neutron.agent.bgp.agent Traceback (most recent call last):\n2015-09-10 19:57:46.350 26461 ERROR neutron.agent.bgp.agent   File \"/opt/stack/neutron/neutron/agent/bgp/agent.py\", line 322, in remove_bgp_speaker_from_dragent\n2015-09-10 19:57:46.350 26461 ERROR neutron.agent.bgp.agent     self.dr_driver_cls.remove_bgp_speaker()\n2015-09-10 19:57:46.350 26461 ERROR neutron.agent.bgp.agent   File \"/opt/stack/neutron/neutron/agent/bgp/driver/ryu_driver.py\", line 125, in remove_bgp_speaker\n2015-09-10 19:57:46.350 26461 ERROR neutron.agent.bgp.agent     self.speaker.shutdown()\n2015-09-10 19:57:46.350 26461 ERROR neutron.agent.bgp.agent   File \"/usr/local/lib/python2.7/dist-packages/ryu/services/protocols/bgp/bgpspeaker.py\", line 234, in shutdown\n2015-09-10 19:57:46.350 26461 ERROR neutron.agent.bgp.agent     call(\u0027core.stop\u0027)\n2015-09-10 19:57:46.350 26461 ERROR neutron.agent.bgp.agent   File \"/usr/local/lib/python2.7/dist-packages/ryu/services/protocols/bgp/api/base.py\", line 224, in call\n2015-09-10 19:57:46.350 26461 ERROR neutron.agent.bgp.agent     raise r\n2015-09-10 19:57:46.350 26461 ERROR neutron.agent.bgp.agent RuntimeConfigError: 200.1 - No runtime is active. Call start to create a runtime\n\nError Observed:\n\n2015-09-10 19:58:01.268 26461 ERROR neutron.agent.bgp.agent   File \"/opt/stack/neutron/neutron/common/utils.py\", line 355, in call\n2015-09-10 19:58:01.268 26461 ERROR neutron.agent.bgp.agent     return func(*args, **kwargs)\n2015-09-10 19:58:01.268 26461 ERROR neutron.agent.bgp.agent   File \"/opt/stack/neutron/neutron/agent/bgp/agent.py\", line 160, in _periodic_resync_helper\n2015-09-10 19:58:01.268 26461 ERROR neutron.agent.bgp.agent     {\"bgp_speaker_id\": r.get(\u0027bgp_speaker_id\u0027),\n2015-09-10 19:58:01.268 26461 ERROR neutron.agent.bgp.agent AttributeError: \u0027RuntimeConfigError\u0027 object has no attribute \u0027get\u0027","commit_id":"d4d7a23df852354dbec257cfb9b0cad09b063082"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"0d597e691f824d713c4d4a1afc11a6cf14cd9550","unresolved":false,"context_lines":[{"line_number":263,"context_line":"    def add_bgp_speaker_on_dragent(self, bgp_speaker):"},{"line_number":264,"context_line":"        # Caching BGP speaker details in BGPSpeakerCache. Will be used"},{"line_number":265,"context_line":"        # during smooth. Currently, only one BGP speaker can be hosted by"},{"line_number":266,"context_line":"        # a DrAgent so this make not be that useful now."},{"line_number":267,"context_line":"        self.cache.put_bgp_speaker(bgp_speaker)"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"        # Send this information to the registered driver."}],"source_content_type":"text/x-python","patch_set":13,"id":"da20952f_7d070a18","line":266,"updated":"2015-09-06 07:03:55.000000000","message":"remove the last statement mentioned in the comment.","commit_id":"d4d7a23df852354dbec257cfb9b0cad09b063082"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"0d597e691f824d713c4d4a1afc11a6cf14cd9550","unresolved":false,"context_lines":[{"line_number":264,"context_line":"        # Caching BGP speaker details in BGPSpeakerCache. Will be used"},{"line_number":265,"context_line":"        # during smooth. Currently, only one BGP speaker can be hosted by"},{"line_number":266,"context_line":"        # a DrAgent so this make not be that useful now."},{"line_number":267,"context_line":"        self.cache.put_bgp_speaker(bgp_speaker)"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"        # Send this information to the registered driver."},{"line_number":270,"context_line":"        LOG.debug(\u0027Calling driver for adding BGP speaker %(speaker_id)s,\u0027"}],"source_content_type":"text/x-python","patch_set":13,"id":"da20952f_9d0a1e1f","line":267,"updated":"2015-09-06 07:03:55.000000000","message":"I think we must check the cache before adding the speaker.","commit_id":"d4d7a23df852354dbec257cfb9b0cad09b063082"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"023620f03d87ca7574940a6f22c536777b6e991f","unresolved":false,"context_lines":[{"line_number":264,"context_line":"        # Caching BGP speaker details in BGPSpeakerCache. Will be used"},{"line_number":265,"context_line":"        # during smooth. Currently, only one BGP speaker can be hosted by"},{"line_number":266,"context_line":"        # a DrAgent so this make not be that useful now."},{"line_number":267,"context_line":"        self.cache.put_bgp_speaker(bgp_speaker)"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"        # Send this information to the registered driver."},{"line_number":270,"context_line":"        LOG.debug(\u0027Calling driver for adding BGP speaker %(speaker_id)s,\u0027"}],"source_content_type":"text/x-python","patch_set":13,"id":"da20952f_575bf185","line":267,"in_reply_to":"da20952f_6121939d","updated":"2015-09-07 09:14:10.000000000","message":"We should not re-add the speaker.","commit_id":"d4d7a23df852354dbec257cfb9b0cad09b063082"},{"author":{"_account_id":10237,"name":"Numan Siddique","email":"nusiddiq@redhat.com","username":"numansiddique"},"change_message_id":"c89bed50000f9a89ff196ccf37a6cd37e1e61282","unresolved":false,"context_lines":[{"line_number":264,"context_line":"        # Caching BGP speaker details in BGPSpeakerCache. Will be used"},{"line_number":265,"context_line":"        # during smooth. Currently, only one BGP speaker can be hosted by"},{"line_number":266,"context_line":"        # a DrAgent so this make not be that useful now."},{"line_number":267,"context_line":"        self.cache.put_bgp_speaker(bgp_speaker)"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"        # Send this information to the registered driver."},{"line_number":270,"context_line":"        LOG.debug(\u0027Calling driver for adding BGP speaker %(speaker_id)s,\u0027"}],"source_content_type":"text/x-python","patch_set":13,"id":"da20952f_6121939d","line":267,"in_reply_to":"da20952f_9d0a1e1f","updated":"2015-09-07 08:44:43.000000000","message":"what to do if it already exists ?","commit_id":"d4d7a23df852354dbec257cfb9b0cad09b063082"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"6be087d43fbaf3b77c03cab60d0cda86d81ef6d1","unresolved":false,"context_lines":[{"line_number":312,"context_line":"            LOG.debug(\u0027Calling driver for removing BGP peer for %(peer_ip)s\u0027,"},{"line_number":313,"context_line":"                      {\u0027peer_ip\u0027: bgp_peer_ip})"},{"line_number":314,"context_line":"        else:"},{"line_number":315,"context_line":"            # Something went wrong. Let\u0027s re-sync"},{"line_number":316,"context_line":"            self.schedule_resync(\"BGP Peer Out-of-sync\")"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"    def advertise_routes_via_bgp_speaker(self, bgp_speaker):"}],"source_content_type":"text/x-python","patch_set":13,"id":"da20952f_dba8477a","line":315,"updated":"2015-09-08 22:16:55.000000000","message":"How is this an indication something went wrong?  Attempting to remove a non-existent peer should be a no-op.  Do we really need a re-sync when this happens?","commit_id":"d4d7a23df852354dbec257cfb9b0cad09b063082"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"85efc40ec572cc8dc0ad7f1815dbca3ab2ceee30","unresolved":false,"context_lines":[{"line_number":312,"context_line":"            LOG.debug(\u0027Calling driver for removing BGP peer for %(peer_ip)s\u0027,"},{"line_number":313,"context_line":"                      {\u0027peer_ip\u0027: bgp_peer_ip})"},{"line_number":314,"context_line":"        else:"},{"line_number":315,"context_line":"            # Something went wrong. Let\u0027s re-sync"},{"line_number":316,"context_line":"            self.schedule_resync(\"BGP Peer Out-of-sync\")"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"    def advertise_routes_via_bgp_speaker(self, bgp_speaker):"}],"source_content_type":"text/x-python","patch_set":13,"id":"da20952f_1754421f","line":315,"in_reply_to":"da20952f_dba8477a","updated":"2015-09-09 10:03:25.000000000","message":"1. IMHO, the server can only ask to remove a peer if it was bound to a speaker.\n\n2. What if the previous peer add message was lost and now the agent has received peer delete request?","commit_id":"d4d7a23df852354dbec257cfb9b0cad09b063082"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"0d597e691f824d713c4d4a1afc11a6cf14cd9550","unresolved":false,"context_lines":[{"line_number":338,"context_line":"            if self.needs_resync_reasons:"},{"line_number":339,"context_line":"                # BgpSpeaker will re-smooth as re-sync is scheduled."},{"line_number":340,"context_line":"                # No point adding any information for the Speaker."},{"line_number":341,"context_line":"                # Let\u0027s stop process and sit back."},{"line_number":342,"context_line":"                break"},{"line_number":343,"context_line":"            self.withdraw_route_via_bgp_speaker(bgp_speaker_id, route)"},{"line_number":344,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"da20952f_3d16724c","line":341,"updated":"2015-09-06 07:03:55.000000000","message":"process \u003d\u003d\u003e processing","commit_id":"d4d7a23df852354dbec257cfb9b0cad09b063082"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"6be087d43fbaf3b77c03cab60d0cda86d81ef6d1","unresolved":false,"context_lines":[{"line_number":350,"context_line":"                  {\u0027cidr\u0027: route[\u0027destination\u0027],"},{"line_number":351,"context_line":"                   \u0027nexthop\u0027: route[\u0027next_hop\u0027]})"},{"line_number":352,"context_line":"        else:"},{"line_number":353,"context_line":"            # Something went wrong. Let\u0027s re-sync"},{"line_number":354,"context_line":"            self.schedule_resync(\"Advertised routes Out-of-sync\")"},{"line_number":355,"context_line":""},{"line_number":356,"context_line":"    def schedule_resync(self, reason):"}],"source_content_type":"text/x-python","patch_set":13,"id":"da20952f_5bb3d7e9","line":353,"updated":"2015-09-08 22:16:55.000000000","message":"See comment a L315.  Why is this an indication that something went wrong? I would expect that an attempt to withdraw a route that we don\u0027t have cached would be a no-op.  We can live without this else block, right?","commit_id":"d4d7a23df852354dbec257cfb9b0cad09b063082"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"bf37dc90bd578cc10cca9a460cbe85e52f75cb46","unresolved":false,"context_lines":[{"line_number":350,"context_line":"                  {\u0027cidr\u0027: route[\u0027destination\u0027],"},{"line_number":351,"context_line":"                   \u0027nexthop\u0027: route[\u0027next_hop\u0027]})"},{"line_number":352,"context_line":"        else:"},{"line_number":353,"context_line":"            # Something went wrong. Let\u0027s re-sync"},{"line_number":354,"context_line":"            self.schedule_resync(\"Advertised routes Out-of-sync\")"},{"line_number":355,"context_line":""},{"line_number":356,"context_line":"    def schedule_resync(self, reason):"}],"source_content_type":"text/x-python","patch_set":13,"id":"da20952f_67acde8c","line":353,"in_reply_to":"da20952f_57215ab3","updated":"2015-09-09 15:02:24.000000000","message":"Thanks for the explanation.  I think what you\u0027re saying makes sense.  In that case, sync_bgp_speaker() looks good to me as written.","commit_id":"d4d7a23df852354dbec257cfb9b0cad09b063082"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"85efc40ec572cc8dc0ad7f1815dbca3ab2ceee30","unresolved":false,"context_lines":[{"line_number":350,"context_line":"                  {\u0027cidr\u0027: route[\u0027destination\u0027],"},{"line_number":351,"context_line":"                   \u0027nexthop\u0027: route[\u0027next_hop\u0027]})"},{"line_number":352,"context_line":"        else:"},{"line_number":353,"context_line":"            # Something went wrong. Let\u0027s re-sync"},{"line_number":354,"context_line":"            self.schedule_resync(\"Advertised routes Out-of-sync\")"},{"line_number":355,"context_line":""},{"line_number":356,"context_line":"    def schedule_resync(self, reason):"}],"source_content_type":"text/x-python","patch_set":13,"id":"da20952f_57215ab3","line":353,"in_reply_to":"da20952f_5bb3d7e9","updated":"2015-09-09 10:03:25.000000000","message":"1. IMHO, the server can only ask to withdraw a previously advertised route.\n\n2. What if the previous router advertise message was lost and now the agent has received route withdraw request?","commit_id":"d4d7a23df852354dbec257cfb9b0cad09b063082"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"0d597e691f824d713c4d4a1afc11a6cf14cd9550","unresolved":false,"context_lines":[{"line_number":379,"context_line":"        self.client \u003d n_rpc.get_client(target)"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":"    def get_bgp_speakers(self, context):"},{"line_number":382,"context_line":"        \"\"\"Make a remote process call to retrieve all BGP speaker info.\"\"\""},{"line_number":383,"context_line":"        cctxt \u003d self.client.prepare()"},{"line_number":384,"context_line":"        return cctxt.call(context, \u0027get_all_bgp_speakers\u0027,"},{"line_number":385,"context_line":"                          host\u003dself.host)"}],"source_content_type":"text/x-python","patch_set":13,"id":"da20952f_3d3d12c4","line":382,"updated":"2015-09-06 07:03:55.000000000","message":"speaker \u003d\u003d\u003e speakers","commit_id":"d4d7a23df852354dbec257cfb9b0cad09b063082"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"0d597e691f824d713c4d4a1afc11a6cf14cd9550","unresolved":false,"context_lines":[{"line_number":401,"context_line":"    \"\"\"Agent cache of the current BGP speaker state."},{"line_number":402,"context_line":""},{"line_number":403,"context_line":"    This class is designed to support the advertisement for"},{"line_number":404,"context_line":"    multiple BGP speaker via a single driver interface. As per the"},{"line_number":405,"context_line":"    current design only one speaker can be deployed per DrAgent as"},{"line_number":406,"context_line":"    of now but this class is generic enough to cache multiple BGP"},{"line_number":407,"context_line":"    speakers as well."}],"source_content_type":"text/x-python","patch_set":13,"id":"da20952f_1d2e0e8c","line":404,"updated":"2015-09-06 07:03:55.000000000","message":"speaker \u003d\u003d\u003e speakers","commit_id":"d4d7a23df852354dbec257cfb9b0cad09b063082"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"0d597e691f824d713c4d4a1afc11a6cf14cd9550","unresolved":false,"context_lines":[{"line_number":532,"context_line":""},{"line_number":533,"context_line":"    def agent_updated(self, context, payload):"},{"line_number":534,"context_line":"        \"\"\"Handle the agent_updated notification event.\"\"\""},{"line_number":535,"context_line":"        self.schedule_resync(_(\"Agent updated: %(payload)s\") %"},{"line_number":536,"context_line":"                             {\"payload\": payload})"},{"line_number":537,"context_line":"        LOG.info(_LI(\"agent_updated by server side %s!\"), payload)"},{"line_number":538,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"da20952f_9d58de32","line":535,"updated":"2015-09-06 07:03:55.000000000","message":"Agent \u003d\u003d\u003e BgpDrAgent","commit_id":"d4d7a23df852354dbec257cfb9b0cad09b063082"}],"neutron/agent/bgp/base.py":[{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"3cb1b8599d83cbe09bebc95aff8b44057295a90a","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":26,"context_line":"class BgpDriverBase(object):"},{"line_number":27,"context_line":"    \"\"\"Base class for the BGP Speaking drivers."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    Any class which provides BGP functionality should extend this"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a50d1a3_79e8d516","line":26,"updated":"2015-08-01 05:50:00.000000000","message":"As per PEP8 guidelines please rename Bgp \u003d\u003d\u003d\u003e BGP. Check at all the places.","commit_id":"4a6b37408e813dfda0f75fe8a51be99fcff31fc6"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"6b9d1d5e899b41023571ae16806bc5a24991c3d3","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":26,"context_line":"class BgpDriverBase(object):"},{"line_number":27,"context_line":"    \"\"\"Base class for the BGP Speaking drivers."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    Any class which provides BGP functionality should extend this"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a4dcd0f_e6bf745e","line":26,"in_reply_to":"3a50d1a3_79e8d516","updated":"2015-08-11 06:20:48.000000000","message":"Done.","commit_id":"4a6b37408e813dfda0f75fe8a51be99fcff31fc6"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"2262464f2b5b8c969b81291830127bd08f0b31eb","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":26,"context_line":"class BGPDriverBase(object):"},{"line_number":27,"context_line":"    \"\"\"Base class for the BGP Speaking drivers."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    Any class which provides BGP functionality should extend this"}],"source_content_type":"text/x-python","patch_set":6,"id":"da20952f_1c4ed9c1","line":26,"updated":"2015-08-26 16:11:11.000000000","message":"Move this file to the driver patch (https://review.openstack.org/#/c/207635/)","commit_id":"70046265479bcd09c52a5b4d7bb58597bacc82ce"}],"neutron/agent/bgp/bgp_dragent.py":[{"author":{"_account_id":17455,"name":"Na Zhu","email":"juno.zhu@huawei.com","username":"Na"},"change_message_id":"01c69f95f0ec00c381a61eeac2928164c750df25","unresolved":false,"context_lines":[{"line_number":132,"context_line":"            self.needs_resync_reasons \u003d collections.defaultdict(list)"},{"line_number":133,"context_line":"            for bs, r in reasons.items():"},{"line_number":134,"context_line":"                if not bs:"},{"line_number":135,"context_line":"                    bs \u003d \"*\""},{"line_number":136,"context_line":"                LOG.debug(\"resync (%(bgp_speaker)s): %(reason)s\","},{"line_number":137,"context_line":"                          {\"reason\": r, \"bgp_speaker\": bs})"},{"line_number":138,"context_line":"            self.sync_state(reasons.keys())"}],"source_content_type":"text/x-python","patch_set":23,"id":"9a8ffd7b_07bd85b6","line":135,"updated":"2015-11-27 02:52:44.000000000","message":"Should also set r to \"*\".","commit_id":"4a8f94c26026710372dce135ac95488dd89a0936"},{"author":{"_account_id":17609,"name":"steve","email":"ruansx@cn.ibm.com","username":"steve.ruan"},"change_message_id":"1b106fa4f13d8b4bc3c6a09fcc70c16778d17ac2","unresolved":false,"context_lines":[{"line_number":84,"context_line":"            for hosted_bgp_speaker in hosted_bgp_speakers:"},{"line_number":85,"context_line":"                bs_id \u003d hosted_bgp_speaker[\u0027id\u0027]"},{"line_number":86,"context_line":"                if (not only_bs or  # specifically resync all"},{"line_number":87,"context_line":"                    bs_id not in hosted_bgp_speaker_ids or  # missing net"},{"line_number":88,"context_line":"                    bs_id in only_bs):  # specific bgp_speaker to sync"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"                    if not self.cache.is_bgp_speaker_added(bs_id):"}],"source_content_type":"text/x-python","patch_set":26,"id":"fa69d971_bc4bf2af","line":87,"range":{"start_line":87,"start_character":33,"end_line":87,"end_character":55},"updated":"2015-12-31 03:01:56.000000000","message":"This condition \"bs_id not in hosted_bgp_speaker_ids\" will never be True. right?","commit_id":"ccac6fc0c679c9dc236aaed6c892ceb2fd55a88b"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"40af1520a3b7affdbd1341e3378101d6939d77d8","unresolved":false,"context_lines":[{"line_number":84,"context_line":"            for hosted_bgp_speaker in hosted_bgp_speakers:"},{"line_number":85,"context_line":"                bs_id \u003d hosted_bgp_speaker[\u0027id\u0027]"},{"line_number":86,"context_line":"                if (not only_bs or  # specifically resync all"},{"line_number":87,"context_line":"                    bs_id not in hosted_bgp_speaker_ids or  # missing net"},{"line_number":88,"context_line":"                    bs_id in only_bs):  # specific bgp_speaker to sync"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"                    if not self.cache.is_bgp_speaker_added(bs_id):"}],"source_content_type":"text/x-python","patch_set":26,"id":"fa69d971_914a8982","line":87,"range":{"start_line":87,"start_character":33,"end_line":87,"end_character":55},"in_reply_to":"fa69d971_bc4bf2af","updated":"2015-12-31 12:24:58.000000000","message":"Nice catch. I think you are correct.","commit_id":"ccac6fc0c679c9dc236aaed6c892ceb2fd55a88b"},{"author":{"_account_id":17609,"name":"steve","email":"ruansx@cn.ibm.com","username":"steve.ruan"},"change_message_id":"1b106fa4f13d8b4bc3c6a09fcc70c16778d17ac2","unresolved":false,"context_lines":[{"line_number":487,"context_line":"        1.0 - Initial version for caching the state of BGP speaker."},{"line_number":488,"context_line":"    \"\"\""},{"line_number":489,"context_line":"    def __init__(self):"},{"line_number":490,"context_line":"        self.cache \u003d {}"},{"line_number":491,"context_line":""},{"line_number":492,"context_line":"    def get_bgp_speaker_ids(self):"},{"line_number":493,"context_line":"        return self.cache.keys()"}],"source_content_type":"text/x-python","patch_set":26,"id":"fa69d971_9755a7c7","line":490,"range":{"start_line":490,"start_character":13,"end_line":490,"end_character":18},"updated":"2015-12-31 03:01:56.000000000","message":"I have 2 questions here:\n1. Why cache bgp peers, routes in dragent? All these information will also be saved in bgp implementation like Quagga.\n2. How to support multiple BGP speakers in a single network node with same local IP?","commit_id":"ccac6fc0c679c9dc236aaed6c892ceb2fd55a88b"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"40af1520a3b7affdbd1341e3378101d6939d77d8","unresolved":false,"context_lines":[{"line_number":487,"context_line":"        1.0 - Initial version for caching the state of BGP speaker."},{"line_number":488,"context_line":"    \"\"\""},{"line_number":489,"context_line":"    def __init__(self):"},{"line_number":490,"context_line":"        self.cache \u003d {}"},{"line_number":491,"context_line":""},{"line_number":492,"context_line":"    def get_bgp_speaker_ids(self):"},{"line_number":493,"context_line":"        return self.cache.keys()"}],"source_content_type":"text/x-python","patch_set":26,"id":"fa69d971_31239dbf","line":490,"range":{"start_line":490,"start_character":13,"end_line":490,"end_character":18},"in_reply_to":"fa69d971_9755a7c7","updated":"2015-12-31 12:24:58.000000000","message":"1. We cached this information for smoothing and avoid advertisement of same information again to the driver. Consider a case where the same message is advertised multiple times by the neutron server for ensuring msg reliability.\n\n2. When I wrote this, I just wanted to design DRAgent to handle any protocol \u0026 not just BGP. IMO we can still keep this as it doesn\u0027t harm anything.","commit_id":"ccac6fc0c679c9dc236aaed6c892ceb2fd55a88b"},{"author":{"_account_id":17609,"name":"steve","email":"ruansx@cn.ibm.com","username":"steve.ruan"},"change_message_id":"fa92aad0bde9d5a7703326e6cd95dd52471958ad","unresolved":false,"context_lines":[{"line_number":134,"context_line":"                    bs \u003d \"*\""},{"line_number":135,"context_line":"                LOG.debug(\"resync (%(bgp_speaker)s): %(reason)s\","},{"line_number":136,"context_line":"                          {\"reason\": r, \"bgp_speaker\": bs})"},{"line_number":137,"context_line":"            self.sync_state(reasons.keys())"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    # NOTE: spacing is set 1 sec. The actual interval is controlled"},{"line_number":140,"context_line":"    # by neutron/service.py which defaults to CONF.periodic_interval"}],"source_content_type":"text/x-python","patch_set":28,"id":"fa69d971_1c6705b8","line":137,"range":{"start_line":137,"start_character":17,"end_line":137,"end_character":43},"updated":"2016-01-06 08:16:20.000000000","message":"sync_state(reasons.keys()) should be \"sync_state(context, reasons.keys())\"","commit_id":"51c541f92377a7f1165deb595c0950df42442592"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"cdd14fe5cc7aa9e714b24cd63caad2f7bf1fa684","unresolved":false,"context_lines":[{"line_number":134,"context_line":"                    bs \u003d \"*\""},{"line_number":135,"context_line":"                LOG.debug(\"resync (%(bgp_speaker)s): %(reason)s\","},{"line_number":136,"context_line":"                          {\"reason\": r, \"bgp_speaker\": bs})"},{"line_number":137,"context_line":"            self.sync_state(reasons.keys())"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    # NOTE: spacing is set 1 sec. The actual interval is controlled"},{"line_number":140,"context_line":"    # by neutron/service.py which defaults to CONF.periodic_interval"}],"source_content_type":"text/x-python","patch_set":28,"id":"fa69d971_c2089fdc","line":137,"range":{"start_line":137,"start_character":17,"end_line":137,"end_character":43},"in_reply_to":"fa69d971_1c6705b8","updated":"2016-01-06 10:35:39.000000000","message":"Ok","commit_id":"51c541f92377a7f1165deb595c0950df42442592"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"a92b95bd36877884cd53aa9a06e6e634c99792fc","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Huawei Technologies India Pvt. Ltd."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":4,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":29,"id":"fa69d971_7b13360e","line":1,"updated":"2016-01-08 04:05:23.000000000","message":"Year has passed. Let\u0027s change to 2016.","commit_id":"7292ec0a727c8b564f28ff88b64b9703a20bf956"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"0412f5f77db3d1bc9461ec00b0a4117f12e81a4f","unresolved":false,"context_lines":[{"line_number":28,"context_line":"from neutron.common import utils"},{"line_number":29,"context_line":"from neutron import context"},{"line_number":30,"context_line":"from neutron.extensions import bgp as bgp_ext"},{"line_number":31,"context_line":"from neutron.i18n import _LE, _LI, _LW"},{"line_number":32,"context_line":"from neutron import manager"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":30,"id":"da6ed579_82f44cf2","line":31,"updated":"2016-01-13 14:10:36.000000000","message":"this should be from neutron._i18n","commit_id":"40ab863b9af41f1ec691669dad269bf752c4cba0"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"3191d8391cea6b91c2c3c876044cb594addf011c","unresolved":false,"context_lines":[{"line_number":28,"context_line":"from neutron.common import utils"},{"line_number":29,"context_line":"from neutron import context"},{"line_number":30,"context_line":"from neutron.extensions import bgp as bgp_ext"},{"line_number":31,"context_line":"from neutron.i18n import _LE, _LI, _LW"},{"line_number":32,"context_line":"from neutron import manager"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":30,"id":"9a68dd71_356140a9","line":31,"in_reply_to":"da6ed579_82f44cf2","updated":"2016-01-27 09:06:35.000000000","message":"done","commit_id":"40ab863b9af41f1ec691669dad269bf752c4cba0"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"0412f5f77db3d1bc9461ec00b0a4117f12e81a4f","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        except Exception as e:"},{"line_number":96,"context_line":"            self.schedule_resync(reason\u003de)"},{"line_number":97,"context_line":"            LOG.exception(_LE(\u0027Unable to sync BGP speaker state.\u0027))"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    def sync_bgp_speaker(self, bgp_speaker):"},{"line_number":100,"context_line":"        # sync BGP Speakers"},{"line_number":101,"context_line":"        bgp_peer_ips \u003d set("}],"source_content_type":"text/x-python","patch_set":30,"id":"da6ed579_42c6549b","line":98,"updated":"2016-01-13 14:10:36.000000000","message":"epti","commit_id":"40ab863b9af41f1ec691669dad269bf752c4cba0"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"3191d8391cea6b91c2c3c876044cb594addf011c","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        except Exception as e:"},{"line_number":96,"context_line":"            self.schedule_resync(reason\u003de)"},{"line_number":97,"context_line":"            LOG.exception(_LE(\u0027Unable to sync BGP speaker state.\u0027))"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    def sync_bgp_speaker(self, bgp_speaker):"},{"line_number":100,"context_line":"        # sync BGP Speakers"},{"line_number":101,"context_line":"        bgp_peer_ips \u003d set("}],"source_content_type":"text/x-python","patch_set":30,"id":"9a68dd71_f5116805","line":98,"in_reply_to":"da6ed579_42c6549b","updated":"2016-01-27 09:06:35.000000000","message":"Didn\u0027t get your concern. Can you elaborate?","commit_id":"40ab863b9af41f1ec691669dad269bf752c4cba0"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"0412f5f77db3d1bc9461ec00b0a4117f12e81a4f","unresolved":false,"context_lines":[{"line_number":288,"context_line":"            bgp_peer \u003d self.plugin_rpc.get_bgp_peer_info(self.context,"},{"line_number":289,"context_line":"                                                         bgp_peer_id)"},{"line_number":290,"context_line":"            if not bgp_peer:"},{"line_number":291,"context_line":"                LOG.warn(_LW(\u0027BGP Peer %s has been deleted.\u0027), bgp_peer)"},{"line_number":292,"context_line":"            return bgp_peer"},{"line_number":293,"context_line":"        except Exception as e:"},{"line_number":294,"context_line":"            self.schedule_resync(reason\u003de,"}],"source_content_type":"text/x-python","patch_set":30,"id":"da6ed579_42741467","line":291,"updated":"2016-01-13 14:10:36.000000000","message":"warn is deprecated. please use wanrning","commit_id":"40ab863b9af41f1ec691669dad269bf752c4cba0"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"3191d8391cea6b91c2c3c876044cb594addf011c","unresolved":false,"context_lines":[{"line_number":288,"context_line":"            bgp_peer \u003d self.plugin_rpc.get_bgp_peer_info(self.context,"},{"line_number":289,"context_line":"                                                         bgp_peer_id)"},{"line_number":290,"context_line":"            if not bgp_peer:"},{"line_number":291,"context_line":"                LOG.warn(_LW(\u0027BGP Peer %s has been deleted.\u0027), bgp_peer)"},{"line_number":292,"context_line":"            return bgp_peer"},{"line_number":293,"context_line":"        except Exception as e:"},{"line_number":294,"context_line":"            self.schedule_resync(reason\u003de,"}],"source_content_type":"text/x-python","patch_set":30,"id":"9a68dd71_957cac21","line":291,"in_reply_to":"da6ed579_42741467","updated":"2016-01-27 09:06:35.000000000","message":"Done","commit_id":"40ab863b9af41f1ec691669dad269bf752c4cba0"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"0412f5f77db3d1bc9461ec00b0a4117f12e81a4f","unresolved":false,"context_lines":[{"line_number":293,"context_line":"        except Exception as e:"},{"line_number":294,"context_line":"            self.schedule_resync(reason\u003de,"},{"line_number":295,"context_line":"                                 speaker_id\u003dbgp_speaker_id)"},{"line_number":296,"context_line":"            LOG.exception(_LE(\u0027BGP peer %(bgp_peer)s info call \u0027"},{"line_number":297,"context_line":"                              \u0027failed with reason\u003d%(e)s.\u0027),"},{"line_number":298,"context_line":"                          {\u0027bgp_peer\u0027: bgp_peer_id, \u0027e\u0027: e})"},{"line_number":299,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"da6ed579_225240de","line":296,"updated":"2016-01-13 14:10:36.000000000","message":"why exception and not error? do you need the stack trace?","commit_id":"40ab863b9af41f1ec691669dad269bf752c4cba0"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"3191d8391cea6b91c2c3c876044cb594addf011c","unresolved":false,"context_lines":[{"line_number":293,"context_line":"        except Exception as e:"},{"line_number":294,"context_line":"            self.schedule_resync(reason\u003de,"},{"line_number":295,"context_line":"                                 speaker_id\u003dbgp_speaker_id)"},{"line_number":296,"context_line":"            LOG.exception(_LE(\u0027BGP peer %(bgp_peer)s info call \u0027"},{"line_number":297,"context_line":"                              \u0027failed with reason\u003d%(e)s.\u0027),"},{"line_number":298,"context_line":"                          {\u0027bgp_peer\u0027: bgp_peer_id, \u0027e\u0027: e})"},{"line_number":299,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"9a68dd71_158f5c24","line":296,"in_reply_to":"da6ed579_225240de","updated":"2016-01-27 09:06:35.000000000","message":"Agreed, error would be fine.","commit_id":"40ab863b9af41f1ec691669dad269bf752c4cba0"}],"neutron/agent/bgp/bgp_dragent_scheduler.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"0412f5f77db3d1bc9461ec00b0a4117f12e81a4f","unresolved":false,"context_lines":[{"line_number":73,"context_line":"                    \u0027agent_type\u0027: [constants.AGENT_TYPE_BGP_ROUTING],"},{"line_number":74,"context_line":"                    \u0027admin_state_up\u0027: [True]})"},{"line_number":75,"context_line":"            if not active_dragents:"},{"line_number":76,"context_line":"                LOG.warn(_LW(\u0027No more BgpDrAgents\u0027))"},{"line_number":77,"context_line":"                return []"},{"line_number":78,"context_line":"        return active_dragents"},{"line_number":79,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"da6ed579_621d980e","line":76,"updated":"2016-01-13 14:10:36.000000000","message":"ditto","commit_id":"40ab863b9af41f1ec691669dad269bf752c4cba0"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"3191d8391cea6b91c2c3c876044cb594addf011c","unresolved":false,"context_lines":[{"line_number":73,"context_line":"                    \u0027agent_type\u0027: [constants.AGENT_TYPE_BGP_ROUTING],"},{"line_number":74,"context_line":"                    \u0027admin_state_up\u0027: [True]})"},{"line_number":75,"context_line":"            if not active_dragents:"},{"line_number":76,"context_line":"                LOG.warn(_LW(\u0027No more BgpDrAgents\u0027))"},{"line_number":77,"context_line":"                return []"},{"line_number":78,"context_line":"        return active_dragents"},{"line_number":79,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"9a68dd71_3515c09a","line":76,"in_reply_to":"da6ed579_621d980e","updated":"2016-01-27 09:06:35.000000000","message":"Done","commit_id":"40ab863b9af41f1ec691669dad269bf752c4cba0"}],"neutron/agent/bgp/config.py":[{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"3cb1b8599d83cbe09bebc95aff8b44057295a90a","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from oslo_config import cfg"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"BGP_DRAGENT_OPTS \u003d ["},{"line_number":21,"context_line":"    cfg.StrOpt(\u0027router_id\u0027,"},{"line_number":22,"context_line":"               help\u003d_(\"BGP speaker identifier, which MUST be the IPv4 address \""},{"line_number":23,"context_line":"                      \"of the node where DR agent holds the BGP speaker\"))"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a50d1a3_19d8b17e","line":20,"updated":"2015-08-01 05:50:00.000000000","message":"This is not BGP_DRAGENT_OPTS.. It looks more of BGP_DRGENT_DRIVER_OPTS... Better to rename it as \"BGP_DRGENT_DRIVER_OPTS\".","commit_id":"4a6b37408e813dfda0f75fe8a51be99fcff31fc6"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"6b9d1d5e899b41023571ae16806bc5a24991c3d3","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from oslo_config import cfg"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"BGP_DRAGENT_OPTS \u003d ["},{"line_number":21,"context_line":"    cfg.StrOpt(\u0027router_id\u0027,"},{"line_number":22,"context_line":"               help\u003d_(\"BGP speaker identifier, which MUST be the IPv4 address \""},{"line_number":23,"context_line":"                      \"of the node where DR agent holds the BGP speaker\"))"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a4dcd0f_665a8452","line":20,"in_reply_to":"3a50d1a3_19d8b17e","updated":"2015-08-11 06:20:48.000000000","message":"I feel \"BGP_DRAGENT_OPTS\" is better.","commit_id":"4a6b37408e813dfda0f75fe8a51be99fcff31fc6"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"f52802830e70bf410046626b3b09cf3ba2a638c1","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"BGP_DRAGENT_OPTS \u003d ["},{"line_number":19,"context_line":"    cfg.StrOpt(\u0027router_id\u0027,"},{"line_number":20,"context_line":"               help\u003d_(\"BGP speaker identifier, which MUST be the IPv4 address \""},{"line_number":21,"context_line":"                      \"of the node where DR agent holds the BGP speaker\"))"},{"line_number":22,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_9b6a1980","line":20,"updated":"2015-08-12 21:14:30.000000000","message":"Why not IPv6 address?","commit_id":"054e037accd060b74011ed415f53200e8a473de0"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"b213f619cb8446870596e10fd3902ee43e5e9027","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"BGP_DRAGENT_OPTS \u003d ["},{"line_number":19,"context_line":"    cfg.StrOpt(\u0027router_id\u0027,"},{"line_number":20,"context_line":"               help\u003d_(\"BGP speaker identifier, which MUST be the IPv4 address \""},{"line_number":21,"context_line":"                      \"of the node where DR agent holds the BGP speaker\"))"},{"line_number":22,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_83a627bf","line":20,"in_reply_to":"1a4dcd0f_9b6a1980","updated":"2015-08-13 04:26:55.000000000","message":"Router-ID is 32 bit number and hence cannot hold IPv6 address.\n\nNormally, the highest loopback address is considered to be system router\u0027id. Will rephrase the help message. Moreover, I feel we can set it to 0.0.0.0 by default.","commit_id":"054e037accd060b74011ed415f53200e8a473de0"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"e589763a8e088f895e856f5817fd25c2011a6af2","unresolved":false,"context_lines":[{"line_number":16,"context_line":"from oslo_config import cfg"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"BGP_DRAGENT_OPTS \u003d ["},{"line_number":19,"context_line":"    cfg.StrOpt(\u0027bgp_router_id\u0027,"},{"line_number":20,"context_line":"               help\u003d_(\"BGP speaker identifier, which MUST be the IPv4 address \""},{"line_number":21,"context_line":"                      \"of the node where DR agent holds the BGP speaker\"))"},{"line_number":22,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":10,"id":"da20952f_222e6243","line":19,"updated":"2015-08-31 07:25:38.000000000","message":"I feel we can still keep the name as \"router_id\" as it\u0027s standard. Anyways, we will be configuring this inside [BGP] config section so need to worry.","commit_id":"94d07959fc9390061a8faab2d63f4e0ed1407f92"},{"author":{"_account_id":10237,"name":"Numan Siddique","email":"nusiddiq@redhat.com","username":"numansiddique"},"change_message_id":"c2a14c4929957dc6ab58cb8cb33f72f7950e550a","unresolved":false,"context_lines":[{"line_number":16,"context_line":"from oslo_config import cfg"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"BGP_DRAGENT_OPTS \u003d ["},{"line_number":19,"context_line":"    cfg.StrOpt(\u0027bgp_router_id\u0027,"},{"line_number":20,"context_line":"               help\u003d_(\"BGP speaker identifier, which MUST be the IPv4 address \""},{"line_number":21,"context_line":"                      \"of the node where DR agent holds the BGP speaker\"))"},{"line_number":22,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":10,"id":"da20952f_0829fd36","line":19,"in_reply_to":"da20952f_222e6243","updated":"2015-08-31 08:24:23.000000000","message":"The reason I changed his because few test cases are failing since \"router_id\" StrOpt is already in use.\nhttp://logs.openstack.org/25/207625/9/check/gate-neutron-python27/2e31c8a/testr_results.html.gz","commit_id":"94d07959fc9390061a8faab2d63f4e0ed1407f92"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"a92b95bd36877884cd53aa9a06e6e634c99792fc","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Huawei Technologies India Pvt. Ltd."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":4,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":29,"id":"fa69d971_1bf9dac8","line":1,"updated":"2016-01-08 04:05:23.000000000","message":"Year has passed. Let\u0027s change to 2016.","commit_id":"7292ec0a727c8b564f28ff88b64b9703a20bf956"}],"neutron/agent/bgp/entry.py":[{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"a92b95bd36877884cd53aa9a06e6e634c99792fc","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Huawei Technologies India Pvt. Ltd."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":4,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":29,"id":"fa69d971_9b2b8a33","line":1,"updated":"2016-01-08 04:05:23.000000000","message":"Year has passed. Let\u0027s change to 2016.","commit_id":"7292ec0a727c8b564f28ff88b64b9703a20bf956"}],"neutron/agent/bgp_dragent.py":[{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"3cb1b8599d83cbe09bebc95aff8b44057295a90a","unresolved":false,"context_lines":[{"line_number":30,"context_line":"def register_options():"},{"line_number":31,"context_line":"    config.register_agent_state_opts_helper(cfg.CONF)"},{"line_number":32,"context_line":"    config.register_root_helper(cfg.CONF)"},{"line_number":33,"context_line":"    cfg.CONF.register_opts(bgp_dragent_config.BGP_DRAGENT_OPTS, \u0027BGP\u0027)"},{"line_number":34,"context_line":"    cfg.CONF.register_opts(external_process.OPTS)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3a50d1a3_b9e65d42","line":33,"updated":"2015-08-01 05:50:00.000000000","message":"Use \"BGP_DRAGENT_DRIVER_OPTS\"","commit_id":"4a6b37408e813dfda0f75fe8a51be99fcff31fc6"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"6b9d1d5e899b41023571ae16806bc5a24991c3d3","unresolved":false,"context_lines":[{"line_number":30,"context_line":"def register_options():"},{"line_number":31,"context_line":"    config.register_agent_state_opts_helper(cfg.CONF)"},{"line_number":32,"context_line":"    config.register_root_helper(cfg.CONF)"},{"line_number":33,"context_line":"    cfg.CONF.register_opts(bgp_dragent_config.BGP_DRAGENT_OPTS, \u0027BGP\u0027)"},{"line_number":34,"context_line":"    cfg.CONF.register_opts(external_process.OPTS)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1a4dcd0f_26547c1f","line":33,"in_reply_to":"3a50d1a3_b9e65d42","updated":"2015-08-11 06:20:48.000000000","message":"NA.","commit_id":"4a6b37408e813dfda0f75fe8a51be99fcff31fc6"}],"neutron/api/rpc/agentnotifiers/bgp_dr_rpc_agent_api.py":[{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"3cb1b8599d83cbe09bebc95aff8b44057295a90a","unresolved":false,"context_lines":[{"line_number":23,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class BgpDynamicRoutingAgentNotifyAPI(object):"},{"line_number":27,"context_line":"    \"\"\"API for plugin to notify BGP dragent."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    This class implements the client side of an rpc interface.  The server side"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a50d1a3_39c9edac","line":26,"updated":"2015-08-01 05:50:00.000000000","message":"Better to rename it as \"BGPDRAgentNotifyAPI\" for consistency and to follow PEP8 guidelines.","commit_id":"4a6b37408e813dfda0f75fe8a51be99fcff31fc6"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"6b9d1d5e899b41023571ae16806bc5a24991c3d3","unresolved":false,"context_lines":[{"line_number":23,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class BgpDynamicRoutingAgentNotifyAPI(object):"},{"line_number":27,"context_line":"    \"\"\"API for plugin to notify BGP dragent."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    This class implements the client side of an rpc interface.  The server side"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a4dcd0f_86123061","line":26,"in_reply_to":"3a50d1a3_39c9edac","updated":"2015-08-11 06:20:48.000000000","message":"Done.","commit_id":"4a6b37408e813dfda0f75fe8a51be99fcff31fc6"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"0c04ccc8a6c1308dd2b2553e283b3403ca713049","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        target \u003d oslo_messaging.Target(topic\u003dtopic, version\u003d\u00271.0\u0027)"},{"line_number":36,"context_line":"        self.client \u003d n_rpc.get_client(target)"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def bgp_route_advertisement(self, context, route, bgp_speaker_id,"},{"line_number":39,"context_line":"                                host):"},{"line_number":40,"context_line":"        \"\"\"Tell bgp_dragent to begin advertising the given route."},{"line_number":41,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1a4dcd0f_c2a0bff6","line":38,"updated":"2015-08-12 17:51:30.000000000","message":"This should take a list of routes so we don\u0027t have to invoke an RPC for every route, it will be painfully slow otherwise.","commit_id":"2a9bf2309144564372fe5f1ebc67040ae43c9128"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"1093ce632763f72ebcc15d4c125d03d9e6b98982","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        target \u003d oslo_messaging.Target(topic\u003dtopic, version\u003d\u00271.0\u0027)"},{"line_number":36,"context_line":"        self.client \u003d n_rpc.get_client(target)"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def bgp_route_advertisement(self, context, route, bgp_speaker_id,"},{"line_number":39,"context_line":"                                host):"},{"line_number":40,"context_line":"        \"\"\"Tell bgp_dragent to begin advertising the given route."},{"line_number":41,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1a4dcd0f_a3a80321","line":38,"in_reply_to":"1a4dcd0f_c2a0bff6","updated":"2015-08-13 04:32:56.000000000","message":"+1","commit_id":"2a9bf2309144564372fe5f1ebc67040ae43c9128"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"0c04ccc8a6c1308dd2b2553e283b3403ca713049","unresolved":false,"context_lines":[{"line_number":48,"context_line":"                                      \u0027next_hop\u0027: route[\u0027next_hop\u0027]}},"},{"line_number":49,"context_line":"                           host)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def bgp_route_withdrawal(self, context, route, bgp_speaker_id,"},{"line_number":52,"context_line":"                             host):"},{"line_number":53,"context_line":"        \"\"\"Tell bgp_dragent to stop advertising the given route."},{"line_number":54,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1a4dcd0f_62a3eb00","line":51,"updated":"2015-08-12 17:51:30.000000000","message":"Same comment as above","commit_id":"2a9bf2309144564372fe5f1ebc67040ae43c9128"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"1093ce632763f72ebcc15d4c125d03d9e6b98982","unresolved":false,"context_lines":[{"line_number":48,"context_line":"                                      \u0027next_hop\u0027: route[\u0027next_hop\u0027]}},"},{"line_number":49,"context_line":"                           host)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def bgp_route_withdrawal(self, context, route, bgp_speaker_id,"},{"line_number":52,"context_line":"                             host):"},{"line_number":53,"context_line":"        \"\"\"Tell bgp_dragent to stop advertising the given route."},{"line_number":54,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1a4dcd0f_c3a3cf41","line":51,"in_reply_to":"1a4dcd0f_62a3eb00","updated":"2015-08-13 04:32:56.000000000","message":"+1","commit_id":"2a9bf2309144564372fe5f1ebc67040ae43c9128"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"8adbcd6ad117115b793bf68c3b8b58dec230b5aa","unresolved":false,"context_lines":[{"line_number":43,"context_line":"           and new DVR port-host bindings, and subnet creation(?)."},{"line_number":44,"context_line":"        \"\"\""},{"line_number":45,"context_line":"        self._cast_message(context, \u0027bgp_routes_advertisement_end\u0027,"},{"line_number":46,"context_line":"                           {\u0027routes\u0027: {\u0027speaker_id\u0027: bgp_speaker_id,"},{"line_number":47,"context_line":"                                       \u0027routes\u0027: routes}},"},{"line_number":48,"context_line":"                           host)"},{"line_number":49,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1a4dcd0f_d33c7de3","line":46,"updated":"2015-08-16 16:46:56.000000000","message":"Can we rename it as \"advertised_routes\" or \"route_info\"","commit_id":"b0ce0d8d7ecd76c8a80952550b0aa402d97a4d3e"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"8adbcd6ad117115b793bf68c3b8b58dec230b5aa","unresolved":false,"context_lines":[{"line_number":55,"context_line":"           network, and removal of DVR port-host binding, and subnet delete(?)."},{"line_number":56,"context_line":"        \"\"\""},{"line_number":57,"context_line":"        self._cast_message(context, \u0027bgp_routes_withdrawal_end\u0027,"},{"line_number":58,"context_line":"                           {\u0027routes\u0027: {\u0027speaker_id\u0027: bgp_speaker_id,"},{"line_number":59,"context_line":"                                       \u0027routes\u0027: routes}},"},{"line_number":60,"context_line":"                           host)"},{"line_number":61,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1a4dcd0f_732489c5","line":58,"updated":"2015-08-16 16:46:56.000000000","message":"ditto","commit_id":"b0ce0d8d7ecd76c8a80952550b0aa402d97a4d3e"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"eaf1a45d835f1c6a3e922f2a1cccf1f1dcfef022","unresolved":false,"context_lines":[{"line_number":96,"context_line":"           place, we need to inform the bgp_dragent of the removal of a"},{"line_number":97,"context_line":"           BGP Speaker in case peering sessions need to be stopped."},{"line_number":98,"context_line":"        \"\"\""},{"line_number":99,"context_line":"        self._cast_message(context, \u0027bgp_speaker_remove_end\u0027,"},{"line_number":100,"context_line":"                           {\u0027bgp_speaker\u0027: {\u0027id\u0027: bgp_speaker_id}}, host)"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    def _cast_message(self, context, method, payload, host,"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a4dcd0f_d71468a0","line":99,"updated":"2015-08-16 17:48:51.000000000","message":"I was thinking whether we got to do something as https://review.openstack.org/#/c/210378/ to avoid fail-over cases.","commit_id":"b0ce0d8d7ecd76c8a80952550b0aa402d97a4d3e"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"8a0915d97accd734b50415edacd736c57627bb4e","unresolved":false,"context_lines":[{"line_number":86,"context_line":"           we need to inform the bgp_dragent of a new BGP Speaker in case a"},{"line_number":87,"context_line":"           peering session needs to opened immediately."},{"line_number":88,"context_line":"        \"\"\""},{"line_number":89,"context_line":"        self._cast_message(context, \u0027bgp_speaker_create_end\u0027,"},{"line_number":90,"context_line":"                           {\u0027bgp_speaker\u0027: {\u0027id\u0027: bgp_speaker_id}}, host)"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    def bgp_speaker_removed(self, context, bgp_speaker_id, host):"}],"source_content_type":"text/x-python","patch_set":8,"id":"da20952f_5d7ad925","line":89,"updated":"2015-08-27 13:16:36.000000000","message":"Since BGP Speaker is a critical information so how about using _cast_call instead?","commit_id":"498b383f65cebd65f4e89eca28b89ee742fcb2a9"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"6cff25d48d3f73660b846955582fb44d906527b7","unresolved":false,"context_lines":[{"line_number":86,"context_line":"           we need to inform the bgp_dragent of a new BGP Speaker in case a"},{"line_number":87,"context_line":"           peering session needs to opened immediately."},{"line_number":88,"context_line":"        \"\"\""},{"line_number":89,"context_line":"        self._cast_message(context, \u0027bgp_speaker_create_end\u0027,"},{"line_number":90,"context_line":"                           {\u0027bgp_speaker\u0027: {\u0027id\u0027: bgp_speaker_id}}, host)"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    def bgp_speaker_removed(self, context, bgp_speaker_id, host):"}],"source_content_type":"text/x-python","patch_set":8,"id":"da20952f_70665fbc","line":89,"in_reply_to":"da20952f_5d7ad925","updated":"2015-09-05 04:38:33.000000000","message":"Done. Addressed in PS10.","commit_id":"498b383f65cebd65f4e89eca28b89ee742fcb2a9"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"0d597e691f824d713c4d4a1afc11a6cf14cd9550","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def bgp_routes_advertisement(self, context, bgp_speaker_id,"},{"line_number":39,"context_line":"                                 routes, host):"},{"line_number":40,"context_line":"        \"\"\"Tell bgp_dragent to begin advertising the given route."},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"           Invoked on FIP association, adding router port to a tenant network,"},{"line_number":43,"context_line":"           and new DVR port-host bindings, and subnet creation(?)."}],"source_content_type":"text/x-python","patch_set":13,"id":"da20952f_dd797694","line":40,"updated":"2015-09-06 07:03:55.000000000","message":"change bgp_dragent \u003d\u003d\u003e BgpDrAgent","commit_id":"d4d7a23df852354dbec257cfb9b0cad09b063082"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"0d597e691f824d713c4d4a1afc11a6cf14cd9550","unresolved":false,"context_lines":[{"line_number":84,"context_line":""},{"line_number":85,"context_line":"           Because a BGP Speaker can be created with BgpPeer binding in place,"},{"line_number":86,"context_line":"           we need to inform the bgp_dragent of a new BGP Speaker in case a"},{"line_number":87,"context_line":"           peering session needs to opened immediately."},{"line_number":88,"context_line":"        \"\"\""},{"line_number":89,"context_line":"        self._notification_host(context, \u0027bgp_speaker_create_end\u0027,"},{"line_number":90,"context_line":"                                {\u0027bgp_speaker\u0027: {\u0027id\u0027: bgp_speaker_id}}, host,"}],"source_content_type":"text/x-python","patch_set":13,"id":"da20952f_7da38a00","line":87,"updated":"2015-09-06 07:03:55.000000000","message":"Please check the implementation. We currently create BgpSpeaker without checking whether it has a valid peer association.","commit_id":"d4d7a23df852354dbec257cfb9b0cad09b063082"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"6be087d43fbaf3b77c03cab60d0cda86d81ef6d1","unresolved":false,"context_lines":[{"line_number":84,"context_line":""},{"line_number":85,"context_line":"           Because a BGP Speaker can be created with BgpPeer binding in place,"},{"line_number":86,"context_line":"           we need to inform the bgp_dragent of a new BGP Speaker in case a"},{"line_number":87,"context_line":"           peering session needs to opened immediately."},{"line_number":88,"context_line":"        \"\"\""},{"line_number":89,"context_line":"        self._notification_host(context, \u0027bgp_speaker_create_end\u0027,"},{"line_number":90,"context_line":"                                {\u0027bgp_speaker\u0027: {\u0027id\u0027: bgp_speaker_id}}, host,"}],"source_content_type":"text/x-python","patch_set":13,"id":"da20952f_1b3b1f3a","line":87,"in_reply_to":"da20952f_7da38a00","updated":"2015-09-08 22:16:55.000000000","message":"FYI, I\u0027ll be removing support for instantiating a BgpSpeaker with peer/network bindings.  The bindings will occur in an explicit binding action, so don\u0027t worry about syncing BgpPeer info here.","commit_id":"d4d7a23df852354dbec257cfb9b0cad09b063082"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"0d597e691f824d713c4d4a1afc11a6cf14cd9550","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        \"\"\"Tell bgp_dragent about the removal of a BGP Speaker."},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"           Because a BGP Speaker can be removed with BGP Peer binding in"},{"line_number":97,"context_line":"           place, we need to inform the bgp_dragent of the removal of a"},{"line_number":98,"context_line":"           BGP Speaker in case peering sessions need to be stopped."},{"line_number":99,"context_line":"        \"\"\""},{"line_number":100,"context_line":"        self._notification_host(context, \u0027bgp_speaker_remove_end\u0027,"}],"source_content_type":"text/x-python","patch_set":13,"id":"da20952f_3db2f24c","line":97,"updated":"2015-09-06 07:03:55.000000000","message":"Comment is not as per the current implementation.","commit_id":"d4d7a23df852354dbec257cfb9b0cad09b063082"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"6be087d43fbaf3b77c03cab60d0cda86d81ef6d1","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        \"\"\"Tell bgp_dragent about the removal of a BGP Speaker."},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"           Because a BGP Speaker can be removed with BGP Peer binding in"},{"line_number":97,"context_line":"           place, we need to inform the bgp_dragent of the removal of a"},{"line_number":98,"context_line":"           BGP Speaker in case peering sessions need to be stopped."},{"line_number":99,"context_line":"        \"\"\""},{"line_number":100,"context_line":"        self._notification_host(context, \u0027bgp_speaker_remove_end\u0027,"}],"source_content_type":"text/x-python","patch_set":13,"id":"da20952f_7bc57b08","line":97,"in_reply_to":"da20952f_3db2f24c","updated":"2015-09-08 22:16:55.000000000","message":"BgpSpeaker delete will cascade the delete of all bindings.  Agent should tear down peering sessions when notified that a BgpSpeaker is deleted.","commit_id":"d4d7a23df852354dbec257cfb9b0cad09b063082"},{"author":{"_account_id":7505,"name":"Jaume Devesa","email":"devvesa@gmail.com","username":"devesa"},"change_message_id":"bb08a358ea2ae6f28c0fa0886138ff99be4e0001","unresolved":false,"context_lines":[{"line_number":39,"context_line":"                                 routes, host):"},{"line_number":40,"context_line":"        \"\"\"Tell BgpDrAgent to begin advertising the given route."},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"           Invoked on FIP association, adding router port to a tenant network,"},{"line_number":43,"context_line":"           and new DVR port-host bindings, and subnet creation(?)."},{"line_number":44,"context_line":"        \"\"\""},{"line_number":45,"context_line":"        self._notification_host(context, \u0027bgp_routes_advertisement_end\u0027,"}],"source_content_type":"text/x-python","patch_set":17,"id":"ba15a1d1_0f95e4e2","line":42,"updated":"2015-09-22 13:34:37.000000000","message":"nit. docstring bad indented.","commit_id":"42fee1342fad477cdddb703d1601cd454244b8a5"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"f2c2107b218fa1b600480c151484d772a1927d5e","unresolved":false,"context_lines":[{"line_number":39,"context_line":"                                 routes, host):"},{"line_number":40,"context_line":"        \"\"\"Tell BgpDrAgent to begin advertising the given route."},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"           Invoked on FIP association, adding router port to a tenant network,"},{"line_number":43,"context_line":"           and new DVR port-host bindings, and subnet creation(?)."},{"line_number":44,"context_line":"        \"\"\""},{"line_number":45,"context_line":"        self._notification_host(context, \u0027bgp_routes_advertisement_end\u0027,"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a1a9d01_8b59f85c","line":42,"in_reply_to":"ba15a1d1_0f95e4e2","updated":"2015-09-26 08:22:27.000000000","message":"Done.","commit_id":"42fee1342fad477cdddb703d1601cd454244b8a5"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"83b929f599928ac6064970f6f7cf15357e280eba","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Huawei Technologies India Pvt. Ltd."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":4,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":19,"id":"9a1a9d01_fe5870fc","line":1,"updated":"2015-09-26 08:58:42.000000000","message":"How about moving this file inside services.bgp.agent.rpc.agentnotifiers?","commit_id":"f5a0fbe6fb0aa26385d0f7d2ccca83f2c6854d31"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"0c686007715227e58c7fbcdedb6e3e1f40351698","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Huawei Technologies India Pvt. Ltd."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":4,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":20,"id":"9a1a9d01_e13d35bc","line":1,"updated":"2015-09-26 11:10:09.000000000","message":"How about moving this file inside services.bgp.agent.rpc.agentnotifiers?","commit_id":"9bcc7ca457e707014dd4710ad78a3d2984c9666b"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"f10985fcf09b27b047d10c0ece40391082f13196","unresolved":false,"context_lines":[{"line_number":17,"context_line":"import oslo_messaging"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from neutron.common import rpc as n_rpc"},{"line_number":20,"context_line":"from neutron.common import topics"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":21,"id":"9a1a9d01_8f1bcd80","line":20,"updated":"2015-09-30 06:05:41.000000000","message":"Let\u0027s move this inside services. It\u0027s not neutron specific.","commit_id":"97d1599ccee6f49be5f920e451a1452adb2948f0"},{"author":{"_account_id":7505,"name":"Jaume Devesa","email":"devvesa@gmail.com","username":"devesa"},"change_message_id":"e45cab91a933f128d90f8a84620fedc0a2e891bd","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    \"\"\"API for plugin to notify BGP DrAgent."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    This class implements the client side of an rpc interface.  The server side"},{"line_number":30,"context_line":"    is neutron.services.bgp_speaker.agent.bgp_dragent.BgpDrAgent. For more"},{"line_number":31,"context_line":"    information about rpc interfaces, please see doc/source/devref/rpc_api.rst."},{"line_number":32,"context_line":"    \"\"\""},{"line_number":33,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"9a1a9d01_2b345fdc","line":30,"updated":"2015-10-03 15:41:47.000000000","message":"server side is:\n\n  neutron.services.bgp.agent.bgp_dragent.BgpDrAgent","commit_id":"97d1599ccee6f49be5f920e451a1452adb2948f0"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"930c9b5286f7001da0c12f0703e1a2083668e417","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    \"\"\"API for plugin to notify BGP DrAgent."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    This class implements the client side of an rpc interface.  The server side"},{"line_number":30,"context_line":"    is neutron.services.bgp_speaker.agent.bgp_dragent.BgpDrAgent. For more"},{"line_number":31,"context_line":"    information about rpc interfaces, please see doc/source/devref/rpc_api.rst."},{"line_number":32,"context_line":"    \"\"\""},{"line_number":33,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"9a1a9d01_818302cc","line":30,"in_reply_to":"9a1a9d01_2b345fdc","updated":"2015-10-05 04:15:37.000000000","message":"Done.","commit_id":"97d1599ccee6f49be5f920e451a1452adb2948f0"},{"author":{"_account_id":17455,"name":"Na Zhu","email":"juno.zhu@huawei.com","username":"Na"},"change_message_id":"a3ee9b5fc3f6be3762a26e9fc340d98abc0962d1","unresolved":false,"context_lines":[{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    def _notification_host(self, context, method, payload, host,"},{"line_number":105,"context_line":"                           topic\u003dtopics.BGP_DR_AGENT, use_call\u003dFalse):"},{"line_number":106,"context_line":"        \"\"\"Cast the payload to BgpDrAgent running on the host.\"\"\""},{"line_number":107,"context_line":"        cctxt \u003d self.client.prepare(topic\u003dtopic, server\u003dhost)"},{"line_number":108,"context_line":"        rpc_method \u003d cctxt.call if use_call else cctxt.cast"},{"line_number":109,"context_line":"        rpc_method(context, method, payload\u003dpayload)"}],"source_content_type":"text/x-python","patch_set":24,"id":"9a8ffd7b_f0f7d0d0","line":106,"updated":"2015-12-03 02:02:54.000000000","message":"It is better to add some debug logs here.","commit_id":"72e5228cb3cb0cf1517f602155599a789e41ebfa"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"673a7d5c725627eee9e0dbd55afc936cbc750fb4","unresolved":false,"context_lines":[{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    def _notification_host(self, context, method, payload, host,"},{"line_number":105,"context_line":"                           topic\u003dtopics.BGP_DR_AGENT, use_call\u003dFalse):"},{"line_number":106,"context_line":"        \"\"\"Cast the payload to BgpDrAgent running on the host.\"\"\""},{"line_number":107,"context_line":"        cctxt \u003d self.client.prepare(topic\u003dtopic, server\u003dhost)"},{"line_number":108,"context_line":"        rpc_method \u003d cctxt.call if use_call else cctxt.cast"},{"line_number":109,"context_line":"        rpc_method(context, method, payload\u003dpayload)"}],"source_content_type":"text/x-python","patch_set":24,"id":"7a740942_9a70e041","line":106,"in_reply_to":"9a8ffd7b_f0f7d0d0","updated":"2015-12-13 06:16:45.000000000","message":"Sounds good. We can add. But the only concern I have is this should not have performance penalty as too messages can be exchanged.","commit_id":"72e5228cb3cb0cf1517f602155599a789e41ebfa"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"a92b95bd36877884cd53aa9a06e6e634c99792fc","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Huawei Technologies India Pvt. Ltd."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":4,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":29,"id":"fa69d971_bb30ce9f","line":1,"updated":"2016-01-08 04:05:23.000000000","message":"Year has passed. Let\u0027s change to 2016.","commit_id":"7292ec0a727c8b564f28ff88b64b9703a20bf956"},{"author":{"_account_id":17455,"name":"Na Zhu","email":"juno.zhu@huawei.com","username":"Na"},"change_message_id":"93a597053038ea96216bbd3596a1a8c961116dff","unresolved":false,"context_lines":[{"line_number":91,"context_line":"                                use_call\u003dTrue)"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    def bgp_speaker_removed(self, context, bgp_speaker_id, host):"},{"line_number":94,"context_line":"        \"\"\"Tell BgpDrAgent about the removal of a BGP Speaker."},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        Because a BGP Speaker can be removed with BGP Peer binding in"},{"line_number":97,"context_line":"        place, we need to inform the BgpDrAgent of the removal of a"}],"source_content_type":"text/x-python","patch_set":29,"id":"fa69d971_b2ccb689","line":94,"range":{"start_line":94,"start_character":0,"end_line":94,"end_character":8},"updated":"2016-01-07 02:38:26.000000000","message":"I can not find the code call this function, so i add comment here.\nIn my test, when the dragent hosts one bgp-speaker change from active to inactive, i can not delete bgp-speaker from the dragent.\n(neutron) bgp-speaker-delete 22cea489-8080-4aae-aeff-be1e86a6938d\nRequest Failed: internal server error while processing your request.\n\nI think when delete bgp-speaker from dragent, should check whether the dragent is down, if yes, just delete the database.","commit_id":"7292ec0a727c8b564f28ff88b64b9703a20bf956"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"a92b95bd36877884cd53aa9a06e6e634c99792fc","unresolved":false,"context_lines":[{"line_number":91,"context_line":"                                use_call\u003dTrue)"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    def bgp_speaker_removed(self, context, bgp_speaker_id, host):"},{"line_number":94,"context_line":"        \"\"\"Tell BgpDrAgent about the removal of a BGP Speaker."},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        Because a BGP Speaker can be removed with BGP Peer binding in"},{"line_number":97,"context_line":"        place, we need to inform the BgpDrAgent of the removal of a"}],"source_content_type":"text/x-python","patch_set":29,"id":"fa69d971_7e5b242f","line":94,"range":{"start_line":94,"start_character":0,"end_line":94,"end_character":8},"in_reply_to":"fa69d971_b2ccb689","updated":"2016-01-08 04:05:23.000000000","message":"Here you go: https://review.openstack.org/#/c/216994/17/neutron/db/bgp_rpc_db.py#L65\n\nI feel this must be controlled by the caller and not here.","commit_id":"7292ec0a727c8b564f28ff88b64b9703a20bf956"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"0412f5f77db3d1bc9461ec00b0a4117f12e81a4f","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from neutron.common import rpc as n_rpc"},{"line_number":20,"context_line":"from neutron.common import topics"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"da6ed579_62e4b80c","line":21,"updated":"2016-01-13 14:10:36.000000000","message":"only need one new line here and not 2","commit_id":"40ab863b9af41f1ec691669dad269bf752c4cba0"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"3191d8391cea6b91c2c3c876044cb594addf011c","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from neutron.common import rpc as n_rpc"},{"line_number":20,"context_line":"from neutron.common import topics"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"9a68dd71_9554ac54","line":21,"in_reply_to":"da6ed579_62e4b80c","updated":"2016-01-27 09:06:35.000000000","message":"Done","commit_id":"40ab863b9af41f1ec691669dad269bf752c4cba0"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"8c30f6ca87f7d826685cedbbc43724cbfa97b002","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Huawei Technologies India Pvt. Ltd."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":4,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":34,"id":"9a68dd71_52adea86","line":1,"updated":"2016-01-27 09:07:56.000000000","message":"2016","commit_id":"2286cd2ba579edd825efbf895f2c41764ea75d92"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"fa7ace4c9aa596aebc2e1ab94a68035ede5e0ed3","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Huawei Technologies India Pvt. Ltd."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":4,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":34,"id":"9a68dd71_d81fb959","line":1,"in_reply_to":"9a68dd71_52adea86","updated":"2016-01-27 09:28:28.000000000","message":"Done","commit_id":"2286cd2ba579edd825efbf895f2c41764ea75d92"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"8c30f6ca87f7d826685cedbbc43724cbfa97b002","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from neutron.common import topics"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class BgpDrAgentNotifyApi(object):"}],"source_content_type":"text/x-python","patch_set":34,"id":"9a68dd71_b2c5463e","line":23,"updated":"2016-01-27 09:07:56.000000000","message":"LOG unused. Plz remove.","commit_id":"2286cd2ba579edd825efbf895f2c41764ea75d92"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"fa7ace4c9aa596aebc2e1ab94a68035ede5e0ed3","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from neutron.common import topics"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class BgpDrAgentNotifyApi(object):"}],"source_content_type":"text/x-python","patch_set":34,"id":"9a68dd71_3850550a","line":23,"in_reply_to":"9a68dd71_b2c5463e","updated":"2016-01-27 09:28:28.000000000","message":"Done","commit_id":"2286cd2ba579edd825efbf895f2c41764ea75d92"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"55261fea427d2721200cafba84130bc898943132","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2016 Huawei Technologies India Pvt. Ltd."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":4,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":38,"id":"7a5de9d1_790ba82a","line":1,"updated":"2016-02-01 13:59:32.000000000","message":"rename this file to bgp_rpc_dragent_api.py","commit_id":"4dd909f6fc96c8d0b986f1b6fccd0c2dab72f8f0"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"36be6692b7c3ccb5515b5643784a8cdc6f608020","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2016 Huawei Technologies India Pvt. Ltd."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":4,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":40,"id":"5a5ae5dd_3241720c","line":1,"updated":"2016-02-03 14:48:22.000000000","message":"How about moving this file inside services/bgp/rpc/agentnotifiers ?","commit_id":"211fb921ac4eac14f3007456b4418f2ee27bc8fd"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"8605c298212783a915a1e47f5e9e57aeea9077d9","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2016 Huawei Technologies India Pvt. Ltd."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":4,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":40,"id":"3a57f1b5_d92fa3f4","line":1,"in_reply_to":"5a5ae5dd_3241720c","updated":"2016-02-11 08:54:14.000000000","message":"Don\u0027t fix","commit_id":"211fb921ac4eac14f3007456b4418f2ee27bc8fd"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"d41c47118585ad51f77bec57d0a084458a8d0f09","unresolved":false,"context_lines":[{"line_number":98,"context_line":"                                use_call\u003dTrue)"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    def _notification_host(self, context, method, payload, host,"},{"line_number":101,"context_line":"                           topic\u003dbgp_consts.BGP_DRAGENT, use_call\u003dFalse):"},{"line_number":102,"context_line":"        \"\"\"Cast the payload to BgpDrAgent running on the host.\"\"\""},{"line_number":103,"context_line":"        cctxt \u003d self.client.prepare(topic\u003dtopic, server\u003dhost)"},{"line_number":104,"context_line":"        rpc_method \u003d cctxt.call if use_call else cctxt.cast"}],"source_content_type":"text/x-python","patch_set":48,"id":"3a57f1b5_5d65bf1b","line":101,"range":{"start_line":101,"start_character":27,"end_line":101,"end_character":55},"updated":"2016-02-11 21:38:26.000000000","message":"Just curious why you want \u0027topic\u0027 to be an argument.  Why would one change it?  (Also, I notice that none of the callers pass it)","commit_id":"2d369ef727ff8de656a2fc2523cc6dfe8a1002da"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"d41c47118585ad51f77bec57d0a084458a8d0f09","unresolved":false,"context_lines":[{"line_number":98,"context_line":"                                use_call\u003dTrue)"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    def _notification_host(self, context, method, payload, host,"},{"line_number":101,"context_line":"                           topic\u003dbgp_consts.BGP_DRAGENT, use_call\u003dFalse):"},{"line_number":102,"context_line":"        \"\"\"Cast the payload to BgpDrAgent running on the host.\"\"\""},{"line_number":103,"context_line":"        cctxt \u003d self.client.prepare(topic\u003dtopic, server\u003dhost)"},{"line_number":104,"context_line":"        rpc_method \u003d cctxt.call if use_call else cctxt.cast"}],"source_content_type":"text/x-python","patch_set":48,"id":"3a57f1b5_fd76ebd5","line":101,"range":{"start_line":101,"start_character":57,"end_line":101,"end_character":65},"updated":"2016-02-11 21:38:26.000000000","message":"Nit:  instead of having a use_call parameter, I\u0027d opt for a second method.  IMO, this isn\u0027t really a good pattern for reducing code duplication because it complicates the common case for a less common case.\n\n    def _notification_host_cast(self, context, method, payload, host):\n        \"\"\"Cast the payload to BgpDrAgent running on the host.\"\"\"\n        cctxt \u003d self.client.prepare(topic\u003dtopics.BGP_DRAGENT, server\u003dhost)\n        cctxt.cast(context, method, payload\u003dpayload)\n\n    def _notification_host_call(self, context, method, payload, host):\n        \"\"\"Send the payload to BgpDrAgent running on the host using call.\"\"\"\n        cctxt \u003d self.client.prepare(topic\u003dtopics.BGP_DRAGENT, server\u003dhost)\n        cctxt.call(context, method, payload\u003dpayload)\n\nBut, it isn\u0027t a big deal.","commit_id":"2d369ef727ff8de656a2fc2523cc6dfe8a1002da"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"866607b3c45b4f70fda77aff6ee07f92e9159370","unresolved":false,"context_lines":[{"line_number":98,"context_line":"                                use_call\u003dTrue)"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    def _notification_host(self, context, method, payload, host,"},{"line_number":101,"context_line":"                           topic\u003dbgp_consts.BGP_DRAGENT, use_call\u003dFalse):"},{"line_number":102,"context_line":"        \"\"\"Cast the payload to BgpDrAgent running on the host.\"\"\""},{"line_number":103,"context_line":"        cctxt \u003d self.client.prepare(topic\u003dtopic, server\u003dhost)"},{"line_number":104,"context_line":"        rpc_method \u003d cctxt.call if use_call else cctxt.cast"}],"source_content_type":"text/x-python","patch_set":48,"id":"3a57f1b5_ac3907d9","line":101,"range":{"start_line":101,"start_character":57,"end_line":101,"end_character":65},"in_reply_to":"3a57f1b5_bbe5bfa4","updated":"2016-02-12 11:29:17.000000000","message":"Done","commit_id":"2d369ef727ff8de656a2fc2523cc6dfe8a1002da"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"866607b3c45b4f70fda77aff6ee07f92e9159370","unresolved":false,"context_lines":[{"line_number":98,"context_line":"                                use_call\u003dTrue)"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    def _notification_host(self, context, method, payload, host,"},{"line_number":101,"context_line":"                           topic\u003dbgp_consts.BGP_DRAGENT, use_call\u003dFalse):"},{"line_number":102,"context_line":"        \"\"\"Cast the payload to BgpDrAgent running on the host.\"\"\""},{"line_number":103,"context_line":"        cctxt \u003d self.client.prepare(topic\u003dtopic, server\u003dhost)"},{"line_number":104,"context_line":"        rpc_method \u003d cctxt.call if use_call else cctxt.cast"}],"source_content_type":"text/x-python","patch_set":48,"id":"3a57f1b5_cc1d6363","line":101,"range":{"start_line":101,"start_character":57,"end_line":101,"end_character":65},"in_reply_to":"3a57f1b5_fd76ebd5","updated":"2016-02-12 11:29:17.000000000","message":"Done","commit_id":"2d369ef727ff8de656a2fc2523cc6dfe8a1002da"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"ef63cfdc8fe0beda0c6406d631beec051d88664b","unresolved":false,"context_lines":[{"line_number":98,"context_line":"                                use_call\u003dTrue)"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    def _notification_host(self, context, method, payload, host,"},{"line_number":101,"context_line":"                           topic\u003dbgp_consts.BGP_DRAGENT, use_call\u003dFalse):"},{"line_number":102,"context_line":"        \"\"\"Cast the payload to BgpDrAgent running on the host.\"\"\""},{"line_number":103,"context_line":"        cctxt \u003d self.client.prepare(topic\u003dtopic, server\u003dhost)"},{"line_number":104,"context_line":"        rpc_method \u003d cctxt.call if use_call else cctxt.cast"}],"source_content_type":"text/x-python","patch_set":48,"id":"3a57f1b5_bbe5bfa4","line":101,"range":{"start_line":101,"start_character":57,"end_line":101,"end_character":65},"in_reply_to":"3a57f1b5_fd76ebd5","updated":"2016-02-12 09:05:54.000000000","message":"Will change","commit_id":"2d369ef727ff8de656a2fc2523cc6dfe8a1002da"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"d41c47118585ad51f77bec57d0a084458a8d0f09","unresolved":false,"context_lines":[{"line_number":100,"context_line":"    def _notification_host(self, context, method, payload, host,"},{"line_number":101,"context_line":"                           topic\u003dbgp_consts.BGP_DRAGENT, use_call\u003dFalse):"},{"line_number":102,"context_line":"        \"\"\"Cast the payload to BgpDrAgent running on the host.\"\"\""},{"line_number":103,"context_line":"        cctxt \u003d self.client.prepare(topic\u003dtopic, server\u003dhost)"},{"line_number":104,"context_line":"        rpc_method \u003d cctxt.call if use_call else cctxt.cast"},{"line_number":105,"context_line":"        rpc_method(context, method, payload\u003dpayload)"}],"source_content_type":"text/x-python","patch_set":48,"id":"3a57f1b5_68623b40","line":103,"range":{"start_line":103,"start_character":36,"end_line":103,"end_character":47},"updated":"2016-02-11 21:38:26.000000000","message":"Related to the previous topic argument, why do we need to pass the topic at all given that we constructed the client with the topic on the Target in the first place.\n\nIf your answer to my comment on L101 is that we do want the topic argument, shouldn\u0027t we at least make it default to None instead of BGP_DRAGENT so that we get the default from the Target instead of this default?  It doesn\u0027t make sense to me to specify a default in two different places.","commit_id":"2d369ef727ff8de656a2fc2523cc6dfe8a1002da"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"ef63cfdc8fe0beda0c6406d631beec051d88664b","unresolved":false,"context_lines":[{"line_number":100,"context_line":"    def _notification_host(self, context, method, payload, host,"},{"line_number":101,"context_line":"                           topic\u003dbgp_consts.BGP_DRAGENT, use_call\u003dFalse):"},{"line_number":102,"context_line":"        \"\"\"Cast the payload to BgpDrAgent running on the host.\"\"\""},{"line_number":103,"context_line":"        cctxt \u003d self.client.prepare(topic\u003dtopic, server\u003dhost)"},{"line_number":104,"context_line":"        rpc_method \u003d cctxt.call if use_call else cctxt.cast"},{"line_number":105,"context_line":"        rpc_method(context, method, payload\u003dpayload)"}],"source_content_type":"text/x-python","patch_set":48,"id":"3a57f1b5_dba19b47","line":103,"range":{"start_line":103,"start_character":36,"end_line":103,"end_character":47},"in_reply_to":"3a57f1b5_68623b40","updated":"2016-02-12 09:05:54.000000000","message":"Agreed, topic not required to be passed explicitly.","commit_id":"2d369ef727ff8de656a2fc2523cc6dfe8a1002da"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"866607b3c45b4f70fda77aff6ee07f92e9159370","unresolved":false,"context_lines":[{"line_number":100,"context_line":"    def _notification_host(self, context, method, payload, host,"},{"line_number":101,"context_line":"                           topic\u003dbgp_consts.BGP_DRAGENT, use_call\u003dFalse):"},{"line_number":102,"context_line":"        \"\"\"Cast the payload to BgpDrAgent running on the host.\"\"\""},{"line_number":103,"context_line":"        cctxt \u003d self.client.prepare(topic\u003dtopic, server\u003dhost)"},{"line_number":104,"context_line":"        rpc_method \u003d cctxt.call if use_call else cctxt.cast"},{"line_number":105,"context_line":"        rpc_method(context, method, payload\u003dpayload)"}],"source_content_type":"text/x-python","patch_set":48,"id":"3a57f1b5_ac402735","line":103,"range":{"start_line":103,"start_character":36,"end_line":103,"end_character":47},"in_reply_to":"3a57f1b5_dba19b47","updated":"2016-02-12 11:29:17.000000000","message":"Done","commit_id":"2d369ef727ff8de656a2fc2523cc6dfe8a1002da"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"80dea2fb4cdb90b8c01482603bc01eb93bb1609f","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        cctxt \u003d self.client.prepare(topic\u003dself.topic, server\u003dhost)"},{"line_number":100,"context_line":"        cctxt.cast(context, method, payload\u003dpayload)"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    def _notification_host_call(self, context, method, payload, host):"},{"line_number":103,"context_line":"        \"\"\"Send payload to BgpDrAgent in the call mode\"\"\""},{"line_number":104,"context_line":"        cctxt \u003d self.client.prepare(topic\u003dself.topic, server\u003dhost)"},{"line_number":105,"context_line":"        cctxt.call(context, method, payload\u003dpayload)"}],"source_content_type":"text/x-python","patch_set":55,"id":"dae33548_3cd1be23","line":102,"range":{"start_line":102,"start_character":8,"end_line":102,"end_character":31},"updated":"2016-02-18 19:56:49.000000000","message":"I think this is unused now.","commit_id":"fbe754b04b34a2deade873cde0b593983633fc6c"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"92c305a001ee0a19804021f286ec2b4373f1e1d5","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        cctxt \u003d self.client.prepare(topic\u003dself.topic, server\u003dhost)"},{"line_number":100,"context_line":"        cctxt.cast(context, method, payload\u003dpayload)"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    def _notification_host_call(self, context, method, payload, host):"},{"line_number":103,"context_line":"        \"\"\"Send payload to BgpDrAgent in the call mode\"\"\""},{"line_number":104,"context_line":"        cctxt \u003d self.client.prepare(topic\u003dself.topic, server\u003dhost)"},{"line_number":105,"context_line":"        cctxt.call(context, method, payload\u003dpayload)"}],"source_content_type":"text/x-python","patch_set":55,"id":"dae33548_166c8a07","line":102,"range":{"start_line":102,"start_character":8,"end_line":102,"end_character":31},"in_reply_to":"dae33548_3cd1be23","updated":"2016-02-19 03:34:37.000000000","message":"Will remove.","commit_id":"fbe754b04b34a2deade873cde0b593983633fc6c"}],"neutron/api/rpc/handlers/bgp_speaker_rpc.py":[{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"3cb1b8599d83cbe09bebc95aff8b44057295a90a","unresolved":false,"context_lines":[{"line_number":72,"context_line":""},{"line_number":73,"context_line":"           Inovoked by the bgp_dr_agent to lookup the details of a BgpSpeaker."},{"line_number":74,"context_line":"        \"\"\""},{"line_number":75,"context_line":"        plugin \u003d manager.NeutronManager.get_service_plugins()["},{"line_number":76,"context_line":"                                        plugin_constants.BGP_SPEAKER]"},{"line_number":77,"context_line":"        if not plugin:"},{"line_number":78,"context_line":"            LOG.error(_LE(\u0027No plugin for BGP Speaker registered! Will \u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a50d1a3_59439913","line":75,"updated":"2015-08-01 05:50:00.000000000","message":"This code is redundant. Can we use \"self._svc_plugin\" instead of getting the plugin every time. Please check, plugin is already saved as \"self._svc_plugin\". Please change at all the places.","commit_id":"4a6b37408e813dfda0f75fe8a51be99fcff31fc6"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"3cb1b8599d83cbe09bebc95aff8b44057295a90a","unresolved":false,"context_lines":[{"line_number":117,"context_line":""},{"line_number":118,"context_line":"        return plugin.get_bgp_speaker_on_active_dragent(context, host)"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"    def get_all_bgp_peers(self, context):"},{"line_number":121,"context_line":"        \"\"\"Returns the list of all BGP Peers."},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"           Typically invoked by the bgp_dr_agent as part of its bootstrap"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a50d1a3_793695b5","line":120,"updated":"2015-08-01 05:50:00.000000000","message":"I feel this is no more required. Can we remove this?","commit_id":"4a6b37408e813dfda0f75fe8a51be99fcff31fc6"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"6b9d1d5e899b41023571ae16806bc5a24991c3d3","unresolved":false,"context_lines":[{"line_number":117,"context_line":""},{"line_number":118,"context_line":"        return plugin.get_bgp_speaker_on_active_dragent(context, host)"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"    def get_all_bgp_peers(self, context):"},{"line_number":121,"context_line":"        \"\"\"Returns the list of all BGP Peers."},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"           Typically invoked by the bgp_dr_agent as part of its bootstrap"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a4dcd0f_0607001d","line":120,"in_reply_to":"3a50d1a3_793695b5","updated":"2015-08-11 06:20:48.000000000","message":"Removed.","commit_id":"4a6b37408e813dfda0f75fe8a51be99fcff31fc6"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"0f9d2b5c5bbb883ba2df9a1f861a7254cab83b13","unresolved":false,"context_lines":[{"line_number":63,"context_line":"           Inovoked by the n-bgp_dr_agent to lookup the details of"},{"line_number":64,"context_line":"           a BGP Speaker."},{"line_number":65,"context_line":"        \"\"\""},{"line_number":66,"context_line":"        plugin \u003d manager.NeutronManager.get_service_plugins()["},{"line_number":67,"context_line":"                                        plugin_constants.BGP_SPEAKER]"},{"line_number":68,"context_line":"        if not plugin:"},{"line_number":69,"context_line":"            LOG.error(_LE(\u0027No plugin for BGP Speaker registered! Will \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a4dcd0f_d4bf795e","line":66,"updated":"2015-08-11 08:00:07.000000000","message":"Address PS1 comment.","commit_id":"2a9bf2309144564372fe5f1ebc67040ae43c9128"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"0c04ccc8a6c1308dd2b2553e283b3403ca713049","unresolved":false,"context_lines":[{"line_number":106,"context_line":"            if cfg.CONF.bgp_dr_auto_schedule:"},{"line_number":107,"context_line":"                plugin.auto_schedule_bgp_speakers(context, host)"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"        return plugin.get_bgp_speaker_on_active_dragent(context, host)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a4dcd0f_82cb97a3","line":109,"updated":"2015-08-12 17:51:30.000000000","message":"Missing an API for fetching all routes by BgpSpeaker.  This is required to support a full sync.  This is required to support restarting a dr_agent","commit_id":"2a9bf2309144564372fe5f1ebc67040ae43c9128"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"1093ce632763f72ebcc15d4c125d03d9e6b98982","unresolved":false,"context_lines":[{"line_number":106,"context_line":"            if cfg.CONF.bgp_dr_auto_schedule:"},{"line_number":107,"context_line":"                plugin.auto_schedule_bgp_speakers(context, host)"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"        return plugin.get_bgp_speaker_on_active_dragent(context, host)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a4dcd0f_43457f6c","line":109,"in_reply_to":"1a4dcd0f_82cb97a3","updated":"2015-08-13 04:32:56.000000000","message":"+1 for fetching all peers by BgpSpeaker as well.","commit_id":"2a9bf2309144564372fe5f1ebc67040ae43c9128"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"8a0915d97accd734b50415edacd736c57627bb4e","unresolved":false,"context_lines":[{"line_number":62,"context_line":"           Inovoked by the n-bgp_dr_agent to lookup the details of"},{"line_number":63,"context_line":"           a BGP Speaker."},{"line_number":64,"context_line":"        \"\"\""},{"line_number":65,"context_line":"        plugin \u003d manager.NeutronManager.get_service_plugins()["},{"line_number":66,"context_line":"                                        plugin_constants.BGP_SPEAKER]"},{"line_number":67,"context_line":"        if not plugin:"},{"line_number":68,"context_line":"            LOG.error(_LE(\u0027No plugin for BGP Speaker registered! Will \u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"da20952f_9db5d1ce","line":65,"updated":"2015-08-27 13:16:36.000000000","message":"Can we use \"self._svc_plugin\" instead. This is code is duplicated. Please take care in all the below functions as well.","commit_id":"498b383f65cebd65f4e89eca28b89ee742fcb2a9"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"c46ebeb3598747b4c9a3827c7c100bf206522904","unresolved":false,"context_lines":[{"line_number":62,"context_line":"           Inovoked by the n-bgp_dr_agent to lookup the details of"},{"line_number":63,"context_line":"           a BGP Speaker."},{"line_number":64,"context_line":"        \"\"\""},{"line_number":65,"context_line":"        plugin \u003d manager.NeutronManager.get_service_plugins()["},{"line_number":66,"context_line":"                                        plugin_constants.BGP_SPEAKER]"},{"line_number":67,"context_line":"        if not plugin:"},{"line_number":68,"context_line":"            LOG.error(_LE(\u0027No plugin for BGP Speaker registered! Will \u0027"}],"source_content_type":"text/x-python","patch_set":12,"id":"da20952f_ab49e632","line":65,"updated":"2015-09-05 04:50:06.000000000","message":"Address PS8 comment.","commit_id":"908037d4e51597d365e97e82bbc8d30aecd8bcd2"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"0d597e691f824d713c4d4a1afc11a6cf14cd9550","unresolved":false,"context_lines":[{"line_number":59,"context_line":"    def get_bgp_speaker_details(self, context, bgp_speaker_id):"},{"line_number":60,"context_line":"        \"\"\"Return BGP Speaker details such as peer list and local_as."},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"           Inovoked by the n-bgp_dr_agent to lookup the details of"},{"line_number":63,"context_line":"           a BGP Speaker."},{"line_number":64,"context_line":"        \"\"\""},{"line_number":65,"context_line":"        plugin \u003d manager.NeutronManager.get_service_plugins()["}],"source_content_type":"text/x-python","patch_set":13,"id":"da20952f_fdb79a37","line":62,"updated":"2015-09-06 07:03:55.000000000","message":"Rename \u0027n-bgp_dr_agent\u0027 \u003d\u003d\u003e \u0027BgpDrAgent\u0027","commit_id":"d4d7a23df852354dbec257cfb9b0cad09b063082"},{"author":{"_account_id":7505,"name":"Jaume Devesa","email":"devvesa@gmail.com","username":"devesa"},"change_message_id":"bb08a358ea2ae6f28c0fa0886138ff99be4e0001","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    This class implements the server side of an RPC interface."},{"line_number":33,"context_line":"    The client side of this interface can be found in"},{"line_number":34,"context_line":"    neutron.services.bgp_speaker.agent.dr_agent.BgpDrPluginApi."},{"line_number":35,"context_line":"    For more information about changing RPC interfaces,"},{"line_number":36,"context_line":"    see doc/source/devref/rpc_api.rst."},{"line_number":37,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":17,"id":"ba15a1d1_92afd7e2","line":34,"updated":"2015-09-22 13:34:37.000000000","message":"neutron/api/rpc/agentnotifiers/bgp_dr_rpc_agent_api.BgpDrAgentNotifyApi?","commit_id":"42fee1342fad477cdddb703d1601cd454244b8a5"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"f2c2107b218fa1b600480c151484d772a1927d5e","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    This class implements the server side of an RPC interface."},{"line_number":33,"context_line":"    The client side of this interface can be found in"},{"line_number":34,"context_line":"    neutron.services.bgp_speaker.agent.dr_agent.BgpDrPluginApi."},{"line_number":35,"context_line":"    For more information about changing RPC interfaces,"},{"line_number":36,"context_line":"    see doc/source/devref/rpc_api.rst."},{"line_number":37,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":17,"id":"9a1a9d01_6b1ca477","line":34,"in_reply_to":"ba15a1d1_92afd7e2","updated":"2015-09-26 08:22:27.000000000","message":"neutron.services.bgp_speaker.agent.dr_agent.BgpDrPluginApi indicates the Agent class which calls these interfaces.","commit_id":"42fee1342fad477cdddb703d1601cd454244b8a5"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"05715191474e7bc0fd57b1519cb2f500464144e6","unresolved":false,"context_lines":[{"line_number":11,"context_line":"# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or"},{"line_number":12,"context_line":"# implied."},{"line_number":13,"context_line":"# See the License for the specific language governing permissions and"},{"line_number":14,"context_line":"# limitations under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from oslo_config import cfg"},{"line_number":17,"context_line":"from oslo_log import log as logging"}],"source_content_type":"text/x-python","patch_set":18,"id":"ba15a1d1_b16b991d","line":14,"updated":"2015-09-24 07:37:52.000000000","message":"Would you like to rename it as \u0027bgp_rpc.py\u0027","commit_id":"35ec3a156e05aa1c167824333b42a4c940f363b3"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"83b929f599928ac6064970f6f7cf15357e280eba","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Huawei Technologies India Pvt. Ltd."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":4,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":19,"id":"9a1a9d01_1e5c44ec","line":1,"updated":"2015-09-26 08:58:42.000000000","message":"How about moving this file inside services.bgp.agent.rpc.handlers?","commit_id":"f5a0fbe6fb0aa26385d0f7d2ccca83f2c6854d31"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"9e9a387308c3817f219f8bcdd3e45c591e127a6d","unresolved":false,"context_lines":[{"line_number":83,"context_line":"                          \u0027Neutron server.\u0027))"},{"line_number":84,"context_line":"            return {}"},{"line_number":85,"context_line":"        return plugin.get_bgp_peer(context, bgp_peer_id,"},{"line_number":86,"context_line":"                                   [\u0027peer_ip\u0027, \u0027password\u0027, \u0027remote_as\u0027])"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    def get_bgp_speakers(self, context, **kwargs):"},{"line_number":89,"context_line":"        \"\"\"Returns the list of all BgpSpeakers."}],"source_content_type":"text/x-python","patch_set":19,"id":"9a1a9d01_5e095cdc","line":86,"updated":"2015-09-26 09:02:18.000000000","message":"Read \u0027auth_type\u0027 as well.","commit_id":"f5a0fbe6fb0aa26385d0f7d2ccca83f2c6854d31"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"0c686007715227e58c7fbcdedb6e3e1f40351698","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Huawei Technologies India Pvt. Ltd."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":4,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":20,"id":"9a1a9d01_814c7971","line":1,"updated":"2015-09-26 11:10:09.000000000","message":"How about moving this file inside services.bgp.agent.rpc.handlers?","commit_id":"9bcc7ca457e707014dd4710ad78a3d2984c9666b"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"f10985fcf09b27b047d10c0ece40391082f13196","unresolved":false,"context_lines":[{"line_number":26,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class BgpSpeakerRpcCallback(object):"},{"line_number":30,"context_line":"    \"\"\"BgpDrAgent RPC callback in plugin implementations."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    This class implements the server side of an RPC interface."}],"source_content_type":"text/x-python","patch_set":21,"id":"9a1a9d01_af1ed16d","line":29,"updated":"2015-09-30 06:05:41.000000000","message":"Let\u0027s move this inside services. It\u0027s not neutron specific.","commit_id":"97d1599ccee6f49be5f920e451a1452adb2948f0"},{"author":{"_account_id":7505,"name":"Jaume Devesa","email":"devvesa@gmail.com","username":"devesa"},"change_message_id":"e45cab91a933f128d90f8a84620fedc0a2e891bd","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    This class implements the server side of an RPC interface."},{"line_number":33,"context_line":"    The client side of this interface can be found in"},{"line_number":34,"context_line":"    neutron.services.bgp_speaker.agent.bgp_dragent.BgpDrPluginApi."},{"line_number":35,"context_line":"    For more information about changing RPC interfaces,"},{"line_number":36,"context_line":"    see doc/source/devref/rpc_api.rst."},{"line_number":37,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":21,"id":"9a1a9d01_eb73c7b2","line":34,"updated":"2015-10-03 15:41:47.000000000","message":"neutron.services.bgp.agent...","commit_id":"97d1599ccee6f49be5f920e451a1452adb2948f0"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"930c9b5286f7001da0c12f0703e1a2083668e417","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    This class implements the server side of an RPC interface."},{"line_number":33,"context_line":"    The client side of this interface can be found in"},{"line_number":34,"context_line":"    neutron.services.bgp_speaker.agent.bgp_dragent.BgpDrPluginApi."},{"line_number":35,"context_line":"    For more information about changing RPC interfaces,"},{"line_number":36,"context_line":"    see doc/source/devref/rpc_api.rst."},{"line_number":37,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":21,"id":"9a1a9d01_416e4a30","line":34,"in_reply_to":"9a1a9d01_eb73c7b2","updated":"2015-10-05 04:15:37.000000000","message":"Done.","commit_id":"97d1599ccee6f49be5f920e451a1452adb2948f0"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"930c9b5286f7001da0c12f0703e1a2083668e417","unresolved":false,"context_lines":[{"line_number":104,"context_line":""},{"line_number":105,"context_line":"        return plugin.get_bgp_speakers_for_agent_host(context, host)"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    def notify_maximum_bgp_speaker_support(self, context, **kwargs):"},{"line_number":108,"context_line":"        \"\"\"Notify the number of maximum BgpSpeakers which driver can support."},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        Typically invoked by the BgpDrAgent after it\u0027s start."}],"source_content_type":"text/x-python","patch_set":21,"id":"9a1a9d01_017852f1","line":107,"updated":"2015-10-05 04:15:37.000000000","message":"Change \"notify_maximum_bgp_speaker_support\" to \"notify_multi_bgp_speaker_support\". As per the latest design, DrAgent will only notify whether multiple BGP speakers could be supported instead of the exact number.","commit_id":"97d1599ccee6f49be5f920e451a1452adb2948f0"},{"author":{"_account_id":7505,"name":"Jaume Devesa","email":"devvesa@gmail.com","username":"devesa"},"change_message_id":"e45cab91a933f128d90f8a84620fedc0a2e891bd","unresolved":false,"context_lines":[{"line_number":107,"context_line":"    def notify_maximum_bgp_speaker_support(self, context, **kwargs):"},{"line_number":108,"context_line":"        \"\"\"Notify the number of maximum BgpSpeakers which driver can support."},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        Typically invoked by the BgpDrAgent after it\u0027s start."},{"line_number":111,"context_line":"        \"\"\""},{"line_number":112,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":21,"id":"9a1a9d01_2b621fd9","line":110,"updated":"2015-10-03 15:41:47.000000000","message":"nit: its start","commit_id":"97d1599ccee6f49be5f920e451a1452adb2948f0"},{"author":{"_account_id":17609,"name":"steve","email":"ruansx@cn.ibm.com","username":"steve.ruan"},"change_message_id":"1b106fa4f13d8b4bc3c6a09fcc70c16778d17ac2","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        extension_supported \u003d utils.is_extension_supported("},{"line_number":74,"context_line":"                       self.plugin, constants.BGP_DRAGENT_SCHEDULER_EXT_ALIAS)"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        if extension_supported and cfg.CONF.bgp_dr_auto_schedule:"},{"line_number":77,"context_line":"            self.plugin.auto_schedule_bgp_speakers(context, host)"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"        return self.plugin.get_bgp_speakers_for_agent_host(context, host)"}],"source_content_type":"text/x-python","patch_set":26,"id":"fa69d971_17821701","line":76,"range":{"start_line":76,"start_character":11,"end_line":76,"end_character":30},"updated":"2015-12-31 03:01:56.000000000","message":"BGP Speaker does not need to call auto_schedule_bgp_speakers every interval when call \"get_bgp_speakers\". Right?","commit_id":"ccac6fc0c679c9dc236aaed6c892ceb2fd55a88b"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"40af1520a3b7affdbd1341e3378101d6939d77d8","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        extension_supported \u003d utils.is_extension_supported("},{"line_number":74,"context_line":"                       self.plugin, constants.BGP_DRAGENT_SCHEDULER_EXT_ALIAS)"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        if extension_supported and cfg.CONF.bgp_dr_auto_schedule:"},{"line_number":77,"context_line":"            self.plugin.auto_schedule_bgp_speakers(context, host)"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"        return self.plugin.get_bgp_speakers_for_agent_host(context, host)"}],"source_content_type":"text/x-python","patch_set":26,"id":"fa69d971_34db8b7e","line":76,"range":{"start_line":76,"start_character":11,"end_line":76,"end_character":30},"in_reply_to":"fa69d971_17821701","updated":"2015-12-31 12:24:58.000000000","message":"get_bgp_speakers is called from sync_state and we need to check auto-scheduling on every run. If one want to control the periodicity of auto-scheduling then probably we can have separate cfg option for achieving the same.","commit_id":"ccac6fc0c679c9dc236aaed6c892ceb2fd55a88b"},{"author":{"_account_id":17609,"name":"steve","email":"ruansx@cn.ibm.com","username":"steve.ruan"},"change_message_id":"1b106fa4f13d8b4bc3c6a09fcc70c16778d17ac2","unresolved":false,"context_lines":[{"line_number":74,"context_line":"                       self.plugin, constants.BGP_DRAGENT_SCHEDULER_EXT_ALIAS)"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        if extension_supported and cfg.CONF.bgp_dr_auto_schedule:"},{"line_number":77,"context_line":"            self.plugin.auto_schedule_bgp_speakers(context, host)"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"        return self.plugin.get_bgp_speakers_for_agent_host(context, host)"},{"line_number":80,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"fa69d971_9776073d","line":77,"range":{"start_line":77,"start_character":24,"end_line":77,"end_character":50},"updated":"2015-12-31 03:01:56.000000000","message":"If bgp DRAgent down, how to trigger bgp speaker auto schedule?","commit_id":"ccac6fc0c679c9dc236aaed6c892ceb2fd55a88b"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"40af1520a3b7affdbd1341e3378101d6939d77d8","unresolved":false,"context_lines":[{"line_number":74,"context_line":"                       self.plugin, constants.BGP_DRAGENT_SCHEDULER_EXT_ALIAS)"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        if extension_supported and cfg.CONF.bgp_dr_auto_schedule:"},{"line_number":77,"context_line":"            self.plugin.auto_schedule_bgp_speakers(context, host)"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"        return self.plugin.get_bgp_speakers_for_agent_host(context, host)"},{"line_number":80,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"fa69d971_747343b2","line":77,"range":{"start_line":77,"start_character":24,"end_line":77,"end_character":50},"in_reply_to":"fa69d971_9776073d","updated":"2015-12-31 12:24:58.000000000","message":"DRAgent will do sync_state when it comes up.","commit_id":"ccac6fc0c679c9dc236aaed6c892ceb2fd55a88b"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"a92b95bd36877884cd53aa9a06e6e634c99792fc","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Huawei Technologies India Pvt. Ltd."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":4,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":29,"id":"fa69d971_3b1dbe0f","line":1,"updated":"2016-01-08 04:05:23.000000000","message":"Year has passed. Let\u0027s change to 2016.","commit_id":"7292ec0a727c8b564f28ff88b64b9703a20bf956"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"0412f5f77db3d1bc9461ec00b0a4117f12e81a4f","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from neutron.common import utils"},{"line_number":22,"context_line":"from neutron import manager"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"da6ed579_42d0941f","line":24,"updated":"2016-01-13 14:10:36.000000000","message":"only need one line and not 2","commit_id":"40ab863b9af41f1ec691669dad269bf752c4cba0"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"3191d8391cea6b91c2c3c876044cb594addf011c","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from neutron.common import utils"},{"line_number":22,"context_line":"from neutron import manager"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"9a68dd71_75f7b859","line":24,"in_reply_to":"da6ed579_42d0941f","updated":"2016-01-27 09:06:35.000000000","message":"Done","commit_id":"40ab863b9af41f1ec691669dad269bf752c4cba0"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"8c30f6ca87f7d826685cedbbc43724cbfa97b002","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Huawei Technologies India Pvt. Ltd."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":4,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":34,"id":"9a68dd71_72a82e78","line":1,"updated":"2016-01-27 09:07:56.000000000","message":"2016","commit_id":"2286cd2ba579edd825efbf895f2c41764ea75d92"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"fa7ace4c9aa596aebc2e1ab94a68035ede5e0ed3","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Huawei Technologies India Pvt. Ltd."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":4,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":34,"id":"9a68dd71_584bc959","line":1,"in_reply_to":"9a68dd71_72a82e78","updated":"2016-01-27 09:28:28.000000000","message":"Done","commit_id":"2286cd2ba579edd825efbf895f2c41764ea75d92"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"8c30f6ca87f7d826685cedbbc43724cbfa97b002","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from neutron import manager"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"class BgpSpeakerRpcCallback(object):"}],"source_content_type":"text/x-python","patch_set":34,"id":"9a68dd71_b2f3069f","line":25,"updated":"2016-01-27 09:07:56.000000000","message":"Not reference any where. Let\u0027s remove.","commit_id":"2286cd2ba579edd825efbf895f2c41764ea75d92"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"fa7ace4c9aa596aebc2e1ab94a68035ede5e0ed3","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from neutron import manager"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"class BgpSpeakerRpcCallback(object):"}],"source_content_type":"text/x-python","patch_set":34,"id":"9a68dd71_d86d79cd","line":25,"in_reply_to":"9a68dd71_b2f3069f","updated":"2016-01-27 09:28:28.000000000","message":"Done","commit_id":"2286cd2ba579edd825efbf895f2c41764ea75d92"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"8c30f6ca87f7d826685cedbbc43724cbfa97b002","unresolved":false,"context_lines":[{"line_number":78,"context_line":""},{"line_number":79,"context_line":"        return self.plugin.get_bgp_speakers_for_agent_host(context, host)"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    def notify_maximum_bgp_speaker_support(self, context, **kwargs):"},{"line_number":82,"context_line":"        \"\"\"Notify the number of maximum BgpSpeakers which driver can support."},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"        Typically invoked by the BgpDrAgent after it\u0027s start."}],"source_content_type":"text/x-python","patch_set":34,"id":"9a68dd71_d2fd5a6f","line":81,"updated":"2016-01-27 09:07:56.000000000","message":"This functionality not supported for Mitaka! Let\u0027s remove it off.","commit_id":"2286cd2ba579edd825efbf895f2c41764ea75d92"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"fa7ace4c9aa596aebc2e1ab94a68035ede5e0ed3","unresolved":false,"context_lines":[{"line_number":78,"context_line":""},{"line_number":79,"context_line":"        return self.plugin.get_bgp_speakers_for_agent_host(context, host)"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    def notify_maximum_bgp_speaker_support(self, context, **kwargs):"},{"line_number":82,"context_line":"        \"\"\"Notify the number of maximum BgpSpeakers which driver can support."},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"        Typically invoked by the BgpDrAgent after it\u0027s start."}],"source_content_type":"text/x-python","patch_set":34,"id":"9a68dd71_5862e9d9","line":81,"in_reply_to":"9a68dd71_d2fd5a6f","updated":"2016-01-27 09:28:28.000000000","message":"Done","commit_id":"2286cd2ba579edd825efbf895f2c41764ea75d92"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"c3e927242ec5c93ad039269c0f4c774c26716825","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    @property"},{"line_number":39,"context_line":"    def plugin(self):"},{"line_number":40,"context_line":"        if not hasattr(self, \u0027_plugin\u0027):"},{"line_number":41,"context_line":"            self._plugin \u003d manager.NeutronManager.get_plugin()"},{"line_number":42,"context_line":"        return self._plugin"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def get_bgp_speaker_info(self, context, bgp_speaker_id):"}],"source_content_type":"text/x-python","patch_set":36,"id":"7a5de9d1_89e81212","line":41,"updated":"2016-01-28 14:51:53.000000000","message":"self._plugin \u003d manager.NeutronManager.get_service_plugins()[\n                plugin_constants.BGP]","commit_id":"2ca7ec3a04c40249b0938d493fb973d11431a0cc"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"55261fea427d2721200cafba84130bc898943132","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2016 Huawei Technologies India Pvt. Ltd."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":4,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":38,"id":"7a5de9d1_f4055d10","line":1,"updated":"2016-02-01 13:59:32.000000000","message":"rename this file to bgp_rpc.py","commit_id":"4dd909f6fc96c8d0b986f1b6fccd0c2dab72f8f0"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"36be6692b7c3ccb5515b5643784a8cdc6f608020","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2016 Huawei Technologies India Pvt. Ltd."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":4,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":40,"id":"5a5ae5dd_b25562c7","line":1,"updated":"2016-02-03 14:48:22.000000000","message":"How about moving this file inside services/bgp/agent/rpc/handler ?","commit_id":"211fb921ac4eac14f3007456b4418f2ee27bc8fd"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"8605c298212783a915a1e47f5e9e57aeea9077d9","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2016 Huawei Technologies India Pvt. Ltd."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":4,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":40,"id":"3a57f1b5_593c132f","line":1,"in_reply_to":"5a5ae5dd_b25562c7","updated":"2016-02-11 08:54:14.000000000","message":"Won\u0027t Fix","commit_id":"211fb921ac4eac14f3007456b4418f2ee27bc8fd"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"d41c47118585ad51f77bec57d0a084458a8d0f09","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        \"\"\""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"        return self.plugin.get_bgp_speaker_with_advertised_routes(context,"},{"line_number":53,"context_line":"                                                               bgp_speaker_id)"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def get_bgp_peer_info(self, context, bgp_peer_id):"},{"line_number":56,"context_line":"        \"\"\"Return BgpPeer details such as IP, remote_as, and credentials."}],"source_content_type":"text/x-python","patch_set":48,"id":"3a57f1b5_9d56d728","line":53,"range":{"start_line":53,"start_character":63,"end_line":53,"end_character":77},"updated":"2016-02-11 21:38:26.000000000","message":"nit:  Strange indent.  I\u0027d take \u0027context\u0027 to the next line and indent 12 spaces.","commit_id":"2d369ef727ff8de656a2fc2523cc6dfe8a1002da"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"866607b3c45b4f70fda77aff6ee07f92e9159370","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        \"\"\""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"        return self.plugin.get_bgp_speaker_with_advertised_routes(context,"},{"line_number":53,"context_line":"                                                               bgp_speaker_id)"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def get_bgp_peer_info(self, context, bgp_peer_id):"},{"line_number":56,"context_line":"        \"\"\"Return BgpPeer details such as IP, remote_as, and credentials."}],"source_content_type":"text/x-python","patch_set":48,"id":"3a57f1b5_2c899775","line":53,"range":{"start_line":53,"start_character":63,"end_line":53,"end_character":77},"in_reply_to":"3a57f1b5_7bb2e795","updated":"2016-02-12 11:29:17.000000000","message":"Done","commit_id":"2d369ef727ff8de656a2fc2523cc6dfe8a1002da"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"ef63cfdc8fe0beda0c6406d631beec051d88664b","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        \"\"\""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"        return self.plugin.get_bgp_speaker_with_advertised_routes(context,"},{"line_number":53,"context_line":"                                                               bgp_speaker_id)"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def get_bgp_peer_info(self, context, bgp_peer_id):"},{"line_number":56,"context_line":"        \"\"\"Return BgpPeer details such as IP, remote_as, and credentials."}],"source_content_type":"text/x-python","patch_set":48,"id":"3a57f1b5_7bb2e795","line":53,"range":{"start_line":53,"start_character":63,"end_line":53,"end_character":77},"in_reply_to":"3a57f1b5_9d56d728","updated":"2016-02-12 09:05:54.000000000","message":"Will correct.","commit_id":"2d369ef727ff8de656a2fc2523cc6dfe8a1002da"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"d41c47118585ad51f77bec57d0a084458a8d0f09","unresolved":false,"context_lines":[{"line_number":67,"context_line":""},{"line_number":68,"context_line":"        Typically invoked by the BgpDrAgent as part of its bootstrap process."},{"line_number":69,"context_line":"        \"\"\""},{"line_number":70,"context_line":"        host \u003d kwargs.get(\u0027host\u0027)"},{"line_number":71,"context_line":"        extension_supported \u003d utils.is_extension_supported("},{"line_number":72,"context_line":"                       self.plugin, dras_ext.BGP_DRAGENT_SCHEDULER_EXT_ALIAS)"},{"line_number":73,"context_line":""}],"source_content_type":"text/x-python","patch_set":48,"id":"3a57f1b5_bd2ab38e","line":70,"range":{"start_line":70,"start_character":8,"end_line":70,"end_character":12},"updated":"2016-02-11 21:38:26.000000000","message":"nit: why not just add this to the arguments?\n\n  def get_bgp_speakers(self, context, host\u003dNone, ...","commit_id":"2d369ef727ff8de656a2fc2523cc6dfe8a1002da"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"ef63cfdc8fe0beda0c6406d631beec051d88664b","unresolved":false,"context_lines":[{"line_number":67,"context_line":""},{"line_number":68,"context_line":"        Typically invoked by the BgpDrAgent as part of its bootstrap process."},{"line_number":69,"context_line":"        \"\"\""},{"line_number":70,"context_line":"        host \u003d kwargs.get(\u0027host\u0027)"},{"line_number":71,"context_line":"        extension_supported \u003d utils.is_extension_supported("},{"line_number":72,"context_line":"                       self.plugin, dras_ext.BGP_DRAGENT_SCHEDULER_EXT_ALIAS)"},{"line_number":73,"context_line":""}],"source_content_type":"text/x-python","patch_set":48,"id":"3a57f1b5_fb4b3785","line":70,"range":{"start_line":70,"start_character":8,"end_line":70,"end_character":12},"in_reply_to":"3a57f1b5_bd2ab38e","updated":"2016-02-12 09:05:54.000000000","message":"Will correct.","commit_id":"2d369ef727ff8de656a2fc2523cc6dfe8a1002da"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"866607b3c45b4f70fda77aff6ee07f92e9159370","unresolved":false,"context_lines":[{"line_number":67,"context_line":""},{"line_number":68,"context_line":"        Typically invoked by the BgpDrAgent as part of its bootstrap process."},{"line_number":69,"context_line":"        \"\"\""},{"line_number":70,"context_line":"        host \u003d kwargs.get(\u0027host\u0027)"},{"line_number":71,"context_line":"        extension_supported \u003d utils.is_extension_supported("},{"line_number":72,"context_line":"                       self.plugin, dras_ext.BGP_DRAGENT_SCHEDULER_EXT_ALIAS)"},{"line_number":73,"context_line":""}],"source_content_type":"text/x-python","patch_set":48,"id":"3a57f1b5_6c50efd4","line":70,"range":{"start_line":70,"start_character":8,"end_line":70,"end_character":12},"in_reply_to":"3a57f1b5_fb4b3785","updated":"2016-02-12 11:29:17.000000000","message":"Done","commit_id":"2d369ef727ff8de656a2fc2523cc6dfe8a1002da"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"d41c47118585ad51f77bec57d0a084458a8d0f09","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        \"\"\""},{"line_number":70,"context_line":"        host \u003d kwargs.get(\u0027host\u0027)"},{"line_number":71,"context_line":"        extension_supported \u003d utils.is_extension_supported("},{"line_number":72,"context_line":"                       self.plugin, dras_ext.BGP_DRAGENT_SCHEDULER_EXT_ALIAS)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        if extension_supported and cfg.CONF.bgp_dr_auto_schedule:"},{"line_number":75,"context_line":"            self.plugin.auto_schedule_bgp_speakers(context, host)"}],"source_content_type":"text/x-python","patch_set":48,"id":"3a57f1b5_28e683b0","line":72,"range":{"start_line":72,"start_character":8,"end_line":72,"end_character":23},"updated":"2016-02-11 21:38:26.000000000","message":"nit:  This should be 4 spaces more than the line above.","commit_id":"2d369ef727ff8de656a2fc2523cc6dfe8a1002da"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"ef63cfdc8fe0beda0c6406d631beec051d88664b","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        \"\"\""},{"line_number":70,"context_line":"        host \u003d kwargs.get(\u0027host\u0027)"},{"line_number":71,"context_line":"        extension_supported \u003d utils.is_extension_supported("},{"line_number":72,"context_line":"                       self.plugin, dras_ext.BGP_DRAGENT_SCHEDULER_EXT_ALIAS)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        if extension_supported and cfg.CONF.bgp_dr_auto_schedule:"},{"line_number":75,"context_line":"            self.plugin.auto_schedule_bgp_speakers(context, host)"}],"source_content_type":"text/x-python","patch_set":48,"id":"3a57f1b5_9b76c3d5","line":72,"range":{"start_line":72,"start_character":8,"end_line":72,"end_character":23},"in_reply_to":"3a57f1b5_28e683b0","updated":"2016-02-12 09:05:54.000000000","message":"Will correct.","commit_id":"2d369ef727ff8de656a2fc2523cc6dfe8a1002da"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"866607b3c45b4f70fda77aff6ee07f92e9159370","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        \"\"\""},{"line_number":70,"context_line":"        host \u003d kwargs.get(\u0027host\u0027)"},{"line_number":71,"context_line":"        extension_supported \u003d utils.is_extension_supported("},{"line_number":72,"context_line":"                       self.plugin, dras_ext.BGP_DRAGENT_SCHEDULER_EXT_ALIAS)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        if extension_supported and cfg.CONF.bgp_dr_auto_schedule:"},{"line_number":75,"context_line":"            self.plugin.auto_schedule_bgp_speakers(context, host)"}],"source_content_type":"text/x-python","patch_set":48,"id":"3a57f1b5_0cd5bb1a","line":72,"range":{"start_line":72,"start_character":8,"end_line":72,"end_character":23},"in_reply_to":"3a57f1b5_9b76c3d5","updated":"2016-02-12 11:29:17.000000000","message":"Done","commit_id":"2d369ef727ff8de656a2fc2523cc6dfe8a1002da"}],"neutron/cmd/eventlet/agents/bgp_dragent.py":[{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"a92b95bd36877884cd53aa9a06e6e634c99792fc","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Huawei Technologies India Pvt. Ltd."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":4,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":29,"id":"fa69d971_bbd76e22","line":1,"updated":"2016-01-08 04:05:23.000000000","message":"Year has passed. Let\u0027s change to 2016.","commit_id":"7292ec0a727c8b564f28ff88b64b9703a20bf956"}],"neutron/common/topics.py":[{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"fc6e756179a72f66c9d313867e2b81d66ad380b1","unresolved":false,"context_lines":[{"line_number":37,"context_line":"L3_AGENT \u003d \u0027l3_agent\u0027"},{"line_number":38,"context_line":"DHCP_AGENT \u003d \u0027dhcp_agent\u0027"},{"line_number":39,"context_line":"METERING_AGENT \u003d \u0027metering_agent\u0027"},{"line_number":40,"context_line":"LOADBALANCER_AGENT \u003d \u0027n-lbaas_agent\u0027"},{"line_number":41,"context_line":"BGP_DR_AGENT \u003d \u0027n-bgp_dr_agent\u0027"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"RESOURCE_TOPIC_PATTERN \u003d \"neutron-vo-%(resource_type)s-%(version)s\""}],"source_content_type":"text/x-python","patch_set":25,"id":"1a7b0d38_02e34a34","line":40,"updated":"2015-12-28 12:25:31.000000000","message":"I think this change is unrelated and probably a re-base mistake. Plz remove this line.","commit_id":"ad122367e98dd25a333143ce82c999ccb9f3d6ef"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"dcb44a890e662a074db585f1417d4ade15150d02","unresolved":false,"context_lines":[{"line_number":37,"context_line":"L3_AGENT \u003d \u0027l3_agent\u0027"},{"line_number":38,"context_line":"DHCP_AGENT \u003d \u0027dhcp_agent\u0027"},{"line_number":39,"context_line":"METERING_AGENT \u003d \u0027metering_agent\u0027"},{"line_number":40,"context_line":"LOADBALANCER_AGENT \u003d \u0027n-lbaas_agent\u0027"},{"line_number":41,"context_line":"BGP_DR_AGENT \u003d \u0027n-bgp_dr_agent\u0027"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"RESOURCE_TOPIC_PATTERN \u003d \"neutron-vo-%(resource_type)s-%(version)s\""}],"source_content_type":"text/x-python","patch_set":25,"id":"fa69d971_beff8333","line":40,"in_reply_to":"1a7b0d38_02e34a34","updated":"2015-12-30 09:04:31.000000000","message":"Done.","commit_id":"ad122367e98dd25a333143ce82c999ccb9f3d6ef"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"a92b95bd36877884cd53aa9a06e6e634c99792fc","unresolved":false,"context_lines":[{"line_number":36,"context_line":"L3_AGENT \u003d \u0027l3_agent\u0027"},{"line_number":37,"context_line":"DHCP_AGENT \u003d \u0027dhcp_agent\u0027"},{"line_number":38,"context_line":"METERING_AGENT \u003d \u0027metering_agent\u0027"},{"line_number":39,"context_line":"BGP_DR_AGENT \u003d \u0027n-bgp_dr_agent\u0027"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"RESOURCE_TOPIC_PATTERN \u003d \"neutron-vo-%(resource_type)s-%(version)s\""},{"line_number":42,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"fa69d971_5bb3d20a","line":39,"updated":"2016-01-08 04:05:23.000000000","message":"how about renaming to \u0027BGP_DRAGENT \u003d n-bgp-dragent\u0027 for consistency? Any thoughts?","commit_id":"7292ec0a727c8b564f28ff88b64b9703a20bf956"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"8c30f6ca87f7d826685cedbbc43724cbfa97b002","unresolved":false,"context_lines":[{"line_number":37,"context_line":"DHCP_AGENT \u003d \u0027dhcp_agent\u0027"},{"line_number":38,"context_line":"METERING_AGENT \u003d \u0027metering_agent\u0027"},{"line_number":39,"context_line":"BGP_DR_AGENT \u003d \u0027q-bgp_dragent\u0027"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"RESOURCE_TOPIC_PATTERN \u003d \"neutron-vo-%(resource_type)s-%(version)s\""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"9a68dd71_f20e5e8b","line":40,"updated":"2016-01-27 09:07:56.000000000","message":"Just name it as bgp_dragent and become consistent with existing naming convention.","commit_id":"2286cd2ba579edd825efbf895f2c41764ea75d92"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"fa7ace4c9aa596aebc2e1ab94a68035ede5e0ed3","unresolved":false,"context_lines":[{"line_number":37,"context_line":"DHCP_AGENT \u003d \u0027dhcp_agent\u0027"},{"line_number":38,"context_line":"METERING_AGENT \u003d \u0027metering_agent\u0027"},{"line_number":39,"context_line":"BGP_DR_AGENT \u003d \u0027q-bgp_dragent\u0027"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"RESOURCE_TOPIC_PATTERN \u003d \"neutron-vo-%(resource_type)s-%(version)s\""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"9a68dd71_98ddc172","line":40,"in_reply_to":"9a68dd71_f20e5e8b","updated":"2016-01-27 09:28:28.000000000","message":"Done","commit_id":"2286cd2ba579edd825efbf895f2c41764ea75d92"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"60a703b655d5fda0613cf6ba8a790ab84ee9f027","unresolved":false,"context_lines":[{"line_number":36,"context_line":"L3_AGENT \u003d \u0027l3_agent\u0027"},{"line_number":37,"context_line":"DHCP_AGENT \u003d \u0027dhcp_agent\u0027"},{"line_number":38,"context_line":"METERING_AGENT \u003d \u0027metering_agent\u0027"},{"line_number":39,"context_line":"BGP_DRAGENT \u003d \u0027bgp_dragent\u0027"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"RESOURCE_TOPIC_PATTERN \u003d \"neutron-vo-%(resource_type)s-%(version)s\""},{"line_number":42,"context_line":""}],"source_content_type":"text/x-python","patch_set":40,"id":"5a5ae5dd_c7163555","line":39,"updated":"2016-02-03 06:29:21.000000000","message":"In the interest of a future spin out, consider localing this string literal to the bgp module.","commit_id":"211fb921ac4eac14f3007456b4418f2ee27bc8fd"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"8605c298212783a915a1e47f5e9e57aeea9077d9","unresolved":false,"context_lines":[{"line_number":36,"context_line":"L3_AGENT \u003d \u0027l3_agent\u0027"},{"line_number":37,"context_line":"DHCP_AGENT \u003d \u0027dhcp_agent\u0027"},{"line_number":38,"context_line":"METERING_AGENT \u003d \u0027metering_agent\u0027"},{"line_number":39,"context_line":"BGP_DRAGENT \u003d \u0027bgp_dragent\u0027"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"RESOURCE_TOPIC_PATTERN \u003d \"neutron-vo-%(resource_type)s-%(version)s\""},{"line_number":42,"context_line":""}],"source_content_type":"text/x-python","patch_set":40,"id":"3a57f1b5_19469bbf","line":39,"in_reply_to":"5a5ae5dd_0fe52d08","updated":"2016-02-11 08:54:14.000000000","message":"Done","commit_id":"211fb921ac4eac14f3007456b4418f2ee27bc8fd"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"36be6692b7c3ccb5515b5643784a8cdc6f608020","unresolved":false,"context_lines":[{"line_number":36,"context_line":"L3_AGENT \u003d \u0027l3_agent\u0027"},{"line_number":37,"context_line":"DHCP_AGENT \u003d \u0027dhcp_agent\u0027"},{"line_number":38,"context_line":"METERING_AGENT \u003d \u0027metering_agent\u0027"},{"line_number":39,"context_line":"BGP_DRAGENT \u003d \u0027bgp_dragent\u0027"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"RESOURCE_TOPIC_PATTERN \u003d \"neutron-vo-%(resource_type)s-%(version)s\""},{"line_number":42,"context_line":""}],"source_content_type":"text/x-python","patch_set":40,"id":"5a5ae5dd_0fe52d08","line":39,"in_reply_to":"5a5ae5dd_c7163555","updated":"2016-02-03 14:48:22.000000000","message":"ok will define locally.","commit_id":"211fb921ac4eac14f3007456b4418f2ee27bc8fd"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"ec6185fda3eccf132ed43435cb82b2d88ac911be","unresolved":false,"context_lines":[{"line_number":35,"context_line":"L3_AGENT \u003d \u0027l3_agent\u0027"},{"line_number":36,"context_line":"DHCP_AGENT \u003d \u0027dhcp_agent\u0027"},{"line_number":37,"context_line":"METERING_AGENT \u003d \u0027metering_agent\u0027"},{"line_number":38,"context_line":"BGP_DRAGENT \u003d \u0027bgp_dragent\u0027"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"RESOURCE_TOPIC_PATTERN \u003d \"neutron-vo-%(resource_type)s-%(version)s\""},{"line_number":41,"context_line":""}],"source_content_type":"text/x-python","patch_set":43,"id":"5a5ae5dd_42b8ea2a","line":38,"updated":"2016-02-09 06:33:58.000000000","message":"remove from here","commit_id":"d7cb30d18cd616c4d03732c05469160338873e79"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"83f528f52fc341f954c5ff24060f98dbbee13dfb","unresolved":false,"context_lines":[{"line_number":35,"context_line":"L3_AGENT \u003d \u0027l3_agent\u0027"},{"line_number":36,"context_line":"DHCP_AGENT \u003d \u0027dhcp_agent\u0027"},{"line_number":37,"context_line":"METERING_AGENT \u003d \u0027metering_agent\u0027"},{"line_number":38,"context_line":"BGP_DRAGENT \u003d \u0027bgp_dragent\u0027"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"RESOURCE_TOPIC_PATTERN \u003d \"neutron-vo-%(resource_type)s-%(version)s\""},{"line_number":41,"context_line":""}],"source_content_type":"text/x-python","patch_set":43,"id":"3a57f1b5_5322b2ba","line":38,"in_reply_to":"5a5ae5dd_42b8ea2a","updated":"2016-02-11 08:51:16.000000000","message":"Done","commit_id":"d7cb30d18cd616c4d03732c05469160338873e79"}],"neutron/db/agentschedulers_db.py":[{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"60a703b655d5fda0613cf6ba8a790ab84ee9f027","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        constants.AGENT_TYPE_DHCP: None,"},{"line_number":91,"context_line":"        constants.AGENT_TYPE_L3: None,"},{"line_number":92,"context_line":"        constants.AGENT_TYPE_LOADBALANCER: None,"},{"line_number":93,"context_line":"        constants.AGENT_TYPE_BGP_ROUTING: None,"},{"line_number":94,"context_line":"    }"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":40,"id":"5a5ae5dd_27062921","line":93,"updated":"2016-02-03 06:29:21.000000000","message":"This is spilling cross-cutting concerns. In the interest of a spin-out this should not be here.","commit_id":"211fb921ac4eac14f3007456b4418f2ee27bc8fd"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"36be6692b7c3ccb5515b5643784a8cdc6f608020","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        constants.AGENT_TYPE_DHCP: None,"},{"line_number":91,"context_line":"        constants.AGENT_TYPE_L3: None,"},{"line_number":92,"context_line":"        constants.AGENT_TYPE_LOADBALANCER: None,"},{"line_number":93,"context_line":"        constants.AGENT_TYPE_BGP_ROUTING: None,"},{"line_number":94,"context_line":"    }"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":40,"id":"5a5ae5dd_afe5f9a8","line":93,"in_reply_to":"5a5ae5dd_27062921","updated":"2016-02-03 14:48:22.000000000","message":"How about defining a new interface for adding external notifiers to this dict?\n\ndef init_agent_notifier(self, agent_type):\n    self.agent_notifiers[agent_type] \u003d None","commit_id":"211fb921ac4eac14f3007456b4418f2ee27bc8fd"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"d97edc5dba6e0b4783016f005b12e76fdd578059","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        constants.AGENT_TYPE_DHCP: None,"},{"line_number":91,"context_line":"        constants.AGENT_TYPE_L3: None,"},{"line_number":92,"context_line":"        constants.AGENT_TYPE_LOADBALANCER: None,"},{"line_number":93,"context_line":"        constants.AGENT_TYPE_BGP_ROUTING: None,"},{"line_number":94,"context_line":"    }"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":43,"id":"5a5ae5dd_585c7a18","line":93,"range":{"start_line":93,"start_character":18,"end_line":93,"end_character":40},"updated":"2016-02-08 20:06:26.000000000","message":"This constant has moved.  Perhaps we don\u0027t even need to define this key here anyway?","commit_id":"d7cb30d18cd616c4d03732c05469160338873e79"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"ec6185fda3eccf132ed43435cb82b2d88ac911be","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        constants.AGENT_TYPE_DHCP: None,"},{"line_number":91,"context_line":"        constants.AGENT_TYPE_L3: None,"},{"line_number":92,"context_line":"        constants.AGENT_TYPE_LOADBALANCER: None,"},{"line_number":93,"context_line":"        constants.AGENT_TYPE_BGP_ROUTING: None,"},{"line_number":94,"context_line":"    }"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":43,"id":"5a5ae5dd_628c0680","line":93,"range":{"start_line":93,"start_character":18,"end_line":93,"end_character":40},"in_reply_to":"5a5ae5dd_585c7a18","updated":"2016-02-09 06:33:58.000000000","message":"IMO, this is required otherwise https://review.openstack.org/#/c/207625/43/neutron/db/bgp_dragentscheduler_db.py (L141) will fail.","commit_id":"d7cb30d18cd616c4d03732c05469160338873e79"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"fff6dd0e6d168d4c102235b06660372edd5de504","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        constants.AGENT_TYPE_DHCP: None,"},{"line_number":91,"context_line":"        constants.AGENT_TYPE_L3: None,"},{"line_number":92,"context_line":"        constants.AGENT_TYPE_LOADBALANCER: None,"},{"line_number":93,"context_line":"        constants.AGENT_TYPE_BGP_ROUTING: None,"},{"line_number":94,"context_line":"    }"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":44,"id":"3a57f1b5_ddd9e484","line":93,"range":{"start_line":93,"start_character":8,"end_line":93,"end_character":17},"updated":"2016-02-10 21:58:37.000000000","message":"Undefined constant, this is causing all the crazy check job failures.","commit_id":"1953f82d2e341b505b75e76be683b078a930c680"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"6da3daeb110810a1168042661d762fe0d05352ee","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        constants.AGENT_TYPE_DHCP: None,"},{"line_number":91,"context_line":"        constants.AGENT_TYPE_L3: None,"},{"line_number":92,"context_line":"        constants.AGENT_TYPE_LOADBALANCER: None,"},{"line_number":93,"context_line":"        constants.AGENT_TYPE_BGP_ROUTING: None,"},{"line_number":94,"context_line":"    }"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":44,"id":"3a57f1b5_19745bfb","line":93,"range":{"start_line":93,"start_character":8,"end_line":93,"end_character":17},"in_reply_to":"3a57f1b5_ddd9e484","updated":"2016-02-11 08:55:21.000000000","message":"Done","commit_id":"1953f82d2e341b505b75e76be683b078a930c680"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"8a0ba2d82845d292d5fd1bc91cfc90936f2269f4","unresolved":false,"context_lines":[{"line_number":91,"context_line":"        constants.AGENT_TYPE_DHCP: None,"},{"line_number":92,"context_line":"        constants.AGENT_TYPE_L3: None,"},{"line_number":93,"context_line":"        constants.AGENT_TYPE_LOADBALANCER: None,"},{"line_number":94,"context_line":"        bgp_consts.AGENT_TYPE_BGP_ROUTING: None,"},{"line_number":95,"context_line":"    }"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":49,"id":"3a57f1b5_632459c4","line":94,"range":{"start_line":94,"start_character":8,"end_line":94,"end_character":48},"updated":"2016-02-12 21:42:44.000000000","message":"Does this have to be here?  I looked back in the history and found that Armando made this comment too back in PS40.  This must change before we merge this.","commit_id":"f168a2bef0136a057ec667d41e9932941210d953"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"0a4565544372640ddbf65d873fa02127fc73182c","unresolved":false,"context_lines":[{"line_number":91,"context_line":"        constants.AGENT_TYPE_DHCP: None,"},{"line_number":92,"context_line":"        constants.AGENT_TYPE_L3: None,"},{"line_number":93,"context_line":"        constants.AGENT_TYPE_LOADBALANCER: None,"},{"line_number":94,"context_line":"        bgp_consts.AGENT_TYPE_BGP_ROUTING: None,"},{"line_number":95,"context_line":"    }"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":49,"id":"dae33548_f0af6e92","line":94,"range":{"start_line":94,"start_character":8,"end_line":94,"end_character":48},"in_reply_to":"3a57f1b5_632459c4","updated":"2016-02-14 07:58:35.000000000","message":"Will remove it off.\n\nLet\u0027s see how we can wire this up in the RPC patch (https://review.openstack.org/#/c/216994/)","commit_id":"f168a2bef0136a057ec667d41e9932941210d953"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"57fda9b8f9fb6eccc7dc736a1bcff63b99f46143","unresolved":false,"context_lines":[{"line_number":91,"context_line":"        constants.AGENT_TYPE_DHCP: None,"},{"line_number":92,"context_line":"        constants.AGENT_TYPE_L3: None,"},{"line_number":93,"context_line":"        constants.AGENT_TYPE_LOADBALANCER: None,"},{"line_number":94,"context_line":"        bgp_consts.AGENT_TYPE_BGP_ROUTING: None,"},{"line_number":95,"context_line":"    }"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":49,"id":"dae33548_fbe10f00","line":94,"range":{"start_line":94,"start_character":8,"end_line":94,"end_character":48},"in_reply_to":"dae33548_f0af6e92","updated":"2016-02-14 08:37:03.000000000","message":"Done","commit_id":"f168a2bef0136a057ec667d41e9932941210d953"}],"neutron/db/bgp/bgp_dragentscheduler_db.py":[{"author":{"_account_id":7505,"name":"Jaume Devesa","email":"devvesa@gmail.com","username":"devesa"},"change_message_id":"e45cab91a933f128d90f8a84620fedc0a2e891bd","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        if self.bgp_drscheduler:"},{"line_number":79,"context_line":"            agents \u003d self.bgp_drscheduler.schedule(self, context,"},{"line_number":80,"context_line":"                                                   created_bgp_speaker)"},{"line_number":81,"context_line":"            for agent in agents:"},{"line_number":82,"context_line":"                self._notify_bgp_dr_agent(context, created_bgp_speaker[\u0027id\u0027],"},{"line_number":83,"context_line":"                                          agent.host, scheduled\u003dTrue)"},{"line_number":84,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"9a1a9d01_6b4b372c","line":81,"updated":"2015-10-03 15:41:47.000000000","message":"I would keep this class clean of agent notifications and maintain the communication with DB as its only duty. I would move the notify_agent methods in the plugin class.","commit_id":"97d1599ccee6f49be5f920e451a1452adb2948f0"},{"author":{"_account_id":7505,"name":"Jaume Devesa","email":"devvesa@gmail.com","username":"devesa"},"change_message_id":"e45cab91a933f128d90f8a84620fedc0a2e891bd","unresolved":false,"context_lines":[{"line_number":109,"context_line":"                      {\u0027bgp_speaker_id\u0027: speaker_id,"},{"line_number":110,"context_line":"                       \u0027agent_id\u0027: agent_id})"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"        self._notify_bgp_dr_agent(context, speaker_id, agent_db.host,"},{"line_number":113,"context_line":"                                  scheduled\u003dTrue)"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    @log_helpers.log_method_call"}],"source_content_type":"text/x-python","patch_set":21,"id":"9a1a9d01_8b46cb1f","line":112,"updated":"2015-10-03 15:41:47.000000000","message":"ditto.","commit_id":"97d1599ccee6f49be5f920e451a1452adb2948f0"},{"author":{"_account_id":7505,"name":"Jaume Devesa","email":"devvesa@gmail.com","username":"devesa"},"change_message_id":"e45cab91a933f128d90f8a84620fedc0a2e891bd","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        self._notify_bgp_dr_agent(context, speaker_id, agent_db.host,"},{"line_number":138,"context_line":"                                  scheduled\u003dFalse)"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    def _notify_bgp_dr_agent(self, context, speaker_id, host, scheduled\u003dTrue):"},{"line_number":141,"context_line":"        bgp_dr_notifier \u003d self.agent_notifiers.get("},{"line_number":142,"context_line":"            constants.AGENT_TYPE_BGP_ROUTING)"},{"line_number":143,"context_line":"        if not bgp_dr_notifier:"}],"source_content_type":"text/x-python","patch_set":21,"id":"9a1a9d01_2b553fc5","line":140,"updated":"2015-10-03 15:41:47.000000000","message":"ditto.","commit_id":"97d1599ccee6f49be5f920e451a1452adb2948f0"},{"author":{"_account_id":7505,"name":"Jaume Devesa","email":"devvesa@gmail.com","username":"devesa"},"change_message_id":"e45cab91a933f128d90f8a84620fedc0a2e891bd","unresolved":false,"context_lines":[{"line_number":142,"context_line":"            constants.AGENT_TYPE_BGP_ROUTING)"},{"line_number":143,"context_line":"        if not bgp_dr_notifier:"},{"line_number":144,"context_line":"            return"},{"line_number":145,"context_line":"        if scheduled:"},{"line_number":146,"context_line":"            bgp_dr_notifier.bgp_speaker_created(context, speaker_id, host)"},{"line_number":147,"context_line":"        else:"},{"line_number":148,"context_line":"            bgp_dr_notifier.bgp_speaker_removed(context, speaker_id, host)"}],"source_content_type":"text/x-python","patch_set":21,"id":"9a1a9d01_0b615ba8","line":145,"updated":"2015-10-03 15:41:47.000000000","message":"You never call this method with scheduled\u003dFalse, right?","commit_id":"97d1599ccee6f49be5f920e451a1452adb2948f0"}],"neutron/db/bgp_db.py":[{"author":{"_account_id":17455,"name":"Na Zhu","email":"juno.zhu@huawei.com","username":"Na"},"change_message_id":"7b157c69bc1115ddea9ff741c05ecb8d8033ff2d","unresolved":false,"context_lines":[{"line_number":138,"context_line":"    @log_helpers.log_method_call"},{"line_number":139,"context_line":"    def get_bgp_speaker_with_advertised_routes(self, context,"},{"line_number":140,"context_line":"                                               bgp_speaker_id):"},{"line_number":141,"context_line":"        bgp_speaker_attrs \u003d [\u0027id\u0027, \u0027local_as\u0027, \u0027tenant_id\u0027]"},{"line_number":142,"context_line":"        bgp_peer_attrs \u003d [\u0027peer_ip\u0027, \u0027remote_as\u0027, \u0027password\u0027]"},{"line_number":143,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":144,"context_line":"            bgp_speaker \u003d self.get_bgp_speaker(context, bgp_speaker_id,"}],"source_content_type":"text/x-python","patch_set":23,"id":"ba8a016a_2e7d6be7","line":141,"updated":"2015-11-17 10:40:33.000000000","message":"Why speaker attributes has tenant_id, i think multiple tenant can use the same bgpspeaker, right?","commit_id":"4a8f94c26026710372dce135ac95488dd89a0936"},{"author":{"_account_id":17455,"name":"Na Zhu","email":"juno.zhu@huawei.com","username":"Na"},"change_message_id":"14437285b842756adb3b02720679565e4805b777","unresolved":false,"context_lines":[{"line_number":220,"context_line":"    @log_helpers.log_method_call"},{"line_number":221,"context_line":"    def create_bgp_peer(self, context, bgp_peer):"},{"line_number":222,"context_line":"        ri \u003d bgp_peer[bgp_ext.BGP_PEER_BODY_KEY_NAME]"},{"line_number":223,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":224,"context_line":"            res_keys \u003d [\u0027tenant_id\u0027, \u0027remote_as\u0027, \u0027peer_ip\u0027,"},{"line_number":225,"context_line":"                        \u0027auth_type\u0027, \u0027password\u0027]"},{"line_number":226,"context_line":"            res \u003d dict((k, ri[k]) for k in res_keys)"}],"source_content_type":"text/x-python","patch_set":23,"id":"ba8a016a_cd5bd084","line":223,"updated":"2015-11-20 06:58:29.000000000","message":"bgp peer is irrelevant to tenant id","commit_id":"4a8f94c26026710372dce135ac95488dd89a0936"},{"author":{"_account_id":17455,"name":"Na Zhu","email":"juno.zhu@huawei.com","username":"Na"},"change_message_id":"14437285b842756adb3b02720679565e4805b777","unresolved":false,"context_lines":[{"line_number":386,"context_line":"                                                bgp_speaker_id\u003dbgp_speaker_id)"},{"line_number":387,"context_line":"            context.session.delete(binding)"},{"line_number":388,"context_line":""},{"line_number":389,"context_line":"    def _make_bgp_speaker_dict(self, bgp_speaker, fields\u003dNone):"},{"line_number":390,"context_line":"        attrs \u003d {\u0027id\u0027, \u0027local_as\u0027, \u0027tenant_id\u0027, \u0027ip_version\u0027,"},{"line_number":391,"context_line":"                 \u0027advertise_floating_ip_host_routes\u0027,"},{"line_number":392,"context_line":"                 \u0027advertise_tenant_networks\u0027}"}],"source_content_type":"text/x-python","patch_set":23,"id":"ba8a016a_ed06d484","line":389,"updated":"2015-11-20 06:58:29.000000000","message":"bgp speaker is irrelevant to tenant id","commit_id":"4a8f94c26026710372dce135ac95488dd89a0936"},{"author":{"_account_id":17455,"name":"Na Zhu","email":"juno.zhu@huawei.com","username":"Na"},"change_message_id":"14437285b842756adb3b02720679565e4805b777","unresolved":false,"context_lines":[{"line_number":420,"context_line":"                            network_id \u003d\u003d network_id).one()"},{"line_number":421,"context_line":""},{"line_number":422,"context_line":"    def _make_bgp_peer_dict(self, bgp_peer, fields\u003dNone):"},{"line_number":423,"context_line":"        attrs \u003d [\u0027tenant_id\u0027, \u0027id\u0027, \u0027peer_ip\u0027, \u0027remote_as\u0027,"},{"line_number":424,"context_line":"                 \u0027auth_type\u0027, \u0027password\u0027]"},{"line_number":425,"context_line":"        res \u003d dict((k, bgp_peer[k]) for k in attrs)"},{"line_number":426,"context_line":"        return self._fields(res, fields)"}],"source_content_type":"text/x-python","patch_set":23,"id":"ba8a016a_8d3dc82c","line":423,"updated":"2015-11-20 06:58:29.000000000","message":"bgp peer is irrelevant to tenant id","commit_id":"4a8f94c26026710372dce135ac95488dd89a0936"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"500ec6e2157133cd4de0154cd94c95c293e6d921","unresolved":false,"context_lines":[{"line_number":144,"context_line":"            res[\u0027peers\u0027] \u003d self.get_bgp_peers_by_bgp_speaker(context,"},{"line_number":145,"context_line":"                                                         bgp_speaker[\u0027id\u0027],"},{"line_number":146,"context_line":"                                                         fields\u003dbgp_peer_attrs)"},{"line_number":147,"context_line":"            res[\u0027advertised_routes\u0027] \u003d self.get_all_routes_by_bgp_speaker_id("},{"line_number":148,"context_line":"                                            context, bgp_speaker[\u0027id\u0027])"},{"line_number":149,"context_line":"            return res"},{"line_number":150,"context_line":""}],"source_content_type":"text/x-python","patch_set":36,"id":"7a5de9d1_a9738e14","line":147,"updated":"2016-01-28 15:11:15.000000000","message":"Bad rebase. Could not find the definition of \"get_all_routes_by_bgp_speaker_id\"\n\nI believe you meant get_routes_by_bgp_speaker_id instead  of get_all_routes_by_bgp_speaker_id. \n[[01;31m2016-01-28 20:12:14.247 TRACE oslo_messaging.rpc.dispatcher ^[[01;35m^[[00m    res[\u0027advertised_routes\u0027] \u003d self.get_all_routes_by_bgp_speaker_id(\n^[[01;31m2016-01-28 20:12:14.247 TRACE oslo_messaging.rpc.dispatcher ^[[01;35m^[[00mAttributeError: \u0027BgpPlugin\u0027 object has no attribute \u0027get_all_routes_by_bgp_speaker_id\u0027","commit_id":"2ca7ec3a04c40249b0938d493fb973d11431a0cc"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"80dea2fb4cdb90b8c01482603bc01eb93bb1609f","unresolved":false,"context_lines":[{"line_number":136,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":137,"context_line":"            bgp_speaker \u003d self.get_bgp_speaker(context, bgp_speaker_id,"},{"line_number":138,"context_line":"                                               fields\u003dbgp_speaker_attrs)"},{"line_number":139,"context_line":"            res \u003d dict((k, bgp_speaker[k]) for k in bgp_speaker_attrs)"},{"line_number":140,"context_line":"            res[\u0027peers\u0027] \u003d self.get_bgp_peers_by_bgp_speaker(context,"},{"line_number":141,"context_line":"                                                         bgp_speaker[\u0027id\u0027],"},{"line_number":142,"context_line":"                                                         fields\u003dbgp_peer_attrs)"}],"source_content_type":"text/x-python","patch_set":55,"id":"dae33548_fc42b666","line":139,"range":{"start_line":139,"start_character":18,"end_line":139,"end_character":24},"updated":"2016-02-18 19:56:49.000000000","message":"nit:  Python 2.7 now has real dict comprehensions:\n\n  {k: bgp_speaker[k] for k in bgp_speaker_attrs}\n\nJust a little less boilerplate","commit_id":"fbe754b04b34a2deade873cde0b593983633fc6c"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"c3856233360328fc0720e78201766e50f37a3154","unresolved":false,"context_lines":[{"line_number":136,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":137,"context_line":"            bgp_speaker \u003d self.get_bgp_speaker(context, bgp_speaker_id,"},{"line_number":138,"context_line":"                                               fields\u003dbgp_speaker_attrs)"},{"line_number":139,"context_line":"            res \u003d dict((k, bgp_speaker[k]) for k in bgp_speaker_attrs)"},{"line_number":140,"context_line":"            res[\u0027peers\u0027] \u003d self.get_bgp_peers_by_bgp_speaker(context,"},{"line_number":141,"context_line":"                                                         bgp_speaker[\u0027id\u0027],"},{"line_number":142,"context_line":"                                                         fields\u003dbgp_peer_attrs)"}],"source_content_type":"text/x-python","patch_set":55,"id":"dae33548_0708da27","line":139,"range":{"start_line":139,"start_character":18,"end_line":139,"end_character":24},"in_reply_to":"dae33548_fc42b666","updated":"2016-02-19 00:24:54.000000000","message":"ya...breadcrumbs for the trivialfixers","commit_id":"fbe754b04b34a2deade873cde0b593983633fc6c"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"80dea2fb4cdb90b8c01482603bc01eb93bb1609f","unresolved":false,"context_lines":[{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    def get_bgp_peers_by_bgp_speaker(self, context,"},{"line_number":229,"context_line":"                                     bgp_speaker_id, fields\u003dNone):"},{"line_number":230,"context_line":"        filters \u003d [BgpSpeakerPeerBinding.bgp_speaker_id \u003d\u003d bgp_speaker_id,"},{"line_number":231,"context_line":"                   BgpSpeakerPeerBinding.bgp_peer_id \u003d\u003d BgpPeer.id]"},{"line_number":232,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":233,"context_line":"            query \u003d context.session.query(BgpPeer)"}],"source_content_type":"text/x-python","patch_set":55,"id":"dae33548_fcb47682","line":230,"range":{"start_line":230,"start_character":8,"end_line":230,"end_character":15},"updated":"2016-02-18 19:56:49.000000000","message":"nit:  I don\u0027t see much value in separating these from the call on L234.  But, it isn\u0027t a big deal.","commit_id":"fbe754b04b34a2deade873cde0b593983633fc6c"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"80dea2fb4cdb90b8c01482603bc01eb93bb1609f","unresolved":false,"context_lines":[{"line_number":232,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":233,"context_line":"            query \u003d context.session.query(BgpPeer)"},{"line_number":234,"context_line":"            query \u003d query.filter(*filters)"},{"line_number":235,"context_line":"            return [self._make_bgp_peer_dict(x) for x in query.all()]"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"    def get_bgp_peer(self, context, bgp_peer_id, fields\u003dNone):"},{"line_number":238,"context_line":"        bgp_peer_db \u003d self._get_bgp_peer(context, bgp_peer_id)"}],"source_content_type":"text/x-python","patch_set":55,"id":"dae33548_1cae7a2d","line":235,"range":{"start_line":235,"start_character":62,"end_line":235,"end_character":68},"updated":"2016-02-18 19:56:49.000000000","message":"nit:  This is redundant and actually creates yet another intermediate list to hold the results.","commit_id":"fbe754b04b34a2deade873cde0b593983633fc6c"}],"neutron/db/bgp_dragentscheduler_db.py":[{"author":{"_account_id":17455,"name":"Na Zhu","email":"juno.zhu@huawei.com","username":"Na"},"change_message_id":"93a597053038ea96216bbd3596a1a8c961116dff","unresolved":false,"context_lines":[{"line_number":117,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":118,"context_line":"            agent_db \u003d self._get_agent(context, agent_id)"},{"line_number":119,"context_line":"            if (agent_db[\u0027agent_type\u0027] !\u003d constants.AGENT_TYPE_BGP_ROUTING"},{"line_number":120,"context_line":"                    or not agent_db[\u0027admin_state_up\u0027]):"},{"line_number":121,"context_line":"                raise bgp_dras_ext.DrAgentInvalid(id\u003dagent_id)"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"            query \u003d context.session.query(BgpSpeakerDrAgentBinding)"}],"source_content_type":"text/x-python","patch_set":29,"id":"fa69d971_1292624c","line":120,"range":{"start_line":120,"start_character":0,"end_line":120,"end_character":20},"updated":"2016-01-07 02:38:26.000000000","message":"you check the dragent state must be up here, so when the dragent host the bgp speaker change from active to inactive, you can not delete the bgp speaker any more, so i think should remove the check about dragent \"admin_state_up\"","commit_id":"7292ec0a727c8b564f28ff88b64b9703a20bf956"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"a92b95bd36877884cd53aa9a06e6e634c99792fc","unresolved":false,"context_lines":[{"line_number":117,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":118,"context_line":"            agent_db \u003d self._get_agent(context, agent_id)"},{"line_number":119,"context_line":"            if (agent_db[\u0027agent_type\u0027] !\u003d constants.AGENT_TYPE_BGP_ROUTING"},{"line_number":120,"context_line":"                    or not agent_db[\u0027admin_state_up\u0027]):"},{"line_number":121,"context_line":"                raise bgp_dras_ext.DrAgentInvalid(id\u003dagent_id)"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"            query \u003d context.session.query(BgpSpeakerDrAgentBinding)"}],"source_content_type":"text/x-python","patch_set":29,"id":"fa69d971_3bce1e5b","line":120,"range":{"start_line":120,"start_character":0,"end_line":120,"end_character":20},"in_reply_to":"fa69d971_1292624c","updated":"2016-01-08 04:05:23.000000000","message":"IMO this is a safety check which preclude us making extra RPC call. On a second thought we can have a control in \"_notify_bgp_dr_agent\" instead.","commit_id":"7292ec0a727c8b564f28ff88b64b9703a20bf956"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"a92b95bd36877884cd53aa9a06e6e634c99792fc","unresolved":false,"context_lines":[{"line_number":138,"context_line":"                                  scheduled\u003dFalse)"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    def _notify_bgp_dr_agent(self, context, speaker_id, host, scheduled\u003dTrue):"},{"line_number":141,"context_line":"        bgp_dr_notifier \u003d self.agent_notifiers.get("},{"line_number":142,"context_line":"            constants.AGENT_TYPE_BGP_ROUTING)"},{"line_number":143,"context_line":"        if not bgp_dr_notifier:"},{"line_number":144,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":29,"id":"fa69d971_5e5740ca","line":141,"updated":"2016-01-08 04:05:23.000000000","message":"Let\u0027s do RPC iff the agent is UP.","commit_id":"7292ec0a727c8b564f28ff88b64b9703a20bf956"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"55261fea427d2721200cafba84130bc898943132","unresolved":false,"context_lines":[{"line_number":76,"context_line":"            agents \u003d self.bgp_drscheduler.schedule(self, context,"},{"line_number":77,"context_line":"                                                   created_bgp_speaker)"},{"line_number":78,"context_line":"            for agent in agents:"},{"line_number":79,"context_line":"                self._notify_bgp_dr_agent(context, created_bgp_speaker[\u0027id\u0027],"},{"line_number":80,"context_line":"                                          agent.host, scheduled\u003dTrue)"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def add_bgp_speaker_to_dragent(self, context, agent_id, speaker_id):"}],"source_content_type":"text/x-python","patch_set":38,"id":"7a5de9d1_2fe63be8","line":79,"updated":"2016-02-01 13:59:32.000000000","message":"rename \u0027_notify_bgp_dr_agent\u0027 to \u0027_notify_bgp_dragent\u0027 for consistency.","commit_id":"4dd909f6fc96c8d0b986f1b6fccd0c2dab72f8f0"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"519f0b6db4a23e76000a5f1ba96082d65cec7668","unresolved":false,"context_lines":[{"line_number":76,"context_line":"            agents \u003d self.bgp_drscheduler.schedule(self, context,"},{"line_number":77,"context_line":"                                                   created_bgp_speaker)"},{"line_number":78,"context_line":"            for agent in agents:"},{"line_number":79,"context_line":"                self._notify_bgp_dr_agent(context, created_bgp_speaker[\u0027id\u0027],"},{"line_number":80,"context_line":"                                          agent.host, scheduled\u003dTrue)"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def add_bgp_speaker_to_dragent(self, context, agent_id, speaker_id):"}],"source_content_type":"text/x-python","patch_set":38,"id":"7a5de9d1_3b4acbad","line":79,"in_reply_to":"7a5de9d1_2fe63be8","updated":"2016-02-02 11:07:10.000000000","message":"Done","commit_id":"4dd909f6fc96c8d0b986f1b6fccd0c2dab72f8f0"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"a79cd5a1e33689f7007cd486edd8294c314e7178","unresolved":false,"context_lines":[{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    def _notify_bgp_dragent(self, context, speaker_id, host, scheduled\u003dTrue):"},{"line_number":140,"context_line":"        bgp_dr_notifier \u003d self.agent_notifiers.get("},{"line_number":141,"context_line":"            constants.AGENT_TYPE_BGP_ROUTING)"},{"line_number":142,"context_line":"        if not bgp_dr_notifier:"},{"line_number":143,"context_line":"            return"},{"line_number":144,"context_line":"        if scheduled:"}],"source_content_type":"text/x-python","patch_set":43,"id":"5a5ae5dd_4480168b","line":141,"range":{"start_line":141,"start_character":12,"end_line":141,"end_character":21},"updated":"2016-02-08 19:42:31.000000000","message":"Should be bgp_consts.AGENT_TYPE_BGP_ROUTING","commit_id":"d7cb30d18cd616c4d03732c05469160338873e79"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"ec6185fda3eccf132ed43435cb82b2d88ac911be","unresolved":false,"context_lines":[{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    def _notify_bgp_dragent(self, context, speaker_id, host, scheduled\u003dTrue):"},{"line_number":140,"context_line":"        bgp_dr_notifier \u003d self.agent_notifiers.get("},{"line_number":141,"context_line":"            constants.AGENT_TYPE_BGP_ROUTING)"},{"line_number":142,"context_line":"        if not bgp_dr_notifier:"},{"line_number":143,"context_line":"            return"},{"line_number":144,"context_line":"        if scheduled:"}],"source_content_type":"text/x-python","patch_set":43,"id":"5a5ae5dd_82958289","line":141,"range":{"start_line":141,"start_character":12,"end_line":141,"end_character":21},"in_reply_to":"5a5ae5dd_4480168b","updated":"2016-02-09 06:33:58.000000000","message":"Will do","commit_id":"d7cb30d18cd616c4d03732c05469160338873e79"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"83f528f52fc341f954c5ff24060f98dbbee13dfb","unresolved":false,"context_lines":[{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    def _notify_bgp_dragent(self, context, speaker_id, host, scheduled\u003dTrue):"},{"line_number":140,"context_line":"        bgp_dr_notifier \u003d self.agent_notifiers.get("},{"line_number":141,"context_line":"            constants.AGENT_TYPE_BGP_ROUTING)"},{"line_number":142,"context_line":"        if not bgp_dr_notifier:"},{"line_number":143,"context_line":"            return"},{"line_number":144,"context_line":"        if scheduled:"}],"source_content_type":"text/x-python","patch_set":43,"id":"3a57f1b5_933fcad5","line":141,"range":{"start_line":141,"start_character":12,"end_line":141,"end_character":21},"in_reply_to":"5a5ae5dd_82958289","updated":"2016-02-11 08:51:16.000000000","message":"Done","commit_id":"d7cb30d18cd616c4d03732c05469160338873e79"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"d41c47118585ad51f77bec57d0a084458a8d0f09","unresolved":false,"context_lines":[{"line_number":40,"context_line":"                \u0027.bgp_dragent_scheduler.ChanceScheduler\u0027,"},{"line_number":41,"context_line":"        help\u003d_(\u0027Driver used for scheduling BGP speakers to BGP DrAgent\u0027)),"},{"line_number":42,"context_line":"    cfg.BoolOpt(\u0027bgp_dr_auto_schedule\u0027,"},{"line_number":43,"context_line":"        default\u003dTrue,"},{"line_number":44,"context_line":"        help\u003d_(\u0027Allow auto scheduling of BGP speakers to BGP DrAgent\u0027)),"},{"line_number":45,"context_line":"]"},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":48,"id":"3a57f1b5_63a33cb3","line":43,"range":{"start_line":43,"start_character":16,"end_line":43,"end_character":20},"updated":"2016-02-11 21:38:26.000000000","message":"I\u0027m wondering if auto-scheduling can work at all in any case more complicated than the one agent / one speaker case.  Here is how I see the various use cases:\n\n- one speaker / one agent:  Trivial scheduling but not very useful.\n- many speakers / one agent:  Not possible due to restriction (if I understand correctly)\n- one speaker / multiple agents:  HA case.  Manual scheduling is required at this time if I understand correctly.\n- many speakers / many agents:  The connectivity of the agents to the peers needs to be considered in this case.  The scheduler doesn\u0027t seem to have enough to make this decision.\n\nSo, the only case that can be auto-scheduled is the totally trivial one which doesn\u0027t give us HA without manual intervention anyway.  So, why are we auto-scheduling?","commit_id":"2d369ef727ff8de656a2fc2523cc6dfe8a1002da"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"866607b3c45b4f70fda77aff6ee07f92e9159370","unresolved":false,"context_lines":[{"line_number":40,"context_line":"                \u0027.bgp_dragent_scheduler.ChanceScheduler\u0027,"},{"line_number":41,"context_line":"        help\u003d_(\u0027Driver used for scheduling BGP speakers to BGP DrAgent\u0027)),"},{"line_number":42,"context_line":"    cfg.BoolOpt(\u0027bgp_dr_auto_schedule\u0027,"},{"line_number":43,"context_line":"        default\u003dTrue,"},{"line_number":44,"context_line":"        help\u003d_(\u0027Allow auto scheduling of BGP speakers to BGP DrAgent\u0027)),"},{"line_number":45,"context_line":"]"},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":48,"id":"3a57f1b5_0cdffb0d","line":43,"range":{"start_line":43,"start_character":16,"end_line":43,"end_character":20},"in_reply_to":"3a57f1b5_63a33cb3","updated":"2016-02-12 11:29:17.000000000","message":"This logic is being carried from day one ;) But I feel you are correct as it doesn\u0027t make sense till we figure out how we can ensure HA automatically. If you want we can turn this knob off for the time-being.","commit_id":"2d369ef727ff8de656a2fc2523cc6dfe8a1002da"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"d41c47118585ad51f77bec57d0a084458a8d0f09","unresolved":false,"context_lines":[{"line_number":146,"context_line":"    def _notify_bgp_dragent(self, context, speaker_id, host, scheduled\u003dTrue):"},{"line_number":147,"context_line":"        bgp_dr_notifier \u003d self.agent_notifiers.get("},{"line_number":148,"context_line":"            bgp_consts.AGENT_TYPE_BGP_ROUTING)"},{"line_number":149,"context_line":"        if not bgp_dr_notifier:"},{"line_number":150,"context_line":"            return"},{"line_number":151,"context_line":"        if scheduled:"},{"line_number":152,"context_line":"            bgp_dr_notifier.bgp_speaker_created(context, speaker_id, host)"}],"source_content_type":"text/x-python","patch_set":48,"id":"3a57f1b5_83519838","line":149,"range":{"start_line":149,"start_character":15,"end_line":149,"end_character":30},"updated":"2016-02-11 21:38:26.000000000","message":"Why would this be missing?  Should this be checked in __init__ so that we know it is missing earlier.","commit_id":"2d369ef727ff8de656a2fc2523cc6dfe8a1002da"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"ef63cfdc8fe0beda0c6406d631beec051d88664b","unresolved":false,"context_lines":[{"line_number":146,"context_line":"    def _notify_bgp_dragent(self, context, speaker_id, host, scheduled\u003dTrue):"},{"line_number":147,"context_line":"        bgp_dr_notifier \u003d self.agent_notifiers.get("},{"line_number":148,"context_line":"            bgp_consts.AGENT_TYPE_BGP_ROUTING)"},{"line_number":149,"context_line":"        if not bgp_dr_notifier:"},{"line_number":150,"context_line":"            return"},{"line_number":151,"context_line":"        if scheduled:"},{"line_number":152,"context_line":"            bgp_dr_notifier.bgp_speaker_created(context, speaker_id, host)"}],"source_content_type":"text/x-python","patch_set":48,"id":"3a57f1b5_bb385fef","line":149,"range":{"start_line":149,"start_character":15,"end_line":149,"end_character":30},"in_reply_to":"3a57f1b5_83519838","updated":"2016-02-12 09:05:54.000000000","message":"Will correct.","commit_id":"2d369ef727ff8de656a2fc2523cc6dfe8a1002da"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"866607b3c45b4f70fda77aff6ee07f92e9159370","unresolved":false,"context_lines":[{"line_number":146,"context_line":"    def _notify_bgp_dragent(self, context, speaker_id, host, scheduled\u003dTrue):"},{"line_number":147,"context_line":"        bgp_dr_notifier \u003d self.agent_notifiers.get("},{"line_number":148,"context_line":"            bgp_consts.AGENT_TYPE_BGP_ROUTING)"},{"line_number":149,"context_line":"        if not bgp_dr_notifier:"},{"line_number":150,"context_line":"            return"},{"line_number":151,"context_line":"        if scheduled:"},{"line_number":152,"context_line":"            bgp_dr_notifier.bgp_speaker_created(context, speaker_id, host)"}],"source_content_type":"text/x-python","patch_set":48,"id":"3a57f1b5_8c28cbe3","line":149,"range":{"start_line":149,"start_character":15,"end_line":149,"end_character":30},"in_reply_to":"3a57f1b5_bb385fef","updated":"2016-02-12 11:29:17.000000000","message":"\u0027bgp_dr_notifier\u0027 initialization is added as part of other PS.","commit_id":"2d369ef727ff8de656a2fc2523cc6dfe8a1002da"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"d41c47118585ad51f77bec57d0a084458a8d0f09","unresolved":false,"context_lines":[{"line_number":147,"context_line":"        bgp_dr_notifier \u003d self.agent_notifiers.get("},{"line_number":148,"context_line":"            bgp_consts.AGENT_TYPE_BGP_ROUTING)"},{"line_number":149,"context_line":"        if not bgp_dr_notifier:"},{"line_number":150,"context_line":"            return"},{"line_number":151,"context_line":"        if scheduled:"},{"line_number":152,"context_line":"            bgp_dr_notifier.bgp_speaker_created(context, speaker_id, host)"},{"line_number":153,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":48,"id":"3a57f1b5_6ed2435e","line":150,"range":{"start_line":150,"start_character":12,"end_line":150,"end_character":18},"updated":"2016-02-11 21:38:26.000000000","message":"It doesn\u0027t seem like a good idea to ignore this condition.  Why is it okay?","commit_id":"2d369ef727ff8de656a2fc2523cc6dfe8a1002da"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"866607b3c45b4f70fda77aff6ee07f92e9159370","unresolved":false,"context_lines":[{"line_number":147,"context_line":"        bgp_dr_notifier \u003d self.agent_notifiers.get("},{"line_number":148,"context_line":"            bgp_consts.AGENT_TYPE_BGP_ROUTING)"},{"line_number":149,"context_line":"        if not bgp_dr_notifier:"},{"line_number":150,"context_line":"            return"},{"line_number":151,"context_line":"        if scheduled:"},{"line_number":152,"context_line":"            bgp_dr_notifier.bgp_speaker_created(context, speaker_id, host)"},{"line_number":153,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":48,"id":"3a57f1b5_eca13f47","line":150,"range":{"start_line":150,"start_character":12,"end_line":150,"end_character":18},"in_reply_to":"3a57f1b5_6ed2435e","updated":"2016-02-12 11:29:17.000000000","message":"I think we can flash some msg here.","commit_id":"2d369ef727ff8de656a2fc2523cc6dfe8a1002da"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"d41c47118585ad51f77bec57d0a084458a8d0f09","unresolved":false,"context_lines":[{"line_number":148,"context_line":"            bgp_consts.AGENT_TYPE_BGP_ROUTING)"},{"line_number":149,"context_line":"        if not bgp_dr_notifier:"},{"line_number":150,"context_line":"            return"},{"line_number":151,"context_line":"        if scheduled:"},{"line_number":152,"context_line":"            bgp_dr_notifier.bgp_speaker_created(context, speaker_id, host)"},{"line_number":153,"context_line":"        else:"},{"line_number":154,"context_line":"            bgp_dr_notifier.bgp_speaker_removed(context, speaker_id, host)"}],"source_content_type":"text/x-python","patch_set":48,"id":"3a57f1b5_2ee52bdb","line":151,"range":{"start_line":151,"start_character":11,"end_line":151,"end_character":20},"updated":"2016-02-11 21:38:26.000000000","message":"This seems like two different methods to me.","commit_id":"2d369ef727ff8de656a2fc2523cc6dfe8a1002da"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"866607b3c45b4f70fda77aff6ee07f92e9159370","unresolved":false,"context_lines":[{"line_number":148,"context_line":"            bgp_consts.AGENT_TYPE_BGP_ROUTING)"},{"line_number":149,"context_line":"        if not bgp_dr_notifier:"},{"line_number":150,"context_line":"            return"},{"line_number":151,"context_line":"        if scheduled:"},{"line_number":152,"context_line":"            bgp_dr_notifier.bgp_speaker_created(context, speaker_id, host)"},{"line_number":153,"context_line":"        else:"},{"line_number":154,"context_line":"            bgp_dr_notifier.bgp_speaker_removed(context, speaker_id, host)"}],"source_content_type":"text/x-python","patch_set":48,"id":"3a57f1b5_4c041317","line":151,"range":{"start_line":151,"start_character":11,"end_line":151,"end_character":20},"in_reply_to":"3a57f1b5_2ee52bdb","updated":"2016-02-12 11:29:17.000000000","message":"Sorry I did not get you. Can you please elaborate?","commit_id":"2d369ef727ff8de656a2fc2523cc6dfe8a1002da"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"d41c47118585ad51f77bec57d0a084458a8d0f09","unresolved":false,"context_lines":[{"line_number":211,"context_line":"            BgpSpeakerDrAgentBinding.agent_id \u003d\u003d agent.id)"},{"line_number":212,"context_line":"        try:"},{"line_number":213,"context_line":"            bgp_speaker_list \u003d []"},{"line_number":214,"context_line":"            binding \u003d query.one()"},{"line_number":215,"context_line":"            bgp_speaker \u003d self.get_bgp_speaker_with_advertised_routes("},{"line_number":216,"context_line":"                                                    context,"},{"line_number":217,"context_line":"                                                    binding[\u0027bgp_speaker_id\u0027])"}],"source_content_type":"text/x-python","patch_set":48,"id":"3a57f1b5_4e8667dc","line":214,"range":{"start_line":214,"start_character":22,"end_line":214,"end_character":33},"updated":"2016-02-11 21:38:26.000000000","message":"nit:  Is this where you expect the NoResultFound to come from?  If so, I always prefer to tighten up the try / except.  It keeps the exception handling localized to the code that could raise the exception which improves readability.\n\n  try:\n      binding \u003d query.one()\n  except exc.NoResultFound:\n      return []\n\n  bgp_speaker \u003d ...","commit_id":"2d369ef727ff8de656a2fc2523cc6dfe8a1002da"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"a3c7cfda187b11ee65c7286afa6476aa0295638e","unresolved":false,"context_lines":[{"line_number":211,"context_line":"            BgpSpeakerDrAgentBinding.agent_id \u003d\u003d agent.id)"},{"line_number":212,"context_line":"        try:"},{"line_number":213,"context_line":"            bgp_speaker_list \u003d []"},{"line_number":214,"context_line":"            binding \u003d query.one()"},{"line_number":215,"context_line":"            bgp_speaker \u003d self.get_bgp_speaker_with_advertised_routes("},{"line_number":216,"context_line":"                                                    context,"},{"line_number":217,"context_line":"                                                    binding[\u0027bgp_speaker_id\u0027])"}],"source_content_type":"text/x-python","patch_set":48,"id":"3a57f1b5_b3807bc0","line":214,"range":{"start_line":214,"start_character":22,"end_line":214,"end_character":33},"in_reply_to":"3a57f1b5_4e8667dc","updated":"2016-02-14 07:59:15.000000000","message":"Done","commit_id":"2d369ef727ff8de656a2fc2523cc6dfe8a1002da"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"d41c47118585ad51f77bec57d0a084458a8d0f09","unresolved":false,"context_lines":[{"line_number":212,"context_line":"        try:"},{"line_number":213,"context_line":"            bgp_speaker_list \u003d []"},{"line_number":214,"context_line":"            binding \u003d query.one()"},{"line_number":215,"context_line":"            bgp_speaker \u003d self.get_bgp_speaker_with_advertised_routes("},{"line_number":216,"context_line":"                                                    context,"},{"line_number":217,"context_line":"                                                    binding[\u0027bgp_speaker_id\u0027])"},{"line_number":218,"context_line":"            bgp_speaker_list.append(bgp_speaker)"}],"source_content_type":"text/x-python","patch_set":48,"id":"3a57f1b5_2e6bebf2","line":215,"range":{"start_line":215,"start_character":31,"end_line":215,"end_character":69},"updated":"2016-02-11 21:38:26.000000000","message":"If this raises NoResultFound, that seems like a totally different problem that should be handled differently.  But, I don\u0027t think this call will produce NoResultFound (it might produce BgpSpeakerNotFound I suppose but that would be strange since you already have the speaker id.  So, I wouldn\u0027t try to handle that here.","commit_id":"2d369ef727ff8de656a2fc2523cc6dfe8a1002da"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"d41c47118585ad51f77bec57d0a084458a8d0f09","unresolved":false,"context_lines":[{"line_number":216,"context_line":"                                                    context,"},{"line_number":217,"context_line":"                                                    binding[\u0027bgp_speaker_id\u0027])"},{"line_number":218,"context_line":"            bgp_speaker_list.append(bgp_speaker)"},{"line_number":219,"context_line":"            return bgp_speaker_list"},{"line_number":220,"context_line":"        except exc.NoResultFound:"},{"line_number":221,"context_line":"            return []"},{"line_number":222,"context_line":""}],"source_content_type":"text/x-python","patch_set":48,"id":"3a57f1b5_0ece2f82","line":219,"range":{"start_line":219,"start_character":19,"end_line":219,"end_character":35},"updated":"2016-02-11 21:38:26.000000000","message":"nit:  This saves a lot of verbosity:\n\n  return [bgp_speaker]","commit_id":"2d369ef727ff8de656a2fc2523cc6dfe8a1002da"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"866607b3c45b4f70fda77aff6ee07f92e9159370","unresolved":false,"context_lines":[{"line_number":216,"context_line":"                                                    context,"},{"line_number":217,"context_line":"                                                    binding[\u0027bgp_speaker_id\u0027])"},{"line_number":218,"context_line":"            bgp_speaker_list.append(bgp_speaker)"},{"line_number":219,"context_line":"            return bgp_speaker_list"},{"line_number":220,"context_line":"        except exc.NoResultFound:"},{"line_number":221,"context_line":"            return []"},{"line_number":222,"context_line":""}],"source_content_type":"text/x-python","patch_set":48,"id":"3a57f1b5_47186c1e","line":219,"range":{"start_line":219,"start_character":19,"end_line":219,"end_character":35},"in_reply_to":"3a57f1b5_0ece2f82","updated":"2016-02-12 11:29:17.000000000","message":"Done","commit_id":"2d369ef727ff8de656a2fc2523cc6dfe8a1002da"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"8a0ba2d82845d292d5fd1bc91cfc90936f2269f4","unresolved":false,"context_lines":[{"line_number":39,"context_line":"                \u0027.bgp_dragent_scheduler.ChanceScheduler\u0027,"},{"line_number":40,"context_line":"        help\u003d_(\u0027Driver used for scheduling BGP speakers to BGP DrAgent\u0027)),"},{"line_number":41,"context_line":"    cfg.BoolOpt(\u0027bgp_dr_auto_schedule\u0027,"},{"line_number":42,"context_line":"        default\u003dTrue,"},{"line_number":43,"context_line":"        help\u003d_(\u0027Allow auto scheduling of BGP speakers to BGP DrAgent\u0027)),"},{"line_number":44,"context_line":"]"},{"line_number":45,"context_line":""}],"source_content_type":"text/x-python","patch_set":49,"id":"3a57f1b5_059c975b","line":42,"range":{"start_line":42,"start_character":16,"end_line":42,"end_character":20},"updated":"2016-02-12 21:42:44.000000000","message":"I\u0027d like to separate auto-scheduling out in to another patch set and postpone it so that we can hash out the details in that patch set.  I can help out with this.","commit_id":"f168a2bef0136a057ec667d41e9932941210d953"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"0a4565544372640ddbf65d873fa02127fc73182c","unresolved":false,"context_lines":[{"line_number":39,"context_line":"                \u0027.bgp_dragent_scheduler.ChanceScheduler\u0027,"},{"line_number":40,"context_line":"        help\u003d_(\u0027Driver used for scheduling BGP speakers to BGP DrAgent\u0027)),"},{"line_number":41,"context_line":"    cfg.BoolOpt(\u0027bgp_dr_auto_schedule\u0027,"},{"line_number":42,"context_line":"        default\u003dTrue,"},{"line_number":43,"context_line":"        help\u003d_(\u0027Allow auto scheduling of BGP speakers to BGP DrAgent\u0027)),"},{"line_number":44,"context_line":"]"},{"line_number":45,"context_line":""}],"source_content_type":"text/x-python","patch_set":49,"id":"dae33548_50ca9a50","line":42,"range":{"start_line":42,"start_character":16,"end_line":42,"end_character":20},"in_reply_to":"3a57f1b5_059c975b","updated":"2016-02-14 07:58:35.000000000","message":"Will remove it off.","commit_id":"f168a2bef0136a057ec667d41e9932941210d953"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"57fda9b8f9fb6eccc7dc736a1bcff63b99f46143","unresolved":false,"context_lines":[{"line_number":39,"context_line":"                \u0027.bgp_dragent_scheduler.ChanceScheduler\u0027,"},{"line_number":40,"context_line":"        help\u003d_(\u0027Driver used for scheduling BGP speakers to BGP DrAgent\u0027)),"},{"line_number":41,"context_line":"    cfg.BoolOpt(\u0027bgp_dr_auto_schedule\u0027,"},{"line_number":42,"context_line":"        default\u003dTrue,"},{"line_number":43,"context_line":"        help\u003d_(\u0027Allow auto scheduling of BGP speakers to BGP DrAgent\u0027)),"},{"line_number":44,"context_line":"]"},{"line_number":45,"context_line":""}],"source_content_type":"text/x-python","patch_set":49,"id":"dae33548_5be75b12","line":42,"range":{"start_line":42,"start_character":16,"end_line":42,"end_character":20},"in_reply_to":"dae33548_50ca9a50","updated":"2016-02-14 08:37:03.000000000","message":"Done","commit_id":"f168a2bef0136a057ec667d41e9932941210d953"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"a90b98fcdd83b28a46544039be451b3212fa9105","unresolved":false,"context_lines":[{"line_number":39,"context_line":"                \u0027.bgp_dragent_scheduler.ChanceScheduler\u0027,"},{"line_number":40,"context_line":"        help\u003d_(\u0027Driver used for scheduling BGP speakers to BGP DrAgent\u0027)),"},{"line_number":41,"context_line":"    cfg.BoolOpt(\u0027bgp_dr_auto_schedule\u0027,"},{"line_number":42,"context_line":"        default\u003dTrue,"},{"line_number":43,"context_line":"        help\u003d_(\u0027Allow auto scheduling of BGP speakers to BGP DrAgent\u0027)),"},{"line_number":44,"context_line":"]"},{"line_number":45,"context_line":""}],"source_content_type":"text/x-python","patch_set":49,"id":"dae33548_8a1a2a6d","line":42,"range":{"start_line":42,"start_character":16,"end_line":42,"end_character":20},"in_reply_to":"dae33548_5be75b12","updated":"2016-02-14 10:55:31.000000000","message":"Raised via https://review.openstack.org/#/c/279951","commit_id":"f168a2bef0136a057ec667d41e9932941210d953"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"8a0ba2d82845d292d5fd1bc91cfc90936f2269f4","unresolved":false,"context_lines":[{"line_number":143,"context_line":"                                 scheduled\u003dFalse)"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"    def _notify_bgp_dragent(self, context, speaker_id, host, scheduled\u003dTrue):"},{"line_number":146,"context_line":"        bgp_dr_notifier \u003d self.agent_notifiers.get("},{"line_number":147,"context_line":"            bgp_consts.AGENT_TYPE_BGP_ROUTING)"},{"line_number":148,"context_line":"        if not bgp_dr_notifier:"},{"line_number":149,"context_line":"            LOG.warning(_LW(\"Cannot send notification to DrAgent. \""}],"source_content_type":"text/x-python","patch_set":49,"id":"3a57f1b5_20d5011b","line":146,"range":{"start_line":146,"start_character":8,"end_line":146,"end_character":50},"updated":"2016-02-12 21:42:44.000000000","message":"Draft:  Is there a reason this can\u0027t be set in __init__ that I\u0027m missing?","commit_id":"f168a2bef0136a057ec667d41e9932941210d953"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"0a4565544372640ddbf65d873fa02127fc73182c","unresolved":false,"context_lines":[{"line_number":143,"context_line":"                                 scheduled\u003dFalse)"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"    def _notify_bgp_dragent(self, context, speaker_id, host, scheduled\u003dTrue):"},{"line_number":146,"context_line":"        bgp_dr_notifier \u003d self.agent_notifiers.get("},{"line_number":147,"context_line":"            bgp_consts.AGENT_TYPE_BGP_ROUTING)"},{"line_number":148,"context_line":"        if not bgp_dr_notifier:"},{"line_number":149,"context_line":"            LOG.warning(_LW(\"Cannot send notification to DrAgent. \""}],"source_content_type":"text/x-python","patch_set":49,"id":"dae33548_b0f2066e","line":146,"range":{"start_line":146,"start_character":8,"end_line":146,"end_character":50},"in_reply_to":"3a57f1b5_20d5011b","updated":"2016-02-14 07:58:35.000000000","message":"Will move to init","commit_id":"f168a2bef0136a057ec667d41e9932941210d953"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"57fda9b8f9fb6eccc7dc736a1bcff63b99f46143","unresolved":false,"context_lines":[{"line_number":143,"context_line":"                                 scheduled\u003dFalse)"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"    def _notify_bgp_dragent(self, context, speaker_id, host, scheduled\u003dTrue):"},{"line_number":146,"context_line":"        bgp_dr_notifier \u003d self.agent_notifiers.get("},{"line_number":147,"context_line":"            bgp_consts.AGENT_TYPE_BGP_ROUTING)"},{"line_number":148,"context_line":"        if not bgp_dr_notifier:"},{"line_number":149,"context_line":"            LOG.warning(_LW(\"Cannot send notification to DrAgent. \""}],"source_content_type":"text/x-python","patch_set":49,"id":"dae33548_9bf1e3d0","line":146,"range":{"start_line":146,"start_character":8,"end_line":146,"end_character":50},"in_reply_to":"dae33548_b0f2066e","updated":"2016-02-14 08:37:03.000000000","message":"Done","commit_id":"f168a2bef0136a057ec667d41e9932941210d953"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"8a0ba2d82845d292d5fd1bc91cfc90936f2269f4","unresolved":false,"context_lines":[{"line_number":146,"context_line":"        bgp_dr_notifier \u003d self.agent_notifiers.get("},{"line_number":147,"context_line":"            bgp_consts.AGENT_TYPE_BGP_ROUTING)"},{"line_number":148,"context_line":"        if not bgp_dr_notifier:"},{"line_number":149,"context_line":"            LOG.warning(_LW(\"Cannot send notification to DrAgent. \""},{"line_number":150,"context_line":"                            \"Reason: No RPC interface registered.\"))"},{"line_number":151,"context_line":"            return"},{"line_number":152,"context_line":""}],"source_content_type":"text/x-python","patch_set":49,"id":"3a57f1b5_e0a8498e","line":149,"range":{"start_line":149,"start_character":16,"end_line":149,"end_character":23},"updated":"2016-02-12 21:42:44.000000000","message":"This is the kind of thing which should be flagged as soon as possible.  It isn\u0027t wise to wait until we try to send a notification to log a warning that we can\u0027t do it.","commit_id":"f168a2bef0136a057ec667d41e9932941210d953"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"0a4565544372640ddbf65d873fa02127fc73182c","unresolved":false,"context_lines":[{"line_number":146,"context_line":"        bgp_dr_notifier \u003d self.agent_notifiers.get("},{"line_number":147,"context_line":"            bgp_consts.AGENT_TYPE_BGP_ROUTING)"},{"line_number":148,"context_line":"        if not bgp_dr_notifier:"},{"line_number":149,"context_line":"            LOG.warning(_LW(\"Cannot send notification to DrAgent. \""},{"line_number":150,"context_line":"                            \"Reason: No RPC interface registered.\"))"},{"line_number":151,"context_line":"            return"},{"line_number":152,"context_line":""}],"source_content_type":"text/x-python","patch_set":49,"id":"dae33548_30ff1636","line":149,"range":{"start_line":149,"start_character":16,"end_line":149,"end_character":23},"in_reply_to":"3a57f1b5_e0a8498e","updated":"2016-02-14 07:58:35.000000000","message":"Will do this as a part of the RPC patch (https://review.openstack.org/#/c/216994/)","commit_id":"f168a2bef0136a057ec667d41e9932941210d953"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"57fda9b8f9fb6eccc7dc736a1bcff63b99f46143","unresolved":false,"context_lines":[{"line_number":146,"context_line":"        bgp_dr_notifier \u003d self.agent_notifiers.get("},{"line_number":147,"context_line":"            bgp_consts.AGENT_TYPE_BGP_ROUTING)"},{"line_number":148,"context_line":"        if not bgp_dr_notifier:"},{"line_number":149,"context_line":"            LOG.warning(_LW(\"Cannot send notification to DrAgent. \""},{"line_number":150,"context_line":"                            \"Reason: No RPC interface registered.\"))"},{"line_number":151,"context_line":"            return"},{"line_number":152,"context_line":""}],"source_content_type":"text/x-python","patch_set":49,"id":"dae33548_7bee9fed","line":149,"range":{"start_line":149,"start_character":16,"end_line":149,"end_character":23},"in_reply_to":"dae33548_30ff1636","updated":"2016-02-14 08:37:03.000000000","message":"Done","commit_id":"f168a2bef0136a057ec667d41e9932941210d953"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"8a0ba2d82845d292d5fd1bc91cfc90936f2269f4","unresolved":false,"context_lines":[{"line_number":150,"context_line":"                            \"Reason: No RPC interface registered.\"))"},{"line_number":151,"context_line":"            return"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"        if scheduled:"},{"line_number":154,"context_line":"            bgp_dr_notifier.bgp_speaker_created(context, speaker_id, host)"},{"line_number":155,"context_line":"        else:"},{"line_number":156,"context_line":"            bgp_dr_notifier.bgp_speaker_removed(context, speaker_id, host)"}],"source_content_type":"text/x-python","patch_set":49,"id":"3a57f1b5_e032895d","line":153,"range":{"start_line":153,"start_character":11,"end_line":153,"end_character":20},"updated":"2016-02-12 21:42:44.000000000","message":"My point here on PS48 was that the method \"_notify_bgp_dragent\" is really two methods in one.  \"_notify_bgp_dragent_speaker_created\" and \"_notify_bgp_dragent_speaker_removed\".  I don\u0027t see much advantage to combining them and I think it makes things more difficult to follow.\n\nThe only advantage here is that L146 - L151 is shared between the two.  But, as I\u0027ve pointed out in those lines, I suspect that those should be moved to __init__ unless you can convince me otherwise.  :)","commit_id":"f168a2bef0136a057ec667d41e9932941210d953"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"0a4565544372640ddbf65d873fa02127fc73182c","unresolved":false,"context_lines":[{"line_number":150,"context_line":"                            \"Reason: No RPC interface registered.\"))"},{"line_number":151,"context_line":"            return"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"        if scheduled:"},{"line_number":154,"context_line":"            bgp_dr_notifier.bgp_speaker_created(context, speaker_id, host)"},{"line_number":155,"context_line":"        else:"},{"line_number":156,"context_line":"            bgp_dr_notifier.bgp_speaker_removed(context, speaker_id, host)"}],"source_content_type":"text/x-python","patch_set":49,"id":"dae33548_7046bec0","line":153,"range":{"start_line":153,"start_character":11,"end_line":153,"end_character":20},"in_reply_to":"3a57f1b5_e032895d","updated":"2016-02-14 07:58:35.000000000","message":"Will fix.","commit_id":"f168a2bef0136a057ec667d41e9932941210d953"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"57fda9b8f9fb6eccc7dc736a1bcff63b99f46143","unresolved":false,"context_lines":[{"line_number":150,"context_line":"                            \"Reason: No RPC interface registered.\"))"},{"line_number":151,"context_line":"            return"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"        if scheduled:"},{"line_number":154,"context_line":"            bgp_dr_notifier.bgp_speaker_created(context, speaker_id, host)"},{"line_number":155,"context_line":"        else:"},{"line_number":156,"context_line":"            bgp_dr_notifier.bgp_speaker_removed(context, speaker_id, host)"}],"source_content_type":"text/x-python","patch_set":49,"id":"dae33548_dbb9abee","line":153,"range":{"start_line":153,"start_character":11,"end_line":153,"end_character":20},"in_reply_to":"dae33548_7046bec0","updated":"2016-02-14 08:37:03.000000000","message":"Done","commit_id":"f168a2bef0136a057ec667d41e9932941210d953"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"4eaa477b176f3aa51015133fb4af1017ab956a8a","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        default\u003d\u0027neutron.services.bgp.scheduler\u0027"},{"line_number":39,"context_line":"                \u0027.bgp_dragent_scheduler.ChanceScheduler\u0027,"},{"line_number":40,"context_line":"        help\u003d_(\u0027Driver used for scheduling BGP speakers to BGP DrAgent\u0027)),"},{"line_number":41,"context_line":"    cfg.BoolOpt(\u0027bgp_dr_auto_schedule\u0027,"},{"line_number":42,"context_line":"        default\u003dTrue,"},{"line_number":43,"context_line":"        help\u003d_(\u0027Allow auto scheduling of BGP speakers to BGP DrAgent\u0027)),"},{"line_number":44,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":50,"id":"dae33548_fb0d8f38","line":41,"updated":"2016-02-14 08:11:38.000000000","message":"please update commit message to reflect the new configuration variable","commit_id":"ba7807a82af6a1926086b131322a84f32844d705"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"f819952a2fb3d323766e0208307961ed920f0afd","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        default\u003d\u0027neutron.services.bgp.scheduler\u0027"},{"line_number":39,"context_line":"                \u0027.bgp_dragent_scheduler.ChanceScheduler\u0027,"},{"line_number":40,"context_line":"        help\u003d_(\u0027Driver used for scheduling BGP speakers to BGP DrAgent\u0027)),"},{"line_number":41,"context_line":"    cfg.BoolOpt(\u0027bgp_dr_auto_schedule\u0027,"},{"line_number":42,"context_line":"        default\u003dTrue,"},{"line_number":43,"context_line":"        help\u003d_(\u0027Allow auto scheduling of BGP speakers to BGP DrAgent\u0027)),"},{"line_number":44,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":50,"id":"dae33548_9b6283d7","line":41,"in_reply_to":"dae33548_fb0d8f38","updated":"2016-02-14 08:18:41.000000000","message":"We are planning to remove this off.","commit_id":"ba7807a82af6a1926086b131322a84f32844d705"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"04bcf0e79315411b51412cd458cb79f8d144b518","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        if self.bgp_drscheduler:"},{"line_number":78,"context_line":"            agents \u003d self.bgp_drscheduler.schedule(context,"},{"line_number":79,"context_line":"                                                   created_bgp_speaker)"},{"line_number":80,"context_line":"            for agent in agents:"},{"line_number":81,"context_line":"                self._notify_speaker_creation(context,"},{"line_number":82,"context_line":"                                              created_bgp_speaker[\u0027id\u0027],"},{"line_number":83,"context_line":"                                              agent.host)"}],"source_content_type":"text/x-python","patch_set":51,"id":"dae33548_567732d4","line":80,"updated":"2016-02-14 10:41:13.000000000","message":"will move this out to the RPC patch. (https://review.openstack.org/#/c/216994/)","commit_id":"90247aa48f99273fe6a577204ce674187093ecb7"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"04bcf0e79315411b51412cd458cb79f8d144b518","unresolved":false,"context_lines":[{"line_number":114,"context_line":"            binding.agent_id \u003d agent_id"},{"line_number":115,"context_line":"            context.session.add(binding)"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"        self._notify_speaker_creation(context, speaker_id, agent_db.host)"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    def remove_bgp_speaker_from_dragent(self, context, agent_id, speaker_id):"},{"line_number":120,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"}],"source_content_type":"text/x-python","patch_set":51,"id":"dae33548_166daa04","line":117,"updated":"2016-02-14 10:41:13.000000000","message":"ditto","commit_id":"90247aa48f99273fe6a577204ce674187093ecb7"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"04bcf0e79315411b51412cd458cb79f8d144b518","unresolved":false,"context_lines":[{"line_number":137,"context_line":"                      \u0027BgpDrAgent %(agent_id)s\u0027,"},{"line_number":138,"context_line":"                      {\u0027bgp_speaker_id\u0027: speaker_id,"},{"line_number":139,"context_line":"                       \u0027agent_id\u0027: agent_id})"},{"line_number":140,"context_line":"        self._notify_speaker_removal(context, speaker_id, agent_db.host)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    def _notify_speaker_creation(self, context, speaker_id, host):"},{"line_number":143,"context_line":"        if self.dragent_notifier:"}],"source_content_type":"text/x-python","patch_set":51,"id":"dae33548_f67126e2","line":140,"updated":"2016-02-14 10:41:13.000000000","message":"ditto","commit_id":"90247aa48f99273fe6a577204ce674187093ecb7"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"b129d633ab274461e1701055780308223c995c45","unresolved":false,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    def schedule_bgp_speaker(self, context, created_bgp_speaker):"},{"line_number":76,"context_line":"        if self.bgp_drscheduler:"},{"line_number":77,"context_line":"            self.bgp_drscheduler.schedule(context, created_bgp_speaker)"},{"line_number":78,"context_line":"        else:"},{"line_number":79,"context_line":"            LOG.warning(_LW(\"Cannot schedule BgpSpeaker to DrAgent. \""},{"line_number":80,"context_line":"                            \"Reason: No scheduler registered.\"))"}],"source_content_type":"text/x-python","patch_set":52,"id":"dae33548_322a0c7f","line":77,"updated":"2016-02-16 20:38:00.000000000","message":"So _notify_bgp_dragent has been removed since PS50.  Is notification being handled some other way?  How will the agents know when a speaker is scheduled?","commit_id":"2e552a59aaabe074975c8f56afbba126762dad76"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"0d930fa909a2f9e4faacc1a565fff1dcefdccfda","unresolved":false,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    def schedule_bgp_speaker(self, context, created_bgp_speaker):"},{"line_number":76,"context_line":"        if self.bgp_drscheduler:"},{"line_number":77,"context_line":"            self.bgp_drscheduler.schedule(context, created_bgp_speaker)"},{"line_number":78,"context_line":"        else:"},{"line_number":79,"context_line":"            LOG.warning(_LW(\"Cannot schedule BgpSpeaker to DrAgent. \""},{"line_number":80,"context_line":"                            \"Reason: No scheduler registered.\"))"}],"source_content_type":"text/x-python","patch_set":52,"id":"dae33548_bbfebdab","line":77,"in_reply_to":"dae33548_322a0c7f","updated":"2016-02-17 18:07:04.000000000","message":"See https://review.openstack.org/#/c/216994. That\u0027s where this moved to.","commit_id":"2e552a59aaabe074975c8f56afbba126762dad76"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"80dea2fb4cdb90b8c01482603bc01eb93bb1609f","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        \u0027bgp_drscheduler_driver\u0027,"},{"line_number":37,"context_line":"        default\u003d\u0027neutron.services.bgp.scheduler\u0027"},{"line_number":38,"context_line":"                \u0027.bgp_dragent_scheduler.ChanceScheduler\u0027,"},{"line_number":39,"context_line":"        help\u003d_(\u0027Driver used for scheduling BGP speakers to BGP DrAgent\u0027)),"},{"line_number":40,"context_line":"]"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"cfg.CONF.register_opts(BGP_DRAGENT_SCHEDULER_OPTS)"}],"source_content_type":"text/x-python","patch_set":55,"id":"dae33548_7f1cd869","side":"PARENT","line":39,"range":{"start_line":39,"start_character":73,"end_line":39,"end_character":74},"updated":"2016-02-18 19:56:49.000000000","message":"nit:  Don\u0027t remove this here.","commit_id":"f1cd08a076abfb184320d8ca0fc799a36424e9d4"}],"neutron/db/bgp_dragentschedulers_db.py":[{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"3cb1b8599d83cbe09bebc95aff8b44057295a90a","unresolved":false,"context_lines":[{"line_number":67,"context_line":"                    as_db.AgentSchedulerDbMixin):"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    bgp_dr_scheduler \u003d None"},{"line_number":70,"context_line":"    bgp_dr_notifier \u003d bgp_dr_rpc_agent_api.BgpDynamicRoutingAgentNotifyAPI()"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    @log_helpers.log_method_call"},{"line_number":73,"context_line":"    def auto_schedule_bgp_speakers(self, context, host):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a50d1a3_d966c9ba","line":70,"updated":"2015-08-01 05:50:00.000000000","message":"Please check is this is the right way of doing this?","commit_id":"4a6b37408e813dfda0f75fe8a51be99fcff31fc6"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"6b9d1d5e899b41023571ae16806bc5a24991c3d3","unresolved":false,"context_lines":[{"line_number":67,"context_line":"                    as_db.AgentSchedulerDbMixin):"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    bgp_dr_scheduler \u003d None"},{"line_number":70,"context_line":"    bgp_dr_notifier \u003d bgp_dr_rpc_agent_api.BgpDynamicRoutingAgentNotifyAPI()"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    @log_helpers.log_method_call"},{"line_number":73,"context_line":"    def auto_schedule_bgp_speakers(self, context, host):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a4dcd0f_710f9c2e","line":70,"in_reply_to":"3a50d1a3_d966c9ba","updated":"2015-08-11 06:20:48.000000000","message":"Removed and rewritten in the correct way.","commit_id":"4a6b37408e813dfda0f75fe8a51be99fcff31fc6"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"3cb1b8599d83cbe09bebc95aff8b44057295a90a","unresolved":false,"context_lines":[{"line_number":180,"context_line":"        query \u003d query.filter("},{"line_number":181,"context_line":"            BgpSpeakerDrAgentBinding.agent_id \u003d\u003d agent.id)"},{"line_number":182,"context_line":"        try:"},{"line_number":183,"context_line":"            # Vikram: Currently, only one BGP speaker could be associated"},{"line_number":184,"context_line":"            # with a DrAgent. If we got to support multiple then need to"},{"line_number":185,"context_line":"            # revisit below code."},{"line_number":186,"context_line":"            bgp_speaker_list \u003d []"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a50d1a3_9907e1c8","line":183,"updated":"2015-08-01 05:50:00.000000000","message":"Do we really need to provide this comment everywhere or just mention this limitation in the devref. This is making the code clumsy.","commit_id":"4a6b37408e813dfda0f75fe8a51be99fcff31fc6"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"6b9d1d5e899b41023571ae16806bc5a24991c3d3","unresolved":false,"context_lines":[{"line_number":180,"context_line":"        query \u003d query.filter("},{"line_number":181,"context_line":"            BgpSpeakerDrAgentBinding.agent_id \u003d\u003d agent.id)"},{"line_number":182,"context_line":"        try:"},{"line_number":183,"context_line":"            # Vikram: Currently, only one BGP speaker could be associated"},{"line_number":184,"context_line":"            # with a DrAgent. If we got to support multiple then need to"},{"line_number":185,"context_line":"            # revisit below code."},{"line_number":186,"context_line":"            bgp_speaker_list \u003d []"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a4dcd0f_111e5863","line":183,"in_reply_to":"3a50d1a3_9907e1c8","updated":"2015-08-11 06:20:48.000000000","message":"Removed","commit_id":"4a6b37408e813dfda0f75fe8a51be99fcff31fc6"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"e7b51f7080065e64da72bb23a057a7b0bda3f231","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    cfg.StrOpt(\u0027bgp_drscheduler_driver\u0027,"},{"line_number":35,"context_line":"        default\u003d\u0027neutron.scheduler.bgp_dragent_scheduler.BGPDRScheduler\u0027,"},{"line_number":36,"context_line":"        help\u003d_(\u0027Driver used for scheduling BGP speakers to DR agent\u0027)),"},{"line_number":37,"context_line":"    cfg.StrOpt(\u0027bgp_dr_auto_schedule\u0027,"},{"line_number":38,"context_line":"        default\u003dTrue,"},{"line_number":39,"context_line":"        help\u003d_(\u0027Allow auto scheduling of BGP speakers to BGP DR agent\u0027)),"},{"line_number":40,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_fb748236","line":37,"updated":"2015-08-12 19:03:10.000000000","message":"should be \"cfg.BoolOpt\"","commit_id":"054e037accd060b74011ed415f53200e8a473de0"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"8adbcd6ad117115b793bf68c3b8b58dec230b5aa","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    cfg.StrOpt(\u0027bgp_drscheduler_driver\u0027,"},{"line_number":35,"context_line":"        default\u003d\u0027neutron.scheduler.bgp_dragent_scheduler.BGPDRScheduler\u0027,"},{"line_number":36,"context_line":"        help\u003d_(\u0027Driver used for scheduling BGP speakers to DR agent\u0027)),"},{"line_number":37,"context_line":"    cfg.StrOpt(\u0027bgp_dr_auto_schedule\u0027,"},{"line_number":38,"context_line":"        default\u003dTrue,"},{"line_number":39,"context_line":"        help\u003d_(\u0027Allow auto scheduling of BGP speakers to BGP DR agent\u0027)),"},{"line_number":40,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a4dcd0f_931fd56f","line":37,"updated":"2015-08-16 16:46:56.000000000","message":"should be \"cfg.BoolOpt\"","commit_id":"b0ce0d8d7ecd76c8a80952550b0aa402d97a4d3e"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"8a0915d97accd734b50415edacd736c57627bb4e","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        \u0027bgp_drscheduler_driver\u0027,"},{"line_number":36,"context_line":"        default\u003d\u0027neutron.scheduler.bgp_dragent_scheduler.ChanceScheduler\u0027,"},{"line_number":37,"context_line":"        help\u003d_(\u0027Driver used for scheduling BGP speakers to DR agent\u0027)),"},{"line_number":38,"context_line":"    cfg.StrOpt(\u0027bgp_dr_auto_schedule\u0027,"},{"line_number":39,"context_line":"        default\u003dTrue,"},{"line_number":40,"context_line":"        help\u003d_(\u0027Allow auto scheduling of BGP speakers to BGP DR agent\u0027)),"},{"line_number":41,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":8,"id":"da20952f_7de79de4","line":38,"updated":"2015-08-27 13:16:36.000000000","message":"should be cfg.BoolOpt","commit_id":"498b383f65cebd65f4e89eca28b89ee742fcb2a9"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"6cff25d48d3f73660b846955582fb44d906527b7","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        \u0027bgp_drscheduler_driver\u0027,"},{"line_number":36,"context_line":"        default\u003d\u0027neutron.scheduler.bgp_dragent_scheduler.ChanceScheduler\u0027,"},{"line_number":37,"context_line":"        help\u003d_(\u0027Driver used for scheduling BGP speakers to DR agent\u0027)),"},{"line_number":38,"context_line":"    cfg.StrOpt(\u0027bgp_dr_auto_schedule\u0027,"},{"line_number":39,"context_line":"        default\u003dTrue,"},{"line_number":40,"context_line":"        help\u003d_(\u0027Allow auto scheduling of BGP speakers to BGP DR agent\u0027)),"},{"line_number":41,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":8,"id":"da20952f_105fe3e5","line":38,"in_reply_to":"da20952f_7de79de4","updated":"2015-09-05 04:38:33.000000000","message":"Done. Addressed in PS12.","commit_id":"498b383f65cebd65f4e89eca28b89ee742fcb2a9"},{"author":{"_account_id":7505,"name":"Jaume Devesa","email":"devvesa@gmail.com","username":"devesa"},"change_message_id":"bb08a358ea2ae6f28c0fa0886138ff99be4e0001","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    cfg.StrOpt("},{"line_number":35,"context_line":"        \u0027bgp_drscheduler_driver\u0027,"},{"line_number":36,"context_line":"        default\u003d\u0027neutron.scheduler.bgp_dragent_scheduler.ChanceScheduler\u0027,"},{"line_number":37,"context_line":"        help\u003d_(\u0027Driver used for scheduling BgpSpeakers to BgpDrAgent\u0027)),"},{"line_number":38,"context_line":"    cfg.BoolOpt(\u0027bgp_dr_auto_schedule\u0027,"},{"line_number":39,"context_line":"        default\u003dTrue,"},{"line_number":40,"context_line":"        help\u003d_(\u0027Allow auto scheduling of BgpSpeakers to BgpDrAgent\u0027)),"}],"source_content_type":"text/x-python","patch_set":17,"id":"ba15a1d1_9e77e03a","line":37,"updated":"2015-09-22 13:34:37.000000000","message":"I wouldn\u0027t change this. Even I think the name of the class is better, we don\u0027t need to show this name on help messages.","commit_id":"42fee1342fad477cdddb703d1601cd454244b8a5"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"f32992a6217e9cbe665057a615758a7f3b4dc91f","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    cfg.StrOpt("},{"line_number":35,"context_line":"        \u0027bgp_drscheduler_driver\u0027,"},{"line_number":36,"context_line":"        default\u003d\u0027neutron.scheduler.bgp_dragent_scheduler.ChanceScheduler\u0027,"},{"line_number":37,"context_line":"        help\u003d_(\u0027Driver used for scheduling BgpSpeakers to BgpDrAgent\u0027)),"},{"line_number":38,"context_line":"    cfg.BoolOpt(\u0027bgp_dr_auto_schedule\u0027,"},{"line_number":39,"context_line":"        default\u003dTrue,"},{"line_number":40,"context_line":"        help\u003d_(\u0027Allow auto scheduling of BgpSpeakers to BgpDrAgent\u0027)),"}],"source_content_type":"text/x-python","patch_set":17,"id":"ba15a1d1_f602bc08","line":37,"in_reply_to":"ba15a1d1_9e77e03a","updated":"2015-09-22 14:37:11.000000000","message":"+1.","commit_id":"42fee1342fad477cdddb703d1601cd454244b8a5"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"f2c2107b218fa1b600480c151484d772a1927d5e","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    cfg.StrOpt("},{"line_number":35,"context_line":"        \u0027bgp_drscheduler_driver\u0027,"},{"line_number":36,"context_line":"        default\u003d\u0027neutron.scheduler.bgp_dragent_scheduler.ChanceScheduler\u0027,"},{"line_number":37,"context_line":"        help\u003d_(\u0027Driver used for scheduling BgpSpeakers to BgpDrAgent\u0027)),"},{"line_number":38,"context_line":"    cfg.BoolOpt(\u0027bgp_dr_auto_schedule\u0027,"},{"line_number":39,"context_line":"        default\u003dTrue,"},{"line_number":40,"context_line":"        help\u003d_(\u0027Allow auto scheduling of BgpSpeakers to BgpDrAgent\u0027)),"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a1a9d01_eb08b42f","line":37,"in_reply_to":"ba15a1d1_f602bc08","updated":"2015-09-26 08:22:27.000000000","message":"Done.","commit_id":"42fee1342fad477cdddb703d1601cd454244b8a5"}],"neutron/db/bgp_speaker_db.py":[{"author":{"_account_id":7505,"name":"Jaume Devesa","email":"devvesa@gmail.com","username":"devesa"},"change_message_id":"bb08a358ea2ae6f28c0fa0886138ff99be4e0001","unresolved":false,"context_lines":[{"line_number":156,"context_line":"    def get_bgp_speaker_with_advertised_routes(self, context,"},{"line_number":157,"context_line":"                                               bgp_speaker_id):"},{"line_number":158,"context_line":"        bgp_speaker_attrs \u003d [\u0027id\u0027, \u0027local_as\u0027, \u0027tenant_id\u0027]"},{"line_number":159,"context_line":"        bgp_peer_attrs \u003d [\u0027peer_ip\u0027, \u0027remote_as\u0027, \u0027password\u0027]"},{"line_number":160,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":161,"context_line":"            bgp_speaker \u003d self.get_bgp_speaker(context, bgp_speaker_id,"},{"line_number":162,"context_line":"                                               fields\u003dbgp_speaker_attrs)"}],"source_content_type":"text/x-python","patch_set":17,"id":"ba15a1d1_7f09a72b","line":159,"updated":"2015-09-22 13:34:37.000000000","message":"auth_type?","commit_id":"42fee1342fad477cdddb703d1601cd454244b8a5"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"f32992a6217e9cbe665057a615758a7f3b4dc91f","unresolved":false,"context_lines":[{"line_number":156,"context_line":"    def get_bgp_speaker_with_advertised_routes(self, context,"},{"line_number":157,"context_line":"                                               bgp_speaker_id):"},{"line_number":158,"context_line":"        bgp_speaker_attrs \u003d [\u0027id\u0027, \u0027local_as\u0027, \u0027tenant_id\u0027]"},{"line_number":159,"context_line":"        bgp_peer_attrs \u003d [\u0027peer_ip\u0027, \u0027remote_as\u0027, \u0027password\u0027]"},{"line_number":160,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":161,"context_line":"            bgp_speaker \u003d self.get_bgp_speaker(context, bgp_speaker_id,"},{"line_number":162,"context_line":"                                               fields\u003dbgp_speaker_attrs)"}],"source_content_type":"text/x-python","patch_set":17,"id":"ba15a1d1_f6507c0c","line":159,"in_reply_to":"ba15a1d1_7f09a72b","updated":"2015-09-22 14:37:11.000000000","message":"Need to add.","commit_id":"42fee1342fad477cdddb703d1601cd454244b8a5"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"f2c2107b218fa1b600480c151484d772a1927d5e","unresolved":false,"context_lines":[{"line_number":156,"context_line":"    def get_bgp_speaker_with_advertised_routes(self, context,"},{"line_number":157,"context_line":"                                               bgp_speaker_id):"},{"line_number":158,"context_line":"        bgp_speaker_attrs \u003d [\u0027id\u0027, \u0027local_as\u0027, \u0027tenant_id\u0027]"},{"line_number":159,"context_line":"        bgp_peer_attrs \u003d [\u0027peer_ip\u0027, \u0027remote_as\u0027, \u0027password\u0027]"},{"line_number":160,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":161,"context_line":"            bgp_speaker \u003d self.get_bgp_speaker(context, bgp_speaker_id,"},{"line_number":162,"context_line":"                                               fields\u003dbgp_speaker_attrs)"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a1a9d01_ab02bc09","line":159,"in_reply_to":"ba15a1d1_f6507c0c","updated":"2015-09-26 08:22:27.000000000","message":"Will record it as an open point for now as it depends upon the entity patch changes.","commit_id":"42fee1342fad477cdddb703d1601cd454244b8a5"}],"neutron/extensions/bgp_dragentscheduler.py":[{"author":{"_account_id":7505,"name":"Jaume Devesa","email":"devvesa@gmail.com","username":"devesa"},"change_message_id":"e45cab91a933f128d90f8a84620fedc0a2e891bd","unresolved":false,"context_lines":[{"line_number":168,"context_line":"    def list_bgp_speaker_on_dragent(self, context, agent_id):"},{"line_number":169,"context_line":"        pass"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    @abc.abstractmethod"},{"line_number":172,"context_line":"    def get_bgp_speakers_for_agent_host(self, context, host):"},{"line_number":173,"context_line":"        pass"},{"line_number":174,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"9a1a9d01_8bbfabfb","line":171,"updated":"2015-10-03 15:41:47.000000000","message":"I would say that you don\u0027t need to add these methods here. I understand this class is used to map between API extensions and plugin methods. These methods, although used in the plugin, are not assigned to any API endpoint.","commit_id":"97d1599ccee6f49be5f920e451a1452adb2948f0"},{"author":{"_account_id":7505,"name":"Jaume Devesa","email":"devvesa@gmail.com","username":"devesa"},"change_message_id":"b02c87152e53320ea6798cb0931f181f74c84a31","unresolved":false,"context_lines":[{"line_number":168,"context_line":"    def list_bgp_speaker_on_dragent(self, context, agent_id):"},{"line_number":169,"context_line":"        pass"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    @abc.abstractmethod"},{"line_number":172,"context_line":"    def get_bgp_speakers_for_agent_host(self, context, host):"},{"line_number":173,"context_line":"        pass"},{"line_number":174,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"9a1a9d01_aa15bb49","line":171,"in_reply_to":"9a1a9d01_61502e5f","updated":"2015-10-05 08:08:20.000000000","message":"I mean to remove the methods, not only the annotations.","commit_id":"97d1599ccee6f49be5f920e451a1452adb2948f0"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"930c9b5286f7001da0c12f0703e1a2083668e417","unresolved":false,"context_lines":[{"line_number":168,"context_line":"    def list_bgp_speaker_on_dragent(self, context, agent_id):"},{"line_number":169,"context_line":"        pass"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    @abc.abstractmethod"},{"line_number":172,"context_line":"    def get_bgp_speakers_for_agent_host(self, context, host):"},{"line_number":173,"context_line":"        pass"},{"line_number":174,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"9a1a9d01_61502e5f","line":171,"in_reply_to":"9a1a9d01_8bbfabfb","updated":"2015-10-05 04:15:37.000000000","message":"Ok. will change to non-abstract","commit_id":"97d1599ccee6f49be5f920e451a1452adb2948f0"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"a3eade5382dfe63a225f670db98ddbe39014d3d1","unresolved":false,"context_lines":[{"line_number":168,"context_line":"    def list_bgp_speaker_on_dragent(self, context, agent_id):"},{"line_number":169,"context_line":"        pass"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    @abc.abstractmethod"},{"line_number":172,"context_line":"    def get_bgp_speakers_for_agent_host(self, context, host):"},{"line_number":173,"context_line":"        pass"},{"line_number":174,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"9a1a9d01_44d97382","line":171,"in_reply_to":"9a1a9d01_aa15bb49","updated":"2015-10-05 09:31:16.000000000","message":"Ok! Will remove.","commit_id":"97d1599ccee6f49be5f920e451a1452adb2948f0"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"80dea2fb4cdb90b8c01482603bc01eb93bb1609f","unresolved":false,"context_lines":[{"line_number":172,"context_line":""},{"line_number":173,"context_line":"    @abc.abstractmethod"},{"line_number":174,"context_line":"    def get_bgp_speakers_for_agent_host(self, context, host):"},{"line_number":175,"context_line":"        pass"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"    @abc.abstractmethod"},{"line_number":178,"context_line":"    def get_bgp_speaker_by_speaker_id(self, context, speaker_id):"}],"source_content_type":"text/x-python","patch_set":55,"id":"dae33548_7f4a1856","line":175,"range":{"start_line":175,"start_character":8,"end_line":175,"end_character":12},"updated":"2016-02-18 19:56:49.000000000","message":"If you add a docstring then you don\u0027t even need to include the \u0027pass\u0027.  :)","commit_id":"fbe754b04b34a2deade873cde0b593983633fc6c"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"92c305a001ee0a19804021f286ec2b4373f1e1d5","unresolved":false,"context_lines":[{"line_number":172,"context_line":""},{"line_number":173,"context_line":"    @abc.abstractmethod"},{"line_number":174,"context_line":"    def get_bgp_speakers_for_agent_host(self, context, host):"},{"line_number":175,"context_line":"        pass"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"    @abc.abstractmethod"},{"line_number":178,"context_line":"    def get_bgp_speaker_by_speaker_id(self, context, speaker_id):"}],"source_content_type":"text/x-python","patch_set":55,"id":"dae33548_562452c5","line":175,"range":{"start_line":175,"start_character":8,"end_line":175,"end_character":12},"in_reply_to":"dae33548_7f4a1856","updated":"2016-02-19 03:34:37.000000000","message":"Will add.","commit_id":"fbe754b04b34a2deade873cde0b593983633fc6c"}],"neutron/opts.py":[{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"8c30f6ca87f7d826685cedbbc43724cbfa97b002","unresolved":false,"context_lines":[{"line_number":293,"context_line":""},{"line_number":294,"context_line":"def list_bgp_agent_opts():"},{"line_number":295,"context_line":"    return ["},{"line_number":296,"context_line":"        (\u0027DEFAULT\u0027,"},{"line_number":297,"context_line":"         itertools.chain("},{"line_number":298,"context_line":"             neutron.services.bgp.agent.config.BGP_DRAGENT_OPTS,"},{"line_number":299,"context_line":"             neutron.services.bgp.agent.config.BGP_PROTO_CONFIG_OPTS)"}],"source_content_type":"text/x-python","patch_set":34,"id":"9a68dd71_d259da8f","line":296,"updated":"2016-01-27 09:07:56.000000000","message":"Move the configuration to the \u0027BGP\u0027 config section and not under default.","commit_id":"2286cd2ba579edd825efbf895f2c41764ea75d92"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"60a703b655d5fda0613cf6ba8a790ab84ee9f027","unresolved":false,"context_lines":[{"line_number":291,"context_line":"    return [(NOVA_GROUP, opt_list)]"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":""},{"line_number":294,"context_line":"def list_bgp_agent_opts():"},{"line_number":295,"context_line":"    return ["},{"line_number":296,"context_line":"        (\u0027DEFAULT\u0027,"},{"line_number":297,"context_line":"         itertools.chain("}],"source_content_type":"text/x-python","patch_set":40,"id":"5a5ae5dd_c21f035a","line":294,"updated":"2016-02-03 06:29:21.000000000","message":"move this chances closer to the bgp module, they do not belong here.","commit_id":"211fb921ac4eac14f3007456b4418f2ee27bc8fd"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"8605c298212783a915a1e47f5e9e57aeea9077d9","unresolved":false,"context_lines":[{"line_number":291,"context_line":"    return [(NOVA_GROUP, opt_list)]"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":""},{"line_number":294,"context_line":"def list_bgp_agent_opts():"},{"line_number":295,"context_line":"    return ["},{"line_number":296,"context_line":"        (\u0027DEFAULT\u0027,"},{"line_number":297,"context_line":"         itertools.chain("}],"source_content_type":"text/x-python","patch_set":40,"id":"3a57f1b5_392837e2","line":294,"in_reply_to":"5a5ae5dd_52250ea9","updated":"2016-02-11 08:54:14.000000000","message":"Done","commit_id":"211fb921ac4eac14f3007456b4418f2ee27bc8fd"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"36be6692b7c3ccb5515b5643784a8cdc6f608020","unresolved":false,"context_lines":[{"line_number":291,"context_line":"    return [(NOVA_GROUP, opt_list)]"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":""},{"line_number":294,"context_line":"def list_bgp_agent_opts():"},{"line_number":295,"context_line":"    return ["},{"line_number":296,"context_line":"        (\u0027DEFAULT\u0027,"},{"line_number":297,"context_line":"         itertools.chain("}],"source_content_type":"text/x-python","patch_set":40,"id":"5a5ae5dd_52250ea9","line":294,"in_reply_to":"5a5ae5dd_c21f035a","updated":"2016-02-03 14:48:22.000000000","message":"Will move.","commit_id":"211fb921ac4eac14f3007456b4418f2ee27bc8fd"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"36be6692b7c3ccb5515b5643784a8cdc6f608020","unresolved":false,"context_lines":[{"line_number":293,"context_line":""},{"line_number":294,"context_line":"def list_bgp_agent_opts():"},{"line_number":295,"context_line":"    return ["},{"line_number":296,"context_line":"        (\u0027DEFAULT\u0027,"},{"line_number":297,"context_line":"         itertools.chain("},{"line_number":298,"context_line":"             neutron.services.bgp.agent.config.BGP_DRIVER_OPTS,"},{"line_number":299,"context_line":"             neutron.services.bgp.agent.config.BGP_PROTO_CONFIG_OPTS)"}],"source_content_type":"text/x-python","patch_set":40,"id":"5a5ae5dd_d2481e5e","line":296,"updated":"2016-02-03 14:48:22.000000000","message":"Should be \u0027BGP\u0027 config section instead of \u0027DEFAULT\u0027","commit_id":"211fb921ac4eac14f3007456b4418f2ee27bc8fd"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"8605c298212783a915a1e47f5e9e57aeea9077d9","unresolved":false,"context_lines":[{"line_number":293,"context_line":""},{"line_number":294,"context_line":"def list_bgp_agent_opts():"},{"line_number":295,"context_line":"    return ["},{"line_number":296,"context_line":"        (\u0027DEFAULT\u0027,"},{"line_number":297,"context_line":"         itertools.chain("},{"line_number":298,"context_line":"             neutron.services.bgp.agent.config.BGP_DRIVER_OPTS,"},{"line_number":299,"context_line":"             neutron.services.bgp.agent.config.BGP_PROTO_CONFIG_OPTS)"}],"source_content_type":"text/x-python","patch_set":40,"id":"3a57f1b5_5923b305","line":296,"in_reply_to":"5a5ae5dd_d2481e5e","updated":"2016-02-11 08:54:14.000000000","message":"Done","commit_id":"211fb921ac4eac14f3007456b4418f2ee27bc8fd"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"ec6185fda3eccf132ed43435cb82b2d88ac911be","unresolved":false,"context_lines":[{"line_number":291,"context_line":"    return [(NOVA_GROUP, opt_list)]"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":""},{"line_number":294,"context_line":"def list_bgp_agent_opts():"},{"line_number":295,"context_line":"    return ["},{"line_number":296,"context_line":"        (\u0027DEFAULT\u0027,"},{"line_number":297,"context_line":"         itertools.chain("}],"source_content_type":"text/x-python","patch_set":43,"id":"5a5ae5dd_22860e66","line":294,"updated":"2016-02-09 06:33:58.000000000","message":"remove from here","commit_id":"d7cb30d18cd616c4d03732c05469160338873e79"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"83f528f52fc341f954c5ff24060f98dbbee13dfb","unresolved":false,"context_lines":[{"line_number":291,"context_line":"    return [(NOVA_GROUP, opt_list)]"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":""},{"line_number":294,"context_line":"def list_bgp_agent_opts():"},{"line_number":295,"context_line":"    return ["},{"line_number":296,"context_line":"        (\u0027DEFAULT\u0027,"},{"line_number":297,"context_line":"         itertools.chain("}],"source_content_type":"text/x-python","patch_set":43,"id":"3a57f1b5_5979732e","line":294,"in_reply_to":"5a5ae5dd_22860e66","updated":"2016-02-11 08:51:16.000000000","message":"Done","commit_id":"d7cb30d18cd616c4d03732c05469160338873e79"}],"neutron/services/bgp/agent/bgp_dragent.py":[{"author":{"_account_id":7505,"name":"Jaume Devesa","email":"devvesa@gmail.com","username":"devesa"},"change_message_id":"e45cab91a933f128d90f8a84620fedc0a2e891bd","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        self.periodic_resync(self.context)"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    @utils.synchronized(\u0027bgp-dr-agent\u0027)"},{"line_number":72,"context_line":"    def sync_state(self, context, bgp_speakers\u003dNone):"},{"line_number":73,"context_line":"        only_bs \u003d set([] if (not bgp_speakers or None in bgp_speakers)"},{"line_number":74,"context_line":"                      else bgp_speakers)"},{"line_number":75,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":21,"id":"9a1a9d01_0b2f1b3f","line":72,"updated":"2015-10-03 15:41:47.000000000","message":"Wouldn\u0027t be the same to initialize bgp_speakers with [] and then:\n\n  set([] if (None in bgp_speakers) else bgp_speakers)","commit_id":"97d1599ccee6f49be5f920e451a1452adb2948f0"},{"author":{"_account_id":7505,"name":"Jaume Devesa","email":"devvesa@gmail.com","username":"devesa"},"change_message_id":"e45cab91a933f128d90f8a84620fedc0a2e891bd","unresolved":false,"context_lines":[{"line_number":151,"context_line":"        LOG.debug(\u0027Received BGP speaker create notification for \u0027"},{"line_number":152,"context_line":"                  \u0027speaker_id\u003d%(speaker_id)s from the neutron server.\u0027,"},{"line_number":153,"context_line":"                  {\u0027speaker_id\u0027: bgp_speaker_id})"},{"line_number":154,"context_line":"        self.add_bgp_speaker_helper(bgp_speaker_id)"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    @utils.synchronized(\u0027bgp-dr-agent\u0027)"},{"line_number":157,"context_line":"    def bgp_speaker_remove_end(self, context, payload):"}],"source_content_type":"text/x-python","patch_set":21,"id":"9a1a9d01_0bd63b27","line":154,"updated":"2015-10-03 15:41:47.000000000","message":"add_bgp_speaker_helper is only called from here and it only has one \u0027if\u0027. Do you think is worth to create this method?","commit_id":"97d1599ccee6f49be5f920e451a1452adb2948f0"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"930c9b5286f7001da0c12f0703e1a2083668e417","unresolved":false,"context_lines":[{"line_number":151,"context_line":"        LOG.debug(\u0027Received BGP speaker create notification for \u0027"},{"line_number":152,"context_line":"                  \u0027speaker_id\u003d%(speaker_id)s from the neutron server.\u0027,"},{"line_number":153,"context_line":"                  {\u0027speaker_id\u0027: bgp_speaker_id})"},{"line_number":154,"context_line":"        self.add_bgp_speaker_helper(bgp_speaker_id)"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    @utils.synchronized(\u0027bgp-dr-agent\u0027)"},{"line_number":157,"context_line":"    def bgp_speaker_remove_end(self, context, payload):"}],"source_content_type":"text/x-python","patch_set":21,"id":"9a1a9d01_e1cafe19","line":154,"in_reply_to":"9a1a9d01_0bd63b27","updated":"2015-10-05 04:15:37.000000000","message":"The work of this function is just to receive the message and pass-on to the subsequent for processing.","commit_id":"97d1599ccee6f49be5f920e451a1452adb2948f0"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"8c30f6ca87f7d826685cedbbc43724cbfa97b002","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Huawei Technologies India Pvt. Ltd."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":4,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":34,"id":"9a68dd71_524e4ac2","line":1,"updated":"2016-01-27 09:07:56.000000000","message":"2016","commit_id":"2286cd2ba579edd825efbf895f2c41764ea75d92"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"fa7ace4c9aa596aebc2e1ab94a68035ede5e0ed3","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Huawei Technologies India Pvt. Ltd."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":4,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":34,"id":"9a68dd71_18ba31e2","line":1,"in_reply_to":"9a68dd71_524e4ac2","updated":"2016-01-27 09:28:28.000000000","message":"Done","commit_id":"2286cd2ba579edd825efbf895f2c41764ea75d92"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"8c30f6ca87f7d826685cedbbc43724cbfa97b002","unresolved":false,"context_lines":[{"line_number":469,"context_line":"        return cctxt.call(context, \u0027get_bgp_peer_info\u0027,"},{"line_number":470,"context_line":"                          bgp_peer_id\u003dbgp_peer_id)"},{"line_number":471,"context_line":""},{"line_number":472,"context_line":"    def notify_maximum_bgp_speaker_support(self, context):"},{"line_number":473,"context_line":"        \"\"\"Make a remote process call to notify maximum BGP speaker support.\"\"\""},{"line_number":474,"context_line":"        cctxt \u003d self.client.prepare()"},{"line_number":475,"context_line":"        return cctxt.call(context, \u0027notify_maximum_bgp_speaker_support\u0027,"}],"source_content_type":"text/x-python","patch_set":34,"id":"9a68dd71_52e5eaa5","line":472,"updated":"2016-01-27 09:07:56.000000000","message":"We won\u0027t be supporting this functionality in Mitaka. Let\u0027s remove it off.","commit_id":"2286cd2ba579edd825efbf895f2c41764ea75d92"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"fa7ace4c9aa596aebc2e1ab94a68035ede5e0ed3","unresolved":false,"context_lines":[{"line_number":469,"context_line":"        return cctxt.call(context, \u0027get_bgp_peer_info\u0027,"},{"line_number":470,"context_line":"                          bgp_peer_id\u003dbgp_peer_id)"},{"line_number":471,"context_line":""},{"line_number":472,"context_line":"    def notify_maximum_bgp_speaker_support(self, context):"},{"line_number":473,"context_line":"        \"\"\"Make a remote process call to notify maximum BGP speaker support.\"\"\""},{"line_number":474,"context_line":"        cctxt \u003d self.client.prepare()"},{"line_number":475,"context_line":"        return cctxt.call(context, \u0027notify_maximum_bgp_speaker_support\u0027,"}],"source_content_type":"text/x-python","patch_set":34,"id":"9a68dd71_d8b33909","line":472,"in_reply_to":"9a68dd71_52e5eaa5","updated":"2016-01-27 09:28:28.000000000","message":"Done","commit_id":"2286cd2ba579edd825efbf895f2c41764ea75d92"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"3ab7be78b5b559ce557f4636423df13d7d77f6f4","unresolved":false,"context_lines":[{"line_number":86,"context_line":"                if (not only_bs or  # specifically resync all"},{"line_number":87,"context_line":"                    bs_id in only_bs):  # specific bgp_speaker to sync"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"                    if not self.cache.is_bgp_speaker_added(bs_id):"},{"line_number":90,"context_line":"                        self.safe_configure_dragent_for_bgp_speaker("},{"line_number":91,"context_line":"                            hosted_bgp_speaker)"},{"line_number":92,"context_line":"                        continue"}],"source_content_type":"text/x-python","patch_set":41,"id":"5a5ae5dd_8e043b4a","line":89,"range":{"start_line":89,"start_character":64,"end_line":89,"end_character":66},"updated":"2016-02-05 18:22:28.000000000","message":"Periodic sync won\u0027t sync the route cache for the speaker, that would be a nice touch to act as backstop against any server-side hiccups with notifications.","commit_id":"aef83fb83e96771e1c58d732c4552f38281b4482"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"32f8b9fedba7b3a9cb4d6624e0b240070e03f6f4","unresolved":false,"context_lines":[{"line_number":86,"context_line":"                if (not only_bs or  # specifically resync all"},{"line_number":87,"context_line":"                    bs_id in only_bs):  # specific bgp_speaker to sync"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"                    if not self.cache.is_bgp_speaker_added(bs_id):"},{"line_number":90,"context_line":"                        self.safe_configure_dragent_for_bgp_speaker("},{"line_number":91,"context_line":"                            hosted_bgp_speaker)"},{"line_number":92,"context_line":"                        continue"}],"source_content_type":"text/x-python","patch_set":41,"id":"3a57f1b5_3db323eb","line":89,"range":{"start_line":89,"start_character":64,"end_line":89,"end_character":66},"in_reply_to":"5a5ae5dd_8e043b4a","updated":"2016-02-11 17:23:26.000000000","message":"Done","commit_id":"aef83fb83e96771e1c58d732c4552f38281b4482"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"d7021cf2302bccb849ef96ef7939210a7d6ee58c","unresolved":false,"context_lines":[{"line_number":90,"context_line":"                        self.safe_configure_dragent_for_bgp_speaker("},{"line_number":91,"context_line":"                            hosted_bgp_speaker)"},{"line_number":92,"context_line":"                        continue"},{"line_number":93,"context_line":"                    self.sync_bgp_speaker(hosted_bgp_speaker)"},{"line_number":94,"context_line":"        except Exception as e:"},{"line_number":95,"context_line":"            self.schedule_resync(reason\u003de)"},{"line_number":96,"context_line":"            LOG.error(_LE(\u0027Unable to sync BGP speaker state.\u0027))"}],"source_content_type":"text/x-python","patch_set":41,"id":"5a5ae5dd_65431d43","line":93,"range":{"start_line":93,"start_character":60,"end_line":93,"end_character":61},"updated":"2016-02-05 18:57:30.000000000","message":"Add on the next line:\n\nself.schedule_resync(reason\u003d\"Periodic route cache refresh\", speaker_id\u003dbgp_speaker[\u0027id\u0027])\n\nWe need this to maintain the periodic refresh cycle of the speaker so we can keep the route cache in sync.","commit_id":"aef83fb83e96771e1c58d732c4552f38281b4482"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"32f8b9fedba7b3a9cb4d6624e0b240070e03f6f4","unresolved":false,"context_lines":[{"line_number":90,"context_line":"                        self.safe_configure_dragent_for_bgp_speaker("},{"line_number":91,"context_line":"                            hosted_bgp_speaker)"},{"line_number":92,"context_line":"                        continue"},{"line_number":93,"context_line":"                    self.sync_bgp_speaker(hosted_bgp_speaker)"},{"line_number":94,"context_line":"        except Exception as e:"},{"line_number":95,"context_line":"            self.schedule_resync(reason\u003de)"},{"line_number":96,"context_line":"            LOG.error(_LE(\u0027Unable to sync BGP speaker state.\u0027))"}],"source_content_type":"text/x-python","patch_set":41,"id":"3a57f1b5_af92bd9d","line":93,"range":{"start_line":93,"start_character":60,"end_line":93,"end_character":61},"in_reply_to":"5a5ae5dd_65431d43","updated":"2016-02-11 17:23:26.000000000","message":"Done","commit_id":"aef83fb83e96771e1c58d732c4552f38281b4482"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"d7021cf2302bccb849ef96ef7939210a7d6ee58c","unresolved":false,"context_lines":[{"line_number":318,"context_line":""},{"line_number":319,"context_line":"        # Add peer and route information to the driver."},{"line_number":320,"context_line":"        self.add_bgp_peers_to_bgp_speaker(bgp_speaker)"},{"line_number":321,"context_line":"        self.advertise_routes_via_bgp_speaker(bgp_speaker)"},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"    def remove_bgp_speaker_from_dragent(self, bgp_speaker_id):"},{"line_number":324,"context_line":"        if self.cache.is_bgp_speaker_added(bgp_speaker_id):"}],"source_content_type":"text/x-python","patch_set":41,"id":"5a5ae5dd_05890975","line":321,"range":{"start_line":321,"start_character":57,"end_line":321,"end_character":58},"updated":"2016-02-05 18:57:30.000000000","message":"Add on the next line:\n\nself.schedule_resync(reason\u003d\"Periodic route cache refresh\", speaker_id\u003dbgp_speaker[\u0027id\u0027])\n\nWe need this to initiate the periodic refresh cycle of the speaker so we can keep the route cache in sync.","commit_id":"aef83fb83e96771e1c58d732c4552f38281b4482"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"32f8b9fedba7b3a9cb4d6624e0b240070e03f6f4","unresolved":false,"context_lines":[{"line_number":318,"context_line":""},{"line_number":319,"context_line":"        # Add peer and route information to the driver."},{"line_number":320,"context_line":"        self.add_bgp_peers_to_bgp_speaker(bgp_speaker)"},{"line_number":321,"context_line":"        self.advertise_routes_via_bgp_speaker(bgp_speaker)"},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"    def remove_bgp_speaker_from_dragent(self, bgp_speaker_id):"},{"line_number":324,"context_line":"        if self.cache.is_bgp_speaker_added(bgp_speaker_id):"}],"source_content_type":"text/x-python","patch_set":41,"id":"3a57f1b5_cff37909","line":321,"range":{"start_line":321,"start_character":57,"end_line":321,"end_character":58},"in_reply_to":"5a5ae5dd_05890975","updated":"2016-02-11 17:23:26.000000000","message":"Done","commit_id":"aef83fb83e96771e1c58d732c4552f38281b4482"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"f52724a41090983c0b8465d6762d31d9d850a526","unresolved":false,"context_lines":[{"line_number":93,"context_line":"                    self.sync_bgp_speaker(hosted_bgp_speaker)"},{"line_number":94,"context_line":"                    resync_reason \u003d \"Periodic route cache refresh\""},{"line_number":95,"context_line":"                    self.schedule_resync(reason\u003dresync_reason,"},{"line_number":96,"context_line":"                                         speaker_id\u003dbgp_speaker[\u0027id\u0027])"},{"line_number":97,"context_line":"        except Exception as e:"},{"line_number":98,"context_line":"            self.schedule_resync(reason\u003de)"},{"line_number":99,"context_line":"            LOG.error(_LE(\u0027Unable to sync BGP speaker state.\u0027))"}],"source_content_type":"text/x-python","patch_set":42,"id":"5a5ae5dd_c5a744a5","line":96,"updated":"2016-02-08 09:58:36.000000000","message":"This looks incorrect. \"self.sync_bgp_speaker\" present @L95 will stale old route entries (please check L123) and resync will re-add them. This could probably lead to route flap. I think server need to flash routes during periodic sync, if not then we got to figure out how to stale the old route entries for the cache.","commit_id":"41b11bfffc6fdaaf940d5d8fac173d4dd94d24b6"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"50046202a0426ea2d75944492285a564e13d6101","unresolved":false,"context_lines":[{"line_number":93,"context_line":"                    self.sync_bgp_speaker(hosted_bgp_speaker)"},{"line_number":94,"context_line":"                    resync_reason \u003d \"Periodic route cache refresh\""},{"line_number":95,"context_line":"                    self.schedule_resync(reason\u003dresync_reason,"},{"line_number":96,"context_line":"                                         speaker_id\u003dbgp_speaker[\u0027id\u0027])"},{"line_number":97,"context_line":"        except Exception as e:"},{"line_number":98,"context_line":"            self.schedule_resync(reason\u003de)"},{"line_number":99,"context_line":"            LOG.error(_LE(\u0027Unable to sync BGP speaker state.\u0027))"}],"source_content_type":"text/x-python","patch_set":42,"id":"5a5ae5dd_69e16b29","line":96,"in_reply_to":"5a5ae5dd_c5a744a5","updated":"2016-02-08 19:08:45.000000000","message":"In my testing, stale routes do seem to get flushed.  I\u0027ve been snooping on the BGP session, I don\u0027t see any route flapping.  Can you explain the scenario you\u0027re envisioning in a little more detail?","commit_id":"41b11bfffc6fdaaf940d5d8fac173d4dd94d24b6"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"f52724a41090983c0b8465d6762d31d9d850a526","unresolved":false,"context_lines":[{"line_number":322,"context_line":"        # Add peer and route information to the driver."},{"line_number":323,"context_line":"        self.add_bgp_peers_to_bgp_speaker(bgp_speaker)"},{"line_number":324,"context_line":"        self.advertise_routes_via_bgp_speaker(bgp_speaker)"},{"line_number":325,"context_line":"        self.schedule_resync(reason\u003d\"Periodic route cache refresh\","},{"line_number":326,"context_line":"                             speaker_id\u003dbgp_speaker[\u0027id\u0027])"},{"line_number":327,"context_line":""},{"line_number":328,"context_line":"    def remove_bgp_speaker_from_dragent(self, bgp_speaker_id):"}],"source_content_type":"text/x-python","patch_set":42,"id":"5a5ae5dd_40590234","line":325,"updated":"2016-02-08 09:58:36.000000000","message":"This is a common function which can be called during periodic smooth and normal speaker addition. I think saying \u0027Periodic route refresh\u0027 can mislead.","commit_id":"41b11bfffc6fdaaf940d5d8fac173d4dd94d24b6"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"d97edc5dba6e0b4783016f005b12e76fdd578059","unresolved":false,"context_lines":[{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        self.cache \u003d BgpSpeakerCache()"},{"line_number":58,"context_line":"        self.context \u003d context.get_admin_context_without_session()"},{"line_number":59,"context_line":"        self.plugin_rpc \u003d BgpDrPluginApi(topics.BGP_PLUGIN,"},{"line_number":60,"context_line":"                                         self.context, host)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def after_start(self):"}],"source_content_type":"text/x-python","patch_set":43,"id":"5a5ae5dd_5866babb","line":59,"range":{"start_line":59,"start_character":48,"end_line":59,"end_character":58},"updated":"2016-02-08 20:06:26.000000000","message":"This constant has moved","commit_id":"d7cb30d18cd616c4d03732c05469160338873e79"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"ec6185fda3eccf132ed43435cb82b2d88ac911be","unresolved":false,"context_lines":[{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        self.cache \u003d BgpSpeakerCache()"},{"line_number":58,"context_line":"        self.context \u003d context.get_admin_context_without_session()"},{"line_number":59,"context_line":"        self.plugin_rpc \u003d BgpDrPluginApi(topics.BGP_PLUGIN,"},{"line_number":60,"context_line":"                                         self.context, host)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def after_start(self):"}],"source_content_type":"text/x-python","patch_set":43,"id":"5a5ae5dd_e271d6a9","line":59,"range":{"start_line":59,"start_character":48,"end_line":59,"end_character":58},"in_reply_to":"5a5ae5dd_5866babb","updated":"2016-02-09 06:33:58.000000000","message":"Will rebase","commit_id":"d7cb30d18cd616c4d03732c05469160338873e79"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"83f528f52fc341f954c5ff24060f98dbbee13dfb","unresolved":false,"context_lines":[{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        self.cache \u003d BgpSpeakerCache()"},{"line_number":58,"context_line":"        self.context \u003d context.get_admin_context_without_session()"},{"line_number":59,"context_line":"        self.plugin_rpc \u003d BgpDrPluginApi(topics.BGP_PLUGIN,"},{"line_number":60,"context_line":"                                         self.context, host)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def after_start(self):"}],"source_content_type":"text/x-python","patch_set":43,"id":"3a57f1b5_b64e746d","line":59,"range":{"start_line":59,"start_character":48,"end_line":59,"end_character":58},"in_reply_to":"5a5ae5dd_e271d6a9","updated":"2016-02-11 08:51:16.000000000","message":"Done","commit_id":"d7cb30d18cd616c4d03732c05469160338873e79"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"d97edc5dba6e0b4783016f005b12e76fdd578059","unresolved":false,"context_lines":[{"line_number":573,"context_line":"    def __init__(self, host, conf\u003dNone):"},{"line_number":574,"context_line":"        super(BgpDrAgentWithStateReport,"},{"line_number":575,"context_line":"              self).__init__(host, conf)"},{"line_number":576,"context_line":"        self.state_rpc \u003d agent_rpc.PluginReportStateAPI(topics.PLUGIN)"},{"line_number":577,"context_line":"        self.agent_state \u003d {"},{"line_number":578,"context_line":"            \u0027agent_type\u0027: constants.AGENT_TYPE_BGP_ROUTING,"},{"line_number":579,"context_line":"            \u0027binary\u0027: \u0027neutron-bgp-dragent\u0027,"}],"source_content_type":"text/x-python","patch_set":43,"id":"5a5ae5dd_d8106a02","line":576,"range":{"start_line":576,"start_character":56,"end_line":576,"end_character":62},"updated":"2016-02-08 20:06:26.000000000","message":"This constant has moved","commit_id":"d7cb30d18cd616c4d03732c05469160338873e79"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"0da3f5bb4232e0852d5f40150edf53108ee84db7","unresolved":false,"context_lines":[{"line_number":573,"context_line":"    def __init__(self, host, conf\u003dNone):"},{"line_number":574,"context_line":"        super(BgpDrAgentWithStateReport,"},{"line_number":575,"context_line":"              self).__init__(host, conf)"},{"line_number":576,"context_line":"        self.state_rpc \u003d agent_rpc.PluginReportStateAPI(topics.PLUGIN)"},{"line_number":577,"context_line":"        self.agent_state \u003d {"},{"line_number":578,"context_line":"            \u0027agent_type\u0027: constants.AGENT_TYPE_BGP_ROUTING,"},{"line_number":579,"context_line":"            \u0027binary\u0027: \u0027neutron-bgp-dragent\u0027,"}],"source_content_type":"text/x-python","patch_set":43,"id":"3a57f1b5_b522a3a1","line":576,"range":{"start_line":576,"start_character":56,"end_line":576,"end_character":62},"in_reply_to":"3a57f1b5_f64cec71","updated":"2016-02-14 07:59:33.000000000","message":"This constant is not being moved. Only BGP specific constants are moved out.","commit_id":"d7cb30d18cd616c4d03732c05469160338873e79"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"83f528f52fc341f954c5ff24060f98dbbee13dfb","unresolved":false,"context_lines":[{"line_number":573,"context_line":"    def __init__(self, host, conf\u003dNone):"},{"line_number":574,"context_line":"        super(BgpDrAgentWithStateReport,"},{"line_number":575,"context_line":"              self).__init__(host, conf)"},{"line_number":576,"context_line":"        self.state_rpc \u003d agent_rpc.PluginReportStateAPI(topics.PLUGIN)"},{"line_number":577,"context_line":"        self.agent_state \u003d {"},{"line_number":578,"context_line":"            \u0027agent_type\u0027: constants.AGENT_TYPE_BGP_ROUTING,"},{"line_number":579,"context_line":"            \u0027binary\u0027: \u0027neutron-bgp-dragent\u0027,"}],"source_content_type":"text/x-python","patch_set":43,"id":"3a57f1b5_f64cec71","line":576,"range":{"start_line":576,"start_character":56,"end_line":576,"end_character":62},"in_reply_to":"5a5ae5dd_029af2c5","updated":"2016-02-11 08:51:16.000000000","message":"Done","commit_id":"d7cb30d18cd616c4d03732c05469160338873e79"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"ec6185fda3eccf132ed43435cb82b2d88ac911be","unresolved":false,"context_lines":[{"line_number":573,"context_line":"    def __init__(self, host, conf\u003dNone):"},{"line_number":574,"context_line":"        super(BgpDrAgentWithStateReport,"},{"line_number":575,"context_line":"              self).__init__(host, conf)"},{"line_number":576,"context_line":"        self.state_rpc \u003d agent_rpc.PluginReportStateAPI(topics.PLUGIN)"},{"line_number":577,"context_line":"        self.agent_state \u003d {"},{"line_number":578,"context_line":"            \u0027agent_type\u0027: constants.AGENT_TYPE_BGP_ROUTING,"},{"line_number":579,"context_line":"            \u0027binary\u0027: \u0027neutron-bgp-dragent\u0027,"}],"source_content_type":"text/x-python","patch_set":43,"id":"5a5ae5dd_029af2c5","line":576,"range":{"start_line":576,"start_character":56,"end_line":576,"end_character":62},"in_reply_to":"5a5ae5dd_d8106a02","updated":"2016-02-09 06:33:58.000000000","message":"Will rebase","commit_id":"d7cb30d18cd616c4d03732c05469160338873e79"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"d97edc5dba6e0b4783016f005b12e76fdd578059","unresolved":false,"context_lines":[{"line_number":579,"context_line":"            \u0027binary\u0027: \u0027neutron-bgp-dragent\u0027,"},{"line_number":580,"context_line":"            \u0027configurations\u0027: {},"},{"line_number":581,"context_line":"            \u0027host\u0027: host,"},{"line_number":582,"context_line":"            \u0027topic\u0027: topics.BGP_DRAGENT,"},{"line_number":583,"context_line":"            \u0027start_flag\u0027: True}"},{"line_number":584,"context_line":"        report_interval \u003d cfg.CONF.AGENT.report_interval"},{"line_number":585,"context_line":"        self.use_call \u003d True"}],"source_content_type":"text/x-python","patch_set":43,"id":"5a5ae5dd_3802deb4","line":582,"range":{"start_line":582,"start_character":28,"end_line":582,"end_character":39},"updated":"2016-02-08 20:06:26.000000000","message":"This constant has not been moved, but probably should.","commit_id":"d7cb30d18cd616c4d03732c05469160338873e79"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"ec6185fda3eccf132ed43435cb82b2d88ac911be","unresolved":false,"context_lines":[{"line_number":579,"context_line":"            \u0027binary\u0027: \u0027neutron-bgp-dragent\u0027,"},{"line_number":580,"context_line":"            \u0027configurations\u0027: {},"},{"line_number":581,"context_line":"            \u0027host\u0027: host,"},{"line_number":582,"context_line":"            \u0027topic\u0027: topics.BGP_DRAGENT,"},{"line_number":583,"context_line":"            \u0027start_flag\u0027: True}"},{"line_number":584,"context_line":"        report_interval \u003d cfg.CONF.AGENT.report_interval"},{"line_number":585,"context_line":"        self.use_call \u003d True"}],"source_content_type":"text/x-python","patch_set":43,"id":"5a5ae5dd_625e4614","line":582,"range":{"start_line":582,"start_character":28,"end_line":582,"end_character":39},"in_reply_to":"5a5ae5dd_3802deb4","updated":"2016-02-09 06:33:58.000000000","message":"Will do","commit_id":"d7cb30d18cd616c4d03732c05469160338873e79"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"83f528f52fc341f954c5ff24060f98dbbee13dfb","unresolved":false,"context_lines":[{"line_number":579,"context_line":"            \u0027binary\u0027: \u0027neutron-bgp-dragent\u0027,"},{"line_number":580,"context_line":"            \u0027configurations\u0027: {},"},{"line_number":581,"context_line":"            \u0027host\u0027: host,"},{"line_number":582,"context_line":"            \u0027topic\u0027: topics.BGP_DRAGENT,"},{"line_number":583,"context_line":"            \u0027start_flag\u0027: True}"},{"line_number":584,"context_line":"        report_interval \u003d cfg.CONF.AGENT.report_interval"},{"line_number":585,"context_line":"        self.use_call \u003d True"}],"source_content_type":"text/x-python","patch_set":43,"id":"3a57f1b5_d678d091","line":582,"range":{"start_line":582,"start_character":28,"end_line":582,"end_character":39},"in_reply_to":"5a5ae5dd_625e4614","updated":"2016-02-11 08:51:16.000000000","message":"Done","commit_id":"d7cb30d18cd616c4d03732c05469160338873e79"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"d41c47118585ad51f77bec57d0a084458a8d0f09","unresolved":false,"context_lines":[{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    @utils.synchronized(\u0027bgp-dragent\u0027)"},{"line_number":72,"context_line":"    def sync_state(self, context, bgp_speakers\u003dNone):"},{"line_number":73,"context_line":"        only_bs \u003d set([] if (not bgp_speakers or None in bgp_speakers)"},{"line_number":74,"context_line":"                      else bgp_speakers)"},{"line_number":75,"context_line":"        try:"},{"line_number":76,"context_line":"            hosted_bgp_speakers \u003d self.plugin_rpc.get_bgp_speakers(context)"}],"source_content_type":"text/x-python","patch_set":48,"id":"3a57f1b5_e9606d03","line":73,"range":{"start_line":73,"start_character":49,"end_line":73,"end_character":69},"updated":"2016-02-11 21:38:26.000000000","message":"Huh?  This seems strange to me.  I see what you\u0027re doing now, triggering a full resync by inserting None in to but it seems less than obvious to me.  I always prefer code that is obvious.","commit_id":"2d369ef727ff8de656a2fc2523cc6dfe8a1002da"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"d41c47118585ad51f77bec57d0a084458a8d0f09","unresolved":false,"context_lines":[{"line_number":83,"context_line":""},{"line_number":84,"context_line":"            for hosted_bgp_speaker in hosted_bgp_speakers:"},{"line_number":85,"context_line":"                bs_id \u003d hosted_bgp_speaker[\u0027id\u0027]"},{"line_number":86,"context_line":"                if (not only_bs or  # specifically resync all"},{"line_number":87,"context_line":"                    bs_id in only_bs):  # specific bgp_speaker to sync"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"                    if not self.cache.is_bgp_speaker_added(bs_id):"},{"line_number":90,"context_line":"                        self.safe_configure_dragent_for_bgp_speaker("}],"source_content_type":"text/x-python","patch_set":48,"id":"3a57f1b5_29cf652a","line":87,"range":{"start_line":86,"start_character":16,"end_line":87,"end_character":70},"updated":"2016-02-11 21:38:26.000000000","message":"Just a suggestion.  Use variables to self-document:\n\n  resync_all \u003d not only_bs\n  sync_specific_speaker \u003d bs_id in only_bs\n  if resync_all or sync_specific_speaker:\n\nIt is always nice when the code reads this easily.","commit_id":"2d369ef727ff8de656a2fc2523cc6dfe8a1002da"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"ef63cfdc8fe0beda0c6406d631beec051d88664b","unresolved":false,"context_lines":[{"line_number":83,"context_line":""},{"line_number":84,"context_line":"            for hosted_bgp_speaker in hosted_bgp_speakers:"},{"line_number":85,"context_line":"                bs_id \u003d hosted_bgp_speaker[\u0027id\u0027]"},{"line_number":86,"context_line":"                if (not only_bs or  # specifically resync all"},{"line_number":87,"context_line":"                    bs_id in only_bs):  # specific bgp_speaker to sync"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"                    if not self.cache.is_bgp_speaker_added(bs_id):"},{"line_number":90,"context_line":"                        self.safe_configure_dragent_for_bgp_speaker("}],"source_content_type":"text/x-python","patch_set":48,"id":"3a57f1b5_7e6ad5b4","line":87,"range":{"start_line":86,"start_character":16,"end_line":87,"end_character":70},"in_reply_to":"3a57f1b5_29cf652a","updated":"2016-02-12 09:05:54.000000000","message":"Will correct.","commit_id":"2d369ef727ff8de656a2fc2523cc6dfe8a1002da"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"866607b3c45b4f70fda77aff6ee07f92e9159370","unresolved":false,"context_lines":[{"line_number":83,"context_line":""},{"line_number":84,"context_line":"            for hosted_bgp_speaker in hosted_bgp_speakers:"},{"line_number":85,"context_line":"                bs_id \u003d hosted_bgp_speaker[\u0027id\u0027]"},{"line_number":86,"context_line":"                if (not only_bs or  # specifically resync all"},{"line_number":87,"context_line":"                    bs_id in only_bs):  # specific bgp_speaker to sync"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"                    if not self.cache.is_bgp_speaker_added(bs_id):"},{"line_number":90,"context_line":"                        self.safe_configure_dragent_for_bgp_speaker("}],"source_content_type":"text/x-python","patch_set":48,"id":"3a57f1b5_4774ec34","line":87,"range":{"start_line":86,"start_character":16,"end_line":87,"end_character":70},"in_reply_to":"3a57f1b5_7e6ad5b4","updated":"2016-02-12 11:29:17.000000000","message":"Done","commit_id":"2d369ef727ff8de656a2fc2523cc6dfe8a1002da"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"d41c47118585ad51f77bec57d0a084458a8d0f09","unresolved":false,"context_lines":[{"line_number":92,"context_line":"                        continue"},{"line_number":93,"context_line":"                    self.sync_bgp_speaker(hosted_bgp_speaker)"},{"line_number":94,"context_line":"                    resync_reason \u003d \"Periodic route cache refresh\""},{"line_number":95,"context_line":"                    self.schedule_resync(reason\u003dresync_reason,"},{"line_number":96,"context_line":"                                         speaker_id\u003dbs_id)"},{"line_number":97,"context_line":"        except Exception as e:"},{"line_number":98,"context_line":"            self.schedule_resync(reason\u003de)"},{"line_number":99,"context_line":"            LOG.error(_LE(\u0027Unable to sync BGP speaker state.\u0027))"}],"source_content_type":"text/x-python","patch_set":48,"id":"3a57f1b5_9e800ac2","line":96,"range":{"start_line":95,"start_character":41,"end_line":96,"end_character":57},"updated":"2016-02-11 21:38:26.000000000","message":"nit:  this is really nit-picky but I expected these arguments to be in the opposite order because that\u0027s how they\u0027re mapped in needs_resync_reasons.","commit_id":"2d369ef727ff8de656a2fc2523cc6dfe8a1002da"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"ef63cfdc8fe0beda0c6406d631beec051d88664b","unresolved":false,"context_lines":[{"line_number":92,"context_line":"                        continue"},{"line_number":93,"context_line":"                    self.sync_bgp_speaker(hosted_bgp_speaker)"},{"line_number":94,"context_line":"                    resync_reason \u003d \"Periodic route cache refresh\""},{"line_number":95,"context_line":"                    self.schedule_resync(reason\u003dresync_reason,"},{"line_number":96,"context_line":"                                         speaker_id\u003dbs_id)"},{"line_number":97,"context_line":"        except Exception as e:"},{"line_number":98,"context_line":"            self.schedule_resync(reason\u003de)"},{"line_number":99,"context_line":"            LOG.error(_LE(\u0027Unable to sync BGP speaker state.\u0027))"}],"source_content_type":"text/x-python","patch_set":48,"id":"3a57f1b5_fe9c85c1","line":96,"range":{"start_line":95,"start_character":41,"end_line":96,"end_character":57},"in_reply_to":"3a57f1b5_9e800ac2","updated":"2016-02-12 09:05:54.000000000","message":"Will correct.","commit_id":"2d369ef727ff8de656a2fc2523cc6dfe8a1002da"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"866607b3c45b4f70fda77aff6ee07f92e9159370","unresolved":false,"context_lines":[{"line_number":92,"context_line":"                        continue"},{"line_number":93,"context_line":"                    self.sync_bgp_speaker(hosted_bgp_speaker)"},{"line_number":94,"context_line":"                    resync_reason \u003d \"Periodic route cache refresh\""},{"line_number":95,"context_line":"                    self.schedule_resync(reason\u003dresync_reason,"},{"line_number":96,"context_line":"                                         speaker_id\u003dbs_id)"},{"line_number":97,"context_line":"        except Exception as e:"},{"line_number":98,"context_line":"            self.schedule_resync(reason\u003de)"},{"line_number":99,"context_line":"            LOG.error(_LE(\u0027Unable to sync BGP speaker state.\u0027))"}],"source_content_type":"text/x-python","patch_set":48,"id":"3a57f1b5_8756645a","line":96,"range":{"start_line":95,"start_character":41,"end_line":96,"end_character":57},"in_reply_to":"3a57f1b5_fe9c85c1","updated":"2016-02-12 11:29:17.000000000","message":"Done","commit_id":"2d369ef727ff8de656a2fc2523cc6dfe8a1002da"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"d41c47118585ad51f77bec57d0a084458a8d0f09","unresolved":false,"context_lines":[{"line_number":95,"context_line":"                    self.schedule_resync(reason\u003dresync_reason,"},{"line_number":96,"context_line":"                                         speaker_id\u003dbs_id)"},{"line_number":97,"context_line":"        except Exception as e:"},{"line_number":98,"context_line":"            self.schedule_resync(reason\u003de)"},{"line_number":99,"context_line":"            LOG.error(_LE(\u0027Unable to sync BGP speaker state.\u0027))"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    def sync_bgp_speaker(self, bgp_speaker):"}],"source_content_type":"text/x-python","patch_set":48,"id":"3a57f1b5_3ee556db","line":98,"range":{"start_line":98,"start_character":17,"end_line":98,"end_character":32},"updated":"2016-02-11 21:38:26.000000000","message":"If it were me, I\u0027d create a schedule_full_resync method and tease these things apart a little.  This relates to my comment on L73.\n\nTo me, this call doesn\u0027t say \"schedule a full resync\"","commit_id":"2d369ef727ff8de656a2fc2523cc6dfe8a1002da"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"866607b3c45b4f70fda77aff6ee07f92e9159370","unresolved":false,"context_lines":[{"line_number":95,"context_line":"                    self.schedule_resync(reason\u003dresync_reason,"},{"line_number":96,"context_line":"                                         speaker_id\u003dbs_id)"},{"line_number":97,"context_line":"        except Exception as e:"},{"line_number":98,"context_line":"            self.schedule_resync(reason\u003de)"},{"line_number":99,"context_line":"            LOG.error(_LE(\u0027Unable to sync BGP speaker state.\u0027))"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    def sync_bgp_speaker(self, bgp_speaker):"}],"source_content_type":"text/x-python","patch_set":48,"id":"3a57f1b5_f246f479","line":98,"range":{"start_line":98,"start_character":17,"end_line":98,"end_character":32},"in_reply_to":"3a57f1b5_3ee556db","updated":"2016-02-12 11:29:17.000000000","message":"Done","commit_id":"2d369ef727ff8de656a2fc2523cc6dfe8a1002da"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"d41c47118585ad51f77bec57d0a084458a8d0f09","unresolved":false,"context_lines":[{"line_number":132,"context_line":"        if self.needs_resync_reasons:"},{"line_number":133,"context_line":"            reasons \u003d self.needs_resync_reasons"},{"line_number":134,"context_line":"            self.needs_resync_reasons \u003d collections.defaultdict(list)"},{"line_number":135,"context_line":"            for bs, r in reasons.items():"},{"line_number":136,"context_line":"                if not bs:"},{"line_number":137,"context_line":"                    bs \u003d \"*\""},{"line_number":138,"context_line":"                LOG.debug(\"resync (%(bgp_speaker)s): %(reason)s\","}],"source_content_type":"text/x-python","patch_set":48,"id":"3a57f1b5_db01b407","line":135,"range":{"start_line":135,"start_character":16,"end_line":135,"end_character":18},"updated":"2016-02-11 21:38:26.000000000","message":"Is this supposed to stand for bgp_speaker?  Why not expand it out a little to make it more obvious?\n\n  for bpg_speaker, reason_list in reasons.items():\n\nNo sense in being cryptic.","commit_id":"2d369ef727ff8de656a2fc2523cc6dfe8a1002da"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"866607b3c45b4f70fda77aff6ee07f92e9159370","unresolved":false,"context_lines":[{"line_number":132,"context_line":"        if self.needs_resync_reasons:"},{"line_number":133,"context_line":"            reasons \u003d self.needs_resync_reasons"},{"line_number":134,"context_line":"            self.needs_resync_reasons \u003d collections.defaultdict(list)"},{"line_number":135,"context_line":"            for bs, r in reasons.items():"},{"line_number":136,"context_line":"                if not bs:"},{"line_number":137,"context_line":"                    bs \u003d \"*\""},{"line_number":138,"context_line":"                LOG.debug(\"resync (%(bgp_speaker)s): %(reason)s\","}],"source_content_type":"text/x-python","patch_set":48,"id":"3a57f1b5_5204a816","line":135,"range":{"start_line":135,"start_character":16,"end_line":135,"end_character":18},"in_reply_to":"3a57f1b5_9eaeb1e4","updated":"2016-02-12 11:29:17.000000000","message":"Done","commit_id":"2d369ef727ff8de656a2fc2523cc6dfe8a1002da"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"ef63cfdc8fe0beda0c6406d631beec051d88664b","unresolved":false,"context_lines":[{"line_number":132,"context_line":"        if self.needs_resync_reasons:"},{"line_number":133,"context_line":"            reasons \u003d self.needs_resync_reasons"},{"line_number":134,"context_line":"            self.needs_resync_reasons \u003d collections.defaultdict(list)"},{"line_number":135,"context_line":"            for bs, r in reasons.items():"},{"line_number":136,"context_line":"                if not bs:"},{"line_number":137,"context_line":"                    bs \u003d \"*\""},{"line_number":138,"context_line":"                LOG.debug(\"resync (%(bgp_speaker)s): %(reason)s\","}],"source_content_type":"text/x-python","patch_set":48,"id":"3a57f1b5_9eaeb1e4","line":135,"range":{"start_line":135,"start_character":16,"end_line":135,"end_character":18},"in_reply_to":"3a57f1b5_db01b407","updated":"2016-02-12 09:05:54.000000000","message":"Will correct.","commit_id":"2d369ef727ff8de656a2fc2523cc6dfe8a1002da"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"d41c47118585ad51f77bec57d0a084458a8d0f09","unresolved":false,"context_lines":[{"line_number":137,"context_line":"                    bs \u003d \"*\""},{"line_number":138,"context_line":"                LOG.debug(\"resync (%(bgp_speaker)s): %(reason)s\","},{"line_number":139,"context_line":"                          {\"reason\": r, \"bgp_speaker\": bs})"},{"line_number":140,"context_line":"            self.sync_state(context, reasons.keys())"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    # NOTE: spacing is set 1 sec. The actual interval is controlled"},{"line_number":143,"context_line":"    # by neutron/service.py which defaults to CONF.periodic_interval"}],"source_content_type":"text/x-python","patch_set":48,"id":"3a57f1b5_9e2d6a97","line":140,"range":{"start_line":140,"start_character":37,"end_line":140,"end_character":51},"updated":"2016-02-11 21:38:26.000000000","message":"nit:  Passing as a keyword arg would help readability:\n\n  bpg_speakers\u003dreasons.keys()","commit_id":"2d369ef727ff8de656a2fc2523cc6dfe8a1002da"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"ef63cfdc8fe0beda0c6406d631beec051d88664b","unresolved":false,"context_lines":[{"line_number":137,"context_line":"                    bs \u003d \"*\""},{"line_number":138,"context_line":"                LOG.debug(\"resync (%(bgp_speaker)s): %(reason)s\","},{"line_number":139,"context_line":"                          {\"reason\": r, \"bgp_speaker\": bs})"},{"line_number":140,"context_line":"            self.sync_state(context, reasons.keys())"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    # NOTE: spacing is set 1 sec. The actual interval is controlled"},{"line_number":143,"context_line":"    # by neutron/service.py which defaults to CONF.periodic_interval"}],"source_content_type":"text/x-python","patch_set":48,"id":"3a57f1b5_fe832554","line":140,"range":{"start_line":140,"start_character":37,"end_line":140,"end_character":51},"in_reply_to":"3a57f1b5_9e2d6a97","updated":"2016-02-12 09:05:54.000000000","message":"Will correct.","commit_id":"2d369ef727ff8de656a2fc2523cc6dfe8a1002da"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"866607b3c45b4f70fda77aff6ee07f92e9159370","unresolved":false,"context_lines":[{"line_number":137,"context_line":"                    bs \u003d \"*\""},{"line_number":138,"context_line":"                LOG.debug(\"resync (%(bgp_speaker)s): %(reason)s\","},{"line_number":139,"context_line":"                          {\"reason\": r, \"bgp_speaker\": bs})"},{"line_number":140,"context_line":"            self.sync_state(context, reasons.keys())"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    # NOTE: spacing is set 1 sec. The actual interval is controlled"},{"line_number":143,"context_line":"    # by neutron/service.py which defaults to CONF.periodic_interval"}],"source_content_type":"text/x-python","patch_set":48,"id":"3a57f1b5_0d9db5bb","line":140,"range":{"start_line":140,"start_character":37,"end_line":140,"end_character":51},"in_reply_to":"3a57f1b5_fe832554","updated":"2016-02-12 11:29:17.000000000","message":"Done","commit_id":"2d369ef727ff8de656a2fc2523cc6dfe8a1002da"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"d41c47118585ad51f77bec57d0a084458a8d0f09","unresolved":false,"context_lines":[{"line_number":146,"context_line":"        LOG.debug(\"Started periodic resync.\")"},{"line_number":147,"context_line":"        self._periodic_resync_helper(context)"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    @utils.synchronized(\u0027bgp-dr-agent\u0027)"},{"line_number":150,"context_line":"    def bgp_speaker_create_end(self, context, payload):"},{"line_number":151,"context_line":"        \"\"\"Handle bgp_speaker_create_end notification event.\"\"\""},{"line_number":152,"context_line":"        bgp_speaker_id \u003d payload[\u0027bgp_speaker\u0027][\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":48,"id":"3a57f1b5_5e15b246","line":149,"range":{"start_line":149,"start_character":4,"end_line":149,"end_character":39},"updated":"2016-02-11 21:38:26.000000000","message":"This seems like the wrong place to synchronize to me.  I\u0027d consider synchronizing at the lower level calls.  ditto for the rest.","commit_id":"2d369ef727ff8de656a2fc2523cc6dfe8a1002da"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"ef63cfdc8fe0beda0c6406d631beec051d88664b","unresolved":false,"context_lines":[{"line_number":146,"context_line":"        LOG.debug(\"Started periodic resync.\")"},{"line_number":147,"context_line":"        self._periodic_resync_helper(context)"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    @utils.synchronized(\u0027bgp-dr-agent\u0027)"},{"line_number":150,"context_line":"    def bgp_speaker_create_end(self, context, payload):"},{"line_number":151,"context_line":"        \"\"\"Handle bgp_speaker_create_end notification event.\"\"\""},{"line_number":152,"context_line":"        bgp_speaker_id \u003d payload[\u0027bgp_speaker\u0027][\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":48,"id":"3a57f1b5_9e955188","line":149,"range":{"start_line":149,"start_character":4,"end_line":149,"end_character":39},"in_reply_to":"3a57f1b5_5e15b246","updated":"2016-02-12 09:05:54.000000000","message":"Will correct.","commit_id":"2d369ef727ff8de656a2fc2523cc6dfe8a1002da"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"866607b3c45b4f70fda77aff6ee07f92e9159370","unresolved":false,"context_lines":[{"line_number":146,"context_line":"        LOG.debug(\"Started periodic resync.\")"},{"line_number":147,"context_line":"        self._periodic_resync_helper(context)"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    @utils.synchronized(\u0027bgp-dr-agent\u0027)"},{"line_number":150,"context_line":"    def bgp_speaker_create_end(self, context, payload):"},{"line_number":151,"context_line":"        \"\"\"Handle bgp_speaker_create_end notification event.\"\"\""},{"line_number":152,"context_line":"        bgp_speaker_id \u003d payload[\u0027bgp_speaker\u0027][\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":48,"id":"3a57f1b5_cdfb1d7a","line":149,"range":{"start_line":149,"start_character":4,"end_line":149,"end_character":39},"in_reply_to":"3a57f1b5_9e955188","updated":"2016-02-12 11:29:17.000000000","message":"I am not sure what harm it can do now? To me it\u0027s always better to lock at the beginning rather waiting for the critical section. Moreover, I can find similar approach is being taken for dhcp as well.","commit_id":"2d369ef727ff8de656a2fc2523cc6dfe8a1002da"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"d41c47118585ad51f77bec57d0a084458a8d0f09","unresolved":false,"context_lines":[{"line_number":313,"context_line":"        # during smooth."},{"line_number":314,"context_line":"        self.cache.put_bgp_speaker(bgp_speaker)"},{"line_number":315,"context_line":""},{"line_number":316,"context_line":"        # Send this information to the registered driver."},{"line_number":317,"context_line":"        LOG.debug(\u0027Calling driver for adding BGP speaker %(speaker_id)s,\u0027"},{"line_number":318,"context_line":"                  \u0027 speaking for local_as %(local_as)s\u0027,"},{"line_number":319,"context_line":"                  {\u0027speaker_id\u0027: bgp_speaker[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":48,"id":"3a57f1b5_f4ccbd6b","line":316,"range":{"start_line":316,"start_character":8,"end_line":316,"end_character":57},"updated":"2016-02-11 21:38:26.000000000","message":"This comment seems a little out of place.  I also notice this on L334, L357, L377, and L402.","commit_id":"2d369ef727ff8de656a2fc2523cc6dfe8a1002da"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"866607b3c45b4f70fda77aff6ee07f92e9159370","unresolved":false,"context_lines":[{"line_number":313,"context_line":"        # during smooth."},{"line_number":314,"context_line":"        self.cache.put_bgp_speaker(bgp_speaker)"},{"line_number":315,"context_line":""},{"line_number":316,"context_line":"        # Send this information to the registered driver."},{"line_number":317,"context_line":"        LOG.debug(\u0027Calling driver for adding BGP speaker %(speaker_id)s,\u0027"},{"line_number":318,"context_line":"                  \u0027 speaking for local_as %(local_as)s\u0027,"},{"line_number":319,"context_line":"                  {\u0027speaker_id\u0027: bgp_speaker[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":48,"id":"3a57f1b5_ad958187","line":316,"range":{"start_line":316,"start_character":8,"end_line":316,"end_character":57},"in_reply_to":"3a57f1b5_1e3e418c","updated":"2016-02-12 11:29:17.000000000","message":"Done","commit_id":"2d369ef727ff8de656a2fc2523cc6dfe8a1002da"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"ef63cfdc8fe0beda0c6406d631beec051d88664b","unresolved":false,"context_lines":[{"line_number":313,"context_line":"        # during smooth."},{"line_number":314,"context_line":"        self.cache.put_bgp_speaker(bgp_speaker)"},{"line_number":315,"context_line":""},{"line_number":316,"context_line":"        # Send this information to the registered driver."},{"line_number":317,"context_line":"        LOG.debug(\u0027Calling driver for adding BGP speaker %(speaker_id)s,\u0027"},{"line_number":318,"context_line":"                  \u0027 speaking for local_as %(local_as)s\u0027,"},{"line_number":319,"context_line":"                  {\u0027speaker_id\u0027: bgp_speaker[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":48,"id":"3a57f1b5_1e3e418c","line":316,"range":{"start_line":316,"start_character":8,"end_line":316,"end_character":57},"in_reply_to":"3a57f1b5_f4ccbd6b","updated":"2016-02-12 09:05:54.000000000","message":"Will remove. Anyways subsequent patch will fill up this gap anyways ;)","commit_id":"2d369ef727ff8de656a2fc2523cc6dfe8a1002da"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"d41c47118585ad51f77bec57d0a084458a8d0f09","unresolved":false,"context_lines":[{"line_number":369,"context_line":"                                 speaker_id\u003dbgp_speaker_id)"},{"line_number":370,"context_line":"            return"},{"line_number":371,"context_line":""},{"line_number":372,"context_line":"        if self.cache.is_bgp_peer_added(bgp_speaker_id, bgp_peer_ip):"},{"line_number":373,"context_line":"            self.cache.remove_bgp_peer_by_ip(bgp_speaker_id, bgp_peer_ip)"},{"line_number":374,"context_line":""},{"line_number":375,"context_line":"            bgp_speaker_as \u003d self.cache.get_bgp_speaker_local_as("}],"source_content_type":"text/x-python","patch_set":48,"id":"3a57f1b5_910c7bee","line":372,"updated":"2016-02-11 21:38:26.000000000","message":"nit:  This is getting pretty nit-picky too.  But, consider inverting the sense of this if statement so that you call resync and return just like on L368.  IOW, change this method from this pattern:\n\n  if problem:\n     resync\n     return\n\n  if not other_problem:\n     remove_bgp_peer\n  else:\n    resync\n\nTo this pattern which is more self-consistent and requires less indentation for the non-exceptional case:\n\n  if problem:\n     resync\n     return\n\n  if other_problem:\n     resync\n     return\n\n  remove_bgp_peer","commit_id":"2d369ef727ff8de656a2fc2523cc6dfe8a1002da"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"866607b3c45b4f70fda77aff6ee07f92e9159370","unresolved":false,"context_lines":[{"line_number":369,"context_line":"                                 speaker_id\u003dbgp_speaker_id)"},{"line_number":370,"context_line":"            return"},{"line_number":371,"context_line":""},{"line_number":372,"context_line":"        if self.cache.is_bgp_peer_added(bgp_speaker_id, bgp_peer_ip):"},{"line_number":373,"context_line":"            self.cache.remove_bgp_peer_by_ip(bgp_speaker_id, bgp_peer_ip)"},{"line_number":374,"context_line":""},{"line_number":375,"context_line":"            bgp_speaker_as \u003d self.cache.get_bgp_speaker_local_as("}],"source_content_type":"text/x-python","patch_set":48,"id":"3a57f1b5_ff31dc5a","line":372,"in_reply_to":"3a57f1b5_910c7bee","updated":"2016-02-12 11:29:17.000000000","message":"Done","commit_id":"2d369ef727ff8de656a2fc2523cc6dfe8a1002da"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"d41c47118585ad51f77bec57d0a084458a8d0f09","unresolved":false,"context_lines":[{"line_number":427,"context_line":"        self.needs_resync_reasons[speaker_id].append(reason)"},{"line_number":428,"context_line":""},{"line_number":429,"context_line":"    def is_resync_scheduled(self, bgp_speaker_id):"},{"line_number":430,"context_line":"        for speaker_id, reason in self.needs_resync_reasons.items():"},{"line_number":431,"context_line":"            if speaker_id \u003d\u003d bgp_speaker_id:"},{"line_number":432,"context_line":"                # Re-sync scheduled for the queried BGP speaker. No point"},{"line_number":433,"context_line":"                # continuing further. Let\u0027s stop processing and wait for"}],"source_content_type":"text/x-python","patch_set":48,"id":"3a57f1b5_4a816cc2","line":430,"range":{"start_line":430,"start_character":8,"end_line":430,"end_character":68},"updated":"2016-02-11 21:38:26.000000000","message":"nit:  I wouldn\u0027t expect this to get very big so performance wouldn\u0027t be a problem.  But, in general, prefer the following over iterating.  Not only does it read in a more straight-forward way, it has a better performance characteristic and is a better general pattern.\n\n  if bgp_speaker_id in self.needs_resync_reasons:\n      reason \u003d self.needs_resync_reasons[bgp_speaker_id]\n\nAlso, if you get rid of the debug stuff, it boils down to this:\n\n  return bgp_speaker_id in self.needs_resync_reasons","commit_id":"2d369ef727ff8de656a2fc2523cc6dfe8a1002da"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"ef63cfdc8fe0beda0c6406d631beec051d88664b","unresolved":false,"context_lines":[{"line_number":427,"context_line":"        self.needs_resync_reasons[speaker_id].append(reason)"},{"line_number":428,"context_line":""},{"line_number":429,"context_line":"    def is_resync_scheduled(self, bgp_speaker_id):"},{"line_number":430,"context_line":"        for speaker_id, reason in self.needs_resync_reasons.items():"},{"line_number":431,"context_line":"            if speaker_id \u003d\u003d bgp_speaker_id:"},{"line_number":432,"context_line":"                # Re-sync scheduled for the queried BGP speaker. No point"},{"line_number":433,"context_line":"                # continuing further. Let\u0027s stop processing and wait for"}],"source_content_type":"text/x-python","patch_set":48,"id":"3a57f1b5_de118905","line":430,"range":{"start_line":430,"start_character":8,"end_line":430,"end_character":68},"in_reply_to":"3a57f1b5_4a816cc2","updated":"2016-02-12 09:05:54.000000000","message":"Will correct.","commit_id":"2d369ef727ff8de656a2fc2523cc6dfe8a1002da"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"866607b3c45b4f70fda77aff6ee07f92e9159370","unresolved":false,"context_lines":[{"line_number":427,"context_line":"        self.needs_resync_reasons[speaker_id].append(reason)"},{"line_number":428,"context_line":""},{"line_number":429,"context_line":"    def is_resync_scheduled(self, bgp_speaker_id):"},{"line_number":430,"context_line":"        for speaker_id, reason in self.needs_resync_reasons.items():"},{"line_number":431,"context_line":"            if speaker_id \u003d\u003d bgp_speaker_id:"},{"line_number":432,"context_line":"                # Re-sync scheduled for the queried BGP speaker. No point"},{"line_number":433,"context_line":"                # continuing further. Let\u0027s stop processing and wait for"}],"source_content_type":"text/x-python","patch_set":48,"id":"3a57f1b5_5f27d0c9","line":430,"range":{"start_line":430,"start_character":8,"end_line":430,"end_character":68},"in_reply_to":"3a57f1b5_de118905","updated":"2016-02-12 11:29:17.000000000","message":"Done","commit_id":"2d369ef727ff8de656a2fc2523cc6dfe8a1002da"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"d41c47118585ad51f77bec57d0a084458a8d0f09","unresolved":false,"context_lines":[{"line_number":507,"context_line":"            return bgp_speaker[\u0027local_as\u0027]"},{"line_number":508,"context_line":""},{"line_number":509,"context_line":"    def is_bgp_speaker_added(self, bgp_speaker_id):"},{"line_number":510,"context_line":"        if self.get_bgp_speaker_by_id(bgp_speaker_id):"},{"line_number":511,"context_line":"            return True"},{"line_number":512,"context_line":"        return False"},{"line_number":513,"context_line":""}],"source_content_type":"text/x-python","patch_set":48,"id":"3a57f1b5_2a8990c9","line":510,"range":{"start_line":510,"start_character":11,"end_line":510,"end_character":53},"updated":"2016-02-11 21:38:26.000000000","message":"femto nit:\n\n  return self.get_bgp_speaker_by_id(bgp_speaker_id)\n\nWhy make it more verbose than it needs to be?  Gratuitous verbosity is distracting and lessens readability, IMO.","commit_id":"2d369ef727ff8de656a2fc2523cc6dfe8a1002da"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"ef63cfdc8fe0beda0c6406d631beec051d88664b","unresolved":false,"context_lines":[{"line_number":507,"context_line":"            return bgp_speaker[\u0027local_as\u0027]"},{"line_number":508,"context_line":""},{"line_number":509,"context_line":"    def is_bgp_speaker_added(self, bgp_speaker_id):"},{"line_number":510,"context_line":"        if self.get_bgp_speaker_by_id(bgp_speaker_id):"},{"line_number":511,"context_line":"            return True"},{"line_number":512,"context_line":"        return False"},{"line_number":513,"context_line":""}],"source_content_type":"text/x-python","patch_set":48,"id":"3a57f1b5_5efef9ae","line":510,"range":{"start_line":510,"start_character":11,"end_line":510,"end_character":53},"in_reply_to":"3a57f1b5_2a8990c9","updated":"2016-02-12 09:05:54.000000000","message":"Will correct.","commit_id":"2d369ef727ff8de656a2fc2523cc6dfe8a1002da"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"866607b3c45b4f70fda77aff6ee07f92e9159370","unresolved":false,"context_lines":[{"line_number":507,"context_line":"            return bgp_speaker[\u0027local_as\u0027]"},{"line_number":508,"context_line":""},{"line_number":509,"context_line":"    def is_bgp_speaker_added(self, bgp_speaker_id):"},{"line_number":510,"context_line":"        if self.get_bgp_speaker_by_id(bgp_speaker_id):"},{"line_number":511,"context_line":"            return True"},{"line_number":512,"context_line":"        return False"},{"line_number":513,"context_line":""}],"source_content_type":"text/x-python","patch_set":48,"id":"3a57f1b5_6215533e","line":510,"range":{"start_line":510,"start_character":11,"end_line":510,"end_character":53},"in_reply_to":"3a57f1b5_5efef9ae","updated":"2016-02-12 11:29:17.000000000","message":"Done","commit_id":"2d369ef727ff8de656a2fc2523cc6dfe8a1002da"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"d41c47118585ad51f77bec57d0a084458a8d0f09","unresolved":false,"context_lines":[{"line_number":512,"context_line":"        return False"},{"line_number":513,"context_line":""},{"line_number":514,"context_line":"    def remove_bgp_speaker_by_id(self, bgp_speaker_id):"},{"line_number":515,"context_line":"        del self.cache[bgp_speaker_id]"},{"line_number":516,"context_line":""},{"line_number":517,"context_line":"    def put_bgp_peer(self, bgp_speaker_id, bgp_peer):"},{"line_number":518,"context_line":"        if bgp_peer[\u0027peer_ip\u0027] in self.get_bgp_peer_ips(bgp_speaker_id):"}],"source_content_type":"text/x-python","patch_set":48,"id":"3a57f1b5_4ab40c81","line":515,"range":{"start_line":515,"start_character":12,"end_line":515,"end_character":38},"updated":"2016-02-11 21:38:26.000000000","message":"Should this be safer?\n\n  if bgp_speaker_id in self.cache:\n      del ...\n\nOr, this works too, I think.\n\nself.cache.pop(bgp_speaker_id)","commit_id":"2d369ef727ff8de656a2fc2523cc6dfe8a1002da"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"ef63cfdc8fe0beda0c6406d631beec051d88664b","unresolved":false,"context_lines":[{"line_number":512,"context_line":"        return False"},{"line_number":513,"context_line":""},{"line_number":514,"context_line":"    def remove_bgp_speaker_by_id(self, bgp_speaker_id):"},{"line_number":515,"context_line":"        del self.cache[bgp_speaker_id]"},{"line_number":516,"context_line":""},{"line_number":517,"context_line":"    def put_bgp_peer(self, bgp_speaker_id, bgp_peer):"},{"line_number":518,"context_line":"        if bgp_peer[\u0027peer_ip\u0027] in self.get_bgp_peer_ips(bgp_speaker_id):"}],"source_content_type":"text/x-python","patch_set":48,"id":"3a57f1b5_de28a935","line":515,"range":{"start_line":515,"start_character":12,"end_line":515,"end_character":38},"in_reply_to":"3a57f1b5_4ab40c81","updated":"2016-02-12 09:05:54.000000000","message":"Will correct.","commit_id":"2d369ef727ff8de656a2fc2523cc6dfe8a1002da"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"866607b3c45b4f70fda77aff6ee07f92e9159370","unresolved":false,"context_lines":[{"line_number":512,"context_line":"        return False"},{"line_number":513,"context_line":""},{"line_number":514,"context_line":"    def remove_bgp_speaker_by_id(self, bgp_speaker_id):"},{"line_number":515,"context_line":"        del self.cache[bgp_speaker_id]"},{"line_number":516,"context_line":""},{"line_number":517,"context_line":"    def put_bgp_peer(self, bgp_speaker_id, bgp_peer):"},{"line_number":518,"context_line":"        if bgp_peer[\u0027peer_ip\u0027] in self.get_bgp_peer_ips(bgp_speaker_id):"}],"source_content_type":"text/x-python","patch_set":48,"id":"3a57f1b5_42b93714","line":515,"range":{"start_line":515,"start_character":12,"end_line":515,"end_character":38},"in_reply_to":"3a57f1b5_de28a935","updated":"2016-02-12 11:29:17.000000000","message":"Done","commit_id":"2d369ef727ff8de656a2fc2523cc6dfe8a1002da"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"d41c47118585ad51f77bec57d0a084458a8d0f09","unresolved":false,"context_lines":[{"line_number":521,"context_line":"        self.cache[bgp_speaker_id][\u0027peers\u0027][bgp_peer[\u0027peer_ip\u0027]] \u003d bgp_peer"},{"line_number":522,"context_line":""},{"line_number":523,"context_line":"    def is_bgp_peer_added(self, bgp_speaker_id, bgp_peer_ip):"},{"line_number":524,"context_line":"        if self.get_bgp_peer_by_ip(bgp_speaker_id, bgp_peer_ip):"},{"line_number":525,"context_line":"            return True"},{"line_number":526,"context_line":"        return False"},{"line_number":527,"context_line":""}],"source_content_type":"text/x-python","patch_set":48,"id":"3a57f1b5_6a478877","line":524,"range":{"start_line":524,"start_character":11,"end_line":524,"end_character":64},"updated":"2016-02-11 21:38:26.000000000","message":"ditto (L510)","commit_id":"2d369ef727ff8de656a2fc2523cc6dfe8a1002da"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"866607b3c45b4f70fda77aff6ee07f92e9159370","unresolved":false,"context_lines":[{"line_number":521,"context_line":"        self.cache[bgp_speaker_id][\u0027peers\u0027][bgp_peer[\u0027peer_ip\u0027]] \u003d bgp_peer"},{"line_number":522,"context_line":""},{"line_number":523,"context_line":"    def is_bgp_peer_added(self, bgp_speaker_id, bgp_peer_ip):"},{"line_number":524,"context_line":"        if self.get_bgp_peer_by_ip(bgp_speaker_id, bgp_peer_ip):"},{"line_number":525,"context_line":"            return True"},{"line_number":526,"context_line":"        return False"},{"line_number":527,"context_line":""}],"source_content_type":"text/x-python","patch_set":48,"id":"3a57f1b5_22019baf","line":524,"range":{"start_line":524,"start_character":11,"end_line":524,"end_character":64},"in_reply_to":"3a57f1b5_3e18dd1d","updated":"2016-02-12 11:29:17.000000000","message":"Done","commit_id":"2d369ef727ff8de656a2fc2523cc6dfe8a1002da"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"ef63cfdc8fe0beda0c6406d631beec051d88664b","unresolved":false,"context_lines":[{"line_number":521,"context_line":"        self.cache[bgp_speaker_id][\u0027peers\u0027][bgp_peer[\u0027peer_ip\u0027]] \u003d bgp_peer"},{"line_number":522,"context_line":""},{"line_number":523,"context_line":"    def is_bgp_peer_added(self, bgp_speaker_id, bgp_peer_ip):"},{"line_number":524,"context_line":"        if self.get_bgp_peer_by_ip(bgp_speaker_id, bgp_peer_ip):"},{"line_number":525,"context_line":"            return True"},{"line_number":526,"context_line":"        return False"},{"line_number":527,"context_line":""}],"source_content_type":"text/x-python","patch_set":48,"id":"3a57f1b5_3e18dd1d","line":524,"range":{"start_line":524,"start_character":11,"end_line":524,"end_character":64},"in_reply_to":"3a57f1b5_6a478877","updated":"2016-02-12 09:05:54.000000000","message":"Will correct.","commit_id":"2d369ef727ff8de656a2fc2523cc6dfe8a1002da"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"d41c47118585ad51f77bec57d0a084458a8d0f09","unresolved":false,"context_lines":[{"line_number":526,"context_line":"        return False"},{"line_number":527,"context_line":""},{"line_number":528,"context_line":"    def get_bgp_peer_ips(self, bgp_speaker_id):"},{"line_number":529,"context_line":"        return self.cache[bgp_speaker_id][\u0027peers\u0027].keys()"},{"line_number":530,"context_line":""},{"line_number":531,"context_line":"    def get_bgp_peer_by_ip(self, bgp_speaker_id, bgp_peer_ip):"},{"line_number":532,"context_line":"        return self.cache[bgp_speaker_id][\u0027peers\u0027].get(bgp_peer_ip)"}],"source_content_type":"text/x-python","patch_set":48,"id":"3a57f1b5_2a2510c0","line":529,"range":{"start_line":529,"start_character":15,"end_line":529,"end_character":57},"updated":"2016-02-11 21:38:26.000000000","message":"Seems unsafe.  Are you ensuring that the caller passes a value that exists in the cache?","commit_id":"2d369ef727ff8de656a2fc2523cc6dfe8a1002da"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"ef63cfdc8fe0beda0c6406d631beec051d88664b","unresolved":false,"context_lines":[{"line_number":526,"context_line":"        return False"},{"line_number":527,"context_line":""},{"line_number":528,"context_line":"    def get_bgp_peer_ips(self, bgp_speaker_id):"},{"line_number":529,"context_line":"        return self.cache[bgp_speaker_id][\u0027peers\u0027].keys()"},{"line_number":530,"context_line":""},{"line_number":531,"context_line":"    def get_bgp_peer_by_ip(self, bgp_speaker_id, bgp_peer_ip):"},{"line_number":532,"context_line":"        return self.cache[bgp_speaker_id][\u0027peers\u0027].get(bgp_peer_ip)"}],"source_content_type":"text/x-python","patch_set":48,"id":"3a57f1b5_fed48520","line":529,"range":{"start_line":529,"start_character":15,"end_line":529,"end_character":57},"in_reply_to":"3a57f1b5_2a2510c0","updated":"2016-02-12 09:05:54.000000000","message":"Will correct.","commit_id":"2d369ef727ff8de656a2fc2523cc6dfe8a1002da"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"866607b3c45b4f70fda77aff6ee07f92e9159370","unresolved":false,"context_lines":[{"line_number":526,"context_line":"        return False"},{"line_number":527,"context_line":""},{"line_number":528,"context_line":"    def get_bgp_peer_ips(self, bgp_speaker_id):"},{"line_number":529,"context_line":"        return self.cache[bgp_speaker_id][\u0027peers\u0027].keys()"},{"line_number":530,"context_line":""},{"line_number":531,"context_line":"    def get_bgp_peer_by_ip(self, bgp_speaker_id, bgp_peer_ip):"},{"line_number":532,"context_line":"        return self.cache[bgp_speaker_id][\u0027peers\u0027].get(bgp_peer_ip)"}],"source_content_type":"text/x-python","patch_set":48,"id":"3a57f1b5_a29cab0e","line":529,"range":{"start_line":529,"start_character":15,"end_line":529,"end_character":57},"in_reply_to":"3a57f1b5_fed48520","updated":"2016-02-12 11:29:17.000000000","message":"Done","commit_id":"2d369ef727ff8de656a2fc2523cc6dfe8a1002da"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"d41c47118585ad51f77bec57d0a084458a8d0f09","unresolved":false,"context_lines":[{"line_number":573,"context_line":"    def __init__(self, host, conf\u003dNone):"},{"line_number":574,"context_line":"        super(BgpDrAgentWithStateReport,"},{"line_number":575,"context_line":"              self).__init__(host, conf)"},{"line_number":576,"context_line":"        self.state_rpc \u003d agent_rpc.PluginReportStateAPI(topics.PLUGIN)"},{"line_number":577,"context_line":"        self.agent_state \u003d {"},{"line_number":578,"context_line":"            \u0027agent_type\u0027: bgp_consts.AGENT_TYPE_BGP_ROUTING,"},{"line_number":579,"context_line":"            \u0027binary\u0027: \u0027neutron-bgp-dragent\u0027,"}],"source_content_type":"text/x-python","patch_set":48,"id":"3a57f1b5_285523f9","line":576,"range":{"start_line":576,"start_character":56,"end_line":576,"end_character":62},"updated":"2016-02-11 21:38:26.000000000","message":"Is the comment on PS43 still relevant here?","commit_id":"2d369ef727ff8de656a2fc2523cc6dfe8a1002da"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"866607b3c45b4f70fda77aff6ee07f92e9159370","unresolved":false,"context_lines":[{"line_number":573,"context_line":"    def __init__(self, host, conf\u003dNone):"},{"line_number":574,"context_line":"        super(BgpDrAgentWithStateReport,"},{"line_number":575,"context_line":"              self).__init__(host, conf)"},{"line_number":576,"context_line":"        self.state_rpc \u003d agent_rpc.PluginReportStateAPI(topics.PLUGIN)"},{"line_number":577,"context_line":"        self.agent_state \u003d {"},{"line_number":578,"context_line":"            \u0027agent_type\u0027: bgp_consts.AGENT_TYPE_BGP_ROUTING,"},{"line_number":579,"context_line":"            \u0027binary\u0027: \u0027neutron-bgp-dragent\u0027,"}],"source_content_type":"text/x-python","patch_set":48,"id":"3a57f1b5_153297f2","line":576,"range":{"start_line":576,"start_character":56,"end_line":576,"end_character":62},"in_reply_to":"3a57f1b5_285523f9","updated":"2016-02-12 11:29:17.000000000","message":"This constant is not being moved. Only BGP specific constants are moved out.","commit_id":"2d369ef727ff8de656a2fc2523cc6dfe8a1002da"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"d41c47118585ad51f77bec57d0a084458a8d0f09","unresolved":false,"context_lines":[{"line_number":582,"context_line":"            \u0027topic\u0027: bgp_consts.BGP_DRAGENT,"},{"line_number":583,"context_line":"            \u0027start_flag\u0027: True}"},{"line_number":584,"context_line":"        report_interval \u003d cfg.CONF.AGENT.report_interval"},{"line_number":585,"context_line":"        self.use_call \u003d True"},{"line_number":586,"context_line":"        if report_interval:"},{"line_number":587,"context_line":"            self.heartbeat \u003d loopingcall.FixedIntervalLoopingCall("},{"line_number":588,"context_line":"                self._report_state)"}],"source_content_type":"text/x-python","patch_set":48,"id":"3a57f1b5_056b65b8","line":585,"range":{"start_line":585,"start_character":13,"end_line":585,"end_character":21},"updated":"2016-02-11 21:38:26.000000000","message":"I don\u0027t understand this.  Could you explain why use_call is set to True here and then False after the first use on L596?","commit_id":"2d369ef727ff8de656a2fc2523cc6dfe8a1002da"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"8a0ba2d82845d292d5fd1bc91cfc90936f2269f4","unresolved":false,"context_lines":[{"line_number":81,"context_line":""},{"line_number":82,"context_line":"            for hosted_bgp_speaker in hosted_bgp_speakers:"},{"line_number":83,"context_line":"                hosted_bs_id \u003d hosted_bgp_speaker[\u0027id\u0027]"},{"line_number":84,"context_line":"                only_bs \u003d set([] if (not bgp_speakers or None in bgp_speakers)"},{"line_number":85,"context_line":"                              else bgp_speakers)"},{"line_number":86,"context_line":"                resync_all \u003d not only_bs"},{"line_number":87,"context_line":"                sync_specific_speaker \u003d hosted_bs_id in only_bs"}],"source_content_type":"text/x-python","patch_set":49,"id":"3a57f1b5_050fb788","line":84,"range":{"start_line":84,"start_character":16,"end_line":84,"end_character":23},"updated":"2016-02-12 21:42:44.000000000","message":"nit:  This should still be outside the for loop.","commit_id":"f168a2bef0136a057ec667d41e9932941210d953"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"57fda9b8f9fb6eccc7dc736a1bcff63b99f46143","unresolved":false,"context_lines":[{"line_number":81,"context_line":""},{"line_number":82,"context_line":"            for hosted_bgp_speaker in hosted_bgp_speakers:"},{"line_number":83,"context_line":"                hosted_bs_id \u003d hosted_bgp_speaker[\u0027id\u0027]"},{"line_number":84,"context_line":"                only_bs \u003d set([] if (not bgp_speakers or None in bgp_speakers)"},{"line_number":85,"context_line":"                              else bgp_speakers)"},{"line_number":86,"context_line":"                resync_all \u003d not only_bs"},{"line_number":87,"context_line":"                sync_specific_speaker \u003d hosted_bs_id in only_bs"}],"source_content_type":"text/x-python","patch_set":49,"id":"dae33548_1bb4b3f0","line":84,"range":{"start_line":84,"start_character":16,"end_line":84,"end_character":23},"in_reply_to":"3a57f1b5_050fb788","updated":"2016-02-14 08:37:03.000000000","message":"Thanks Carl for fixing this up.","commit_id":"f168a2bef0136a057ec667d41e9932941210d953"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"8a0ba2d82845d292d5fd1bc91cfc90936f2269f4","unresolved":false,"context_lines":[{"line_number":417,"context_line":"        self.schedule_full_resync(speaker_id\u003dbgp_speaker_id,"},{"line_number":418,"context_line":"                                  reason\u003d\"Advertised routes Out-of-sync\")"},{"line_number":419,"context_line":""},{"line_number":420,"context_line":"    def schedule_full_resync(self, reason, speaker_id\u003dNone):"},{"line_number":421,"context_line":"        \"\"\"Schedule a full resync for a given BGP Speaker."},{"line_number":422,"context_line":"        If no BGP Speaker is specified, resync all BGP Speakers."},{"line_number":423,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":49,"id":"3a57f1b5_db065e1b","line":420,"range":{"start_line":420,"start_character":8,"end_line":420,"end_character":28},"updated":"2016-02-12 21:42:44.000000000","message":"You renamed this method but that wasn\u0027t really the point I wanted to make.  I probably didn\u0027t communicate it very clearly.  See L426.","commit_id":"f168a2bef0136a057ec667d41e9932941210d953"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"57fda9b8f9fb6eccc7dc736a1bcff63b99f46143","unresolved":false,"context_lines":[{"line_number":417,"context_line":"        self.schedule_full_resync(speaker_id\u003dbgp_speaker_id,"},{"line_number":418,"context_line":"                                  reason\u003d\"Advertised routes Out-of-sync\")"},{"line_number":419,"context_line":""},{"line_number":420,"context_line":"    def schedule_full_resync(self, reason, speaker_id\u003dNone):"},{"line_number":421,"context_line":"        \"\"\"Schedule a full resync for a given BGP Speaker."},{"line_number":422,"context_line":"        If no BGP Speaker is specified, resync all BGP Speakers."},{"line_number":423,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":49,"id":"dae33548_5bce3b84","line":420,"range":{"start_line":420,"start_character":8,"end_line":420,"end_character":28},"in_reply_to":"3a57f1b5_db065e1b","updated":"2016-02-14 08:37:03.000000000","message":"Thanks Carl for fixing this up.","commit_id":"f168a2bef0136a057ec667d41e9932941210d953"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"8a0ba2d82845d292d5fd1bc91cfc90936f2269f4","unresolved":false,"context_lines":[{"line_number":423,"context_line":"        \"\"\""},{"line_number":424,"context_line":"        LOG.debug(\u0027Recording full resync request for BGP Speaker %s \u0027"},{"line_number":425,"context_line":"                  \u0027with reason\u003d%s\u0027, speaker_id, reason)"},{"line_number":426,"context_line":"        self.needs_resync_reasons[speaker_id].append(reason)"},{"line_number":427,"context_line":""},{"line_number":428,"context_line":"    def is_resync_scheduled(self, bgp_speaker_id):"},{"line_number":429,"context_line":"        if bgp_speaker_id not in self.needs_resync_reasons:"}],"source_content_type":"text/x-python","patch_set":49,"id":"3a57f1b5_7b5dea13","line":426,"range":{"start_line":426,"start_character":34,"end_line":426,"end_character":44},"updated":"2016-02-12 21:42:44.000000000","message":"What really bothered me about this pattern was that speaker_id can sometimes be None and that means that we should do a full sync.  It took me a few minutes to figure out how it is supposed to work because it isn\u0027t obvious; it is a somewhat subtle behavior that really deserves to be clearly and explicitly spelled out.  Let me play with the code a bit and see if I can come up with something that makes it very clear what you\u0027re trying to accomplish.","commit_id":"f168a2bef0136a057ec667d41e9932941210d953"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"57fda9b8f9fb6eccc7dc736a1bcff63b99f46143","unresolved":false,"context_lines":[{"line_number":423,"context_line":"        \"\"\""},{"line_number":424,"context_line":"        LOG.debug(\u0027Recording full resync request for BGP Speaker %s \u0027"},{"line_number":425,"context_line":"                  \u0027with reason\u003d%s\u0027, speaker_id, reason)"},{"line_number":426,"context_line":"        self.needs_resync_reasons[speaker_id].append(reason)"},{"line_number":427,"context_line":""},{"line_number":428,"context_line":"    def is_resync_scheduled(self, bgp_speaker_id):"},{"line_number":429,"context_line":"        if bgp_speaker_id not in self.needs_resync_reasons:"}],"source_content_type":"text/x-python","patch_set":49,"id":"dae33548_3bcb7774","line":426,"range":{"start_line":426,"start_character":34,"end_line":426,"end_character":44},"in_reply_to":"3a57f1b5_7b5dea13","updated":"2016-02-14 08:37:03.000000000","message":"Thanks Carl for fixing this up.","commit_id":"f168a2bef0136a057ec667d41e9932941210d953"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"8a0ba2d82845d292d5fd1bc91cfc90936f2269f4","unresolved":false,"context_lines":[{"line_number":582,"context_line":"            \u0027topic\u0027: bgp_consts.BGP_DRAGENT,"},{"line_number":583,"context_line":"            \u0027start_flag\u0027: True}"},{"line_number":584,"context_line":"        report_interval \u003d cfg.CONF.AGENT.report_interval"},{"line_number":585,"context_line":"        self.use_call \u003d True"},{"line_number":586,"context_line":"        if report_interval:"},{"line_number":587,"context_line":"            self.heartbeat \u003d loopingcall.FixedIntervalLoopingCall("},{"line_number":588,"context_line":"                self._report_state)"}],"source_content_type":"text/x-python","patch_set":49,"id":"3a57f1b5_005a452a","line":585,"range":{"start_line":585,"start_character":13,"end_line":585,"end_character":21},"updated":"2016-02-12 21:42:44.000000000","message":"Could you explain why use_call is set True the first time through and then set to False on L598 for all the other times?  It might be something obvious that I\u0027m missing but right now I don\u0027t understand.","commit_id":"f168a2bef0136a057ec667d41e9932941210d953"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"57fda9b8f9fb6eccc7dc736a1bcff63b99f46143","unresolved":false,"context_lines":[{"line_number":582,"context_line":"            \u0027topic\u0027: bgp_consts.BGP_DRAGENT,"},{"line_number":583,"context_line":"            \u0027start_flag\u0027: True}"},{"line_number":584,"context_line":"        report_interval \u003d cfg.CONF.AGENT.report_interval"},{"line_number":585,"context_line":"        self.use_call \u003d True"},{"line_number":586,"context_line":"        if report_interval:"},{"line_number":587,"context_line":"            self.heartbeat \u003d loopingcall.FixedIntervalLoopingCall("},{"line_number":588,"context_line":"                self._report_state)"}],"source_content_type":"text/x-python","patch_set":49,"id":"dae33548_9bc8c376","line":585,"range":{"start_line":585,"start_character":13,"end_line":585,"end_character":21},"in_reply_to":"3a57f1b5_005a452a","updated":"2016-02-14 08:37:03.000000000","message":"Done","commit_id":"f168a2bef0136a057ec667d41e9932941210d953"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"80dea2fb4cdb90b8c01482603bc01eb93bb1609f","unresolved":false,"context_lines":[{"line_number":279,"context_line":"            bgp_speaker \u003d self.plugin_rpc.get_bgp_speaker_info(self.context,"},{"line_number":280,"context_line":"                                                               bgp_speaker_id)"},{"line_number":281,"context_line":"            if not bgp_speaker:"},{"line_number":282,"context_line":"                LOG.warning(_LW(\u0027BGP Speaker %s has been deleted.\u0027),"},{"line_number":283,"context_line":"                            bgp_speaker_id)"},{"line_number":284,"context_line":"            return bgp_speaker"},{"line_number":285,"context_line":"        except Exception as e:"}],"source_content_type":"text/x-python","patch_set":55,"id":"dae33548_9fa0bcf5","line":282,"range":{"start_line":282,"start_character":20,"end_line":282,"end_character":27},"updated":"2016-02-18 19:56:49.000000000","message":"Should this really be a warning?  What action should the operator take on this?","commit_id":"fbe754b04b34a2deade873cde0b593983633fc6c"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"92c305a001ee0a19804021f286ec2b4373f1e1d5","unresolved":false,"context_lines":[{"line_number":279,"context_line":"            bgp_speaker \u003d self.plugin_rpc.get_bgp_speaker_info(self.context,"},{"line_number":280,"context_line":"                                                               bgp_speaker_id)"},{"line_number":281,"context_line":"            if not bgp_speaker:"},{"line_number":282,"context_line":"                LOG.warning(_LW(\u0027BGP Speaker %s has been deleted.\u0027),"},{"line_number":283,"context_line":"                            bgp_speaker_id)"},{"line_number":284,"context_line":"            return bgp_speaker"},{"line_number":285,"context_line":"        except Exception as e:"}],"source_content_type":"text/x-python","patch_set":55,"id":"dae33548_ca027209","line":282,"range":{"start_line":282,"start_character":20,"end_line":282,"end_character":27},"in_reply_to":"dae33548_9fa0bcf5","updated":"2016-02-19 03:34:37.000000000","message":"I think no-op for the operator. We can change this to info. This can happen due to synchronization issues.","commit_id":"fbe754b04b34a2deade873cde0b593983633fc6c"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"80dea2fb4cdb90b8c01482603bc01eb93bb1609f","unresolved":false,"context_lines":[{"line_number":294,"context_line":"            bgp_peer \u003d self.plugin_rpc.get_bgp_peer_info(self.context,"},{"line_number":295,"context_line":"                                                         bgp_peer_id)"},{"line_number":296,"context_line":"            if not bgp_peer:"},{"line_number":297,"context_line":"                LOG.warning(_LW(\u0027BGP Peer %s has been deleted.\u0027), bgp_peer)"},{"line_number":298,"context_line":"            return bgp_peer"},{"line_number":299,"context_line":"        except Exception as e:"},{"line_number":300,"context_line":"            self.schedule_resync(speaker_id\u003dbgp_speaker_id,"}],"source_content_type":"text/x-python","patch_set":55,"id":"dae33548_dfa6c40d","line":297,"range":{"start_line":297,"start_character":20,"end_line":297,"end_character":27},"updated":"2016-02-18 19:56:49.000000000","message":"ditto","commit_id":"fbe754b04b34a2deade873cde0b593983633fc6c"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"80dea2fb4cdb90b8c01482603bc01eb93bb1609f","unresolved":false,"context_lines":[{"line_number":308,"context_line":"        try:"},{"line_number":309,"context_line":"            self.add_bgp_speaker_on_dragent(bgp_speaker)"},{"line_number":310,"context_line":"        except (bgp_ext.BgpSpeakerNotFound, RuntimeError):"},{"line_number":311,"context_line":"            LOG.warning(_LW(\u0027BGP speaker %s may have been deleted and its \u0027"},{"line_number":312,"context_line":"                            \u0027resources may have already been disposed.\u0027),"},{"line_number":313,"context_line":"                     bgp_speaker[\u0027id\u0027])"},{"line_number":314,"context_line":""}],"source_content_type":"text/x-python","patch_set":55,"id":"dae33548_1fadcce8","line":311,"range":{"start_line":311,"start_character":16,"end_line":311,"end_character":23},"updated":"2016-02-18 19:56:49.000000000","message":"ditto","commit_id":"fbe754b04b34a2deade873cde0b593983633fc6c"}],"neutron/services/bgp/agent/config.py":[{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"8c30f6ca87f7d826685cedbbc43724cbfa97b002","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Huawei Technologies India Pvt. Ltd."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":4,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":34,"id":"9a68dd71_b2fd463d","line":1,"updated":"2016-01-27 09:07:56.000000000","message":"2016","commit_id":"2286cd2ba579edd825efbf895f2c41764ea75d92"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"fa7ace4c9aa596aebc2e1ab94a68035ede5e0ed3","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Huawei Technologies India Pvt. Ltd."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":4,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":34,"id":"9a68dd71_18a1d1a9","line":1,"in_reply_to":"9a68dd71_b2fd463d","updated":"2016-01-27 09:28:28.000000000","message":"Done","commit_id":"2286cd2ba579edd825efbf895f2c41764ea75d92"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"4eaa477b176f3aa51015133fb4af1017ab956a8a","unresolved":false,"context_lines":[{"line_number":13,"context_line":"# See the License for the specific language governing permissions and"},{"line_number":14,"context_line":"# limitations under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"BGP_DRIVER_OPTS \u003d ["},{"line_number":17,"context_line":"]"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"BGP_PROTO_CONFIG_OPTS \u003d ["}],"source_content_type":"text/x-python","patch_set":50,"id":"dae33548_1b20339b","line":16,"updated":"2016-02-14 08:11:38.000000000","message":"BGP_DRIVER_OPTS \u003d []","commit_id":"ba7807a82af6a1926086b131322a84f32844d705"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"f819952a2fb3d323766e0208307961ed920f0afd","unresolved":false,"context_lines":[{"line_number":13,"context_line":"# See the License for the specific language governing permissions and"},{"line_number":14,"context_line":"# limitations under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"BGP_DRIVER_OPTS \u003d ["},{"line_number":17,"context_line":"]"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"BGP_PROTO_CONFIG_OPTS \u003d ["}],"source_content_type":"text/x-python","patch_set":50,"id":"dae33548_bb9f87b3","line":16,"in_reply_to":"dae33548_1b20339b","updated":"2016-02-14 08:18:41.000000000","message":"Will correct.","commit_id":"ba7807a82af6a1926086b131322a84f32844d705"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"4eaa477b176f3aa51015133fb4af1017ab956a8a","unresolved":false,"context_lines":[{"line_number":17,"context_line":"]"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"BGP_PROTO_CONFIG_OPTS \u003d ["},{"line_number":20,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":50,"id":"dae33548_bb2ae77c","line":20,"updated":"2016-02-14 08:11:38.000000000","message":"BGP_PROTO_CONFIG_OPTS \u003d []","commit_id":"ba7807a82af6a1926086b131322a84f32844d705"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"f819952a2fb3d323766e0208307961ed920f0afd","unresolved":false,"context_lines":[{"line_number":17,"context_line":"]"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"BGP_PROTO_CONFIG_OPTS \u003d ["},{"line_number":20,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":50,"id":"dae33548_5baf5be3","line":20,"in_reply_to":"dae33548_bb2ae77c","updated":"2016-02-14 08:18:41.000000000","message":"Will correct.","commit_id":"ba7807a82af6a1926086b131322a84f32844d705"}],"neutron/services/bgp/agent/dr_agent.py":[{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"05715191474e7bc0fd57b1519cb2f500464144e6","unresolved":false,"context_lines":[{"line_number":11,"context_line":"# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or"},{"line_number":12,"context_line":"# implied."},{"line_number":13,"context_line":"# See the License for the specific language governing permissions and"},{"line_number":14,"context_line":"# limitations under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import collections"},{"line_number":17,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"ba15a1d1_918a15be","line":14,"updated":"2015-09-24 07:37:52.000000000","message":"Can we rename this file as \u0027bgp_dragent.py\u0027 for consistency.","commit_id":"35ec3a156e05aa1c167824333b42a4c940f363b3"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"3bf56a92eeb4468a2fcc399a4e38417f0bac870b","unresolved":false,"context_lines":[{"line_number":11,"context_line":"# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or"},{"line_number":12,"context_line":"# implied."},{"line_number":13,"context_line":"# See the License for the specific language governing permissions and"},{"line_number":14,"context_line":"# limitations under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import collections"},{"line_number":17,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"9a1a9d01_fe09502d","line":14,"in_reply_to":"ba15a1d1_918a15be","updated":"2015-09-26 08:22:55.000000000","message":"Done.","commit_id":"35ec3a156e05aa1c167824333b42a4c940f363b3"}],"neutron/services/bgp/agent/entry.py":[{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"8c30f6ca87f7d826685cedbbc43724cbfa97b002","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Huawei Technologies India Pvt. Ltd."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":4,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":34,"id":"9a68dd71_72f7ce59","line":1,"updated":"2016-01-27 09:07:56.000000000","message":"2016","commit_id":"2286cd2ba579edd825efbf895f2c41764ea75d92"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"fa7ace4c9aa596aebc2e1ab94a68035ede5e0ed3","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Huawei Technologies India Pvt. Ltd."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":4,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":34,"id":"9a68dd71_d898196d","line":1,"in_reply_to":"9a68dd71_72f7ce59","updated":"2016-01-27 09:28:28.000000000","message":"Done","commit_id":"2286cd2ba579edd825efbf895f2c41764ea75d92"}],"neutron/services/bgp/plugin.py":[{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"337210662668c0b59ea899e46d68cbc8e70f2f9c","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def _setup_rpc(self):"},{"line_number":59,"context_line":"        self.topic \u003d topics.BGP_PLUGIN"},{"line_number":60,"context_line":"        self.conn \u003d n_rpc.create_connection(new\u003dTrue)"},{"line_number":61,"context_line":"        self.agent_notifiers[n_const.AGENT_TYPE_BGP_ROUTING] \u003d ("},{"line_number":62,"context_line":"            bgp_dr_rpc_agent_api.BgpDrAgentNotifyApi()"},{"line_number":63,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":22,"id":"5a2ca52d_9ce480e0","line":60,"updated":"2015-10-16 12:23:09.000000000","message":"Remove \"new\u003dTrue\" as changed via https://review.openstack.org/#/c/235362","commit_id":"944b214c5172adb59277e382b0f91128d5c5f725"}],"neutron/services/bgp_speaker/plugin.py":[{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"e589763a8e088f895e856f5817fd25c2011a6af2","unresolved":false,"context_lines":[{"line_number":95,"context_line":"    def create_bgp_speaker(self, context, bgp_speaker):"},{"line_number":96,"context_line":"        bgp_speaker \u003d super(BgpSpeakerPlugin, self).create_bgp_speaker("},{"line_number":97,"context_line":"            context, bgp_speaker)"},{"line_number":98,"context_line":"        if cfg.CONF.bgp_dr_auto_schedule:"},{"line_number":99,"context_line":"            self.schedule_bgp_speaker(context, bgp_speaker)"},{"line_number":100,"context_line":"        return bgp_speaker"},{"line_number":101,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"da20952f_42c11653","line":98,"updated":"2015-08-31 07:25:38.000000000","message":"How about doing this check inside \"schedule_bgp_speaker\"?","commit_id":"94d07959fc9390061a8faab2d63f4e0ed1407f92"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"0d597e691f824d713c4d4a1afc11a6cf14cd9550","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        bgp_speaker \u003d super(BgpSpeakerPlugin, self).create_bgp_speaker("},{"line_number":96,"context_line":"            context, bgp_speaker)"},{"line_number":97,"context_line":"        if cfg.CONF.bgp_dr_auto_schedule:"},{"line_number":98,"context_line":"            self.schedule_bgp_speaker(context, bgp_speaker)"},{"line_number":99,"context_line":"        return bgp_speaker"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    def delete_bgp_speaker(self, context, bgp_speaker_id):"}],"source_content_type":"text/x-python","patch_set":13,"id":"da20952f_bdd5a21c","line":98,"updated":"2015-09-06 07:03:55.000000000","message":"schedule_bgp_speaker does \u0027if self.bgp_drscheduler:\" check. No need to do this over here.","commit_id":"d4d7a23df852354dbec257cfb9b0cad09b063082"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"0d597e691f824d713c4d4a1afc11a6cf14cd9550","unresolved":false,"context_lines":[{"line_number":104,"context_line":"        super(BgpSpeakerPlugin, self).delete_bgp_speaker(context,"},{"line_number":105,"context_line":"                                                         bgp_speaker_id)"},{"line_number":106,"context_line":"        for agent in hosted_bgp_dragents:"},{"line_number":107,"context_line":"            self.agent_rpc.bgp_speaker_removed(context, bgp_speaker_id,"},{"line_number":108,"context_line":"                                               agent.host)"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    def add_bgp_peer(self, context, bgp_speaker_id, bgp_peer_info):"}],"source_content_type":"text/x-python","patch_set":13,"id":"da20952f_dd3176a3","line":107,"updated":"2015-09-06 07:03:55.000000000","message":"I feel we can define a new API called \"unschedule_bgp_speaker\" same as \"schedule_bgp_speaker\".","commit_id":"d4d7a23df852354dbec257cfb9b0cad09b063082"}],"neutron/tests/unit/agent/bgp/test_agent.py":[{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"7945a4c1d5f7c9f37cfbc950ec14f71159684d74","unresolved":false,"context_lines":[{"line_number":57,"context_line":"class TestBGPDRAgent(base.BaseTestCase):"},{"line_number":58,"context_line":"    def setUp(self):"},{"line_number":59,"context_line":"        super(TestBGPDRAgent, self).setUp()"},{"line_number":60,"context_line":"        cfg.CONF.register_opts(bgp_config.BGP_DRAGENT_OPTS)"},{"line_number":61,"context_line":"        mock_log_p \u003d mock.patch.object(bgp_agent, \u0027LOG\u0027)"},{"line_number":62,"context_line":"        self.mock_log \u003d mock_log_p.start()"},{"line_number":63,"context_line":"        self.context \u003d context.get_admin_context()"}],"source_content_type":"text/x-python","patch_set":8,"id":"da20952f_2bd0c41e","line":60,"updated":"2015-08-28 11:33:56.000000000","message":"should be \"cfg.CONF.register_opts(bgp_config.BGP_DRAGENT_OPTS, \u0027BGP\u0027)\"","commit_id":"498b383f65cebd65f4e89eca28b89ee742fcb2a9"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"6cff25d48d3f73660b846955582fb44d906527b7","unresolved":false,"context_lines":[{"line_number":57,"context_line":"class TestBGPDRAgent(base.BaseTestCase):"},{"line_number":58,"context_line":"    def setUp(self):"},{"line_number":59,"context_line":"        super(TestBGPDRAgent, self).setUp()"},{"line_number":60,"context_line":"        cfg.CONF.register_opts(bgp_config.BGP_DRAGENT_OPTS)"},{"line_number":61,"context_line":"        mock_log_p \u003d mock.patch.object(bgp_agent, \u0027LOG\u0027)"},{"line_number":62,"context_line":"        self.mock_log \u003d mock_log_p.start()"},{"line_number":63,"context_line":"        self.context \u003d context.get_admin_context()"}],"source_content_type":"text/x-python","patch_set":8,"id":"da20952f_30d6a74f","line":60,"in_reply_to":"da20952f_2bd0c41e","updated":"2015-09-05 04:38:33.000000000","message":"Done. Addressed in PS12.","commit_id":"498b383f65cebd65f4e89eca28b89ee742fcb2a9"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"7945a4c1d5f7c9f37cfbc950ec14f71159684d74","unresolved":false,"context_lines":[{"line_number":73,"context_line":"                    sys_argv.return_value \u003d ["},{"line_number":74,"context_line":"                        \u0027bgp_dragent\u0027, \u0027--config-file\u0027,"},{"line_number":75,"context_line":"                        base.etcdir(\u0027neutron.conf\u0027)]"},{"line_number":76,"context_line":"                    cfg.CONF.register_opts(bgp_config.BGP_DRAGENT_OPTS)"},{"line_number":77,"context_line":"                    config.register_agent_state_opts_helper(cfg.CONF)"},{"line_number":78,"context_line":"                    common_config.init(sys.argv[1:])"},{"line_number":79,"context_line":"                    agent_mgr \u003d bgp_agent.BGPDRAgentWithStateReport("}],"source_content_type":"text/x-python","patch_set":8,"id":"da20952f_abbb74e4","line":76,"updated":"2015-08-28 11:33:56.000000000","message":"un-necessary. already defined in the setup.","commit_id":"498b383f65cebd65f4e89eca28b89ee742fcb2a9"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"6cff25d48d3f73660b846955582fb44d906527b7","unresolved":false,"context_lines":[{"line_number":73,"context_line":"                    sys_argv.return_value \u003d ["},{"line_number":74,"context_line":"                        \u0027bgp_dragent\u0027, \u0027--config-file\u0027,"},{"line_number":75,"context_line":"                        base.etcdir(\u0027neutron.conf\u0027)]"},{"line_number":76,"context_line":"                    cfg.CONF.register_opts(bgp_config.BGP_DRAGENT_OPTS)"},{"line_number":77,"context_line":"                    config.register_agent_state_opts_helper(cfg.CONF)"},{"line_number":78,"context_line":"                    common_config.init(sys.argv[1:])"},{"line_number":79,"context_line":"                    agent_mgr \u003d bgp_agent.BGPDRAgentWithStateReport("}],"source_content_type":"text/x-python","patch_set":8,"id":"da20952f_b0c2b783","line":76,"in_reply_to":"da20952f_abbb74e4","updated":"2015-09-05 04:38:33.000000000","message":"Done. Addressed in PS12.","commit_id":"498b383f65cebd65f4e89eca28b89ee742fcb2a9"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"7945a4c1d5f7c9f37cfbc950ec14f71159684d74","unresolved":false,"context_lines":[{"line_number":85,"context_line":"                        [mock.call(mock.ANY),"},{"line_number":86,"context_line":"                         mock.call().report_state(mock.ANY, mock.ANY,"},{"line_number":87,"context_line":"                                                  mock.ANY)])"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    def test_dhcp_agent_main_agent_manager(self):"},{"line_number":90,"context_line":"        logging_str \u003d \u0027neutron.agent.common.config.setup_logging\u0027"},{"line_number":91,"context_line":"        launcher_str \u003d \u0027oslo_service.service.ServiceLauncher\u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"da20952f_2bdf646a","line":88,"updated":"2015-08-28 11:33:56.000000000","message":"Please rename to \"test_bgp_dragent_main_agent_manager\"","commit_id":"498b383f65cebd65f4e89eca28b89ee742fcb2a9"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"6cff25d48d3f73660b846955582fb44d906527b7","unresolved":false,"context_lines":[{"line_number":85,"context_line":"                        [mock.call(mock.ANY),"},{"line_number":86,"context_line":"                         mock.call().report_state(mock.ANY, mock.ANY,"},{"line_number":87,"context_line":"                                                  mock.ANY)])"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    def test_dhcp_agent_main_agent_manager(self):"},{"line_number":90,"context_line":"        logging_str \u003d \u0027neutron.agent.common.config.setup_logging\u0027"},{"line_number":91,"context_line":"        launcher_str \u003d \u0027oslo_service.service.ServiceLauncher\u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"da20952f_303d478f","line":88,"in_reply_to":"da20952f_2bdf646a","updated":"2015-09-05 04:38:33.000000000","message":"Done. Addressed in PS12.","commit_id":"498b383f65cebd65f4e89eca28b89ee742fcb2a9"}],"neutron/tests/unit/agent/bgp/test_bgp_dragent.py":[{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"a92b95bd36877884cd53aa9a06e6e634c99792fc","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Huawei Technologies India Pvt. Ltd."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":4,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":29,"id":"fa69d971_7b025671","line":1,"updated":"2016-01-08 04:05:23.000000000","message":"Year has passed. Let\u0027s change to 2016.","commit_id":"7292ec0a727c8b564f28ff88b64b9703a20bf956"}],"neutron/tests/unit/api/rpc/agentnotifiers/test_bgp_dr_rpc_agent_api.py":[{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"8adbcd6ad117115b793bf68c3b8b58dec230b5aa","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def test_notify_dragent_bgp_routes_advertisement(self):"},{"line_number":38,"context_line":"        bgp_speaker_id \u003d \u0027bgp-speaker-1\u0027"},{"line_number":39,"context_line":"        routes \u003d [{\u0027destination\u0027: \u00271.1.1.1\u0027, \u0027next_hop\u0027: \u00272.2.2.2\u0027}]"},{"line_number":40,"context_line":"        self.notifier.bgp_routes_advertisement(self.context, bgp_speaker_id,"},{"line_number":41,"context_line":"                                               routes, self.host)"},{"line_number":42,"context_line":"        self.assertEqual(1, self.mock_cast.call_count)"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a4dcd0f_f3165957","line":39,"updated":"2015-08-16 16:46:56.000000000","message":"Can we plz add tests for multiple routes as well.","commit_id":"b0ce0d8d7ecd76c8a80952550b0aa402d97a4d3e"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"a92b95bd36877884cd53aa9a06e6e634c99792fc","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Huawei Technologies India Pvt. Ltd."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":4,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":29,"id":"fa69d971_1bf8fa7b","line":1,"updated":"2016-01-08 04:05:23.000000000","message":"Year has passed. Let\u0027s change to 2016.","commit_id":"7292ec0a727c8b564f28ff88b64b9703a20bf956"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"8c30f6ca87f7d826685cedbbc43724cbfa97b002","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Huawei Technologies India Pvt. Ltd."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":4,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":34,"id":"9a68dd71_5293aafa","line":1,"updated":"2016-01-27 09:07:56.000000000","message":"2016","commit_id":"2286cd2ba579edd825efbf895f2c41764ea75d92"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"fa7ace4c9aa596aebc2e1ab94a68035ede5e0ed3","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Huawei Technologies India Pvt. Ltd."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":4,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":34,"id":"9a68dd71_b89e8552","line":1,"in_reply_to":"9a68dd71_5293aafa","updated":"2016-01-27 09:28:28.000000000","message":"Done","commit_id":"2286cd2ba579edd825efbf895f2c41764ea75d92"}],"neutron/tests/unit/api/rpc/handlers/test_bgp_speaker_rpc.py":[{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"a92b95bd36877884cd53aa9a06e6e634c99792fc","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Huawei Technologies India Pvt. Ltd."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":4,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":29,"id":"fa69d971_dbf10297","line":1,"updated":"2016-01-08 04:05:23.000000000","message":"Year has passed. Let\u0027s change to 2016.","commit_id":"7292ec0a727c8b564f28ff88b64b9703a20bf956"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"8c30f6ca87f7d826685cedbbc43724cbfa97b002","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Huawei Technologies India Pvt. Ltd."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":4,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":34,"id":"9a68dd71_52aaca1a","line":1,"updated":"2016-01-27 09:07:56.000000000","message":"2016","commit_id":"2286cd2ba579edd825efbf895f2c41764ea75d92"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"fa7ace4c9aa596aebc2e1ab94a68035ede5e0ed3","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Huawei Technologies India Pvt. Ltd."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":4,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":34,"id":"9a68dd71_18b6b1dc","line":1,"in_reply_to":"9a68dd71_52aaca1a","updated":"2016-01-27 09:28:28.000000000","message":"Done","commit_id":"2286cd2ba579edd825efbf895f2c41764ea75d92"}],"neutron/tests/unit/services/bgp/agent/test_bgp_dragent.py":[{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"8c30f6ca87f7d826685cedbbc43724cbfa97b002","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Huawei Technologies India Pvt. Ltd."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":4,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":34,"id":"9a68dd71_9277e2d3","line":1,"updated":"2016-01-27 09:07:56.000000000","message":"2016","commit_id":"2286cd2ba579edd825efbf895f2c41764ea75d92"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"fa7ace4c9aa596aebc2e1ab94a68035ede5e0ed3","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Huawei Technologies India Pvt. Ltd."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":4,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":34,"id":"9a68dd71_1804717c","line":1,"in_reply_to":"9a68dd71_9277e2d3","updated":"2016-01-27 09:28:28.000000000","message":"Done","commit_id":"2286cd2ba579edd825efbf895f2c41764ea75d92"}],"setup.cfg":[{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"fc6e756179a72f66c9d313867e2b81d66ad380b1","unresolved":false,"context_lines":[{"line_number":25,"context_line":"    etc/neutron \u003d"},{"line_number":26,"context_line":"        etc/api-paste.ini"},{"line_number":27,"context_line":"        etc/bgp_dragent.ini"},{"line_number":28,"context_line":"        etc/dhcp_agent.ini"},{"line_number":29,"context_line":"        etc/l3_agent.ini"},{"line_number":30,"context_line":"        etc/metadata_agent.ini"},{"line_number":31,"context_line":"        etc/metering_agent.ini"}],"source_content_type":"text/x-ttcn-cfg","patch_set":25,"id":"1a7b0d38_6256cecf","line":28,"updated":"2015-12-28 12:25:31.000000000","message":"L28-L31 unrelated. Probably a re-base mistake. Plz remove.","commit_id":"ad122367e98dd25a333143ce82c999ccb9f3d6ef"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"dcb44a890e662a074db585f1417d4ade15150d02","unresolved":false,"context_lines":[{"line_number":25,"context_line":"    etc/neutron \u003d"},{"line_number":26,"context_line":"        etc/api-paste.ini"},{"line_number":27,"context_line":"        etc/bgp_dragent.ini"},{"line_number":28,"context_line":"        etc/dhcp_agent.ini"},{"line_number":29,"context_line":"        etc/l3_agent.ini"},{"line_number":30,"context_line":"        etc/metadata_agent.ini"},{"line_number":31,"context_line":"        etc/metering_agent.ini"}],"source_content_type":"text/x-ttcn-cfg","patch_set":25,"id":"fa69d971_3e9ab315","line":28,"in_reply_to":"1a7b0d38_6256cecf","updated":"2015-12-30 09:04:31.000000000","message":"Done.","commit_id":"ad122367e98dd25a333143ce82c999ccb9f3d6ef"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"0412f5f77db3d1bc9461ec00b0a4117f12e81a4f","unresolved":false,"context_lines":[{"line_number":25,"context_line":"    etc/neutron \u003d"},{"line_number":26,"context_line":"        etc/api-paste.ini"},{"line_number":27,"context_line":"        etc/bgp_dragent.ini"},{"line_number":28,"context_line":"        etc/dhcp_agent.ini"},{"line_number":29,"context_line":"        etc/l3_agent.ini"},{"line_number":30,"context_line":"        etc/metadata_agent.ini"},{"line_number":31,"context_line":"        etc/metering_agent.ini"}],"source_content_type":"text/x-ttcn-cfg","patch_set":30,"id":"da6ed579_c2b7a4d6","line":28,"updated":"2016-01-13 14:10:36.000000000","message":"why are you adding ini files that were removed","commit_id":"40ab863b9af41f1ec691669dad269bf752c4cba0"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"3191d8391cea6b91c2c3c876044cb594addf011c","unresolved":false,"context_lines":[{"line_number":25,"context_line":"    etc/neutron \u003d"},{"line_number":26,"context_line":"        etc/api-paste.ini"},{"line_number":27,"context_line":"        etc/bgp_dragent.ini"},{"line_number":28,"context_line":"        etc/dhcp_agent.ini"},{"line_number":29,"context_line":"        etc/l3_agent.ini"},{"line_number":30,"context_line":"        etc/metadata_agent.ini"},{"line_number":31,"context_line":"        etc/metering_agent.ini"}],"source_content_type":"text/x-ttcn-cfg","patch_set":30,"id":"9a68dd71_55aab41a","line":28,"in_reply_to":"da6ed579_c2b7a4d6","updated":"2016-01-27 09:06:35.000000000","message":"Done","commit_id":"40ab863b9af41f1ec691669dad269bf752c4cba0"}]}
