)]}'
{"neutron/plugins/cisco/cfg_agent/cfg_agent.py":[{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"adbf8550f7b49ac400e519229ecec7be434e79a0","unresolved":false,"context_lines":[{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    OPTS \u003d ["},{"line_number":107,"context_line":"        cfg.IntOpt(\u0027rpc_loop_interval\u0027, default\u003d10,"},{"line_number":108,"context_line":"                   help\u003d_(\"Interval when the process services loop executes.\""},{"line_number":109,"context_line":"                          \"This is when the config agent lets each service \""},{"line_number":110,"context_line":"                          \"helper to process its neutron resources.\")),"},{"line_number":111,"context_line":"    ]"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_9e0ccb96","line":108,"updated":"2014-07-01 03:15:29.000000000","message":"Include units. Space after period.","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"dde8b861c991c2b538cfd787830f9c1858aee002","unresolved":false,"context_lines":[{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    OPTS \u003d ["},{"line_number":107,"context_line":"        cfg.IntOpt(\u0027rpc_loop_interval\u0027, default\u003d10,"},{"line_number":108,"context_line":"                   help\u003d_(\"Interval when the process services loop executes.\""},{"line_number":109,"context_line":"                          \"This is when the config agent lets each service \""},{"line_number":110,"context_line":"                          \"helper to process its neutron resources.\")),"},{"line_number":111,"context_line":"    ]"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_15a3b101","line":108,"in_reply_to":"baada198_9e0ccb96","updated":"2014-07-03 22:11:33.000000000","message":"Done","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":5892,"name":"pritesh","email":"pritesh@romana.io","username":"pritkoth"},"change_message_id":"d38f7b4cfd32ea5aeb2df100aa4f7d95aeb58635","unresolved":false,"context_lines":[{"line_number":141,"context_line":"    @periodic_task.periodic_task"},{"line_number":142,"context_line":"    def _backlog_task(self, context):"},{"line_number":143,"context_line":"        \"\"\"Process backlogged devices.\"\"\""},{"line_number":144,"context_line":"        LOG.debug(_(\"Processing backlog.\"))"},{"line_number":145,"context_line":"        self._process_backlogged_hosting_devices(context)"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"    ## Main orchestrator ##"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_3f63c81b","line":144,"updated":"2014-06-30 17:58:40.000000000","message":"no debug translations (bug/1317851)","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"dde8b861c991c2b538cfd787830f9c1858aee002","unresolved":false,"context_lines":[{"line_number":141,"context_line":"    @periodic_task.periodic_task"},{"line_number":142,"context_line":"    def _backlog_task(self, context):"},{"line_number":143,"context_line":"        \"\"\"Process backlogged devices.\"\"\""},{"line_number":144,"context_line":"        LOG.debug(_(\"Processing backlog.\"))"},{"line_number":145,"context_line":"        self._process_backlogged_hosting_devices(context)"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"    ## Main orchestrator ##"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_35a43507","line":144,"in_reply_to":"baada198_3f63c81b","updated":"2014-07-03 22:11:33.000000000","message":"Done","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":5892,"name":"pritesh","email":"pritesh@romana.io","username":"pritkoth"},"change_message_id":"d38f7b4cfd32ea5aeb2df100aa4f7d95aeb58635","unresolved":false,"context_lines":[{"line_number":185,"context_line":"                }"},{"line_number":186,"context_line":"        :return: None"},{"line_number":187,"context_line":"        \"\"\""},{"line_number":188,"context_line":"        LOG.debug(_(\"Processing services started\"))"},{"line_number":189,"context_line":"        # Now we process only routing service, additional services will be"},{"line_number":190,"context_line":"        # added in future"},{"line_number":191,"context_line":"        self.routing_service_helper.process_service(device_ids,"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_7fb6208c","line":188,"updated":"2014-06-30 17:58:40.000000000","message":"no debug translations (bug/1317851)","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"dde8b861c991c2b538cfd787830f9c1858aee002","unresolved":false,"context_lines":[{"line_number":185,"context_line":"                }"},{"line_number":186,"context_line":"        :return: None"},{"line_number":187,"context_line":"        \"\"\""},{"line_number":188,"context_line":"        LOG.debug(_(\"Processing services started\"))"},{"line_number":189,"context_line":"        # Now we process only routing service, additional services will be"},{"line_number":190,"context_line":"        # added in future"},{"line_number":191,"context_line":"        self.routing_service_helper.process_service(device_ids,"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_55a9a9dd","line":188,"in_reply_to":"baada198_7fb6208c","updated":"2014-07-03 22:11:33.000000000","message":"Done","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":5892,"name":"pritesh","email":"pritesh@romana.io","username":"pritkoth"},"change_message_id":"d38f7b4cfd32ea5aeb2df100aa4f7d95aeb58635","unresolved":false,"context_lines":[{"line_number":190,"context_line":"        # added in future"},{"line_number":191,"context_line":"        self.routing_service_helper.process_service(device_ids,"},{"line_number":192,"context_line":"                                                    removed_devices_info)"},{"line_number":193,"context_line":"        LOG.debug(_(\"Processing services completed\"))"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    def _process_backlogged_hosting_devices(self, context):"},{"line_number":196,"context_line":"        \"\"\"Process currently back logged devices."}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_dfac8c38","line":193,"updated":"2014-06-30 17:58:40.000000000","message":"no debug translations (bug/1317851)","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"dde8b861c991c2b538cfd787830f9c1858aee002","unresolved":false,"context_lines":[{"line_number":190,"context_line":"        # added in future"},{"line_number":191,"context_line":"        self.routing_service_helper.process_service(device_ids,"},{"line_number":192,"context_line":"                                                    removed_devices_info)"},{"line_number":193,"context_line":"        LOG.debug(_(\"Processing services completed\"))"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    def _process_backlogged_hosting_devices(self, context):"},{"line_number":196,"context_line":"        \"\"\"Process currently back logged devices."}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_75b14d46","line":193,"in_reply_to":"baada198_dfac8c38","updated":"2014-07-03 22:11:33.000000000","message":"Done","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"adbf8550f7b49ac400e519229ecec7be434e79a0","unresolved":false,"context_lines":[{"line_number":193,"context_line":"        LOG.debug(_(\"Processing services completed\"))"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    def _process_backlogged_hosting_devices(self, context):"},{"line_number":196,"context_line":"        \"\"\"Process currently back logged devices."},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"        Go through the currently backlogged devices and process them."},{"line_number":199,"context_line":"        For devices which are now reachable (compared to last time), we call"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_6404c87e","line":196,"updated":"2014-07-01 03:15:29.000000000","message":"nit: back logged -\u003e backlogged","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"dde8b861c991c2b538cfd787830f9c1858aee002","unresolved":false,"context_lines":[{"line_number":193,"context_line":"        LOG.debug(_(\"Processing services completed\"))"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    def _process_backlogged_hosting_devices(self, context):"},{"line_number":196,"context_line":"        \"\"\"Process currently back logged devices."},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"        Go through the currently backlogged devices and process them."},{"line_number":199,"context_line":"        For devices which are now reachable (compared to last time), we call"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_95aee1e4","line":196,"in_reply_to":"baada198_6404c87e","updated":"2014-07-03 22:11:33.000000000","message":"Done","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":5892,"name":"pritesh","email":"pritesh@romana.io","username":"pritkoth"},"change_message_id":"d38f7b4cfd32ea5aeb2df100aa4f7d95aeb58635","unresolved":false,"context_lines":[{"line_number":207,"context_line":"        if res[\u0027reachable\u0027]:"},{"line_number":208,"context_line":"            self.process_services(device_ids\u003dres[\u0027reachable\u0027])"},{"line_number":209,"context_line":"        if res[\u0027dead\u0027]:"},{"line_number":210,"context_line":"            LOG.debug(_(\"Reporting dead hosting devices: %s\"),"},{"line_number":211,"context_line":"                      res[\u0027dead\u0027])"},{"line_number":212,"context_line":"            self.devmgr_rpc.report_dead_hosting_devices(context,"},{"line_number":213,"context_line":"                                                        hd_ids\u003dres[\u0027dead\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_1fa7e450","line":210,"updated":"2014-06-30 17:58:40.000000000","message":"no debug translations (bug/1317851)","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"dde8b861c991c2b538cfd787830f9c1858aee002","unresolved":false,"context_lines":[{"line_number":207,"context_line":"        if res[\u0027reachable\u0027]:"},{"line_number":208,"context_line":"            self.process_services(device_ids\u003dres[\u0027reachable\u0027])"},{"line_number":209,"context_line":"        if res[\u0027dead\u0027]:"},{"line_number":210,"context_line":"            LOG.debug(_(\"Reporting dead hosting devices: %s\"),"},{"line_number":211,"context_line":"                      res[\u0027dead\u0027])"},{"line_number":212,"context_line":"            self.devmgr_rpc.report_dead_hosting_devices(context,"},{"line_number":213,"context_line":"                                                        hd_ids\u003dres[\u0027dead\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_b5b76539","line":210,"in_reply_to":"baada198_1fa7e450","updated":"2014-07-03 22:11:33.000000000","message":"Done","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"adbf8550f7b49ac400e519229ecec7be434e79a0","unresolved":false,"context_lines":[{"line_number":250,"context_line":"    def _agent_registration(self):"},{"line_number":251,"context_line":"        \"\"\"Register this agent with the server."},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"         This method registers the cfg agent with the neutron server so hosting"},{"line_number":254,"context_line":"         devices can be assigned to it. In case the server is not ready to"},{"line_number":255,"context_line":"         accept registration (it sends a False) then we retry registration"},{"line_number":256,"context_line":"         for `MAX_REGISTRATION_ATTEMPTS` with a delay of"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_c403d471","line":253,"updated":"2014-07-01 03:15:29.000000000","message":"Nit: Is the indenting of this block incorrect (not aligned with first quote), or is it just the review tool display issue?","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"dde8b861c991c2b538cfd787830f9c1858aee002","unresolved":false,"context_lines":[{"line_number":250,"context_line":"    def _agent_registration(self):"},{"line_number":251,"context_line":"        \"\"\"Register this agent with the server."},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"         This method registers the cfg agent with the neutron server so hosting"},{"line_number":254,"context_line":"         devices can be assigned to it. In case the server is not ready to"},{"line_number":255,"context_line":"         accept registration (it sends a False) then we retry registration"},{"line_number":256,"context_line":"         for `MAX_REGISTRATION_ATTEMPTS` with a delay of"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_d5b4d936","line":253,"in_reply_to":"baada198_c403d471","updated":"2014-07-03 22:11:33.000000000","message":"Done","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"adbf8550f7b49ac400e519229ecec7be434e79a0","unresolved":false,"context_lines":[{"line_number":274,"context_line":"            elif res is None:"},{"line_number":275,"context_line":"                LOG.error(_(\"[Agent registration] Neutron server said that no \""},{"line_number":276,"context_line":"                            \"device manager was found. Exiting!\"))"},{"line_number":277,"context_line":"                sys.exit(1)"},{"line_number":278,"context_line":"        LOG.error(_(\"[Agent registration] %d unsuccessful registration \""},{"line_number":279,"context_line":"                    \"attempts. Exiting!\"), MAX_REGISTRATION_ATTEMPTS)"},{"line_number":280,"context_line":"        sys.exit(1)"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_8430fc57","line":277,"updated":"2014-07-01 03:15:29.000000000","message":"Use SystemExit()","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"dde8b861c991c2b538cfd787830f9c1858aee002","unresolved":false,"context_lines":[{"line_number":274,"context_line":"            elif res is None:"},{"line_number":275,"context_line":"                LOG.error(_(\"[Agent registration] Neutron server said that no \""},{"line_number":276,"context_line":"                            \"device manager was found. Exiting!\"))"},{"line_number":277,"context_line":"                sys.exit(1)"},{"line_number":278,"context_line":"        LOG.error(_(\"[Agent registration] %d unsuccessful registration \""},{"line_number":279,"context_line":"                    \"attempts. Exiting!\"), MAX_REGISTRATION_ATTEMPTS)"},{"line_number":280,"context_line":"        sys.exit(1)"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_f5847d5f","line":277,"in_reply_to":"baada198_8430fc57","updated":"2014-07-03 22:11:33.000000000","message":"Done","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"adbf8550f7b49ac400e519229ecec7be434e79a0","unresolved":false,"context_lines":[{"line_number":277,"context_line":"                sys.exit(1)"},{"line_number":278,"context_line":"        LOG.error(_(\"[Agent registration] %d unsuccessful registration \""},{"line_number":279,"context_line":"                    \"attempts. Exiting!\"), MAX_REGISTRATION_ATTEMPTS)"},{"line_number":280,"context_line":"        sys.exit(1)"},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"    def _report_state(self):"},{"line_number":283,"context_line":"        \"\"\"Report state to the plugin."}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_a4350048","line":280,"updated":"2014-07-01 03:15:29.000000000","message":"Ditto.","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"dde8b861c991c2b538cfd787830f9c1858aee002","unresolved":false,"context_lines":[{"line_number":277,"context_line":"                sys.exit(1)"},{"line_number":278,"context_line":"        LOG.error(_(\"[Agent registration] %d unsuccessful registration \""},{"line_number":279,"context_line":"                    \"attempts. Exiting!\"), MAX_REGISTRATION_ATTEMPTS)"},{"line_number":280,"context_line":"        sys.exit(1)"},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"    def _report_state(self):"},{"line_number":283,"context_line":"        \"\"\"Report state to the plugin."}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_158ad169","line":280,"in_reply_to":"baada198_a4350048","updated":"2014-07-03 22:11:33.000000000","message":"Done","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":5892,"name":"pritesh","email":"pritesh@romana.io","username":"pritkoth"},"change_message_id":"d38f7b4cfd32ea5aeb2df100aa4f7d95aeb58635","unresolved":false,"context_lines":[{"line_number":288,"context_line":"        Refer the `configurations` dict for the parameters reported."},{"line_number":289,"context_line":"        :return: None"},{"line_number":290,"context_line":"        \"\"\""},{"line_number":291,"context_line":"        LOG.debug(_(\"Report state task started\"))"},{"line_number":292,"context_line":"        configurations \u003d self.routing_service_helper.collect_state("},{"line_number":293,"context_line":"            self.agent_state[\u0027configurations\u0027])"},{"line_number":294,"context_line":"        non_responding \u003d self._dev_status.get_backlogged_hosting_devices_info()"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_df73ace5","line":291,"updated":"2014-06-30 17:58:40.000000000","message":"no debug translations (bug/1317851)","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"dde8b861c991c2b538cfd787830f9c1858aee002","unresolved":false,"context_lines":[{"line_number":288,"context_line":"        Refer the `configurations` dict for the parameters reported."},{"line_number":289,"context_line":"        :return: None"},{"line_number":290,"context_line":"        \"\"\""},{"line_number":291,"context_line":"        LOG.debug(_(\"Report state task started\"))"},{"line_number":292,"context_line":"        configurations \u003d self.routing_service_helper.collect_state("},{"line_number":293,"context_line":"            self.agent_state[\u0027configurations\u0027])"},{"line_number":294,"context_line":"        non_responding \u003d self._dev_status.get_backlogged_hosting_devices_info()"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_357b557c","line":291,"in_reply_to":"baada198_df73ace5","updated":"2014-07-03 22:11:33.000000000","message":"Done","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":5892,"name":"pritesh","email":"pritesh@romana.io","username":"pritkoth"},"change_message_id":"d38f7b4cfd32ea5aeb2df100aa4f7d95aeb58635","unresolved":false,"context_lines":[{"line_number":295,"context_line":"        configurations[\u0027non_responding_hosting_devices\u0027] \u003d non_responding"},{"line_number":296,"context_line":"        self.agent_state[\u0027configurations\u0027] \u003d configurations"},{"line_number":297,"context_line":"        self.agent_state[\u0027local_time\u0027] \u003d str(timeutils.utcnow())"},{"line_number":298,"context_line":"        LOG.debug(_(\"State report data: %s\"),"},{"line_number":299,"context_line":"                  pprint.pformat(self.agent_state))"},{"line_number":300,"context_line":"        self.send_agent_report(self.agent_state, self.context)"},{"line_number":301,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_ff80708d","line":298,"updated":"2014-06-30 17:58:40.000000000","message":"no debug translations (bug/1317851)","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"dde8b861c991c2b538cfd787830f9c1858aee002","unresolved":false,"context_lines":[{"line_number":295,"context_line":"        configurations[\u0027non_responding_hosting_devices\u0027] \u003d non_responding"},{"line_number":296,"context_line":"        self.agent_state[\u0027configurations\u0027] \u003d configurations"},{"line_number":297,"context_line":"        self.agent_state[\u0027local_time\u0027] \u003d str(timeutils.utcnow())"},{"line_number":298,"context_line":"        LOG.debug(_(\"State report data: %s\"),"},{"line_number":299,"context_line":"                  pprint.pformat(self.agent_state))"},{"line_number":300,"context_line":"        self.send_agent_report(self.agent_state, self.context)"},{"line_number":301,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_5580c945","line":298,"in_reply_to":"baada198_ff80708d","updated":"2014-07-03 22:11:33.000000000","message":"Done","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":5892,"name":"pritesh","email":"pritesh@romana.io","username":"pritkoth"},"change_message_id":"d38f7b4cfd32ea5aeb2df100aa4f7d95aeb58635","unresolved":false,"context_lines":[{"line_number":305,"context_line":"            self.state_rpc.report_state(context, report, self.use_call)"},{"line_number":306,"context_line":"            report.pop(\u0027start_flag\u0027, None)"},{"line_number":307,"context_line":"            self.use_call \u003d False"},{"line_number":308,"context_line":"            LOG.debug(_(\"Send agent report successfully completed\"))"},{"line_number":309,"context_line":"        except AttributeError:"},{"line_number":310,"context_line":"            # This means the server does not support report_state"},{"line_number":311,"context_line":"            LOG.warn(_(\"Neutron server does not support state report. \""}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_1f7e04af","line":308,"updated":"2014-06-30 17:58:40.000000000","message":"no debug translations (bug/1317851)","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"dde8b861c991c2b538cfd787830f9c1858aee002","unresolved":false,"context_lines":[{"line_number":305,"context_line":"            self.state_rpc.report_state(context, report, self.use_call)"},{"line_number":306,"context_line":"            report.pop(\u0027start_flag\u0027, None)"},{"line_number":307,"context_line":"            self.use_call \u003d False"},{"line_number":308,"context_line":"            LOG.debug(_(\"Send agent report successfully completed\"))"},{"line_number":309,"context_line":"        except AttributeError:"},{"line_number":310,"context_line":"            # This means the server does not support report_state"},{"line_number":311,"context_line":"            LOG.warn(_(\"Neutron server does not support state report. \""}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_75986dc0","line":308,"in_reply_to":"baada198_1f7e04af","updated":"2014-07-03 22:11:33.000000000","message":"Done","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"0f4919ce16b22c8cc524a7ab20238493015af6a9","unresolved":false,"context_lines":[{"line_number":112,"context_line":"        cfg.StrOpt(\u0027routing_svc_helper_class\u0027,"},{"line_number":113,"context_line":"                   default\u003d\u0027neutron.plugins.cisco.cfg_agent.service_helpers\u0027"},{"line_number":114,"context_line":"                           \u0027.routing_svc_helper.RoutingServiceHelper\u0027,"},{"line_number":115,"context_line":"                   help\u003d_(\"path of the routing service helper class\")),"},{"line_number":116,"context_line":"    ]"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    def __init__(self, host, conf\u003dNone):"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_c5eb3276","line":115,"updated":"2014-07-04 15:45:57.000000000","message":"Nit: path -\u003e Path. Add period at end.","commit_id":"23c8d9d830d1639f29088f2502ec650f71d7032d"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"77a381a655bc90f1d6858732f3b4a8a53e6816fe","unresolved":false,"context_lines":[{"line_number":112,"context_line":"        cfg.StrOpt(\u0027routing_svc_helper_class\u0027,"},{"line_number":113,"context_line":"                   default\u003d\u0027neutron.plugins.cisco.cfg_agent.service_helpers\u0027"},{"line_number":114,"context_line":"                           \u0027.routing_svc_helper.RoutingServiceHelper\u0027,"},{"line_number":115,"context_line":"                   help\u003d_(\"path of the routing service helper class\")),"},{"line_number":116,"context_line":"    ]"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    def __init__(self, host, conf\u003dNone):"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_9371590e","line":115,"in_reply_to":"baada198_c5eb3276","updated":"2014-07-07 15:04:16.000000000","message":"Done","commit_id":"23c8d9d830d1639f29088f2502ec650f71d7032d"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"69aec30900e23ef773493672e0560cd76e73d06f","unresolved":false,"context_lines":[{"line_number":227,"context_line":"            self.devmgr_rpc.report_dead_hosting_devices(context,"},{"line_number":228,"context_line":"                                                        hd_ids\u003dres[\u0027dead\u0027])"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"    def hosting_devices_removed(self, context, payload):"},{"line_number":231,"context_line":"        \"\"\"Deal with hosting device removed RPC message.\"\"\""},{"line_number":232,"context_line":"        try:"},{"line_number":233,"context_line":"            if payload[\u0027hosting_data\u0027]:"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_fe2c0095","line":230,"updated":"2014-07-15 15:58:54.000000000","message":"\u0027context\u0027 is not used.","commit_id":"f799aeaac255bf660642f2b42f25d844b84d28ba"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"fee89a8ead6d9ad17fb85faa26858ee7ed60e91f","unresolved":false,"context_lines":[{"line_number":227,"context_line":"            self.devmgr_rpc.report_dead_hosting_devices(context,"},{"line_number":228,"context_line":"                                                        hd_ids\u003dres[\u0027dead\u0027])"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"    def hosting_devices_removed(self, context, payload):"},{"line_number":231,"context_line":"        \"\"\"Deal with hosting device removed RPC message.\"\"\""},{"line_number":232,"context_line":"        try:"},{"line_number":233,"context_line":"            if payload[\u0027hosting_data\u0027]:"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_e9d59343","line":230,"in_reply_to":"baada198_fe2c0095","updated":"2014-07-18 17:26:10.000000000","message":"\u0027context\u0027 is sent as part of the rpc message. So cannot avoid keeping it here.","commit_id":"f799aeaac255bf660642f2b42f25d844b84d28ba"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"f90e9d96f8cb07f9ebb21229abc10f459fd0006e","unresolved":false,"context_lines":[{"line_number":227,"context_line":"            self.devmgr_rpc.report_dead_hosting_devices(context,"},{"line_number":228,"context_line":"                                                        hd_ids\u003dres[\u0027dead\u0027])"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"    def hosting_devices_removed(self, context, payload):"},{"line_number":231,"context_line":"        \"\"\"Deal with hosting device removed RPC message.\"\"\""},{"line_number":232,"context_line":"        try:"},{"line_number":233,"context_line":"            if payload[\u0027hosting_data\u0027]:"}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_1e153f3c","line":230,"updated":"2014-07-22 04:41:35.000000000","message":"This method isn\u0027t called. If this method is called via RPC. this method should be one of class RoutingServiceHelper which creates rpc server.","commit_id":"2332ca43b02fcfe92c09830f858077845f8fd2f8"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"d61e8a41081d33664ee7fcbc6a1416c0b5468ec7","unresolved":false,"context_lines":[{"line_number":227,"context_line":"            self.devmgr_rpc.report_dead_hosting_devices(context,"},{"line_number":228,"context_line":"                                                        hd_ids\u003dres[\u0027dead\u0027])"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"    def hosting_devices_removed(self, context, payload):"},{"line_number":231,"context_line":"        \"\"\"Deal with hosting device removed RPC message.\"\"\""},{"line_number":232,"context_line":"        try:"},{"line_number":233,"context_line":"            if payload[\u0027hosting_data\u0027]:"}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_189b0c67","line":230,"in_reply_to":"baada198_1e153f3c","updated":"2014-07-24 11:37:15.000000000","message":"This is a method defined as part of the RPC of the cfg agent itself. \nThe device-management functionality in the server side uses it to inform that a hosting device is going to be removed. The config agent can then inform the services (currently only routing) to take the appropriate action. \nIt could be kept in routingservicehelper, but was kept here because for extensibility with respect to additional services (like firewall and vpn) in the near future. Hope that clarifies it.","commit_id":"2332ca43b02fcfe92c09830f858077845f8fd2f8"}],"neutron/plugins/cisco/cfg_agent/cfg_exceptions.py":[{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"adbf8550f7b49ac400e519229ecec7be434e79a0","unresolved":false,"context_lines":[{"line_number":26,"context_line":"class CSR1kvInitializationException(DriverException):"},{"line_number":27,"context_line":"    \"\"\"Exception when initialization of CSR1kv Routing Driver object.\"\"\""},{"line_number":28,"context_line":"    message \u003d (_(\"Critical device parameter missing. Failed initializing \""},{"line_number":29,"context_line":"                 \"CSR1kv routing driver\"))"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"class CSR1kvConnectionException(DriverException):"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_e425380b","line":29,"updated":"2014-07-01 03:15:29.000000000","message":"Nit: In all the messages, be consistent on use of periods (last sentences seem to be missing).","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"dde8b861c991c2b538cfd787830f9c1858aee002","unresolved":false,"context_lines":[{"line_number":26,"context_line":"class CSR1kvInitializationException(DriverException):"},{"line_number":27,"context_line":"    \"\"\"Exception when initialization of CSR1kv Routing Driver object.\"\"\""},{"line_number":28,"context_line":"    message \u003d (_(\"Critical device parameter missing. Failed initializing \""},{"line_number":29,"context_line":"                 \"CSR1kv routing driver\"))"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"class CSR1kvConnectionException(DriverException):"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_d58bf965","line":29,"in_reply_to":"baada198_e425380b","updated":"2014-07-03 22:11:33.000000000","message":"Done","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"adbf8550f7b49ac400e519229ecec7be434e79a0","unresolved":false,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"class DriverNotFound(DriverException):"},{"line_number":50,"context_line":"    message \u003d _(\"Driver for found for resource id:%(id)s\")"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"class DriverNotSetForMissingParameter(DriverException):"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_a48340cb","line":50,"updated":"2014-07-01 03:15:29.000000000","message":"for found -\u003e not found","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"dde8b861c991c2b538cfd787830f9c1858aee002","unresolved":false,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"class DriverNotFound(DriverException):"},{"line_number":50,"context_line":"    message \u003d _(\"Driver for found for resource id:%(id)s\")"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"class DriverNotSetForMissingParameter(DriverException):"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_55f7e9f4","line":50,"in_reply_to":"baada198_a48340cb","updated":"2014-07-03 22:11:33.000000000","message":"Done","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"69aec30900e23ef773493672e0560cd76e73d06f","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    \"\"\"Connection exception when connecting to CSR1kv hosting device.\"\"\""},{"line_number":34,"context_line":"    message \u003d (_(\"Failed connecting to CSR1kv. Reason: %(reason)s. \""},{"line_number":35,"context_line":"                 \"Connection params are Host:%(host)s, \""},{"line_number":36,"context_line":"                 \"Port:%(port)s, Device timeout:%(timeout)s.\"))"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"class CSR1kvConfigException(DriverException):"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_9e0dc440","line":36,"updated":"2014-07-15 15:58:54.000000000","message":"Should this message also display the %(user)?","commit_id":"f799aeaac255bf660642f2b42f25d844b84d28ba"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"fee89a8ead6d9ad17fb85faa26858ee7ed60e91f","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    \"\"\"Connection exception when connecting to CSR1kv hosting device.\"\"\""},{"line_number":34,"context_line":"    message \u003d (_(\"Failed connecting to CSR1kv. Reason: %(reason)s. \""},{"line_number":35,"context_line":"                 \"Connection params are Host:%(host)s, \""},{"line_number":36,"context_line":"                 \"Port:%(port)s, Device timeout:%(timeout)s.\"))"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"class CSR1kvConfigException(DriverException):"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_494bdf2a","line":36,"in_reply_to":"baada198_9e0dc440","updated":"2014-07-18 17:26:10.000000000","message":"Done","commit_id":"f799aeaac255bf660642f2b42f25d844b84d28ba"}],"neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/cisco_csr1kv_snippets.py":[{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"adbf8550f7b49ac400e519229ecec7be434e79a0","unresolved":false,"context_lines":[{"line_number":178,"context_line":"\u003cconfig\u003e"},{"line_number":179,"context_line":"        \u003ccli-config-data\u003e"},{"line_number":180,"context_line":"            \u003ccmd\u003eno ip access-list standard %s\u003c/cmd\u003e"},{"line_number":181,"context_line":"            \u003c/cli-config-data\u003e"},{"line_number":182,"context_line":"\u003c/config\u003e"},{"line_number":183,"context_line":"\"\"\""},{"line_number":184,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_64604836","line":181,"updated":"2014-07-01 03:15:29.000000000","message":"Nit: indenting","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"dde8b861c991c2b538cfd787830f9c1858aee002","unresolved":false,"context_lines":[{"line_number":178,"context_line":"\u003cconfig\u003e"},{"line_number":179,"context_line":"        \u003ccli-config-data\u003e"},{"line_number":180,"context_line":"            \u003ccmd\u003eno ip access-list standard %s\u003c/cmd\u003e"},{"line_number":181,"context_line":"            \u003c/cli-config-data\u003e"},{"line_number":182,"context_line":"\u003c/config\u003e"},{"line_number":183,"context_line":"\"\"\""},{"line_number":184,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_d5e2192e","line":181,"in_reply_to":"baada198_64604836","updated":"2014-07-03 22:11:33.000000000","message":"Done","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"change_message_id":"6c936037d9fc37564b09e52cd646e7cce46d0faa","unresolved":false,"context_lines":[{"line_number":18,"context_line":"CSR (IOS-XE) XML-based configuration snippets"},{"line_number":19,"context_line":"\"\"\""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"# The standard Template used to interact with IOS-XE(CSR)."},{"line_number":22,"context_line":"# This template is added by the netconf client"},{"line_number":23,"context_line":"# EXEC_CONF_SNIPPET \u003d \"\"\""},{"line_number":24,"context_line":"#       \u003cconfig xmlns:xc\u003d\"urn:ietf:params:xml:ns:netconf:base:1.0\"\u003e"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_47dc51e1","line":21,"updated":"2014-07-28 16:34:40.000000000","message":"I love the comments in this file, they make the XML snippets easy to understand. Nice work!","commit_id":"334aeccd3f0fe34cbd980df7b1bc490616eb1eb1"}],"neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/csr1kv_routing_driver.py":[{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"adbf8550f7b49ac400e519229ecec7be434e79a0","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"# N1kv constants"},{"line_number":37,"context_line":"T1_PORT_NAME \u003d \u0027t1_p:\u0027  # T1 port/network is for VXLAN"},{"line_number":38,"context_line":"T2_PORT_NAME \u003d \u0027t2_p:\u0027  # T2 port/network is for VLAN"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_e4da98e8","line":37,"updated":"2014-07-01 03:15:29.000000000","message":"Nit: Is this really a prefix for the name?","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"dde8b861c991c2b538cfd787830f9c1858aee002","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"# N1kv constants"},{"line_number":37,"context_line":"T1_PORT_NAME \u003d \u0027t1_p:\u0027  # T1 port/network is for VXLAN"},{"line_number":38,"context_line":"T2_PORT_NAME \u003d \u0027t2_p:\u0027  # T2 port/network is for VLAN"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_b5bcc507","line":37,"in_reply_to":"baada198_e4da98e8","updated":"2014-07-03 22:11:33.000000000","message":"yes. it is a prefix. Changed appropriately","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":5892,"name":"pritesh","email":"pritesh@romana.io","username":"pritkoth"},"change_message_id":"d38f7b4cfd32ea5aeb2df100aa4f7d95aeb58635","unresolved":false,"context_lines":[{"line_number":183,"context_line":"            self._remove_interface_nat(in_intfc_name, \u0027inside\u0027)"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        #Wait for two second"},{"line_number":186,"context_line":"        LOG.debug(_(\"Sleep for 2 seconds before clearing NAT rules\"))"},{"line_number":187,"context_line":"        time.sleep(2)"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"        #Clear the NAT translation table"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_bf5d184b","line":186,"updated":"2014-06-30 17:58:40.000000000","message":"no debug translations (bug/1317851) this and others in file","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"dde8b861c991c2b538cfd787830f9c1858aee002","unresolved":false,"context_lines":[{"line_number":183,"context_line":"            self._remove_interface_nat(in_intfc_name, \u0027inside\u0027)"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        #Wait for two second"},{"line_number":186,"context_line":"        LOG.debug(_(\"Sleep for 2 seconds before clearing NAT rules\"))"},{"line_number":187,"context_line":"        time.sleep(2)"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"        #Clear the NAT translation table"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_153f3189","line":186,"in_reply_to":"baada198_bf5d184b","updated":"2014-07-03 22:11:33.000000000","message":"Done","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"adbf8550f7b49ac400e519229ecec7be434e79a0","unresolved":false,"context_lines":[{"line_number":275,"context_line":"    def _get_interface_name_from_hosting_port(self, port):"},{"line_number":276,"context_line":"        vlan \u003d self._get_interface_vlan_from_hosting_port(port)"},{"line_number":277,"context_line":"        int_no \u003d self._get_interface_no_from_hosting_port(port)"},{"line_number":278,"context_line":"        intfc_name \u003d \u0027GigabitEthernet\u0027 + str(int_no) + \u0027.\u0027 + str(vlan)"},{"line_number":279,"context_line":"        return intfc_name"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"    def _get_interface_vlan_from_hosting_port(self, port):"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_c4bbd470","line":278,"updated":"2014-07-01 03:15:29.000000000","message":"nit: can use \u0027GigabitEthernet%d.%d\u0027 % (int_no, vlan)","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"dde8b861c991c2b538cfd787830f9c1858aee002","unresolved":false,"context_lines":[{"line_number":275,"context_line":"    def _get_interface_name_from_hosting_port(self, port):"},{"line_number":276,"context_line":"        vlan \u003d self._get_interface_vlan_from_hosting_port(port)"},{"line_number":277,"context_line":"        int_no \u003d self._get_interface_no_from_hosting_port(port)"},{"line_number":278,"context_line":"        intfc_name \u003d \u0027GigabitEthernet\u0027 + str(int_no) + \u0027.\u0027 + str(vlan)"},{"line_number":279,"context_line":"        return intfc_name"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"    def _get_interface_vlan_from_hosting_port(self, port):"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_3540b506","line":278,"in_reply_to":"baada198_c4bbd470","updated":"2014-07-03 22:11:33.000000000","message":"Done","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"adbf8550f7b49ac400e519229ecec7be434e79a0","unresolved":false,"context_lines":[{"line_number":279,"context_line":"        return intfc_name"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"    def _get_interface_vlan_from_hosting_port(self, port):"},{"line_number":282,"context_line":"        hosting_info \u003d port[\u0027hosting_info\u0027]"},{"line_number":283,"context_line":"        vlan \u003d hosting_info[\u0027segmentation_id\u0027]"},{"line_number":284,"context_line":"        return vlan"},{"line_number":285,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_6463e81a","line":282,"updated":"2014-07-01 03:15:29.000000000","message":"nit: could do:\n\n    return port[\u0027hosting_info\u0027][\u0027segmentation_id\u0027]","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"dde8b861c991c2b538cfd787830f9c1858aee002","unresolved":false,"context_lines":[{"line_number":279,"context_line":"        return intfc_name"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"    def _get_interface_vlan_from_hosting_port(self, port):"},{"line_number":282,"context_line":"        hosting_info \u003d port[\u0027hosting_info\u0027]"},{"line_number":283,"context_line":"        vlan \u003d hosting_info[\u0027segmentation_id\u0027]"},{"line_number":284,"context_line":"        return vlan"},{"line_number":285,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_55452915","line":282,"in_reply_to":"baada198_6463e81a","updated":"2014-07-03 22:11:33.000000000","message":"Done","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"adbf8550f7b49ac400e519229ecec7be434e79a0","unresolved":false,"context_lines":[{"line_number":283,"context_line":"        vlan \u003d hosting_info[\u0027segmentation_id\u0027]"},{"line_number":284,"context_line":"        return vlan"},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"    def _get_interface_no_from_hosting_port(self, port):"},{"line_number":287,"context_line":"        _name \u003d port[\u0027hosting_info\u0027][\u0027hosting_port_name\u0027]"},{"line_number":288,"context_line":"        if_type \u003d _name.split(\u0027:\u0027)[0] + \u0027:\u0027"},{"line_number":289,"context_line":"        if if_type \u003d\u003d T1_PORT_NAME:"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_24581056","line":286,"updated":"2014-07-01 03:15:29.000000000","message":"since it is not obvious, it would be good to explain that one is for VLAN and one for VXLAN, and that the number after the colon is the router number for the CSR (and currently always one?(.","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"dde8b861c991c2b538cfd787830f9c1858aee002","unresolved":false,"context_lines":[{"line_number":283,"context_line":"        vlan \u003d hosting_info[\u0027segmentation_id\u0027]"},{"line_number":284,"context_line":"        return vlan"},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"    def _get_interface_no_from_hosting_port(self, port):"},{"line_number":287,"context_line":"        _name \u003d port[\u0027hosting_info\u0027][\u0027hosting_port_name\u0027]"},{"line_number":288,"context_line":"        if_type \u003d _name.split(\u0027:\u0027)[0] + \u0027:\u0027"},{"line_number":289,"context_line":"        if if_type \u003d\u003d T1_PORT_NAME:"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_754dcd3d","line":286,"in_reply_to":"baada198_24581056","updated":"2014-07-03 22:11:33.000000000","message":"Done","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"adbf8550f7b49ac400e519229ecec7be434e79a0","unresolved":false,"context_lines":[{"line_number":291,"context_line":"        elif if_type \u003d\u003d T2_PORT_NAME:"},{"line_number":292,"context_line":"            no \u003d str(int(_name.split(\u0027:\u0027)[1]) * 2 + 1)"},{"line_number":293,"context_line":"        else:"},{"line_number":294,"context_line":"            LOG.error(_(\u0027Unknown interface name: %s\u0027), if_type)"},{"line_number":295,"context_line":"        return no"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"    def _get_interfaces(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_c4403459","line":294,"updated":"2014-07-01 03:15:29.000000000","message":"Set a sensible value if unknown, or raise an exception?","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"dde8b861c991c2b538cfd787830f9c1858aee002","unresolved":false,"context_lines":[{"line_number":291,"context_line":"        elif if_type \u003d\u003d T2_PORT_NAME:"},{"line_number":292,"context_line":"            no \u003d str(int(_name.split(\u0027:\u0027)[1]) * 2 + 1)"},{"line_number":293,"context_line":"        else:"},{"line_number":294,"context_line":"            LOG.error(_(\u0027Unknown interface name: %s\u0027), if_type)"},{"line_number":295,"context_line":"        return no"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"    def _get_interfaces(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_954a6124","line":294,"in_reply_to":"baada198_c4403459","updated":"2014-07-03 22:11:33.000000000","message":"Done","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"adbf8550f7b49ac400e519229ecec7be434e79a0","unresolved":false,"context_lines":[{"line_number":302,"context_line":"        ioscfg \u003d self._get_running_config()"},{"line_number":303,"context_line":"        parse \u003d ciscoconfparse.CiscoConfParse(ioscfg)"},{"line_number":304,"context_line":"        intfs_raw \u003d parse.find_lines(\"^interface GigabitEthernet\")"},{"line_number":305,"context_line":"        intfs \u003d [l.strip().split(\u0027 \u0027)[1] for l in intfs_raw]"},{"line_number":306,"context_line":"        LOG.info(_(\"Interfaces:%s\"), intfs)"},{"line_number":307,"context_line":"        return intfs"},{"line_number":308,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_4403440f","line":305,"updated":"2014-07-01 03:15:29.000000000","message":"nit: The lowercase L looks line a one. Maybe use i or raw_if?","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"dde8b861c991c2b538cfd787830f9c1858aee002","unresolved":false,"context_lines":[{"line_number":302,"context_line":"        ioscfg \u003d self._get_running_config()"},{"line_number":303,"context_line":"        parse \u003d ciscoconfparse.CiscoConfParse(ioscfg)"},{"line_number":304,"context_line":"        intfs_raw \u003d parse.find_lines(\"^interface GigabitEthernet\")"},{"line_number":305,"context_line":"        intfs \u003d [l.strip().split(\u0027 \u0027)[1] for l in intfs_raw]"},{"line_number":306,"context_line":"        LOG.info(_(\"Interfaces:%s\"), intfs)"},{"line_number":307,"context_line":"        return intfs"},{"line_number":308,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_b553e5e0","line":305,"in_reply_to":"baada198_4403440f","updated":"2014-07-03 22:11:33.000000000","message":"Done","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"adbf8550f7b49ac400e519229ecec7be434e79a0","unresolved":false,"context_lines":[{"line_number":339,"context_line":"        configured as trunk for VLAN and VXLAN and hence the only ones"},{"line_number":340,"context_line":"        needed now."},{"line_number":341,"context_line":""},{"line_number":342,"context_line":"        Note: CSR1kv, in release 3.11 GigabitEthernet 0 is no longer"},{"line_number":343,"context_line":"        present. So GigabitEthernet 1 is used as management and"},{"line_number":344,"context_line":"        GigabitEthernet 2 and up are used for data. This might"},{"line_number":345,"context_line":"        change on future releases."}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_ff0f812c","line":342,"updated":"2014-07-01 03:15:29.000000000","message":"Since 3.13 or newer will be the first release, maybe can exclude the info on 3.11 and just indicate it can change in future.","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"dde8b861c991c2b538cfd787830f9c1858aee002","unresolved":false,"context_lines":[{"line_number":339,"context_line":"        configured as trunk for VLAN and VXLAN and hence the only ones"},{"line_number":340,"context_line":"        needed now."},{"line_number":341,"context_line":""},{"line_number":342,"context_line":"        Note: CSR1kv, in release 3.11 GigabitEthernet 0 is no longer"},{"line_number":343,"context_line":"        present. So GigabitEthernet 1 is used as management and"},{"line_number":344,"context_line":"        GigabitEthernet 2 and up are used for data. This might"},{"line_number":345,"context_line":"        change on future releases."}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_d55059d6","line":342,"in_reply_to":"baada198_ff0f812c","updated":"2014-07-03 22:11:33.000000000","message":"Done","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"adbf8550f7b49ac400e519229ecec7be434e79a0","unresolved":false,"context_lines":[{"line_number":421,"context_line":"                return True"},{"line_number":422,"context_line":"            LOG.error(_(\"Mismatch in ACL configuration for %s\"), acl_no)"},{"line_number":423,"context_line":"            return False"},{"line_number":424,"context_line":"        LOG.debug(_(\"%s is not present in config\"), acl_no)"},{"line_number":425,"context_line":"        return False"},{"line_number":426,"context_line":""},{"line_number":427,"context_line":"    def _cfg_exists(self, cfg_str):"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_7f2b7182","line":424,"updated":"2014-07-01 03:15:29.000000000","message":"As mentioned by others, just remove i18n from all debug level logging in all files.","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"adbf8550f7b49ac400e519229ecec7be434e79a0","unresolved":false,"context_lines":[{"line_number":494,"context_line":"    def _get_interface_cfg(self, interface):"},{"line_number":495,"context_line":"        ioscfg \u003d self._get_running_config()"},{"line_number":496,"context_line":"        parse \u003d ciscoconfparse.CiscoConfParse(ioscfg)"},{"line_number":497,"context_line":"        res \u003d parse.find_children(\u0027interface \u0027 + interface)"},{"line_number":498,"context_line":"        return res"},{"line_number":499,"context_line":""},{"line_number":500,"context_line":"    def _nat_rules_for_internet_access(self, acl_no, network,"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_9f20459d","line":497,"updated":"2014-07-01 03:15:29.000000000","message":"nit: can remove temp variable and return here.","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"dde8b861c991c2b538cfd787830f9c1858aee002","unresolved":false,"context_lines":[{"line_number":494,"context_line":"    def _get_interface_cfg(self, interface):"},{"line_number":495,"context_line":"        ioscfg \u003d self._get_running_config()"},{"line_number":496,"context_line":"        parse \u003d ciscoconfparse.CiscoConfParse(ioscfg)"},{"line_number":497,"context_line":"        res \u003d parse.find_children(\u0027interface \u0027 + interface)"},{"line_number":498,"context_line":"        return res"},{"line_number":499,"context_line":""},{"line_number":500,"context_line":"    def _nat_rules_for_internet_access(self, acl_no, network,"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_f560fda6","line":497,"in_reply_to":"baada198_9f20459d","updated":"2014-07-03 22:11:33.000000000","message":"Done","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"adbf8550f7b49ac400e519229ecec7be434e79a0","unresolved":false,"context_lines":[{"line_number":504,"context_line":"                                       vrf_name):"},{"line_number":505,"context_line":"        \"\"\"Configure the NAT rules for an internal network."},{"line_number":506,"context_line":""},{"line_number":507,"context_line":"        Configuring NAT rules in the CSR1kv is a four step process. First"},{"line_number":508,"context_line":"        create an ACL for the IP range of the internal network. Then enable"},{"line_number":509,"context_line":"        dynamic source NATing on the external interface of the CSR for this"},{"line_number":510,"context_line":"        ACL and VRF of the neutron router. Then enable NAT on the interfaces"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_ff36a1e6","line":507,"updated":"2014-07-01 03:15:29.000000000","message":"four -\u003e three?","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"dde8b861c991c2b538cfd787830f9c1858aee002","unresolved":false,"context_lines":[{"line_number":504,"context_line":"                                       vrf_name):"},{"line_number":505,"context_line":"        \"\"\"Configure the NAT rules for an internal network."},{"line_number":506,"context_line":""},{"line_number":507,"context_line":"        Configuring NAT rules in the CSR1kv is a four step process. First"},{"line_number":508,"context_line":"        create an ACL for the IP range of the internal network. Then enable"},{"line_number":509,"context_line":"        dynamic source NATing on the external interface of the CSR for this"},{"line_number":510,"context_line":"        ACL and VRF of the neutron router. Then enable NAT on the interfaces"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_156651c1","line":507,"in_reply_to":"baada198_ff36a1e6","updated":"2014-07-03 22:11:33.000000000","message":"Done","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"adbf8550f7b49ac400e519229ecec7be434e79a0","unresolved":false,"context_lines":[{"line_number":631,"context_line":"        conn \u003d self._get_connection()"},{"line_number":632,"context_line":"        rpc_obj \u003d conn.edit_config(target\u003d\u0027running\u0027, config\u003dconfstr)"},{"line_number":633,"context_line":"        if self._check_response(rpc_obj, snippet):"},{"line_number":634,"context_line":"            LOG.info(_(\"%s successfully executed\"), snippet)"},{"line_number":635,"context_line":"        else:"},{"line_number":636,"context_line":"            LOG.exception(_(\"Failed executing %s\"), snippet)"},{"line_number":637,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_1f6275d8","line":634,"updated":"2014-07-01 03:15:29.000000000","message":"Should instead you log info on L668 so it applies to all checks? Or is there something special about this request?","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"dde8b861c991c2b538cfd787830f9c1858aee002","unresolved":false,"context_lines":[{"line_number":631,"context_line":"        conn \u003d self._get_connection()"},{"line_number":632,"context_line":"        rpc_obj \u003d conn.edit_config(target\u003d\u0027running\u0027, config\u003dconfstr)"},{"line_number":633,"context_line":"        if self._check_response(rpc_obj, snippet):"},{"line_number":634,"context_line":"            LOG.info(_(\"%s successfully executed\"), snippet)"},{"line_number":635,"context_line":"        else:"},{"line_number":636,"context_line":"            LOG.exception(_(\"Failed executing %s\"), snippet)"},{"line_number":637,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_555c49ed","line":634,"in_reply_to":"baada198_1f6275d8","updated":"2014-07-03 22:11:33.000000000","message":"removed","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"adbf8550f7b49ac400e519229ecec7be434e79a0","unresolved":false,"context_lines":[{"line_number":633,"context_line":"        if self._check_response(rpc_obj, snippet):"},{"line_number":634,"context_line":"            LOG.info(_(\"%s successfully executed\"), snippet)"},{"line_number":635,"context_line":"        else:"},{"line_number":636,"context_line":"            LOG.exception(_(\"Failed executing %s\"), snippet)"},{"line_number":637,"context_line":""},{"line_number":638,"context_line":"    def _check_response(self, rpc_obj, snippet_name):"},{"line_number":639,"context_line":"        \"\"\"This function checks the rpc response object for status."}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_ff3dc1bc","line":636,"updated":"2014-07-01 03:15:29.000000000","message":"How will this ever be reached? If there is an exception, it is raised and this will never be reached. So, if is not needed, right?","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"dde8b861c991c2b538cfd787830f9c1858aee002","unresolved":false,"context_lines":[{"line_number":633,"context_line":"        if self._check_response(rpc_obj, snippet):"},{"line_number":634,"context_line":"            LOG.info(_(\"%s successfully executed\"), snippet)"},{"line_number":635,"context_line":"        else:"},{"line_number":636,"context_line":"            LOG.exception(_(\"Failed executing %s\"), snippet)"},{"line_number":637,"context_line":""},{"line_number":638,"context_line":"    def _check_response(self, rpc_obj, snippet_name):"},{"line_number":639,"context_line":"        \"\"\"This function checks the rpc response object for status."}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_b56a057f","line":636,"in_reply_to":"baada198_ff3dc1bc","updated":"2014-07-03 22:11:33.000000000","message":"you are right. removed","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"adbf8550f7b49ac400e519229ecec7be434e79a0","unresolved":false,"context_lines":[{"line_number":671,"context_line":"        e_type \u003d rpc_obj._root[0][0].text"},{"line_number":672,"context_line":"        e_tag \u003d rpc_obj._root[0][1].text"},{"line_number":673,"context_line":"        params \u003d {\u0027snippet\u0027: snippet_name, \u0027type\u0027: e_type, \u0027tag\u0027: e_tag}"},{"line_number":674,"context_line":"        raise cfg_exc.CSR1kvConfigException(**params)"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_3fbbb90f","line":674,"updated":"2014-07-01 03:15:29.000000000","message":"Do you want to log here?","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"dde8b861c991c2b538cfd787830f9c1858aee002","unresolved":false,"context_lines":[{"line_number":671,"context_line":"        e_type \u003d rpc_obj._root[0][0].text"},{"line_number":672,"context_line":"        e_tag \u003d rpc_obj._root[0][1].text"},{"line_number":673,"context_line":"        params \u003d {\u0027snippet\u0027: snippet_name, \u0027type\u0027: e_type, \u0027tag\u0027: e_tag}"},{"line_number":674,"context_line":"        raise cfg_exc.CSR1kvConfigException(**params)"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_350ef5e5","line":674,"in_reply_to":"baada198_3fbbb90f","updated":"2014-07-03 22:11:33.000000000","message":"Is later caught and logged in a single place","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"0f4919ce16b22c8cc524a7ab20238493015af6a9","unresolved":false,"context_lines":[{"line_number":286,"context_line":""},{"line_number":287,"context_line":"         Interfaces in the CSR1kv are created in pairs (T1 and T2) where"},{"line_number":288,"context_line":"         T1 interface is used for VLAN and T2 interface for VXLAN traffic"},{"line_number":289,"context_line":"         respectively. In neutron side these are named as T1 and T2 ports and"},{"line_number":290,"context_line":"         follows the naming convention: \u003cTx_PORT_NAME_PREFIX\u003e:\u003cPAIR_INDEX\u003e"},{"line_number":291,"context_line":"         where the `PORT_NAME_PREFIX` indicates either VLAN or VXLAN and"},{"line_number":292,"context_line":"         `PAIR_INDEX` is the pair number. `PAIR_INDEX` starts at 1."}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_05244ac3","line":289,"updated":"2014-07-04 15:45:57.000000000","message":"nit: In -\u003e On the","commit_id":"23c8d9d830d1639f29088f2502ec650f71d7032d"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"77a381a655bc90f1d6858732f3b4a8a53e6816fe","unresolved":false,"context_lines":[{"line_number":286,"context_line":""},{"line_number":287,"context_line":"         Interfaces in the CSR1kv are created in pairs (T1 and T2) where"},{"line_number":288,"context_line":"         T1 interface is used for VLAN and T2 interface for VXLAN traffic"},{"line_number":289,"context_line":"         respectively. In neutron side these are named as T1 and T2 ports and"},{"line_number":290,"context_line":"         follows the naming convention: \u003cTx_PORT_NAME_PREFIX\u003e:\u003cPAIR_INDEX\u003e"},{"line_number":291,"context_line":"         where the `PORT_NAME_PREFIX` indicates either VLAN or VXLAN and"},{"line_number":292,"context_line":"         `PAIR_INDEX` is the pair number. `PAIR_INDEX` starts at 1."}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_53526167","line":289,"in_reply_to":"baada198_05244ac3","updated":"2014-07-07 15:04:16.000000000","message":"Done","commit_id":"23c8d9d830d1639f29088f2502ec650f71d7032d"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"69aec30900e23ef773493672e0560cd76e73d06f","unresolved":false,"context_lines":[{"line_number":203,"context_line":"        vrf_name \u003d self._csr_get_vrf_name(ri)"},{"line_number":204,"context_line":"        self._remove_default_static_route(gw_ip, vrf_name)"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"    def _csr_add_floating_ip(self, ri, ex_gw_port, floating_ip, fixed_ip):"},{"line_number":207,"context_line":"        vrf_name \u003d self._csr_get_vrf_name(ri)"},{"line_number":208,"context_line":"        self._add_floating_ip(floating_ip, fixed_ip, vrf_name)"},{"line_number":209,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_b447071c","line":206,"updated":"2014-07-15 15:58:54.000000000","message":"\u0027ex_gw_port\u0027 is not used","commit_id":"f799aeaac255bf660642f2b42f25d844b84d28ba"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"fee89a8ead6d9ad17fb85faa26858ee7ed60e91f","unresolved":false,"context_lines":[{"line_number":203,"context_line":"        vrf_name \u003d self._csr_get_vrf_name(ri)"},{"line_number":204,"context_line":"        self._remove_default_static_route(gw_ip, vrf_name)"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"    def _csr_add_floating_ip(self, ri, ex_gw_port, floating_ip, fixed_ip):"},{"line_number":207,"context_line":"        vrf_name \u003d self._csr_get_vrf_name(ri)"},{"line_number":208,"context_line":"        self._add_floating_ip(floating_ip, fixed_ip, vrf_name)"},{"line_number":209,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_29114b04","line":206,"in_reply_to":"baada198_b447071c","updated":"2014-07-18 17:26:10.000000000","message":"removed.\n\nWill need to keep ex_gw_port in floating_ip_added() though, as its part of the interface and should be broader than a particular implementation done here.","commit_id":"f799aeaac255bf660642f2b42f25d844b84d28ba"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"69aec30900e23ef773493672e0560cd76e73d06f","unresolved":false,"context_lines":[{"line_number":278,"context_line":"        intfc_name \u003d \u0027GigabitEthernet%s.%s\u0027 % (int_no, vlan)"},{"line_number":279,"context_line":"        return intfc_name"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"    def _get_interface_vlan_from_hosting_port(self, port):"},{"line_number":282,"context_line":"        return port[\u0027hosting_info\u0027][\u0027segmentation_id\u0027]"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"    def _get_interface_no_from_hosting_port(self, port):"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_1407d3ca","line":281,"updated":"2014-07-15 15:58:54.000000000","message":"Can be a static method.","commit_id":"f799aeaac255bf660642f2b42f25d844b84d28ba"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"fee89a8ead6d9ad17fb85faa26858ee7ed60e91f","unresolved":false,"context_lines":[{"line_number":278,"context_line":"        intfc_name \u003d \u0027GigabitEthernet%s.%s\u0027 % (int_no, vlan)"},{"line_number":279,"context_line":"        return intfc_name"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"    def _get_interface_vlan_from_hosting_port(self, port):"},{"line_number":282,"context_line":"        return port[\u0027hosting_info\u0027][\u0027segmentation_id\u0027]"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"    def _get_interface_no_from_hosting_port(self, port):"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_a94e3b36","line":281,"in_reply_to":"baada198_1407d3ca","updated":"2014-07-18 17:26:10.000000000","message":"Done","commit_id":"f799aeaac255bf660642f2b42f25d844b84d28ba"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"69aec30900e23ef773493672e0560cd76e73d06f","unresolved":false,"context_lines":[{"line_number":281,"context_line":"    def _get_interface_vlan_from_hosting_port(self, port):"},{"line_number":282,"context_line":"        return port[\u0027hosting_info\u0027][\u0027segmentation_id\u0027]"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"    def _get_interface_no_from_hosting_port(self, port):"},{"line_number":285,"context_line":"        \"\"\"Calculate interface number from the hosting port\u0027s name."},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"         Interfaces in the CSR1kv are created in pairs (T1 and T2) where"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_b4f547cc","line":284,"updated":"2014-07-15 15:58:54.000000000","message":"Can be a static method.","commit_id":"f799aeaac255bf660642f2b42f25d844b84d28ba"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"fee89a8ead6d9ad17fb85faa26858ee7ed60e91f","unresolved":false,"context_lines":[{"line_number":281,"context_line":"    def _get_interface_vlan_from_hosting_port(self, port):"},{"line_number":282,"context_line":"        return port[\u0027hosting_info\u0027][\u0027segmentation_id\u0027]"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"    def _get_interface_no_from_hosting_port(self, port):"},{"line_number":285,"context_line":"        \"\"\"Calculate interface number from the hosting port\u0027s name."},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"         Interfaces in the CSR1kv are created in pairs (T1 and T2) where"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_e963d3ae","line":284,"in_reply_to":"baada198_b4f547cc","updated":"2014-07-18 17:26:10.000000000","message":"Done","commit_id":"f799aeaac255bf660642f2b42f25d844b84d28ba"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"69aec30900e23ef773493672e0560cd76e73d06f","unresolved":false,"context_lines":[{"line_number":486,"context_line":"                                                  vrf_name, ip, mask)"},{"line_number":487,"context_line":"        self._edit_running_config(confstr, \u0027CREATE_SUBINTERFACE\u0027)"},{"line_number":488,"context_line":""},{"line_number":489,"context_line":"    def _remove_subinterface(self, subinterface, vlan_id, vrf_name, ip):"},{"line_number":490,"context_line":"        #Optional : verify this is the correct subinterface"},{"line_number":491,"context_line":"        conn \u003d self._get_connection()"},{"line_number":492,"context_line":"        if self._interface_exists(subinterface):"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_d41d5bbf","line":489,"updated":"2014-07-15 15:58:54.000000000","message":"vlan_id, vrf_name, ip \u003c-- not used","commit_id":"f799aeaac255bf660642f2b42f25d844b84d28ba"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"fee89a8ead6d9ad17fb85faa26858ee7ed60e91f","unresolved":false,"context_lines":[{"line_number":486,"context_line":"                                                  vrf_name, ip, mask)"},{"line_number":487,"context_line":"        self._edit_running_config(confstr, \u0027CREATE_SUBINTERFACE\u0027)"},{"line_number":488,"context_line":""},{"line_number":489,"context_line":"    def _remove_subinterface(self, subinterface, vlan_id, vrf_name, ip):"},{"line_number":490,"context_line":"        #Optional : verify this is the correct subinterface"},{"line_number":491,"context_line":"        conn \u003d self._get_connection()"},{"line_number":492,"context_line":"        if self._interface_exists(subinterface):"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_295a2bf2","line":489,"in_reply_to":"baada198_d41d5bbf","updated":"2014-07-18 17:26:10.000000000","message":"removed","commit_id":"f799aeaac255bf660642f2b42f25d844b84d28ba"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"69aec30900e23ef773493672e0560cd76e73d06f","unresolved":false,"context_lines":[{"line_number":490,"context_line":"        #Optional : verify this is the correct subinterface"},{"line_number":491,"context_line":"        conn \u003d self._get_connection()"},{"line_number":492,"context_line":"        if self._interface_exists(subinterface):"},{"line_number":493,"context_line":"            confstr \u003d snippets.REMOVE_SUBINTERFACE % (subinterface)"},{"line_number":494,"context_line":"            rpc_obj \u003d conn.edit_config(target\u003d\u0027running\u0027, config\u003dconfstr)"},{"line_number":495,"context_line":"            self._check_response(rpc_obj, \u0027REMOVE_SUBINTERFACE\u0027)"},{"line_number":496,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_54814bc1","line":493,"updated":"2014-07-15 15:58:54.000000000","message":"Redundant parentheses.","commit_id":"f799aeaac255bf660642f2b42f25d844b84d28ba"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"fee89a8ead6d9ad17fb85faa26858ee7ed60e91f","unresolved":false,"context_lines":[{"line_number":490,"context_line":"        #Optional : verify this is the correct subinterface"},{"line_number":491,"context_line":"        conn \u003d self._get_connection()"},{"line_number":492,"context_line":"        if self._interface_exists(subinterface):"},{"line_number":493,"context_line":"            confstr \u003d snippets.REMOVE_SUBINTERFACE % (subinterface)"},{"line_number":494,"context_line":"            rpc_obj \u003d conn.edit_config(target\u003d\u0027running\u0027, config\u003dconfstr)"},{"line_number":495,"context_line":"            self._check_response(rpc_obj, \u0027REMOVE_SUBINTERFACE\u0027)"},{"line_number":496,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_89689789","line":493,"in_reply_to":"baada198_54814bc1","updated":"2014-07-18 17:26:10.000000000","message":"Done","commit_id":"f799aeaac255bf660642f2b42f25d844b84d28ba"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"69aec30900e23ef773493672e0560cd76e73d06f","unresolved":false,"context_lines":[{"line_number":649,"context_line":"        rpc_obj \u003d conn.edit_config(target\u003d\u0027running\u0027, config\u003dconfstr)"},{"line_number":650,"context_line":"        self._check_response(rpc_obj, snippet)"},{"line_number":651,"context_line":""},{"line_number":652,"context_line":"    def _check_response(self, rpc_obj, snippet_name):"},{"line_number":653,"context_line":"        \"\"\"This function checks the rpc response object for status."},{"line_number":654,"context_line":""},{"line_number":655,"context_line":"        This function takes as input the response rpc_obj and the snippet name"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_b450e75e","line":652,"updated":"2014-07-15 15:58:54.000000000","message":"Can be a static method.","commit_id":"f799aeaac255bf660642f2b42f25d844b84d28ba"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"fee89a8ead6d9ad17fb85faa26858ee7ed60e91f","unresolved":false,"context_lines":[{"line_number":649,"context_line":"        rpc_obj \u003d conn.edit_config(target\u003d\u0027running\u0027, config\u003dconfstr)"},{"line_number":650,"context_line":"        self._check_response(rpc_obj, snippet)"},{"line_number":651,"context_line":""},{"line_number":652,"context_line":"    def _check_response(self, rpc_obj, snippet_name):"},{"line_number":653,"context_line":"        \"\"\"This function checks the rpc response object for status."},{"line_number":654,"context_line":""},{"line_number":655,"context_line":"        This function takes as input the response rpc_obj and the snippet name"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_c9052fc3","line":652,"in_reply_to":"baada198_b450e75e","updated":"2014-07-18 17:26:10.000000000","message":"Done","commit_id":"f799aeaac255bf660642f2b42f25d844b84d28ba"}],"neutron/plugins/cisco/cfg_agent/device_drivers/devicedriver_api.py":[{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"adbf8550f7b49ac400e519229ecec7be434e79a0","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    def router_added(self, router_info):"},{"line_number":35,"context_line":"        \"\"\"A logical router is assigned to the hosting device"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"           returns: None"},{"line_number":38,"context_line":"           :param router_info: RouterInfo object for this router"},{"line_number":39,"context_line":"        \"\"\""},{"line_number":40,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_ffab01d4","line":37,"updated":"2014-07-01 03:15:29.000000000","message":"Nit: indenting aligned with first quote on all these docstrings.","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"dde8b861c991c2b538cfd787830f9c1858aee002","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    def router_added(self, router_info):"},{"line_number":35,"context_line":"        \"\"\"A logical router is assigned to the hosting device"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"           returns: None"},{"line_number":38,"context_line":"           :param router_info: RouterInfo object for this router"},{"line_number":39,"context_line":"        \"\"\""},{"line_number":40,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_5513690c","line":37,"in_reply_to":"baada198_ffab01d4","updated":"2014-07-03 22:11:33.000000000","message":"Done","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"69aec30900e23ef773493672e0560cd76e73d06f","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    @abc.abstractmethod"},{"line_number":34,"context_line":"    def router_added(self, router_info):"},{"line_number":35,"context_line":"        \"\"\"A logical router is assigned to the hosting device."},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"        :param router_info: RouterInfo object for this router"},{"line_number":38,"context_line":"        :return None"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_f4a25f3d","line":35,"updated":"2014-07-15 15:58:54.000000000","message":"s/is/was/","commit_id":"f799aeaac255bf660642f2b42f25d844b84d28ba"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"fee89a8ead6d9ad17fb85faa26858ee7ed60e91f","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    @abc.abstractmethod"},{"line_number":34,"context_line":"    def router_added(self, router_info):"},{"line_number":35,"context_line":"        \"\"\"A logical router is assigned to the hosting device."},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"        :param router_info: RouterInfo object for this router"},{"line_number":38,"context_line":"        :return None"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_49203f49","line":35,"in_reply_to":"baada198_f4a25f3d","updated":"2014-07-18 17:26:10.000000000","message":"Done","commit_id":"f799aeaac255bf660642f2b42f25d844b84d28ba"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"69aec30900e23ef773493672e0560cd76e73d06f","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    @abc.abstractmethod"},{"line_number":43,"context_line":"    def router_removed(self, router_info):"},{"line_number":44,"context_line":"        \"\"\"A logical router is de-assigned from the hosting device."},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"        :param router_info: RouterInfo object for this router"},{"line_number":47,"context_line":"        :return None"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_346857f4","line":44,"updated":"2014-07-15 15:58:54.000000000","message":"s/is/was/","commit_id":"f799aeaac255bf660642f2b42f25d844b84d28ba"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"fee89a8ead6d9ad17fb85faa26858ee7ed60e91f","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    @abc.abstractmethod"},{"line_number":43,"context_line":"    def router_removed(self, router_info):"},{"line_number":44,"context_line":"        \"\"\"A logical router is de-assigned from the hosting device."},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"        :param router_info: RouterInfo object for this router"},{"line_number":47,"context_line":"        :return None"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_691d030f","line":44,"in_reply_to":"baada198_346857f4","updated":"2014-07-18 17:26:10.000000000","message":"Done","commit_id":"f799aeaac255bf660642f2b42f25d844b84d28ba"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"69aec30900e23ef773493672e0560cd76e73d06f","unresolved":false,"context_lines":[{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    @abc.abstractmethod"},{"line_number":53,"context_line":"    def internal_network_added(self, router_info, port):"},{"line_number":54,"context_line":"        \"\"\"An internal network is connected to a router."},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        :param router_info: RouterInfo object for this router"},{"line_number":57,"context_line":"        :param port : port dictionary for the port where the internal"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_d47e3bae","line":54,"updated":"2014-07-15 15:58:54.000000000","message":"s/is/was/","commit_id":"f799aeaac255bf660642f2b42f25d844b84d28ba"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"fee89a8ead6d9ad17fb85faa26858ee7ed60e91f","unresolved":false,"context_lines":[{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    @abc.abstractmethod"},{"line_number":53,"context_line":"    def internal_network_added(self, router_info, port):"},{"line_number":54,"context_line":"        \"\"\"An internal network is connected to a router."},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        :param router_info: RouterInfo object for this router"},{"line_number":57,"context_line":"        :param port : port dictionary for the port where the internal"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_8916d7f0","line":54,"in_reply_to":"baada198_d47e3bae","updated":"2014-07-18 17:26:10.000000000","message":"Done","commit_id":"f799aeaac255bf660642f2b42f25d844b84d28ba"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"69aec30900e23ef773493672e0560cd76e73d06f","unresolved":false,"context_lines":[{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    @abc.abstractmethod"},{"line_number":64,"context_line":"    def internal_network_removed(self, router_info, port):"},{"line_number":65,"context_line":"        \"\"\"An internal network is removed from a router."},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        :param router_info: RouterInfo object for this router"},{"line_number":68,"context_line":"        :param port : port dictionary for the port where the internal"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_344f7793","line":65,"updated":"2014-07-15 15:58:54.000000000","message":"s/is/was/","commit_id":"f799aeaac255bf660642f2b42f25d844b84d28ba"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"fee89a8ead6d9ad17fb85faa26858ee7ed60e91f","unresolved":false,"context_lines":[{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    @abc.abstractmethod"},{"line_number":64,"context_line":"    def internal_network_removed(self, router_info, port):"},{"line_number":65,"context_line":"        \"\"\"An internal network is removed from a router."},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        :param router_info: RouterInfo object for this router"},{"line_number":68,"context_line":"        :param port : port dictionary for the port where the internal"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_a9139bff","line":65,"in_reply_to":"baada198_344f7793","updated":"2014-07-18 17:26:10.000000000","message":"Done","commit_id":"f799aeaac255bf660642f2b42f25d844b84d28ba"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"69aec30900e23ef773493672e0560cd76e73d06f","unresolved":false,"context_lines":[{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    @abc.abstractmethod"},{"line_number":75,"context_line":"    def external_gateway_added(self, router_info, ex_gw_port):"},{"line_number":76,"context_line":"        \"\"\"An external network is added to a router."},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"        :param router_info: RouterInfo object of the router"},{"line_number":79,"context_line":"        :param ex_gw_port : port dictionary for the port where the external"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_74456f6d","line":76,"updated":"2014-07-15 15:58:54.000000000","message":"s/is/was/","commit_id":"f799aeaac255bf660642f2b42f25d844b84d28ba"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"fee89a8ead6d9ad17fb85faa26858ee7ed60e91f","unresolved":false,"context_lines":[{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    @abc.abstractmethod"},{"line_number":75,"context_line":"    def external_gateway_added(self, router_info, ex_gw_port):"},{"line_number":76,"context_line":"        \"\"\"An external network is added to a router."},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"        :param router_info: RouterInfo object of the router"},{"line_number":79,"context_line":"        :param ex_gw_port : port dictionary for the port where the external"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_c9d36f36","line":76,"in_reply_to":"baada198_74456f6d","updated":"2014-07-18 17:26:10.000000000","message":"Done","commit_id":"f799aeaac255bf660642f2b42f25d844b84d28ba"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"69aec30900e23ef773493672e0560cd76e73d06f","unresolved":false,"context_lines":[{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    @abc.abstractmethod"},{"line_number":86,"context_line":"    def external_gateway_removed(self, router_info, ex_gw_port):"},{"line_number":87,"context_line":"        \"\"\"An external network is removed from the router."},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"        :param router_info: RouterInfo object of the router"},{"line_number":90,"context_line":"        :param ex_gw_port : port dictionary for the port where the external"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_945f6340","line":87,"updated":"2014-07-15 15:58:54.000000000","message":"s/is/was/","commit_id":"f799aeaac255bf660642f2b42f25d844b84d28ba"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"fee89a8ead6d9ad17fb85faa26858ee7ed60e91f","unresolved":false,"context_lines":[{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    @abc.abstractmethod"},{"line_number":86,"context_line":"    def external_gateway_removed(self, router_info, ex_gw_port):"},{"line_number":87,"context_line":"        \"\"\"An external network is removed from the router."},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"        :param router_info: RouterInfo object of the router"},{"line_number":90,"context_line":"        :param ex_gw_port : port dictionary for the port where the external"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_e9d83355","line":87,"in_reply_to":"baada198_945f6340","updated":"2014-07-18 17:26:10.000000000","message":"Done","commit_id":"f799aeaac255bf660642f2b42f25d844b84d28ba"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"69aec30900e23ef773493672e0560cd76e73d06f","unresolved":false,"context_lines":[{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    @abc.abstractmethod"},{"line_number":110,"context_line":"    def disable_internal_network_NAT(self, router_info, port, ex_gw_port):"},{"line_number":111,"context_line":"        \"\"\"Diable NAT on an internal network."},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"        :param router_info: RouterInfo object for this router"},{"line_number":114,"context_line":"        :param port       : port dictionary for the port where the internal"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_f48b3fbd","line":111,"updated":"2014-07-15 15:58:54.000000000","message":"Disable","commit_id":"f799aeaac255bf660642f2b42f25d844b84d28ba"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"fee89a8ead6d9ad17fb85faa26858ee7ed60e91f","unresolved":false,"context_lines":[{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    @abc.abstractmethod"},{"line_number":110,"context_line":"    def disable_internal_network_NAT(self, router_info, port, ex_gw_port):"},{"line_number":111,"context_line":"        \"\"\"Diable NAT on an internal network."},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"        :param router_info: RouterInfo object for this router"},{"line_number":114,"context_line":"        :param port       : port dictionary for the port where the internal"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_09dac74a","line":111,"in_reply_to":"baada198_f48b3fbd","updated":"2014-07-18 17:26:10.000000000","message":"Done","commit_id":"f799aeaac255bf660642f2b42f25d844b84d28ba"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"69aec30900e23ef773493672e0560cd76e73d06f","unresolved":false,"context_lines":[{"line_number":122,"context_line":"    @abc.abstractmethod"},{"line_number":123,"context_line":"    def floating_ip_added(self, router_info, ex_gw_port,"},{"line_number":124,"context_line":"                          floating_ip, fixed_ip):"},{"line_number":125,"context_line":"        \"\"\"A floating IP is added."},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"        :param router_info: RouterInfo object for this router"},{"line_number":128,"context_line":"        :param ex_gw_port : port dictionary for the port where the external"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_f4509f2d","line":125,"updated":"2014-07-15 15:58:54.000000000","message":"s/is/was/","commit_id":"f799aeaac255bf660642f2b42f25d844b84d28ba"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"fee89a8ead6d9ad17fb85faa26858ee7ed60e91f","unresolved":false,"context_lines":[{"line_number":122,"context_line":"    @abc.abstractmethod"},{"line_number":123,"context_line":"    def floating_ip_added(self, router_info, ex_gw_port,"},{"line_number":124,"context_line":"                          floating_ip, fixed_ip):"},{"line_number":125,"context_line":"        \"\"\"A floating IP is added."},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"        :param router_info: RouterInfo object for this router"},{"line_number":128,"context_line":"        :param ex_gw_port : port dictionary for the port where the external"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_49e75f12","line":125,"in_reply_to":"baada198_f4509f2d","updated":"2014-07-18 17:26:10.000000000","message":"Done","commit_id":"f799aeaac255bf660642f2b42f25d844b84d28ba"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"69aec30900e23ef773493672e0560cd76e73d06f","unresolved":false,"context_lines":[{"line_number":137,"context_line":"    @abc.abstractmethod"},{"line_number":138,"context_line":"    def floating_ip_removed(self, router_info, ex_gw_port,"},{"line_number":139,"context_line":"                            floating_ip, fixed_ip):"},{"line_number":140,"context_line":"        \"\"\"A floating IP is removed."},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"        :param router_info: RouterInfo object for this router"},{"line_number":143,"context_line":"        :param ex_gw_port : port dictionary for the port where the external"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_743c8fe1","line":140,"updated":"2014-07-15 15:58:54.000000000","message":"s/is/was/","commit_id":"f799aeaac255bf660642f2b42f25d844b84d28ba"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"fee89a8ead6d9ad17fb85faa26858ee7ed60e91f","unresolved":false,"context_lines":[{"line_number":137,"context_line":"    @abc.abstractmethod"},{"line_number":138,"context_line":"    def floating_ip_removed(self, router_info, ex_gw_port,"},{"line_number":139,"context_line":"                            floating_ip, fixed_ip):"},{"line_number":140,"context_line":"        \"\"\"A floating IP is removed."},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"        :param router_info: RouterInfo object for this router"},{"line_number":143,"context_line":"        :param ex_gw_port : port dictionary for the port where the external"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_89edf7f2","line":140,"in_reply_to":"baada198_743c8fe1","updated":"2014-07-18 17:26:10.000000000","message":"Done","commit_id":"f799aeaac255bf660642f2b42f25d844b84d28ba"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"69aec30900e23ef773493672e0560cd76e73d06f","unresolved":false,"context_lines":[{"line_number":150,"context_line":""},{"line_number":151,"context_line":"    @abc.abstractmethod"},{"line_number":152,"context_line":"    def routes_updated(self, router_info, action, route):"},{"line_number":153,"context_line":"        \"\"\"Routes are updated for router."},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"        :param router_info: RouterInfo object for this router"},{"line_number":156,"context_line":"        :param action : Action on the route , either \u0027replace\u0027 or \u0027delete\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_141a737c","line":153,"updated":"2014-07-15 15:58:54.000000000","message":"s/are/were/","commit_id":"f799aeaac255bf660642f2b42f25d844b84d28ba"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"fee89a8ead6d9ad17fb85faa26858ee7ed60e91f","unresolved":false,"context_lines":[{"line_number":150,"context_line":""},{"line_number":151,"context_line":"    @abc.abstractmethod"},{"line_number":152,"context_line":"    def routes_updated(self, router_info, action, route):"},{"line_number":153,"context_line":"        \"\"\"Routes are updated for router."},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"        :param router_info: RouterInfo object for this router"},{"line_number":156,"context_line":"        :param action : Action on the route , either \u0027replace\u0027 or \u0027delete\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_a9eabbd5","line":153,"in_reply_to":"baada198_141a737c","updated":"2014-07-18 17:26:10.000000000","message":"Done","commit_id":"f799aeaac255bf660642f2b42f25d844b84d28ba"}],"neutron/plugins/cisco/cfg_agent/device_drivers/driver_mgr.py":[{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"adbf8550f7b49ac400e519229ecec7be434e79a0","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        try:"},{"line_number":49,"context_line":"            return self._drivers[resource_id]"},{"line_number":50,"context_line":"        except KeyError:"},{"line_number":51,"context_line":"            raise cfg_exceptions.DriverNotFound(id\u003dresource_id)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    def set_driver(self, resource):"},{"line_number":54,"context_line":"        \"\"\"Set the driver for a neutron resource."}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_5fd06d53","line":51,"updated":"2014-07-01 03:15:29.000000000","message":"use save_and_reraise_exception from excutils. Same for other exception handlers in file where you are raising a different exception.","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"dde8b861c991c2b538cfd787830f9c1858aee002","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        try:"},{"line_number":49,"context_line":"            return self._drivers[resource_id]"},{"line_number":50,"context_line":"        except KeyError:"},{"line_number":51,"context_line":"            raise cfg_exceptions.DriverNotFound(id\u003dresource_id)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    def set_driver(self, resource):"},{"line_number":54,"context_line":"        \"\"\"Set the driver for a neutron resource."}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_b5ef65e8","line":51,"in_reply_to":"baada198_5fd06d53","updated":"2014-07-03 22:11:33.000000000","message":"I am not sure of save_and_reraise_exception() in this context as I am not doing any additional processing, but merely converting one exception to a more understandable one.\nBut following your suggestion, I have used save_and_reraise_exception(reraise\u003dFalse).","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"69aec30900e23ef773493672e0560cd76e73d06f","unresolved":false,"context_lines":[{"line_number":87,"context_line":"                self._hosting_device_routing_drivers_binding[hd_id] \u003d driver"},{"line_number":88,"context_line":"                self._drivers[resource_id] \u003d driver"},{"line_number":89,"context_line":"            return driver"},{"line_number":90,"context_line":"        except (KeyError, AttributeError) as e:"},{"line_number":91,"context_line":"            with excutils.save_and_reraise_exception(reraise\u003dFalse):"},{"line_number":92,"context_line":"                raise cfg_exceptions.DriverNotSetForMissingParameter(e)"},{"line_number":93,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_79de4a3f","line":90,"updated":"2014-07-15 15:58:54.000000000","message":"There is a lot of nested stuff going on inside this try-clause. What line could raise AttributeError?","commit_id":"f799aeaac255bf660642f2b42f25d844b84d28ba"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"fee89a8ead6d9ad17fb85faa26858ee7ed60e91f","unresolved":false,"context_lines":[{"line_number":87,"context_line":"                self._hosting_device_routing_drivers_binding[hd_id] \u003d driver"},{"line_number":88,"context_line":"                self._drivers[resource_id] \u003d driver"},{"line_number":89,"context_line":"            return driver"},{"line_number":90,"context_line":"        except (KeyError, AttributeError) as e:"},{"line_number":91,"context_line":"            with excutils.save_and_reraise_exception(reraise\u003dFalse):"},{"line_number":92,"context_line":"                raise cfg_exceptions.DriverNotSetForMissingParameter(e)"},{"line_number":93,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_899b3772","line":90,"in_reply_to":"baada198_79de4a3f","updated":"2014-07-18 17:26:10.000000000","message":"Refactored. Removed unncessary AttributeError","commit_id":"f799aeaac255bf660642f2b42f25d844b84d28ba"}],"neutron/plugins/cisco/cfg_agent/device_status.py":[{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"adbf8550f7b49ac400e519229ecec7be434e79a0","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":"STATUS_OPTS \u003d ["},{"line_number":29,"context_line":"    cfg.IntOpt(\u0027device_connection_timeout\u0027, default\u003d30,"},{"line_number":30,"context_line":"               help\u003d_(\"Timeout value for connecting to a hosting device\")),"},{"line_number":31,"context_line":"    cfg.IntOpt(\u0027hosting_device_dead_timeout\u0027, default\u003d300,"},{"line_number":32,"context_line":"               help\u003d_(\"The time in seconds until a backlogged hosting device \""},{"line_number":33,"context_line":"                      \"is presumed dead. This value should be set up high \""}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_5f378db0","line":30,"updated":"2014-07-01 03:15:29.000000000","message":"units?","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"dde8b861c991c2b538cfd787830f9c1858aee002","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":"STATUS_OPTS \u003d ["},{"line_number":29,"context_line":"    cfg.IntOpt(\u0027device_connection_timeout\u0027, default\u003d30,"},{"line_number":30,"context_line":"               help\u003d_(\"Timeout value for connecting to a hosting device\")),"},{"line_number":31,"context_line":"    cfg.IntOpt(\u0027hosting_device_dead_timeout\u0027, default\u003d300,"},{"line_number":32,"context_line":"               help\u003d_(\"The time in seconds until a backlogged hosting device \""},{"line_number":33,"context_line":"                      \"is presumed dead. This value should be set up high \""}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_d5ecd9f5","line":30,"in_reply_to":"baada198_5f378db0","updated":"2014-07-03 22:11:33.000000000","message":"Done","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"adbf8550f7b49ac400e519229ecec7be434e79a0","unresolved":false,"context_lines":[{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    _instance \u003d None"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def __new__(cls, *args, **kwargs):"},{"line_number":47,"context_line":"        if not cls._instance:"},{"line_number":48,"context_line":"            cls._instance \u003d super(DeviceStatus, cls).__new__("},{"line_number":49,"context_line":"                cls, *args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_9f8205ff","line":46,"updated":"2014-07-01 03:15:29.000000000","message":"Just curious as to why __new__() is needed vs a class method or using factory method pattern?","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"dde8b861c991c2b538cfd787830f9c1858aee002","unresolved":false,"context_lines":[{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    _instance \u003d None"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def __new__(cls, *args, **kwargs):"},{"line_number":47,"context_line":"        if not cls._instance:"},{"line_number":48,"context_line":"            cls._instance \u003d super(DeviceStatus, cls).__new__("},{"line_number":49,"context_line":"                cls, *args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_75978d48","line":46,"in_reply_to":"baada198_9f8205ff","updated":"2014-07-03 22:11:33.000000000","message":"Device_status is used in two locations, cfg-agent and inside routing_svc_helper. I wanted a singleton and this function ensures that. Please let me know if there is a better way.","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"adbf8550f7b49ac400e519229ecec7be434e79a0","unresolved":false,"context_lines":[{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    def is_hosting_device_reachable(self, hosting_device):"},{"line_number":77,"context_line":"        \"\"\"Check the hosting device which hosts this resource is reachable."},{"line_number":78,"context_line":"        If the resource is not reachable, it is added to the backlog."},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"        :param hosting_device : dict of the hosting device"},{"line_number":81,"context_line":"        :return True if device is reachable, else None"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_5f5eadea","line":78,"updated":"2014-07-01 03:15:29.000000000","message":"nit: blank line between summary and rest of docstring.","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"dde8b861c991c2b538cfd787830f9c1858aee002","unresolved":false,"context_lines":[{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    def is_hosting_device_reachable(self, hosting_device):"},{"line_number":77,"context_line":"        \"\"\"Check the hosting device which hosts this resource is reachable."},{"line_number":78,"context_line":"        If the resource is not reachable, it is added to the backlog."},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"        :param hosting_device : dict of the hosting device"},{"line_number":81,"context_line":"        :return True if device is reachable, else None"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_95942144","line":78,"in_reply_to":"baada198_5f5eadea","updated":"2014-07-03 22:11:33.000000000","message":"Done","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"adbf8550f7b49ac400e519229ecec7be434e79a0","unresolved":false,"context_lines":[{"line_number":106,"context_line":"        \"\"\"\"Checks the status of backlogged hosting devices."},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"        Skips newly spun up instances during their booting time as specified"},{"line_number":109,"context_line":"         in the boot time parameter."},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"        :return A dict of the format:"},{"line_number":112,"context_line":"        {\u0027reachable\u0027: [\u003chd_id\u003e,..], \u0027dead\u0027: [\u003chd_id\u003e,..]}"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_1f5515c6","line":109,"updated":"2014-07-01 03:15:29.000000000","message":"nit indentation.","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"dde8b861c991c2b538cfd787830f9c1858aee002","unresolved":false,"context_lines":[{"line_number":106,"context_line":"        \"\"\"\"Checks the status of backlogged hosting devices."},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"        Skips newly spun up instances during their booting time as specified"},{"line_number":109,"context_line":"         in the boot time parameter."},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"        :return A dict of the format:"},{"line_number":112,"context_line":"        {\u0027reachable\u0027: [\u003chd_id\u003e,..], \u0027dead\u0027: [\u003chd_id\u003e,..]}"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_d59a196d","line":109,"in_reply_to":"baada198_1f5515c6","updated":"2014-07-03 22:11:33.000000000","message":"Done","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"adbf8550f7b49ac400e519229ecec7be434e79a0","unresolved":false,"context_lines":[{"line_number":170,"context_line":"        except RuntimeError:"},{"line_number":171,"context_line":"            LOG.warn(_(\"Cannot ping ip address: %s\"), ip)"},{"line_number":172,"context_line":"            return False"},{"line_number":173,"context_line":"        return True"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_bf2b492f","line":173,"updated":"2014-07-01 03:15:29.000000000","message":"nit: could place inside try block","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"dde8b861c991c2b538cfd787830f9c1858aee002","unresolved":false,"context_lines":[{"line_number":170,"context_line":"        except RuntimeError:"},{"line_number":171,"context_line":"            LOG.warn(_(\"Cannot ping ip address: %s\"), ip)"},{"line_number":172,"context_line":"            return False"},{"line_number":173,"context_line":"        return True"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_15901149","line":173,"in_reply_to":"baada198_bf2b492f","updated":"2014-07-03 22:11:33.000000000","message":"Done","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"69aec30900e23ef773493672e0560cd76e73d06f","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    def __new__(cls, *args, **kwargs):"},{"line_number":47,"context_line":"        if not cls._instance:"},{"line_number":48,"context_line":"            cls._instance \u003d super(DeviceStatus, cls).__new__("},{"line_number":49,"context_line":"                cls, *args, **kwargs)"},{"line_number":50,"context_line":"        return cls._instance"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    def __init__(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_4f3ff886","line":49,"updated":"2014-07-15 15:58:54.000000000","message":"I don\u0027t think the **kwargs is used/needed?","commit_id":"f799aeaac255bf660642f2b42f25d844b84d28ba"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"fee89a8ead6d9ad17fb85faa26858ee7ed60e91f","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    def __new__(cls, *args, **kwargs):"},{"line_number":47,"context_line":"        if not cls._instance:"},{"line_number":48,"context_line":"            cls._instance \u003d super(DeviceStatus, cls).__new__("},{"line_number":49,"context_line":"                cls, *args, **kwargs)"},{"line_number":50,"context_line":"        return cls._instance"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    def __init__(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_c988cf24","line":49,"in_reply_to":"baada198_4f3ff886","updated":"2014-07-18 17:26:10.000000000","message":"removed","commit_id":"f799aeaac255bf660642f2b42f25d844b84d28ba"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"69aec30900e23ef773493672e0560cd76e73d06f","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        LOG.debug(\"Response: %s\", response_dict)"},{"line_number":153,"context_line":"        return response_dict"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"    def _is_pingable(self, ip):"},{"line_number":156,"context_line":"        \"\"\"Checks whether an IP address is reachable by pinging."},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"        Use linux utils to execute the ping (ICMP ECHO) command."}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_af6ed493","line":155,"updated":"2014-07-15 15:58:54.000000000","message":"Can be a static method.","commit_id":"f799aeaac255bf660642f2b42f25d844b84d28ba"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"fee89a8ead6d9ad17fb85faa26858ee7ed60e91f","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        LOG.debug(\"Response: %s\", response_dict)"},{"line_number":153,"context_line":"        return response_dict"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"    def _is_pingable(self, ip):"},{"line_number":156,"context_line":"        \"\"\"Checks whether an IP address is reachable by pinging."},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"        Use linux utils to execute the ping (ICMP ECHO) command."}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_097f2718","line":155,"in_reply_to":"baada198_af6ed493","updated":"2014-07-18 17:26:10.000000000","message":"Done","commit_id":"f799aeaac255bf660642f2b42f25d844b84d28ba"},{"author":{"_account_id":1923,"name":"Mohammad Banikazemi","email":"mbanikazemi@gmail.com","username":"mb-s"},"change_message_id":"05ee385603ebcd3871e0c4c9403fd726b863f978","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        wait_time \u003d datetime.timedelta("},{"line_number":81,"context_line":"            seconds\u003dcfg.CONF.hosting_device_dead_timeout)"},{"line_number":82,"context_line":"        resp \u003d []"},{"line_number":83,"context_line":"        for hd_id in self.backlog_hosting_devices.keys():"},{"line_number":84,"context_line":"            hd \u003d self.backlog_hosting_devices[hd_id][\u0027hd\u0027]"},{"line_number":85,"context_line":"            created_time \u003d hd[\u0027created_at\u0027]"},{"line_number":86,"context_line":"            boottime \u003d datetime.timedelta(seconds\u003dhd[\u0027booting_time\u0027])"}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_da8b28be","line":83,"updated":"2014-07-25 05:03:59.000000000","message":"for hd_id in self.backlog_hosting_devices:","commit_id":"2332ca43b02fcfe92c09830f858077845f8fd2f8"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"14c87247a0440a4acdddca17798a1dba6d4f6da6","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        wait_time \u003d datetime.timedelta("},{"line_number":81,"context_line":"            seconds\u003dcfg.CONF.hosting_device_dead_timeout)"},{"line_number":82,"context_line":"        resp \u003d []"},{"line_number":83,"context_line":"        for hd_id in self.backlog_hosting_devices.keys():"},{"line_number":84,"context_line":"            hd \u003d self.backlog_hosting_devices[hd_id][\u0027hd\u0027]"},{"line_number":85,"context_line":"            created_time \u003d hd[\u0027created_at\u0027]"},{"line_number":86,"context_line":"            boottime \u003d datetime.timedelta(seconds\u003dhd[\u0027booting_time\u0027])"}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_99fe1369","line":83,"in_reply_to":"baada198_da8b28be","updated":"2014-07-25 11:58:07.000000000","message":"Done","commit_id":"2332ca43b02fcfe92c09830f858077845f8fd2f8"},{"author":{"_account_id":1923,"name":"Mohammad Banikazemi","email":"mbanikazemi@gmail.com","username":"mb-s"},"change_message_id":"05ee385603ebcd3871e0c4c9403fd726b863f978","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        hosting_device[\u0027created_at\u0027] \u003d datetime.datetime.strptime("},{"line_number":110,"context_line":"            hosting_device[\u0027created_at\u0027], \u0027%Y-%m-%d %H:%M:%S\u0027)"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"        if hd_id not in self.backlog_hosting_devices.keys():"},{"line_number":113,"context_line":"            if _is_pingable(hd_mgmt_ip):"},{"line_number":114,"context_line":"                LOG.debug(\"Hosting device: %(hd_id)s@%(ip)s is reachable.\","},{"line_number":115,"context_line":"                          {\u0027hd_id\u0027: hd_id, \u0027ip\u0027: hd_mgmt_ip})"}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_ba7cb4b7","line":112,"updated":"2014-07-25 05:03:59.000000000","message":"Same here.","commit_id":"2332ca43b02fcfe92c09830f858077845f8fd2f8"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"14c87247a0440a4acdddca17798a1dba6d4f6da6","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        hosting_device[\u0027created_at\u0027] \u003d datetime.datetime.strptime("},{"line_number":110,"context_line":"            hosting_device[\u0027created_at\u0027], \u0027%Y-%m-%d %H:%M:%S\u0027)"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"        if hd_id not in self.backlog_hosting_devices.keys():"},{"line_number":113,"context_line":"            if _is_pingable(hd_mgmt_ip):"},{"line_number":114,"context_line":"                LOG.debug(\"Hosting device: %(hd_id)s@%(ip)s is reachable.\","},{"line_number":115,"context_line":"                          {\u0027hd_id\u0027: hd_id, \u0027ip\u0027: hd_mgmt_ip})"}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_d9f32b9d","line":112,"in_reply_to":"baada198_ba7cb4b7","updated":"2014-07-25 11:58:07.000000000","message":"Done","commit_id":"2332ca43b02fcfe92c09830f858077845f8fd2f8"},{"author":{"_account_id":1923,"name":"Mohammad Banikazemi","email":"mbanikazemi@gmail.com","username":"mb-s"},"change_message_id":"05ee385603ebcd3871e0c4c9403fd726b863f978","unresolved":false,"context_lines":[{"line_number":136,"context_line":"        response_dict \u003d {\u0027reachable\u0027: [], \u0027dead\u0027: []}"},{"line_number":137,"context_line":"        LOG.debug(\"Current Backlogged hosting devices: %s\","},{"line_number":138,"context_line":"                  self.backlog_hosting_devices.keys())"},{"line_number":139,"context_line":"        for hd_id in self.backlog_hosting_devices.keys():"},{"line_number":140,"context_line":"            hd \u003d self.backlog_hosting_devices[hd_id][\u0027hd\u0027]"},{"line_number":141,"context_line":"            if not timeutils.is_older_than(hd[\u0027created_at\u0027],"},{"line_number":142,"context_line":"                                           hd[\u0027booting_time\u0027]):"}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_1a6840f4","line":139,"updated":"2014-07-25 05:03:59.000000000","message":"Same here.","commit_id":"2332ca43b02fcfe92c09830f858077845f8fd2f8"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"14c87247a0440a4acdddca17798a1dba6d4f6da6","unresolved":false,"context_lines":[{"line_number":136,"context_line":"        response_dict \u003d {\u0027reachable\u0027: [], \u0027dead\u0027: []}"},{"line_number":137,"context_line":"        LOG.debug(\"Current Backlogged hosting devices: %s\","},{"line_number":138,"context_line":"                  self.backlog_hosting_devices.keys())"},{"line_number":139,"context_line":"        for hd_id in self.backlog_hosting_devices.keys():"},{"line_number":140,"context_line":"            hd \u003d self.backlog_hosting_devices[hd_id][\u0027hd\u0027]"},{"line_number":141,"context_line":"            if not timeutils.is_older_than(hd[\u0027created_at\u0027],"},{"line_number":142,"context_line":"                                           hd[\u0027booting_time\u0027]):"}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_d9216bfd","line":139,"in_reply_to":"baada198_1a6840f4","updated":"2014-07-25 11:58:07.000000000","message":"Cannot do that here, since I might modify the dictionary (if a device is now reachable) , which will throw a RunTimeError. So I need a copy of the keys first.\nSee http://drj11.wordpress.com/2009/04/02/python-iterating-and-mutating-dictionary/","commit_id":"2332ca43b02fcfe92c09830f858077845f8fd2f8"}],"neutron/plugins/cisco/cfg_agent/service_helpers/routing_svc_helper.py":[{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"d6205ff89d3087d5b8b4f9181772a3551a2cbefb","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        self.floating_ips \u003d []"},{"line_number":58,"context_line":"        self.router \u003d router"},{"line_number":59,"context_line":"        self.routes \u003d []"},{"line_number":60,"context_line":"        self.ha_info \u003d None"},{"line_number":61,"context_line":"        # Set \u0027ha_info\u0027 if present"},{"line_number":62,"context_line":"        if router.get(\u0027ha_info\u0027) is not None:"},{"line_number":63,"context_line":"            self.ha_info \u003d router[\u0027ha_info\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_0e6f9bc6","line":60,"updated":"2014-07-01 13:15:46.000000000","message":"Instead of L60-63, can do:\n    self.ha_info \u003d router.get(\u0027ha_info\u0027)","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"dde8b861c991c2b538cfd787830f9c1858aee002","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        self.floating_ips \u003d []"},{"line_number":58,"context_line":"        self.router \u003d router"},{"line_number":59,"context_line":"        self.routes \u003d []"},{"line_number":60,"context_line":"        self.ha_info \u003d None"},{"line_number":61,"context_line":"        # Set \u0027ha_info\u0027 if present"},{"line_number":62,"context_line":"        if router.get(\u0027ha_info\u0027) is not None:"},{"line_number":63,"context_line":"            self.ha_info \u003d router[\u0027ha_info\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_55860914","line":60,"in_reply_to":"baada198_0e6f9bc6","updated":"2014-07-03 22:11:33.000000000","message":"Done","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":5892,"name":"pritesh","email":"pritesh@romana.io","username":"pritkoth"},"change_message_id":"d38f7b4cfd32ea5aeb2df100aa4f7d95aeb58635","unresolved":false,"context_lines":[{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    def router_deleted(self, context, router_id):"},{"line_number":143,"context_line":"        \"\"\"Deal with router deletion RPC message.\"\"\""},{"line_number":144,"context_line":"        LOG.debug(_(\u0027Got router deleted notification for %s\u0027), router_id)"},{"line_number":145,"context_line":"        self.removed_routers.add(router_id)"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"    def routers_updated(self, context, routers):"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_e23617e7","line":144,"updated":"2014-06-30 17:58:40.000000000","message":"no debug translations (bug/1317851) this and others in file","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"dde8b861c991c2b538cfd787830f9c1858aee002","unresolved":false,"context_lines":[{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    def router_deleted(self, context, router_id):"},{"line_number":143,"context_line":"        \"\"\"Deal with router deletion RPC message.\"\"\""},{"line_number":144,"context_line":"        LOG.debug(_(\u0027Got router deleted notification for %s\u0027), router_id)"},{"line_number":145,"context_line":"        self.removed_routers.add(router_id)"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"    def routers_updated(self, context, routers):"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_757ead1a","line":144,"in_reply_to":"baada198_e23617e7","updated":"2014-07-03 22:11:33.000000000","message":"Done","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"d6205ff89d3087d5b8b4f9181772a3551a2cbefb","unresolved":false,"context_lines":[{"line_number":243,"context_line":"        num_floating_ips \u003d 0"},{"line_number":244,"context_line":"        router_infos \u003d self.router_info.values()"},{"line_number":245,"context_line":"        num_routers \u003d len(router_infos)"},{"line_number":246,"context_line":"        num_hd_routers \u003d {}"},{"line_number":247,"context_line":"        routers_per_hd \u003d {}"},{"line_number":248,"context_line":"        for ri in router_infos:"},{"line_number":249,"context_line":"            ex_gw_port \u003d ri.router.get(\u0027gw_port\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_ae2cefac","line":246,"updated":"2014-07-01 13:15:46.000000000","message":"Could use:\n\n    num_hd_routers \u003d collections.defaultdict(int)","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"dde8b861c991c2b538cfd787830f9c1858aee002","unresolved":false,"context_lines":[{"line_number":243,"context_line":"        num_floating_ips \u003d 0"},{"line_number":244,"context_line":"        router_infos \u003d self.router_info.values()"},{"line_number":245,"context_line":"        num_routers \u003d len(router_infos)"},{"line_number":246,"context_line":"        num_hd_routers \u003d {}"},{"line_number":247,"context_line":"        routers_per_hd \u003d {}"},{"line_number":248,"context_line":"        for ri in router_infos:"},{"line_number":249,"context_line":"            ex_gw_port \u003d ri.router.get(\u0027gw_port\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_957b4127","line":246,"in_reply_to":"baada198_ae2cefac","updated":"2014-07-03 22:11:33.000000000","message":"Done","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"d6205ff89d3087d5b8b4f9181772a3551a2cbefb","unresolved":false,"context_lines":[{"line_number":255,"context_line":"                l3_constants.FLOATINGIP_KEY, []))"},{"line_number":256,"context_line":"            hd \u003d ri.router[\u0027hosting_device\u0027]"},{"line_number":257,"context_line":"            if hd:"},{"line_number":258,"context_line":"                num_hd_routers[hd[\u0027id\u0027]] \u003d num_hd_routers.get(hd[\u0027id\u0027], 0) + 1"},{"line_number":259,"context_line":"        for (hd_id, num) in num_hd_routers.items():"},{"line_number":260,"context_line":"            routers_per_hd[hd_id] \u003d {\u0027routers\u0027: num}"},{"line_number":261,"context_line":"        non_responding \u003d self._dev_status.get_backlogged_hosting_devices()"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_2e18df80","line":258,"updated":"2014-07-01 13:15:46.000000000","message":"With defaultdict, use:\n    num_hd_routers[hd[\u0027id\u0027]] +\u003d 1","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"dde8b861c991c2b538cfd787830f9c1858aee002","unresolved":false,"context_lines":[{"line_number":255,"context_line":"                l3_constants.FLOATINGIP_KEY, []))"},{"line_number":256,"context_line":"            hd \u003d ri.router[\u0027hosting_device\u0027]"},{"line_number":257,"context_line":"            if hd:"},{"line_number":258,"context_line":"                num_hd_routers[hd[\u0027id\u0027]] \u003d num_hd_routers.get(hd[\u0027id\u0027], 0) + 1"},{"line_number":259,"context_line":"        for (hd_id, num) in num_hd_routers.items():"},{"line_number":260,"context_line":"            routers_per_hd[hd_id] \u003d {\u0027routers\u0027: num}"},{"line_number":261,"context_line":"        non_responding \u003d self._dev_status.get_backlogged_hosting_devices()"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_d5713945","line":258,"in_reply_to":"baada198_2e18df80","updated":"2014-07-03 22:11:33.000000000","message":"Pretty nice! Thanks for pointing this out Paul!","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"d6205ff89d3087d5b8b4f9181772a3551a2cbefb","unresolved":false,"context_lines":[{"line_number":256,"context_line":"            hd \u003d ri.router[\u0027hosting_device\u0027]"},{"line_number":257,"context_line":"            if hd:"},{"line_number":258,"context_line":"                num_hd_routers[hd[\u0027id\u0027]] \u003d num_hd_routers.get(hd[\u0027id\u0027], 0) + 1"},{"line_number":259,"context_line":"        for (hd_id, num) in num_hd_routers.items():"},{"line_number":260,"context_line":"            routers_per_hd[hd_id] \u003d {\u0027routers\u0027: num}"},{"line_number":261,"context_line":"        non_responding \u003d self._dev_status.get_backlogged_hosting_devices()"},{"line_number":262,"context_line":"        configurations[\u0027total routers\u0027] \u003d num_routers"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_693e51ba","line":259,"updated":"2014-07-01 13:15:46.000000000","message":"This could be:\n    routers_per_hd \u003d dict((k, {\u0027routers\u0027: v}) for k,v in num_hd_routers.items())","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"dde8b861c991c2b538cfd787830f9c1858aee002","unresolved":false,"context_lines":[{"line_number":256,"context_line":"            hd \u003d ri.router[\u0027hosting_device\u0027]"},{"line_number":257,"context_line":"            if hd:"},{"line_number":258,"context_line":"                num_hd_routers[hd[\u0027id\u0027]] \u003d num_hd_routers.get(hd[\u0027id\u0027], 0) + 1"},{"line_number":259,"context_line":"        for (hd_id, num) in num_hd_routers.items():"},{"line_number":260,"context_line":"            routers_per_hd[hd_id] \u003d {\u0027routers\u0027: num}"},{"line_number":261,"context_line":"        non_responding \u003d self._dev_status.get_backlogged_hosting_devices()"},{"line_number":262,"context_line":"        configurations[\u0027total routers\u0027] \u003d num_routers"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_f591dd47","line":259,"in_reply_to":"baada198_693e51ba","updated":"2014-07-03 22:11:33.000000000","message":"Done, but I changed the name of k \u0026 v to be more clear.","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"d6205ff89d3087d5b8b4f9181772a3551a2cbefb","unresolved":false,"context_lines":[{"line_number":293,"context_line":"            self.fullsync \u003d True"},{"line_number":294,"context_line":""},{"line_number":295,"context_line":"    def _get_router_ids_from_removed_devices_info(self, removed_devices_info):"},{"line_number":296,"context_line":"        \"\"\"Extract router_ids from the removed devices info dict"},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"        :param removed_devices_info: Dict of removed devices and their"},{"line_number":299,"context_line":"               associated resources."}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_4996ed95","line":296,"updated":"2014-07-01 13:15:46.000000000","message":"nit: pep8 period at end of summary line.","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"dde8b861c991c2b538cfd787830f9c1858aee002","unresolved":false,"context_lines":[{"line_number":293,"context_line":"            self.fullsync \u003d True"},{"line_number":294,"context_line":""},{"line_number":295,"context_line":"    def _get_router_ids_from_removed_devices_info(self, removed_devices_info):"},{"line_number":296,"context_line":"        \"\"\"Extract router_ids from the removed devices info dict"},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"        :param removed_devices_info: Dict of removed devices and their"},{"line_number":299,"context_line":"               associated resources."}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_1597313c","line":296,"in_reply_to":"baada198_4996ed95","updated":"2014-07-03 22:11:33.000000000","message":"Done","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"d6205ff89d3087d5b8b4f9181772a3551a2cbefb","unresolved":false,"context_lines":[{"line_number":601,"context_line":"    def _routes_updated(self, ri):"},{"line_number":602,"context_line":"        \"\"\"Update the state of routes in the router."},{"line_number":603,"context_line":""},{"line_number":604,"context_line":"         Compares the current routes with the (configured) existing routes"},{"line_number":605,"context_line":"         and detect what was removed or added. Then configure the"},{"line_number":606,"context_line":"         logical router in the hosting device accordingly."},{"line_number":607,"context_line":"        :param ri: RouterInfo corresponding to the router."}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_09acf59f","line":604,"updated":"2014-07-01 13:15:46.000000000","message":"nit: indentation","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"dde8b861c991c2b538cfd787830f9c1858aee002","unresolved":false,"context_lines":[{"line_number":601,"context_line":"    def _routes_updated(self, ri):"},{"line_number":602,"context_line":"        \"\"\"Update the state of routes in the router."},{"line_number":603,"context_line":""},{"line_number":604,"context_line":"         Compares the current routes with the (configured) existing routes"},{"line_number":605,"context_line":"         and detect what was removed or added. Then configure the"},{"line_number":606,"context_line":"         logical router in the hosting device accordingly."},{"line_number":607,"context_line":"        :param ri: RouterInfo corresponding to the router."}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_95a26197","line":604,"in_reply_to":"baada198_09acf59f","updated":"2014-07-03 22:11:33.000000000","message":"Done","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"69aec30900e23ef773493672e0560cd76e73d06f","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        self._snat_action \u003d None"},{"line_number":57,"context_line":"        self.internal_ports \u003d []"},{"line_number":58,"context_line":"        self.floating_ips \u003d []"},{"line_number":59,"context_line":"        self.router \u003d router"},{"line_number":60,"context_line":"        self.routes \u003d []"},{"line_number":61,"context_line":"        self.ha_info \u003d router.get(\u0027ha_info\u0027)"},{"line_number":62,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_0ff0a065","line":59,"updated":"2014-07-15 15:58:54.000000000","message":"Please also initialize\n\n    self._router \u003d None","commit_id":"f799aeaac255bf660642f2b42f25d844b84d28ba"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"fee89a8ead6d9ad17fb85faa26858ee7ed60e91f","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        self._snat_action \u003d None"},{"line_number":57,"context_line":"        self.internal_ports \u003d []"},{"line_number":58,"context_line":"        self.floating_ips \u003d []"},{"line_number":59,"context_line":"        self.router \u003d router"},{"line_number":60,"context_line":"        self.routes \u003d []"},{"line_number":61,"context_line":"        self.ha_info \u003d router.get(\u0027ha_info\u0027)"},{"line_number":62,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_6979832e","line":59,"in_reply_to":"baada198_0ff0a065","updated":"2014-07-18 17:26:10.000000000","message":"Done","commit_id":"f799aeaac255bf660642f2b42f25d844b84d28ba"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"69aec30900e23ef773493672e0560cd76e73d06f","unresolved":false,"context_lines":[{"line_number":137,"context_line":""},{"line_number":138,"context_line":"    ### Notifications from Plugin ####"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    def router_deleted(self, context, router_ids):"},{"line_number":141,"context_line":"        \"\"\"Deal with router deletion RPC message.\"\"\""},{"line_number":142,"context_line":"        LOG.debug(\u0027Got router deleted notification for %s\u0027, router_ids)"},{"line_number":143,"context_line":"        self.removed_routers.update(router_ids)"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_2f9ac413","line":140,"updated":"2014-07-15 15:58:54.000000000","message":"\u0027context\u0027 not used.","commit_id":"f799aeaac255bf660642f2b42f25d844b84d28ba"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"fee89a8ead6d9ad17fb85faa26858ee7ed60e91f","unresolved":false,"context_lines":[{"line_number":137,"context_line":""},{"line_number":138,"context_line":"    ### Notifications from Plugin ####"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    def router_deleted(self, context, router_ids):"},{"line_number":141,"context_line":"        \"\"\"Deal with router deletion RPC message.\"\"\""},{"line_number":142,"context_line":"        LOG.debug(\u0027Got router deleted notification for %s\u0027, router_ids)"},{"line_number":143,"context_line":"        self.removed_routers.update(router_ids)"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_c98fef21","line":140,"in_reply_to":"baada198_2f9ac413","updated":"2014-07-18 17:26:10.000000000","message":"\u0027context\u0027 is sent as part of the rpc message. So cannot avoid keeping it here.","commit_id":"f799aeaac255bf660642f2b42f25d844b84d28ba"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"69aec30900e23ef773493672e0560cd76e73d06f","unresolved":false,"context_lines":[{"line_number":142,"context_line":"        LOG.debug(\u0027Got router deleted notification for %s\u0027, router_ids)"},{"line_number":143,"context_line":"        self.removed_routers.update(router_ids)"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"    def routers_updated(self, context, routers):"},{"line_number":146,"context_line":"        \"\"\"Deal with routers modification and creation RPC message.\"\"\""},{"line_number":147,"context_line":"        LOG.debug(\u0027Got routers updated notification :%s\u0027, routers)"},{"line_number":148,"context_line":"        if routers:"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_af85f4ad","line":145,"updated":"2014-07-15 15:58:54.000000000","message":"\u0027context\u0027 not used.","commit_id":"f799aeaac255bf660642f2b42f25d844b84d28ba"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"fee89a8ead6d9ad17fb85faa26858ee7ed60e91f","unresolved":false,"context_lines":[{"line_number":142,"context_line":"        LOG.debug(\u0027Got router deleted notification for %s\u0027, router_ids)"},{"line_number":143,"context_line":"        self.removed_routers.update(router_ids)"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"    def routers_updated(self, context, routers):"},{"line_number":146,"context_line":"        \"\"\"Deal with routers modification and creation RPC message.\"\"\""},{"line_number":147,"context_line":"        LOG.debug(\u0027Got routers updated notification :%s\u0027, routers)"},{"line_number":148,"context_line":"        if routers:"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_69a0a390","line":145,"in_reply_to":"baada198_af85f4ad","updated":"2014-07-18 17:26:10.000000000","message":"ditto","commit_id":"f799aeaac255bf660642f2b42f25d844b84d28ba"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"69aec30900e23ef773493672e0560cd76e73d06f","unresolved":false,"context_lines":[{"line_number":151,"context_line":"                routers \u003d [router[\u0027id\u0027] for router in routers]"},{"line_number":152,"context_line":"            self.updated_routers.update(routers)"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"    def router_removed_from_agent(self, context, payload):"},{"line_number":155,"context_line":"        LOG.debug(\u0027Got router removed from agent :%r\u0027, payload)"},{"line_number":156,"context_line":"        self.removed_routers.add(payload[\u0027router_id\u0027])"},{"line_number":157,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_afac1436","line":154,"updated":"2014-07-15 15:58:54.000000000","message":"\u0027context\u0027 not used.","commit_id":"f799aeaac255bf660642f2b42f25d844b84d28ba"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"fee89a8ead6d9ad17fb85faa26858ee7ed60e91f","unresolved":false,"context_lines":[{"line_number":151,"context_line":"                routers \u003d [router[\u0027id\u0027] for router in routers]"},{"line_number":152,"context_line":"            self.updated_routers.update(routers)"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"    def router_removed_from_agent(self, context, payload):"},{"line_number":155,"context_line":"        LOG.debug(\u0027Got router removed from agent :%r\u0027, payload)"},{"line_number":156,"context_line":"        self.removed_routers.add(payload[\u0027router_id\u0027])"},{"line_number":157,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_89a9777e","line":154,"in_reply_to":"baada198_afac1436","updated":"2014-07-18 17:26:10.000000000","message":"ditto","commit_id":"f799aeaac255bf660642f2b42f25d844b84d28ba"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"69aec30900e23ef773493672e0560cd76e73d06f","unresolved":false,"context_lines":[{"line_number":242,"context_line":"        router_infos \u003d self.router_info.values()"},{"line_number":243,"context_line":"        num_routers \u003d len(router_infos)"},{"line_number":244,"context_line":"        num_hd_routers \u003d collections.defaultdict(int)"},{"line_number":245,"context_line":"        routers_per_hd \u003d {}"},{"line_number":246,"context_line":"        for ri in router_infos:"},{"line_number":247,"context_line":"            ex_gw_port \u003d ri.router.get(\u0027gw_port\u0027)"},{"line_number":248,"context_line":"            if ex_gw_port:"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_6f3cbce1","line":245,"updated":"2014-07-15 15:58:54.000000000","message":"Not need (overwritten on line 257).","commit_id":"f799aeaac255bf660642f2b42f25d844b84d28ba"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"fee89a8ead6d9ad17fb85faa26858ee7ed60e91f","unresolved":false,"context_lines":[{"line_number":242,"context_line":"        router_infos \u003d self.router_info.values()"},{"line_number":243,"context_line":"        num_routers \u003d len(router_infos)"},{"line_number":244,"context_line":"        num_hd_routers \u003d collections.defaultdict(int)"},{"line_number":245,"context_line":"        routers_per_hd \u003d {}"},{"line_number":246,"context_line":"        for ri in router_infos:"},{"line_number":247,"context_line":"            ex_gw_port \u003d ri.router.get(\u0027gw_port\u0027)"},{"line_number":248,"context_line":"            if ex_gw_port:"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_a9a63ba9","line":245,"in_reply_to":"baada198_6f3cbce1","updated":"2014-07-18 17:26:10.000000000","message":"Done","commit_id":"f799aeaac255bf660642f2b42f25d844b84d28ba"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"69aec30900e23ef773493672e0560cd76e73d06f","unresolved":false,"context_lines":[{"line_number":290,"context_line":"            LOG.exception(_(\"RPC Error in fetching routers from plugin\"))"},{"line_number":291,"context_line":"            self.fullsync \u003d True"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"    def _get_router_ids_from_removed_devices_info(self, removed_devices_info):"},{"line_number":294,"context_line":"        \"\"\"Extract router_ids from the removed devices info dict."},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"        :param removed_devices_info: Dict of removed devices and their"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_6a0aea20","line":293,"updated":"2014-07-15 15:58:54.000000000","message":"Can be a static method.","commit_id":"f799aeaac255bf660642f2b42f25d844b84d28ba"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"fee89a8ead6d9ad17fb85faa26858ee7ed60e91f","unresolved":false,"context_lines":[{"line_number":290,"context_line":"            LOG.exception(_(\"RPC Error in fetching routers from plugin\"))"},{"line_number":291,"context_line":"            self.fullsync \u003d True"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"    def _get_router_ids_from_removed_devices_info(self, removed_devices_info):"},{"line_number":294,"context_line":"        \"\"\"Extract router_ids from the removed devices info dict."},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"        :param removed_devices_info: Dict of removed devices and their"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_c9b60fdc","line":293,"in_reply_to":"baada198_6a0aea20","updated":"2014-07-18 17:26:10.000000000","message":"Done","commit_id":"f799aeaac255bf660642f2b42f25d844b84d28ba"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"69aec30900e23ef773493672e0560cd76e73d06f","unresolved":false,"context_lines":[{"line_number":310,"context_line":"            removed_router_ids +\u003d resources.get(\u0027routers\u0027, [])"},{"line_number":311,"context_line":"        return removed_router_ids"},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"    def _sort_resources_per_hosting_device(self, resources):"},{"line_number":314,"context_line":"        \"\"\"This function will sort the resources on hosting device."},{"line_number":315,"context_line":""},{"line_number":316,"context_line":"        The sorting on hosting device is done by looking up the"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_8a3bbecf","line":313,"updated":"2014-07-15 15:58:54.000000000","message":"Can be a static method.","commit_id":"f799aeaac255bf660642f2b42f25d844b84d28ba"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"fee89a8ead6d9ad17fb85faa26858ee7ed60e91f","unresolved":false,"context_lines":[{"line_number":310,"context_line":"            removed_router_ids +\u003d resources.get(\u0027routers\u0027, [])"},{"line_number":311,"context_line":"        return removed_router_ids"},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"    def _sort_resources_per_hosting_device(self, resources):"},{"line_number":314,"context_line":"        \"\"\"This function will sort the resources on hosting device."},{"line_number":315,"context_line":""},{"line_number":316,"context_line":"        The sorting on hosting device is done by looking up the"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_e9bbd3c1","line":313,"in_reply_to":"baada198_8a3bbecf","updated":"2014-07-18 17:26:10.000000000","message":"Done","commit_id":"f799aeaac255bf660642f2b42f25d844b84d28ba"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"69aec30900e23ef773493672e0560cd76e73d06f","unresolved":false,"context_lines":[{"line_number":617,"context_line":"            for del_route in removes:"},{"line_number":618,"context_line":"                if route[\u0027destination\u0027] \u003d\u003d del_route[\u0027destination\u0027]:"},{"line_number":619,"context_line":"                    removes.remove(del_route)"},{"line_number":620,"context_line":"                    #replace success even if there is no existing route"},{"line_number":621,"context_line":"            driver \u003d self._drivermgr.get_driver(ri.id)"},{"line_number":622,"context_line":"            driver.routes_updated(ri, \u0027replace\u0027, route)"},{"line_number":623,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_2aa0f2f2","line":620,"updated":"2014-07-15 15:58:54.000000000","message":"I don\u0027t understand this comment. (Also space after #.)","commit_id":"f799aeaac255bf660642f2b42f25d844b84d28ba"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"fee89a8ead6d9ad17fb85faa26858ee7ed60e91f","unresolved":false,"context_lines":[{"line_number":617,"context_line":"            for del_route in removes:"},{"line_number":618,"context_line":"                if route[\u0027destination\u0027] \u003d\u003d del_route[\u0027destination\u0027]:"},{"line_number":619,"context_line":"                    removes.remove(del_route)"},{"line_number":620,"context_line":"                    #replace success even if there is no existing route"},{"line_number":621,"context_line":"            driver \u003d self._drivermgr.get_driver(ri.id)"},{"line_number":622,"context_line":"            driver.routes_updated(ri, \u0027replace\u0027, route)"},{"line_number":623,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_a9bd5bb3","line":620,"in_reply_to":"baada198_2aa0f2f2","updated":"2014-07-18 17:26:10.000000000","message":"removed. Was an artifact.","commit_id":"f799aeaac255bf660642f2b42f25d844b84d28ba"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"69aec30900e23ef773493672e0560cd76e73d06f","unresolved":false,"context_lines":[{"line_number":627,"context_line":"            driver.routes_updated(ri, \u0027delete\u0027, route)"},{"line_number":628,"context_line":"        ri.routes \u003d new_routes"},{"line_number":629,"context_line":""},{"line_number":630,"context_line":"    def _set_subnet_info(self, port):"},{"line_number":631,"context_line":"        ips \u003d port[\u0027fixed_ips\u0027]"},{"line_number":632,"context_line":"        if not ips:"},{"line_number":633,"context_line":"            raise Exception("}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_8a42de3b","line":630,"updated":"2014-07-15 15:58:54.000000000","message":"Can be a static method.","commit_id":"f799aeaac255bf660642f2b42f25d844b84d28ba"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"fee89a8ead6d9ad17fb85faa26858ee7ed60e91f","unresolved":false,"context_lines":[{"line_number":627,"context_line":"            driver.routes_updated(ri, \u0027delete\u0027, route)"},{"line_number":628,"context_line":"        ri.routes \u003d new_routes"},{"line_number":629,"context_line":""},{"line_number":630,"context_line":"    def _set_subnet_info(self, port):"},{"line_number":631,"context_line":"        ips \u003d port[\u0027fixed_ips\u0027]"},{"line_number":632,"context_line":"        if not ips:"},{"line_number":633,"context_line":"            raise Exception("}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_c9dd2f16","line":630,"in_reply_to":"baada198_8a42de3b","updated":"2014-07-18 17:26:10.000000000","message":"Done","commit_id":"f799aeaac255bf660642f2b42f25d844b84d28ba"},{"author":{"_account_id":1923,"name":"Mohammad Banikazemi","email":"mbanikazemi@gmail.com","username":"mb-s"},"change_message_id":"05ee385603ebcd3871e0c4c9403fd726b863f978","unresolved":false,"context_lines":[{"line_number":537,"context_line":"        :param router_id: id of the router"},{"line_number":538,"context_line":"        :param deconfigure: if True, the router\u0027s configuration is deleted from"},{"line_number":539,"context_line":"        the hosting device."},{"line_number":540,"context_line":"        :return:"},{"line_number":541,"context_line":"        \"\"\""},{"line_number":542,"context_line":"        ri \u003d self.router_info.get(router_id)"},{"line_number":543,"context_line":"        if ri is None:"}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_3a318459","line":540,"updated":"2014-07-25 05:03:59.000000000","message":"Not important but if you submit a new patch add the return value.","commit_id":"2332ca43b02fcfe92c09830f858077845f8fd2f8"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"14c87247a0440a4acdddca17798a1dba6d4f6da6","unresolved":false,"context_lines":[{"line_number":537,"context_line":"        :param router_id: id of the router"},{"line_number":538,"context_line":"        :param deconfigure: if True, the router\u0027s configuration is deleted from"},{"line_number":539,"context_line":"        the hosting device."},{"line_number":540,"context_line":"        :return:"},{"line_number":541,"context_line":"        \"\"\""},{"line_number":542,"context_line":"        ri \u003d self.router_info.get(router_id)"},{"line_number":543,"context_line":"        if ri is None:"}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_19d3e301","line":540,"in_reply_to":"baada198_3a318459","updated":"2014-07-25 11:58:07.000000000","message":"Done","commit_id":"2332ca43b02fcfe92c09830f858077845f8fd2f8"}],"neutron/tests/unit/cisco/cfg_agent/test_cfg_agent.py":[{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"d6205ff89d3087d5b8b4f9181772a3551a2cbefb","unresolved":false,"context_lines":[{"line_number":76,"context_line":"        self.conf.register_opts(base_config.core_opts)"},{"line_number":77,"context_line":"        self.conf.register_opts(cfg_agent.CiscoCfgAgent.OPTS)"},{"line_number":78,"context_line":"        cfg.CONF.set_override(\u0027report_interval\u0027, 0, \u0027AGENT\u0027)"},{"line_number":79,"context_line":"        # cfg.CONF.set_override(\u0027rpc_loop_interval\u0027, 0)"},{"line_number":80,"context_line":"        super(TestCiscoCfgAgentWIthStateReporting, self).setUp()"},{"line_number":81,"context_line":"        self.devmgr_pluginApi_cls_p \u003d mock.patch("},{"line_number":82,"context_line":"            \u0027neutron.plugins.cisco.cfg_agent.cfg_agent.\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_e9e261d4","line":79,"updated":"2014-07-01 13:15:46.000000000","message":"dead code removal","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"dde8b861c991c2b538cfd787830f9c1858aee002","unresolved":false,"context_lines":[{"line_number":76,"context_line":"        self.conf.register_opts(base_config.core_opts)"},{"line_number":77,"context_line":"        self.conf.register_opts(cfg_agent.CiscoCfgAgent.OPTS)"},{"line_number":78,"context_line":"        cfg.CONF.set_override(\u0027report_interval\u0027, 0, \u0027AGENT\u0027)"},{"line_number":79,"context_line":"        # cfg.CONF.set_override(\u0027rpc_loop_interval\u0027, 0)"},{"line_number":80,"context_line":"        super(TestCiscoCfgAgentWIthStateReporting, self).setUp()"},{"line_number":81,"context_line":"        self.devmgr_pluginApi_cls_p \u003d mock.patch("},{"line_number":82,"context_line":"            \u0027neutron.plugins.cisco.cfg_agent.cfg_agent.\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_b5abe573","line":79,"in_reply_to":"baada198_e9e261d4","updated":"2014-07-03 22:11:33.000000000","message":"Done","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"d6205ff89d3087d5b8b4f9181772a3551a2cbefb","unresolved":false,"context_lines":[{"line_number":98,"context_line":""},{"line_number":99,"context_line":"        mock.patch(\u0027neutron.common.rpc.create_connection\u0027).start()"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        self.addCleanup(mock.patch.stopall)"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    def test_agent_registration_success(self):"},{"line_number":104,"context_line":"        agent \u003d cfg_agent.CiscoCfgAgentWithStateReport(HOSTNAME, self.conf)"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_69ce515c","line":101,"updated":"2014-07-01 13:15:46.000000000","message":"Not needed. Base test class does this.","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"dde8b861c991c2b538cfd787830f9c1858aee002","unresolved":false,"context_lines":[{"line_number":98,"context_line":""},{"line_number":99,"context_line":"        mock.patch(\u0027neutron.common.rpc.create_connection\u0027).start()"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        self.addCleanup(mock.patch.stopall)"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    def test_agent_registration_success(self):"},{"line_number":104,"context_line":"        agent \u003d cfg_agent.CiscoCfgAgentWithStateReport(HOSTNAME, self.conf)"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_d5a85979","line":101,"in_reply_to":"baada198_69ce515c","updated":"2014-07-03 22:11:33.000000000","message":"Done","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"d6205ff89d3087d5b8b4f9181772a3551a2cbefb","unresolved":false,"context_lines":[{"line_number":124,"context_line":"        cfg_agent.MAX_REGISTRATION_ATTEMPTS \u003d 3"},{"line_number":125,"context_line":"        agent \u003d cfg_agent.CiscoCfgAgentWithStateReport(HOSTNAME, self.conf)"},{"line_number":126,"context_line":"        self.assertEqual(agent.devmgr_rpc.register_for_duty.call_count, 3)"},{"line_number":127,"context_line":"        self.assertTrue(mock_exit.called)"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    @mock.patch.object(sys, \u0027exit\u0027)"},{"line_number":130,"context_line":"    def test_agent_registration_no_device_mgr(self, mock_exit):"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_49f8ad7c","line":127,"updated":"2014-07-01 13:15:46.000000000","message":"Update these if use SystemExit","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"dde8b861c991c2b538cfd787830f9c1858aee002","unresolved":false,"context_lines":[{"line_number":124,"context_line":"        cfg_agent.MAX_REGISTRATION_ATTEMPTS \u003d 3"},{"line_number":125,"context_line":"        agent \u003d cfg_agent.CiscoCfgAgentWithStateReport(HOSTNAME, self.conf)"},{"line_number":126,"context_line":"        self.assertEqual(agent.devmgr_rpc.register_for_duty.call_count, 3)"},{"line_number":127,"context_line":"        self.assertTrue(mock_exit.called)"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    @mock.patch.object(sys, \u0027exit\u0027)"},{"line_number":130,"context_line":"    def test_agent_registration_no_device_mgr(self, mock_exit):"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_f5b8fdc9","line":127,"in_reply_to":"baada198_49f8ad7c","updated":"2014-07-03 22:11:33.000000000","message":"Done","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"d6205ff89d3087d5b8b4f9181772a3551a2cbefb","unresolved":false,"context_lines":[{"line_number":154,"context_line":"        agent.heartbeat \u003d mock.Mock()"},{"line_number":155,"context_line":"        agent.send_agent_report(None, None)"},{"line_number":156,"context_line":"        self.assertTrue(agent.heartbeat.stop.called)"},{"line_number":157,"context_line":"        cfg.CONF.set_override(\u0027report_interval\u0027, 0, \u0027AGENT\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_293b793b","line":157,"updated":"2014-07-01 13:15:46.000000000","message":"Needed? Shouldn\u0027t this be reset by teardown?","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"dde8b861c991c2b538cfd787830f9c1858aee002","unresolved":false,"context_lines":[{"line_number":154,"context_line":"        agent.heartbeat \u003d mock.Mock()"},{"line_number":155,"context_line":"        agent.send_agent_report(None, None)"},{"line_number":156,"context_line":"        self.assertTrue(agent.heartbeat.stop.called)"},{"line_number":157,"context_line":"        cfg.CONF.set_override(\u0027report_interval\u0027, 0, \u0027AGENT\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_35afd57e","line":157,"in_reply_to":"baada198_293b793b","updated":"2014-07-03 22:11:33.000000000","message":"Done","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"69aec30900e23ef773493672e0560cd76e73d06f","unresolved":false,"context_lines":[{"line_number":76,"context_line":"        self.conf.register_opts(cfg_agent.CiscoCfgAgent.OPTS)"},{"line_number":77,"context_line":"        cfg.CONF.set_override(\u0027report_interval\u0027, 0, \u0027AGENT\u0027)"},{"line_number":78,"context_line":"        super(TestCiscoCfgAgentWIthStateReporting, self).setUp()"},{"line_number":79,"context_line":"        self.devmgr_pluginApi_cls_p \u003d mock.patch("},{"line_number":80,"context_line":"            \u0027neutron.plugins.cisco.cfg_agent.cfg_agent.\u0027"},{"line_number":81,"context_line":"            \u0027CiscoDeviceManagementApi\u0027)"},{"line_number":82,"context_line":"        devmgr_pluginApi_cls \u003d self.devmgr_pluginApi_cls_p.start()"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_6a5bca85","line":79,"updated":"2014-07-15 15:58:54.000000000","message":"Nit: variable naming convention (no mixed case) should be followed. Multiple transgressions in this class.","commit_id":"f799aeaac255bf660642f2b42f25d844b84d28ba"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"fee89a8ead6d9ad17fb85faa26858ee7ed60e91f","unresolved":false,"context_lines":[{"line_number":76,"context_line":"        self.conf.register_opts(cfg_agent.CiscoCfgAgent.OPTS)"},{"line_number":77,"context_line":"        cfg.CONF.set_override(\u0027report_interval\u0027, 0, \u0027AGENT\u0027)"},{"line_number":78,"context_line":"        super(TestCiscoCfgAgentWIthStateReporting, self).setUp()"},{"line_number":79,"context_line":"        self.devmgr_pluginApi_cls_p \u003d mock.patch("},{"line_number":80,"context_line":"            \u0027neutron.plugins.cisco.cfg_agent.cfg_agent.\u0027"},{"line_number":81,"context_line":"            \u0027CiscoDeviceManagementApi\u0027)"},{"line_number":82,"context_line":"        devmgr_pluginApi_cls \u003d self.devmgr_pluginApi_cls_p.start()"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_29e94bb7","line":79,"in_reply_to":"baada198_6a5bca85","updated":"2014-07-18 17:26:10.000000000","message":"Done","commit_id":"f799aeaac255bf660642f2b42f25d844b84d28ba"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"69aec30900e23ef773493672e0560cd76e73d06f","unresolved":false,"context_lines":[{"line_number":103,"context_line":"    def test_agent_registration_success_after_2_tries(self):"},{"line_number":104,"context_line":"        return_values \u003d [True, False, False]"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        def side_effect(self):"},{"line_number":107,"context_line":"            return return_values.pop()"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"        self.devmgr_plugin_api.register_for_duty \u003d mock.Mock("}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_2acc7234","line":106,"updated":"2014-07-15 15:58:54.000000000","message":"\u0027self\u0027 not needed.","commit_id":"f799aeaac255bf660642f2b42f25d844b84d28ba"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"fee89a8ead6d9ad17fb85faa26858ee7ed60e91f","unresolved":false,"context_lines":[{"line_number":103,"context_line":"    def test_agent_registration_success_after_2_tries(self):"},{"line_number":104,"context_line":"        return_values \u003d [True, False, False]"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        def side_effect(self):"},{"line_number":107,"context_line":"            return return_values.pop()"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"        self.devmgr_plugin_api.register_for_duty \u003d mock.Mock("}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_c960cf37","line":106,"in_reply_to":"baada198_2acc7234","updated":"2014-07-18 17:26:10.000000000","message":"renamed to match the function it was mocking. self renamed to context as was the variable it was mimicking.","commit_id":"f799aeaac255bf660642f2b42f25d844b84d28ba"},{"author":{"_account_id":1923,"name":"Mohammad Banikazemi","email":"mbanikazemi@gmail.com","username":"mb-s"},"change_message_id":"05ee385603ebcd3871e0c4c9403fd726b863f978","unresolved":false,"context_lines":[{"line_number":92,"context_line":""},{"line_number":93,"context_line":"        self.looping_call_p \u003d mock.patch("},{"line_number":94,"context_line":"            \u0027neutron.openstack.common.loopingcall.FixedIntervalLoopingCall\u0027)"},{"line_number":95,"context_line":"        self.looping_call_p.start()"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"        mock.patch(\u0027neutron.common.rpc.create_connection\u0027).start()"},{"line_number":98,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_9a3b7037","line":95,"updated":"2014-07-25 05:03:59.000000000","message":"is there a need for stop or cleanup for these starts?","commit_id":"2332ca43b02fcfe92c09830f858077845f8fd2f8"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"14c87247a0440a4acdddca17798a1dba6d4f6da6","unresolved":false,"context_lines":[{"line_number":92,"context_line":""},{"line_number":93,"context_line":"        self.looping_call_p \u003d mock.patch("},{"line_number":94,"context_line":"            \u0027neutron.openstack.common.loopingcall.FixedIntervalLoopingCall\u0027)"},{"line_number":95,"context_line":"        self.looping_call_p.start()"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"        mock.patch(\u0027neutron.common.rpc.create_connection\u0027).start()"},{"line_number":98,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_d9cc0b64","line":95,"in_reply_to":"baada198_9a3b7037","updated":"2014-07-25 11:58:07.000000000","message":"The setUp() in the BaseTestCase calls stop for all the patches, so it does not need to be repeated here.","commit_id":"2332ca43b02fcfe92c09830f858077845f8fd2f8"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"c0be17be61f9f4078cf9459f6edd966ead71ef62","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        self.plugin_reportstate_api_cls_p \u003d mock.patch("},{"line_number":88,"context_line":"            \u0027neutron.agent.rpc.PluginReportStateAPI\u0027)"},{"line_number":89,"context_line":"        plugin_reportstate_api_cls \u003d self.plugin_reportstate_api_cls_p.start()"},{"line_number":90,"context_line":"        self.pluginreportstateAPI \u003d mock.Mock()"},{"line_number":91,"context_line":"        plugin_reportstate_api_cls.return_value \u003d self.pluginreportstateAPI"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"        self.looping_call_p \u003d mock.patch("}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_aad8cd52","line":90,"updated":"2014-07-25 17:27:16.000000000","message":"Nit: you missed this camel case.","commit_id":"fa96b0b7b3e1ac31e1d6d2890d804c492a71fc8b"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"c76427efbd0ea821d4c99c6b8a9922a94d790b10","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        self.plugin_reportstate_api_cls_p \u003d mock.patch("},{"line_number":88,"context_line":"            \u0027neutron.agent.rpc.PluginReportStateAPI\u0027)"},{"line_number":89,"context_line":"        plugin_reportstate_api_cls \u003d self.plugin_reportstate_api_cls_p.start()"},{"line_number":90,"context_line":"        self.pluginreportstateAPI \u003d mock.Mock()"},{"line_number":91,"context_line":"        plugin_reportstate_api_cls.return_value \u003d self.pluginreportstateAPI"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"        self.looping_call_p \u003d mock.patch("}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_b3d121ce","line":90,"in_reply_to":"baada198_aad8cd52","updated":"2014-07-25 20:25:49.000000000","message":"oops. fixed that now.","commit_id":"fa96b0b7b3e1ac31e1d6d2890d804c492a71fc8b"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"c0be17be61f9f4078cf9459f6edd966ead71ef62","unresolved":false,"context_lines":[{"line_number":107,"context_line":"            return return_values.pop()"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"        self.devmgr_plugin_api.register_for_duty \u003d mock.Mock("},{"line_number":110,"context_line":"            side_effect\u003dregister_for_duty)"},{"line_number":111,"context_line":"        cfg_agent.REGISTRATION_RETRY_DELAY \u003d 0.01"},{"line_number":112,"context_line":"        agent \u003d cfg_agent.CiscoCfgAgentWithStateReport(HOSTNAME, self.conf)"},{"line_number":113,"context_line":"        self.assertEqual(agent.devmgr_rpc.register_for_duty.call_count, 3)"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_2aecbdf3","line":110,"updated":"2014-07-25 17:27:16.000000000","message":"You can just do:\n\n    side_effect\u003d[False, False, True]","commit_id":"fa96b0b7b3e1ac31e1d6d2890d804c492a71fc8b"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"c76427efbd0ea821d4c99c6b8a9922a94d790b10","unresolved":false,"context_lines":[{"line_number":107,"context_line":"            return return_values.pop()"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"        self.devmgr_plugin_api.register_for_duty \u003d mock.Mock("},{"line_number":110,"context_line":"            side_effect\u003dregister_for_duty)"},{"line_number":111,"context_line":"        cfg_agent.REGISTRATION_RETRY_DELAY \u003d 0.01"},{"line_number":112,"context_line":"        agent \u003d cfg_agent.CiscoCfgAgentWithStateReport(HOSTNAME, self.conf)"},{"line_number":113,"context_line":"        self.assertEqual(agent.devmgr_rpc.register_for_duty.call_count, 3)"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_13f72d5b","line":110,"in_reply_to":"baada198_2aecbdf3","updated":"2014-07-25 20:25:49.000000000","message":"Didn\u0027t knew this. Thanks Henry!","commit_id":"fa96b0b7b3e1ac31e1d6d2890d804c492a71fc8b"}],"neutron/tests/unit/cisco/cfg_agent/test_csr1kv_routing_driver.py":[{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"69aec30900e23ef773493672e0560cd76e73d06f","unresolved":false,"context_lines":[{"line_number":179,"context_line":""},{"line_number":180,"context_line":"        self.driver.floating_ip_added(self.ri, self.ex_gw_port,"},{"line_number":181,"context_line":"                                      floating_ip, fixed_ip)"},{"line_number":182,"context_line":"        self.driver._add_floating_ip.called_once_with(floating_ip,"},{"line_number":183,"context_line":"                                                      fixed_ip, self.vrf)"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        self.driver.floating_ip_removed(self.ri, self.ex_gw_port,"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_aa7322e5","line":182,"updated":"2014-07-15 15:58:54.000000000","message":"This should be assert_called_once_with. Same for the rest of this test case.","commit_id":"f799aeaac255bf660642f2b42f25d844b84d28ba"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"fee89a8ead6d9ad17fb85faa26858ee7ed60e91f","unresolved":false,"context_lines":[{"line_number":179,"context_line":""},{"line_number":180,"context_line":"        self.driver.floating_ip_added(self.ri, self.ex_gw_port,"},{"line_number":181,"context_line":"                                      floating_ip, fixed_ip)"},{"line_number":182,"context_line":"        self.driver._add_floating_ip.called_once_with(floating_ip,"},{"line_number":183,"context_line":"                                                      fixed_ip, self.vrf)"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        self.driver.floating_ip_removed(self.ri, self.ex_gw_port,"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_49dbdfec","line":182,"in_reply_to":"baada198_aa7322e5","updated":"2014-07-18 17:26:10.000000000","message":"Done","commit_id":"f799aeaac255bf660642f2b42f25d844b84d28ba"}],"neutron/tests/unit/cisco/cfg_agent/test_device_status.py":[{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"d6205ff89d3087d5b8b4f9181772a3551a2cbefb","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        expected \u003d {\u0027reachable\u0027: [],"},{"line_number":88,"context_line":"                    \u0027dead\u0027: []}"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        self.assertEqual(self.status.check_backlogged_hosting_devices(),"},{"line_number":91,"context_line":"                         expected)"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    def test_check_backlog_below_booting_time(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_f10ec333","line":90,"updated":"2014-07-01 13:15:46.000000000","message":"For asserts of dicts, put the expected value first, as a failure will report the first as \u0027reference\u0027 and second as \u0027actual\u0027. Check other asserts.","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"dde8b861c991c2b538cfd787830f9c1858aee002","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        expected \u003d {\u0027reachable\u0027: [],"},{"line_number":88,"context_line":"                    \u0027dead\u0027: []}"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        self.assertEqual(self.status.check_backlogged_hosting_devices(),"},{"line_number":91,"context_line":"                         expected)"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    def test_check_backlog_below_booting_time(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_f5df1d0b","line":90,"in_reply_to":"baada198_f10ec333","updated":"2014-07-03 22:11:33.000000000","message":"Done","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"d6205ff89d3087d5b8b4f9181772a3551a2cbefb","unresolved":false,"context_lines":[{"line_number":108,"context_line":"                         expected)"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        #Simulate after 100 seconds"},{"line_number":111,"context_line":"        timedelta_100 \u003d datetime.timedelta(seconds\u003d100)"},{"line_number":112,"context_line":"        created_at_100sec \u003d datetime.datetime.utcnow() - timedelta_100"},{"line_number":113,"context_line":"        created_at_100sec_str \u003d created_at_100sec.strftime("},{"line_number":114,"context_line":"            \"%Y-%m-%dT%H:%M:%S.%f\")"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_71bb930e","line":111,"updated":"2014-07-01 13:15:46.000000000","message":"For these tests, suggest using constants, instead of literals, especially for limit values (like 420), in case they are changed. For boundaries can use LIMIT_NAME - 1, for example.\n\nWould also not use the number in the variable name. Can just use names that refer to what your checking: within dead time, within boot time, etc.\n\nGoal is not making the test brittle to changes in these values.","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"dde8b861c991c2b538cfd787830f9c1858aee002","unresolved":false,"context_lines":[{"line_number":108,"context_line":"                         expected)"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        #Simulate after 100 seconds"},{"line_number":111,"context_line":"        timedelta_100 \u003d datetime.timedelta(seconds\u003d100)"},{"line_number":112,"context_line":"        created_at_100sec \u003d datetime.datetime.utcnow() - timedelta_100"},{"line_number":113,"context_line":"        created_at_100sec_str \u003d created_at_100sec.strftime("},{"line_number":114,"context_line":"            \"%Y-%m-%dT%H:%M:%S.%f\")"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_55eb69af","line":111,"in_reply_to":"baada198_71bb930e","updated":"2014-07-03 22:11:33.000000000","message":"Done","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"d6205ff89d3087d5b8b4f9181772a3551a2cbefb","unresolved":false,"context_lines":[{"line_number":150,"context_line":"                         expected)"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"    def test_check_backlog_above_BT_not_pingable_below_deadtime(self):"},{"line_number":153,"context_line":"        \"\"\"This test simulates a hosting device which has passed the created"},{"line_number":154,"context_line":"           time but less than the \u0027declared dead\u0027 time."},{"line_number":155,"context_line":"           Hosting device is still not pingable."},{"line_number":156,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_d158dffc","line":153,"updated":"2014-07-01 13:15:46.000000000","message":"Nit: PEP8/257, summary line, period, blank line, rest of doc string.","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"dde8b861c991c2b538cfd787830f9c1858aee002","unresolved":false,"context_lines":[{"line_number":150,"context_line":"                         expected)"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"    def test_check_backlog_above_BT_not_pingable_below_deadtime(self):"},{"line_number":153,"context_line":"        \"\"\"This test simulates a hosting device which has passed the created"},{"line_number":154,"context_line":"           time but less than the \u0027declared dead\u0027 time."},{"line_number":155,"context_line":"           Hosting device is still not pingable."},{"line_number":156,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_75d30d04","line":153,"in_reply_to":"baada198_d158dffc","updated":"2014-07-03 22:11:33.000000000","message":"Done","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"0f4919ce16b22c8cc524a7ab20238493015af6a9","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        self.status._is_pingable.return_value \u003d False"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"        self.assertFalse(self.status._is_pingable(\u00271.2.3.4\u0027))"},{"line_number":81,"context_line":"        self.assertEqual(None, self.status.is_hosting_device_reachable("},{"line_number":82,"context_line":"            self.hosting_device))"},{"line_number":83,"context_line":"        self.assertEqual(1, len(self.status.get_backlogged_hosting_devices()))"},{"line_number":84,"context_line":"        self.assertTrue(123 in self.status.get_backlogged_hosting_devices())"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_d05beef3","line":81,"updated":"2014-07-04 15:45:57.000000000","message":"assertIsNone()","commit_id":"23c8d9d830d1639f29088f2502ec650f71d7032d"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"77a381a655bc90f1d6858732f3b4a8a53e6816fe","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        self.status._is_pingable.return_value \u003d False"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"        self.assertFalse(self.status._is_pingable(\u00271.2.3.4\u0027))"},{"line_number":81,"context_line":"        self.assertEqual(None, self.status.is_hosting_device_reachable("},{"line_number":82,"context_line":"            self.hosting_device))"},{"line_number":83,"context_line":"        self.assertEqual(1, len(self.status.get_backlogged_hosting_devices()))"},{"line_number":84,"context_line":"        self.assertTrue(123 in self.status.get_backlogged_hosting_devices())"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_934879b4","line":81,"in_reply_to":"baada198_d05beef3","updated":"2014-07-07 15:04:16.000000000","message":"Done","commit_id":"23c8d9d830d1639f29088f2502ec650f71d7032d"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"0f4919ce16b22c8cc524a7ab20238493015af6a9","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        self.status.backlog_hosting_devices[123] \u003d {\u0027hd\u0027: self.hosting_device}"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"        self.assertEqual(1, len(self.status.backlog_hosting_devices))"},{"line_number":93,"context_line":"        self.assertEqual(None, self.status.is_hosting_device_reachable("},{"line_number":94,"context_line":"            self.hosting_device))"},{"line_number":95,"context_line":"        self.assertEqual(1, len(self.status.get_backlogged_hosting_devices()))"},{"line_number":96,"context_line":"        self.assertTrue(123 in self.status.backlog_hosting_devices.keys())"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_50ec3ef3","line":93,"updated":"2014-07-04 15:45:57.000000000","message":"assertIsNone()","commit_id":"23c8d9d830d1639f29088f2502ec650f71d7032d"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"77a381a655bc90f1d6858732f3b4a8a53e6816fe","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        self.status.backlog_hosting_devices[123] \u003d {\u0027hd\u0027: self.hosting_device}"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"        self.assertEqual(1, len(self.status.backlog_hosting_devices))"},{"line_number":93,"context_line":"        self.assertEqual(None, self.status.is_hosting_device_reachable("},{"line_number":94,"context_line":"            self.hosting_device))"},{"line_number":95,"context_line":"        self.assertEqual(1, len(self.status.get_backlogged_hosting_devices()))"},{"line_number":96,"context_line":"        self.assertTrue(123 in self.status.backlog_hosting_devices.keys())"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_b3cadd18","line":93,"in_reply_to":"baada198_50ec3ef3","updated":"2014-07-07 15:04:16.000000000","message":"Done","commit_id":"23c8d9d830d1639f29088f2502ec650f71d7032d"}],"neutron/tests/unit/cisco/cfg_agent/test_routing_svc_helper.py":[{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"d6205ff89d3087d5b8b4f9181772a3551a2cbefb","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        self.assertTrue(ri.router_name().endswith(id))"},{"line_number":110,"context_line":"        self.assertEqual(ri.router, self.router)"},{"line_number":111,"context_line":"        self.assertEqual(ri._router, self.router)"},{"line_number":112,"context_line":"        self.assertEqual(ri.snat_enabled, True)"},{"line_number":113,"context_line":"        self.assertEqual(ri.ex_gw_port, None)"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    def test_router_info_create_snat_disabled(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_31f67bd8","line":112,"updated":"2014-07-01 13:15:46.000000000","message":"assertTrue","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"dde8b861c991c2b538cfd787830f9c1858aee002","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        self.assertTrue(ri.router_name().endswith(id))"},{"line_number":110,"context_line":"        self.assertEqual(ri.router, self.router)"},{"line_number":111,"context_line":"        self.assertEqual(ri._router, self.router)"},{"line_number":112,"context_line":"        self.assertEqual(ri.snat_enabled, True)"},{"line_number":113,"context_line":"        self.assertEqual(ri.ex_gw_port, None)"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    def test_router_info_create_snat_disabled(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_95d0a1f7","line":112,"in_reply_to":"baada198_31f67bd8","updated":"2014-07-03 22:11:33.000000000","message":"Done","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"d6205ff89d3087d5b8b4f9181772a3551a2cbefb","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        self.assertEqual(ri.router, self.router)"},{"line_number":111,"context_line":"        self.assertEqual(ri._router, self.router)"},{"line_number":112,"context_line":"        self.assertEqual(ri.snat_enabled, True)"},{"line_number":113,"context_line":"        self.assertEqual(ri.ex_gw_port, None)"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    def test_router_info_create_snat_disabled(self):"},{"line_number":116,"context_line":"        id \u003d _uuid()"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_b131aba4","line":113,"updated":"2014-07-01 13:15:46.000000000","message":"assertIsNone","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"dde8b861c991c2b538cfd787830f9c1858aee002","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        self.assertEqual(ri.router, self.router)"},{"line_number":111,"context_line":"        self.assertEqual(ri._router, self.router)"},{"line_number":112,"context_line":"        self.assertEqual(ri.snat_enabled, True)"},{"line_number":113,"context_line":"        self.assertEqual(ri.ex_gw_port, None)"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    def test_router_info_create_snat_disabled(self):"},{"line_number":116,"context_line":"        id \u003d _uuid()"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_b5d92524","line":113,"in_reply_to":"baada198_b131aba4","updated":"2014-07-03 22:11:33.000000000","message":"Done","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"d6205ff89d3087d5b8b4f9181772a3551a2cbefb","unresolved":false,"context_lines":[{"line_number":116,"context_line":"        id \u003d _uuid()"},{"line_number":117,"context_line":"        self.router[\u0027enable_snat\u0027] \u003d False"},{"line_number":118,"context_line":"        ri \u003d RouterInfo(id, self.router)"},{"line_number":119,"context_line":"        self.assertEqual(ri.snat_enabled, False)"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"class TestBasicRoutingOperations(base.BaseTestCase):"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_d1261f68","line":119,"updated":"2014-07-01 13:15:46.000000000","message":"assertFalse.  Check others in this file","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"dde8b861c991c2b538cfd787830f9c1858aee002","unresolved":false,"context_lines":[{"line_number":116,"context_line":"        id \u003d _uuid()"},{"line_number":117,"context_line":"        self.router[\u0027enable_snat\u0027] \u003d False"},{"line_number":118,"context_line":"        ri \u003d RouterInfo(id, self.router)"},{"line_number":119,"context_line":"        self.assertEqual(ri.snat_enabled, False)"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"class TestBasicRoutingOperations(base.BaseTestCase):"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_d5d699f0","line":119,"in_reply_to":"baada198_d1261f68","updated":"2014-07-03 22:11:33.000000000","message":"Done","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"d6205ff89d3087d5b8b4f9181772a3551a2cbefb","unresolved":false,"context_lines":[{"line_number":163,"context_line":"        self.looping_call_p.start()"},{"line_number":164,"context_line":"        mock.patch(\u0027neutron.common.rpc.create_connection\u0027).start()"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"        self.addCleanup(mock.patch.stopall)"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"    def _mock_driver_and_hosting_device(self, svc_helper):"},{"line_number":169,"context_line":"        svc_helper._dev_status.is_hosting_device_reachable \u003d mock.MagicMock("}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_311d9b10","line":166,"updated":"2014-07-01 13:15:46.000000000","message":"remove","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"dde8b861c991c2b538cfd787830f9c1858aee002","unresolved":false,"context_lines":[{"line_number":163,"context_line":"        self.looping_call_p.start()"},{"line_number":164,"context_line":"        mock.patch(\u0027neutron.common.rpc.create_connection\u0027).start()"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"        self.addCleanup(mock.patch.stopall)"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"    def _mock_driver_and_hosting_device(self, svc_helper):"},{"line_number":169,"context_line":"        svc_helper._dev_status.is_hosting_device_reachable \u003d mock.MagicMock("}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_f5063d85","line":166,"in_reply_to":"baada198_311d9b10","updated":"2014-07-03 22:11:33.000000000","message":"Done","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"d6205ff89d3087d5b8b4f9181772a3551a2cbefb","unresolved":false,"context_lines":[{"line_number":223,"context_line":"        fake_floatingips2[\u0027floatingips\u0027][0][\u0027fixed_ip_address\u0027] \u003d \u00277.7.7.8\u0027"},{"line_number":224,"context_line":"        router[l3_constants.FLOATINGIP_KEY] \u003d fake_floatingips2[\u0027floatingips\u0027]"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"        # Process again and check that this time only the process_floating_ips"},{"line_number":227,"context_line":"        # was only called."},{"line_number":228,"context_line":"        routing_svc_helper._process_router(ri)"},{"line_number":229,"context_line":"        ex_gw_port \u003d ri.router.get(\u0027gw_port\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_3192fb57","line":226,"updated":"2014-07-01 13:15:46.000000000","message":"Is it possible to break these into different test cases, for better test isolation?","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"dde8b861c991c2b538cfd787830f9c1858aee002","unresolved":false,"context_lines":[{"line_number":223,"context_line":"        fake_floatingips2[\u0027floatingips\u0027][0][\u0027fixed_ip_address\u0027] \u003d \u00277.7.7.8\u0027"},{"line_number":224,"context_line":"        router[l3_constants.FLOATINGIP_KEY] \u003d fake_floatingips2[\u0027floatingips\u0027]"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"        # Process again and check that this time only the process_floating_ips"},{"line_number":227,"context_line":"        # was only called."},{"line_number":228,"context_line":"        routing_svc_helper._process_router(ri)"},{"line_number":229,"context_line":"        ex_gw_port \u003d ri.router.get(\u0027gw_port\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_1581f1c3","line":226,"in_reply_to":"baada198_3192fb57","updated":"2014-07-03 22:11:33.000000000","message":"I am trying to make sure that the _process_router() does not modify the agent\u0027s state accidentally, and the right calls are made in subsequent runs, which are state based. So need to keep it in one test case. Ofcourse more test cases will be useful, the bases are covered here.","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"d6205ff89d3087d5b8b4f9181772a3551a2cbefb","unresolved":false,"context_lines":[{"line_number":285,"context_line":""},{"line_number":286,"context_line":"        driver.routes_updated.assert_called_with(ri, \u0027replace\u0027, fake_route1)"},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"        # Now we replace fake_route1 with fake_route2. This should cause driver"},{"line_number":289,"context_line":"        # to be invoked to delete fake_route1 and \u0027replace\u0027(\u003d\u003dadd or replace)"},{"line_number":290,"context_line":"        driver.reset_mock()"},{"line_number":291,"context_line":"        router[\u0027routes\u0027] \u003d [fake_route2]"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_d199bf6f","line":288,"updated":"2014-07-01 13:15:46.000000000","message":"Same here.","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"dde8b861c991c2b538cfd787830f9c1858aee002","unresolved":false,"context_lines":[{"line_number":285,"context_line":""},{"line_number":286,"context_line":"        driver.routes_updated.assert_called_with(ri, \u0027replace\u0027, fake_route1)"},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"        # Now we replace fake_route1 with fake_route2. This should cause driver"},{"line_number":289,"context_line":"        # to be invoked to delete fake_route1 and \u0027replace\u0027(\u003d\u003dadd or replace)"},{"line_number":290,"context_line":"        driver.reset_mock()"},{"line_number":291,"context_line":"        router[\u0027routes\u0027] \u003d [fake_route2]"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_756f8d2b","line":288,"in_reply_to":"baada198_d199bf6f","updated":"2014-07-03 22:11:33.000000000","message":"Same as earlier.I wanted to test keeping the state.","commit_id":"27c92f2e09018cb40a11809155c0359005df72b5"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"0f4919ce16b22c8cc524a7ab20238493015af6a9","unresolved":false,"context_lines":[{"line_number":185,"context_line":"        ri \u003d RouterInfo(router[\u0027id\u0027], router)"},{"line_number":186,"context_line":"        self.assertRaises(cfg_exceptions.CSR1kvConfigException,"},{"line_number":187,"context_line":"                          routing_svc_helper._process_router, ri)"},{"line_number":188,"context_line":"        routing_svc_helper._internal_network_added.reset_mock()"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"    def test_process_router(self):"},{"line_number":191,"context_line":"        routing_svc_helper \u003d RoutingServiceHelper(HOST, self.conf, self.agent)"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_30d98a22","line":188,"updated":"2014-07-04 15:45:57.000000000","message":"Needed? If so, it should be in tearDown() or as an addCleanup(), so that a failure before this line won\u0027t prevent it from happening.","commit_id":"23c8d9d830d1639f29088f2502ec650f71d7032d"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"77a381a655bc90f1d6858732f3b4a8a53e6816fe","unresolved":false,"context_lines":[{"line_number":185,"context_line":"        ri \u003d RouterInfo(router[\u0027id\u0027], router)"},{"line_number":186,"context_line":"        self.assertRaises(cfg_exceptions.CSR1kvConfigException,"},{"line_number":187,"context_line":"                          routing_svc_helper._process_router, ri)"},{"line_number":188,"context_line":"        routing_svc_helper._internal_network_added.reset_mock()"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"    def test_process_router(self):"},{"line_number":191,"context_line":"        routing_svc_helper \u003d RoutingServiceHelper(HOST, self.conf, self.agent)"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_93523933","line":188,"in_reply_to":"baada198_30d98a22","updated":"2014-07-07 15:04:16.000000000","message":"Setting up the routing service helper object and mocking some of its relevant methods have now been moved to the setup() function. This eliminates a lot of the repeated code and makes it much cleaner. Thanks for the suggestion Paul!","commit_id":"23c8d9d830d1639f29088f2502ec650f71d7032d"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"0f4919ce16b22c8cc524a7ab20238493015af6a9","unresolved":false,"context_lines":[{"line_number":187,"context_line":"                          routing_svc_helper._process_router, ri)"},{"line_number":188,"context_line":"        routing_svc_helper._internal_network_added.reset_mock()"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"    def test_process_router(self):"},{"line_number":191,"context_line":"        routing_svc_helper \u003d RoutingServiceHelper(HOST, self.conf, self.agent)"},{"line_number":192,"context_line":"        routing_svc_helper._process_router_floating_ips \u003d mock.Mock()"},{"line_number":193,"context_line":"        routing_svc_helper._internal_network_added \u003d mock.Mock()"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_102486c3","line":190,"updated":"2014-07-04 15:45:57.000000000","message":"Should this and some of the following test cases be placed into another class, and then router_svc_helper (and maybe other items) can be placed into setUp()?","commit_id":"23c8d9d830d1639f29088f2502ec650f71d7032d"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"77a381a655bc90f1d6858732f3b4a8a53e6816fe","unresolved":false,"context_lines":[{"line_number":187,"context_line":"                          routing_svc_helper._process_router, ri)"},{"line_number":188,"context_line":"        routing_svc_helper._internal_network_added.reset_mock()"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"    def test_process_router(self):"},{"line_number":191,"context_line":"        routing_svc_helper \u003d RoutingServiceHelper(HOST, self.conf, self.agent)"},{"line_number":192,"context_line":"        routing_svc_helper._process_router_floating_ips \u003d mock.Mock()"},{"line_number":193,"context_line":"        routing_svc_helper._internal_network_added \u003d mock.Mock()"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_d33751fd","line":190,"in_reply_to":"baada198_102486c3","updated":"2014-07-07 15:04:16.000000000","message":"Done.","commit_id":"23c8d9d830d1639f29088f2502ec650f71d7032d"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"0f4919ce16b22c8cc524a7ab20238493015af6a9","unresolved":false,"context_lines":[{"line_number":622,"context_line":"            router_ids\u003d[router[\u0027id\u0027]])"},{"line_number":623,"context_line":"        self.assertFalse(mock_spawn.called)"},{"line_number":624,"context_line":"        self.assertTrue(routing_svc_helper.fullsync)"},{"line_number":625,"context_line":"        self.plugin_api.get_routers.reset_mock()"},{"line_number":626,"context_line":""},{"line_number":627,"context_line":"    def test_process_routers(self):"},{"line_number":628,"context_line":"        router, port \u003d prepare_router_data()"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_709782ec","line":625,"updated":"2014-07-04 15:45:57.000000000","message":"Needed?","commit_id":"23c8d9d830d1639f29088f2502ec650f71d7032d"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"77a381a655bc90f1d6858732f3b4a8a53e6816fe","unresolved":false,"context_lines":[{"line_number":622,"context_line":"            router_ids\u003d[router[\u0027id\u0027]])"},{"line_number":623,"context_line":"        self.assertFalse(mock_spawn.called)"},{"line_number":624,"context_line":"        self.assertTrue(routing_svc_helper.fullsync)"},{"line_number":625,"context_line":"        self.plugin_api.get_routers.reset_mock()"},{"line_number":626,"context_line":""},{"line_number":627,"context_line":"    def test_process_routers(self):"},{"line_number":628,"context_line":"        router, port \u003d prepare_router_data()"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_d3c2f1e7","line":625,"in_reply_to":"baada198_709782ec","updated":"2014-07-07 15:04:16.000000000","message":"Removed as not needed any more.","commit_id":"23c8d9d830d1639f29088f2502ec650f71d7032d"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"69aec30900e23ef773493672e0560cd76e73d06f","unresolved":false,"context_lines":[{"line_number":104,"context_line":"        self.assertTrue(ri.router_name().endswith(id))"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    def test_router_info_create_with_router(self):"},{"line_number":107,"context_line":"        id \u003d _uuid()"},{"line_number":108,"context_line":"        ri \u003d RouterInfo(id, self.router)"},{"line_number":109,"context_line":"        self.assertTrue(ri.router_name().endswith(id))"},{"line_number":110,"context_line":"        self.assertEqual(ri.router, self.router)"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_6a13ca64","line":107,"updated":"2014-07-15 15:58:54.000000000","message":"id is a Python built-in function. Please use router_id instead.","commit_id":"f799aeaac255bf660642f2b42f25d844b84d28ba"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"fee89a8ead6d9ad17fb85faa26858ee7ed60e91f","unresolved":false,"context_lines":[{"line_number":104,"context_line":"        self.assertTrue(ri.router_name().endswith(id))"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    def test_router_info_create_with_router(self):"},{"line_number":107,"context_line":"        id \u003d _uuid()"},{"line_number":108,"context_line":"        ri \u003d RouterInfo(id, self.router)"},{"line_number":109,"context_line":"        self.assertTrue(ri.router_name().endswith(id))"},{"line_number":110,"context_line":"        self.assertEqual(ri.router, self.router)"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_69d8a3ef","line":107,"in_reply_to":"baada198_6a13ca64","updated":"2014-07-18 17:26:10.000000000","message":"Done","commit_id":"f799aeaac255bf660642f2b42f25d844b84d28ba"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"69aec30900e23ef773493672e0560cd76e73d06f","unresolved":false,"context_lines":[{"line_number":113,"context_line":"        self.assertIsNone(ri.ex_gw_port)"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    def test_router_info_create_snat_disabled(self):"},{"line_number":116,"context_line":"        id \u003d _uuid()"},{"line_number":117,"context_line":"        self.router[\u0027enable_snat\u0027] \u003d False"},{"line_number":118,"context_line":"        ri \u003d RouterInfo(id, self.router)"},{"line_number":119,"context_line":"        self.assertFalse(ri.snat_enabled)"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_8a0d7e40","line":116,"updated":"2014-07-15 15:58:54.000000000","message":"Ditto.","commit_id":"f799aeaac255bf660642f2b42f25d844b84d28ba"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"fee89a8ead6d9ad17fb85faa26858ee7ed60e91f","unresolved":false,"context_lines":[{"line_number":113,"context_line":"        self.assertIsNone(ri.ex_gw_port)"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    def test_router_info_create_snat_disabled(self):"},{"line_number":116,"context_line":"        id \u003d _uuid()"},{"line_number":117,"context_line":"        self.router[\u0027enable_snat\u0027] \u003d False"},{"line_number":118,"context_line":"        ri \u003d RouterInfo(id, self.router)"},{"line_number":119,"context_line":"        self.assertFalse(ri.snat_enabled)"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_89e1779d","line":116,"in_reply_to":"baada198_8a0d7e40","updated":"2014-07-18 17:26:10.000000000","message":"Done","commit_id":"f799aeaac255bf660642f2b42f25d844b84d28ba"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"69aec30900e23ef773493672e0560cd76e73d06f","unresolved":false,"context_lines":[{"line_number":156,"context_line":"            \u0027neutron.plugins.cisco.cfg_agent.service_helpers.\u0027"},{"line_number":157,"context_line":"            \u0027routing_svc_helper.CiscoRoutingPluginApi\u0027)"},{"line_number":158,"context_line":"        l3pluginApi_cls \u003d self.l3pluginApi_cls_p.start()"},{"line_number":159,"context_line":"        self.plugin_api \u003d mock.Mock()"},{"line_number":160,"context_line":"        l3pluginApi_cls.return_value \u003d self.plugin_api"},{"line_number":161,"context_line":"        self.plugin_api.get_routers \u003d mock.MagicMock()"},{"line_number":162,"context_line":"        self.looping_call_p \u003d mock.patch("}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_b80d3938","line":159,"updated":"2014-07-15 15:58:54.000000000","message":"Nit: variable names should not mix case","commit_id":"f799aeaac255bf660642f2b42f25d844b84d28ba"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"fee89a8ead6d9ad17fb85faa26858ee7ed60e91f","unresolved":false,"context_lines":[{"line_number":156,"context_line":"            \u0027neutron.plugins.cisco.cfg_agent.service_helpers.\u0027"},{"line_number":157,"context_line":"            \u0027routing_svc_helper.CiscoRoutingPluginApi\u0027)"},{"line_number":158,"context_line":"        l3pluginApi_cls \u003d self.l3pluginApi_cls_p.start()"},{"line_number":159,"context_line":"        self.plugin_api \u003d mock.Mock()"},{"line_number":160,"context_line":"        l3pluginApi_cls.return_value \u003d self.plugin_api"},{"line_number":161,"context_line":"        self.plugin_api.get_routers \u003d mock.MagicMock()"},{"line_number":162,"context_line":"        self.looping_call_p \u003d mock.patch("}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_a9de3bd8","line":159,"in_reply_to":"baada198_b80d3938","updated":"2014-07-18 17:26:10.000000000","message":"Done","commit_id":"f799aeaac255bf660642f2b42f25d844b84d28ba"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"69aec30900e23ef773493672e0560cd76e73d06f","unresolved":false,"context_lines":[{"line_number":282,"context_line":"        self.routing_helper._process_router(ri)"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"        self.driver.routes_updated.assert_called_with(ri, \u0027replace\u0027,"},{"line_number":285,"context_line":"                                                    fake_route1)"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"        # Now we replace fake_route1 with fake_route2. This should cause driver"},{"line_number":288,"context_line":"        # to be invoked to delete fake_route1 and \u0027replace\u0027(\u003d\u003dadd or replace)"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_389e89b9","line":285,"updated":"2014-07-15 15:58:54.000000000","message":"Nit: alignment?","commit_id":"f799aeaac255bf660642f2b42f25d844b84d28ba"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"fee89a8ead6d9ad17fb85faa26858ee7ed60e91f","unresolved":false,"context_lines":[{"line_number":282,"context_line":"        self.routing_helper._process_router(ri)"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"        self.driver.routes_updated.assert_called_with(ri, \u0027replace\u0027,"},{"line_number":285,"context_line":"                                                    fake_route1)"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"        # Now we replace fake_route1 with fake_route2. This should cause driver"},{"line_number":288,"context_line":"        # to be invoked to delete fake_route1 and \u0027replace\u0027(\u003d\u003dadd or replace)"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_e9f3d370","line":285,"in_reply_to":"baada198_389e89b9","updated":"2014-07-18 17:26:10.000000000","message":"fixed","commit_id":"f799aeaac255bf660642f2b42f25d844b84d28ba"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"69aec30900e23ef773493672e0560cd76e73d06f","unresolved":false,"context_lines":[{"line_number":508,"context_line":"        router, port \u003d prepare_router_data()"},{"line_number":509,"context_line":"        device_id \u003d router[\u0027hosting_device\u0027][\u0027id\u0027]"},{"line_number":510,"context_line":""},{"line_number":511,"context_line":"        def routers_data(context, router_ids\u003dNone, hd_ids\u003d[]):"},{"line_number":512,"context_line":"            if hd_ids:"},{"line_number":513,"context_line":"                self.assertEqual([device_id], hd_ids)"},{"line_number":514,"context_line":"                return [router]"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_58c89da8","line":511,"updated":"2014-07-15 15:58:54.000000000","message":"You should not use mutable default arguments. Not sure it really affects this test case but it\u0027s better to avoid surprises.","commit_id":"f799aeaac255bf660642f2b42f25d844b84d28ba"},{"author":{"_account_id":7021,"name":"Hareesh Puthalath","email":"hareesh.puthalath@gmail.com","username":"hareesh"},"change_message_id":"fee89a8ead6d9ad17fb85faa26858ee7ed60e91f","unresolved":false,"context_lines":[{"line_number":508,"context_line":"        router, port \u003d prepare_router_data()"},{"line_number":509,"context_line":"        device_id \u003d router[\u0027hosting_device\u0027][\u0027id\u0027]"},{"line_number":510,"context_line":""},{"line_number":511,"context_line":"        def routers_data(context, router_ids\u003dNone, hd_ids\u003d[]):"},{"line_number":512,"context_line":"            if hd_ids:"},{"line_number":513,"context_line":"                self.assertEqual([device_id], hd_ids)"},{"line_number":514,"context_line":"                return [router]"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_29ea2b74","line":511,"in_reply_to":"baada198_58c89da8","updated":"2014-07-18 17:26:10.000000000","message":"Done","commit_id":"f799aeaac255bf660642f2b42f25d844b84d28ba"}]}
