)]}'
{"networking_odl/l3/l3_odl_v2.py":[{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"005bcd7cf628919695ebf22b40d507f94df65b7b","unresolved":false,"context_lines":[{"line_number":79,"context_line":"        except Exception:"},{"line_number":80,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":81,"context_line":"                try:"},{"line_number":82,"context_line":"                    self.delete_router(router_dict[\u0027id\u0027])"},{"line_number":83,"context_line":"                except Exception as e:"},{"line_number":84,"context_line":"                    LOG.error(\"Cannot clean up created router %(router)s. \""},{"line_number":85,"context_line":"                              \"Exception: %(exc)s\","}],"source_content_type":"text/x-python","patch_set":12,"id":"df140735_976312dd","line":82,"range":{"start_line":82,"start_character":19,"end_line":82,"end_character":57},"updated":"2017-05-30 15:46:09.000000000","message":"i\u0027ll suggest a check for router exist before deleting it?","commit_id":"d5aad814ca5250af58e56c71fab6be2c8556d7f2"},{"author":{"_account_id":7921,"name":"Mike Kolesnik","email":"mkolesni@redhat.com","username":"mkolesni"},"change_message_id":"36b979e207f6f393df8dc8b72c1b1d8d9ae5c23b","unresolved":false,"context_lines":[{"line_number":79,"context_line":"        except Exception:"},{"line_number":80,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":81,"context_line":"                try:"},{"line_number":82,"context_line":"                    self.delete_router(router_dict[\u0027id\u0027])"},{"line_number":83,"context_line":"                except Exception as e:"},{"line_number":84,"context_line":"                    LOG.error(\"Cannot clean up created router %(router)s. \""},{"line_number":85,"context_line":"                              \"Exception: %(exc)s\","}],"source_content_type":"text/x-python","patch_set":12,"id":"7f231b9d_ba2162a2","line":82,"range":{"start_line":82,"start_character":19,"end_line":82,"end_character":57},"in_reply_to":"df140735_67d43ebe","updated":"2017-06-12 12:13:07.000000000","message":"Why not use safe_creation from neutron\u0027s DB utils?","commit_id":"d5aad814ca5250af58e56c71fab6be2c8556d7f2"},{"author":{"_account_id":11347,"name":"Rui Zang","email":"rui.zang@yandex.com","username":"rzang"},"change_message_id":"dd56fe949397de53142d6590f660ed7ad8bf828c","unresolved":false,"context_lines":[{"line_number":79,"context_line":"        except Exception:"},{"line_number":80,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":81,"context_line":"                try:"},{"line_number":82,"context_line":"                    self.delete_router(router_dict[\u0027id\u0027])"},{"line_number":83,"context_line":"                except Exception as e:"},{"line_number":84,"context_line":"                    LOG.error(\"Cannot clean up created router %(router)s. \""},{"line_number":85,"context_line":"                              \"Exception: %(exc)s\","}],"source_content_type":"text/x-python","patch_set":12,"id":"df140735_67d43ebe","line":82,"range":{"start_line":82,"start_character":19,"end_line":82,"end_character":57},"in_reply_to":"df140735_976312dd","updated":"2017-05-31 01:53:03.000000000","message":"That won\u0027t be necessary. Router had already been created in Line71. If anything happens during Neutron router creation, exceptions would have been raised from Line71. We won\u0027t be able to cache these exceptions here.","commit_id":"d5aad814ca5250af58e56c71fab6be2c8556d7f2"},{"author":{"_account_id":7921,"name":"Mike Kolesnik","email":"mkolesni@redhat.com","username":"mkolesni"},"change_message_id":"36b979e207f6f393df8dc8b72c1b1d8d9ae5c23b","unresolved":false,"context_lines":[{"line_number":88,"context_line":""},{"line_number":89,"context_line":"        return router_dict"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    \"\"\""},{"line_number":92,"context_line":"    The PRECOMMIT_CREATE notification is sent before update_gw_info."},{"line_number":93,"context_line":"    So at this point, router_db does not contain gateway info as it should."},{"line_number":94,"context_line":"    There is an AFTER_CREATE notification, but that is not atomic."},{"line_number":95,"context_line":"    This should be addressed in Neutron."},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    @registry.receives(resources.ROUTER, [events.PRECOMMIT_CREATE])"},{"line_number":98,"context_line":"    @journal.call_thread_on_end"},{"line_number":99,"context_line":"    def _create_router_precommit(self, resource, event,"},{"line_number":100,"context_line":"                                 trigger, context, router,"},{"line_number":101,"context_line":"                                 router_db, **kwargs):"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"        router_dict \u003d self._make_router_dict(router_db)"},{"line_number":104,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":105,"context_line":"            journal.record(context, odl_const.ODL_ROUTER,"},{"line_number":106,"context_line":"                           router_dict[\u0027id\u0027],"},{"line_number":107,"context_line":"                           odl_const.ODL_CREATE,"},{"line_number":108,"context_line":"                           router_dict)"},{"line_number":109,"context_line":"    \"\"\""},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    @registry.receives(resources.ROUTER, [events.PRECOMMIT_UPDATE])"},{"line_number":112,"context_line":"    @journal.call_thread_on_end"}],"source_content_type":"text/x-python","patch_set":12,"id":"7f231b9d_7a698abc","line":109,"range":{"start_line":91,"start_character":0,"end_line":109,"end_character":7},"updated":"2017-06-12 12:13:07.000000000","message":"This should all not be here but instead documented in a bug or perhaps some todo but definitely not a blob of text..","commit_id":"d5aad814ca5250af58e56c71fab6be2c8556d7f2"},{"author":{"_account_id":7921,"name":"Mike Kolesnik","email":"mkolesni@redhat.com","username":"mkolesni"},"change_message_id":"36b979e207f6f393df8dc8b72c1b1d8d9ae5c23b","unresolved":false,"context_lines":[{"line_number":109,"context_line":"    \"\"\""},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    @registry.receives(resources.ROUTER, [events.PRECOMMIT_UPDATE])"},{"line_number":112,"context_line":"    @journal.call_thread_on_end"},{"line_number":113,"context_line":"    def _update_router_precommit(self, resource, event, trigger, context,"},{"line_number":114,"context_line":"                                 router_id, router, old_router, router_db,"},{"line_number":115,"context_line":"                                 **kwargs):"}],"source_content_type":"text/x-python","patch_set":12,"id":"7f231b9d_3a3552db","line":112,"range":{"start_line":112,"start_character":0,"end_line":112,"end_character":31},"updated":"2017-06-12 12:13:07.000000000","message":"This should be called in postcommit","commit_id":"d5aad814ca5250af58e56c71fab6be2c8556d7f2"},{"author":{"_account_id":7921,"name":"Mike Kolesnik","email":"mkolesni@redhat.com","username":"mkolesni"},"change_message_id":"36b979e207f6f393df8dc8b72c1b1d8d9ae5c23b","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        return router_dict"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    @registry.receives(resources.ROUTER, [events.PRECOMMIT_DELETE])"},{"line_number":124,"context_line":"    @journal.call_thread_on_end"},{"line_number":125,"context_line":"    def _delete_router_precommit(self, resource, event, trigger, context,"},{"line_number":126,"context_line":"                                 router_db, router_id):"},{"line_number":127,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"7f231b9d_fa4c7a77","line":124,"range":{"start_line":124,"start_character":0,"end_line":124,"end_character":31},"updated":"2017-06-12 12:13:07.000000000","message":"This should be called in postcommit","commit_id":"d5aad814ca5250af58e56c71fab6be2c8556d7f2"},{"author":{"_account_id":7921,"name":"Mike Kolesnik","email":"mkolesni@redhat.com","username":"mkolesni"},"change_message_id":"36b979e207f6f393df8dc8b72c1b1d8d9ae5c23b","unresolved":false,"context_lines":[{"line_number":146,"context_line":"            OpenDaylightL3RouterPlugin, self).create_floatingip("},{"line_number":147,"context_line":"                context, floatingip, initial_status)"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"        try:"},{"line_number":150,"context_line":"            with context.session.begin(subtransactions\u003dTrue):"},{"line_number":151,"context_line":"                journal.record(context, odl_const.ODL_FLOATINGIP,"},{"line_number":152,"context_line":"                               fip_dict[\u0027id\u0027], odl_const.ODL_CREATE,"},{"line_number":153,"context_line":"                               fip_dict)"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"        except Exception:"},{"line_number":156,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":157,"context_line":"                self.update_floatingip_status(context, fip_dict[\u0027id\u0027],"},{"line_number":158,"context_line":"                                              q_const.FLOATINGIP_STATUS_ERROR)"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"        return fip_dict"},{"line_number":161,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"7f231b9d_1ab5f631","line":158,"range":{"start_line":149,"start_character":8,"end_line":158,"end_character":78},"updated":"2017-06-12 12:13:07.000000000","message":"This pattern is repetitive, can you please extract this to a function?","commit_id":"d5aad814ca5250af58e56c71fab6be2c8556d7f2"}]}
