)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"3b6229b6962213c665873ccf3eeb34214be64402","unresolved":false,"context_lines":[{"line_number":10,"context_line":"rpc notification."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"l3 plugin for routervm will implement the method for REST resource"},{"line_number":13,"context_line":"operation as something linke"},{"line_number":14,"context_line":"    def op_resource():"},{"line_number":15,"context_line":"        additional operation"},{"line_number":16,"context_line":"        with session"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"baada198_401602f3","line":13,"updated":"2014-07-28 13:43:17.000000000","message":"linke -\u003e like","commit_id":"bcf3ec50e8eecb5137dd443c4be9d5a0896ea62b"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"908e771dc9f6e188202bf2d65e50621e37f5b8dc","unresolved":false,"context_lines":[{"line_number":10,"context_line":"rpc notification."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"l3 plugin for routervm will implement the method for REST resource"},{"line_number":13,"context_line":"operation as something linke"},{"line_number":14,"context_line":"    def op_resource():"},{"line_number":15,"context_line":"        additional operation"},{"line_number":16,"context_line":"        with session"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"baada198_c91673f2","line":13,"in_reply_to":"baada198_401602f3","updated":"2014-07-30 02:45:22.000000000","message":"Done","commit_id":"bcf3ec50e8eecb5137dd443c4be9d5a0896ea62b"}],"neutron/db/l3_db.py":[{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"3b6229b6962213c665873ccf3eeb34214be64402","unresolved":false,"context_lines":[{"line_number":801,"context_line":"                                          l3_port_check\u003dFalse)"},{"line_number":802,"context_line":"        return router_id"},{"line_number":803,"context_line":""},{"line_number":804,"context_line":"    def delete_floatingip(self, context, id):"},{"line_number":805,"context_line":"        self._delete_floatingip(context, id)"},{"line_number":806,"context_line":""},{"line_number":807,"context_line":"    def get_floatingip(self, context, id, fields\u003dNone):"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_7b74979b","line":804,"updated":"2014-07-28 13:43:17.000000000","message":"Don\u0027t really need a wrapper for this method, right?","commit_id":"bcf3ec50e8eecb5137dd443c4be9d5a0896ea62b"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"942d4e9774b44c3b685a6484389383bfa562669a","unresolved":false,"context_lines":[{"line_number":801,"context_line":"                                          l3_port_check\u003dFalse)"},{"line_number":802,"context_line":"        return router_id"},{"line_number":803,"context_line":""},{"line_number":804,"context_line":"    def delete_floatingip(self, context, id):"},{"line_number":805,"context_line":"        self._delete_floatingip(context, id)"},{"line_number":806,"context_line":""},{"line_number":807,"context_line":"    def get_floatingip(self, context, id, fields\u003dNone):"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_229bcb73","line":804,"in_reply_to":"baada198_7b74979b","updated":"2014-07-28 16:50:17.000000000","message":"_delete_floatingip (a method whose name starts with an underscore) is dedicated to db operation. For the reason of doing so, see L.1124 below. It looks reasonable to me.","commit_id":"bcf3ec50e8eecb5137dd443c4be9d5a0896ea62b"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"3b6229b6962213c665873ccf3eeb34214be64402","unresolved":false,"context_lines":[{"line_number":1062,"context_line":"class L3_NAT_db_mixin(L3_NAT_dbonly_mixin, L3RpcNotifierMixin):"},{"line_number":1063,"context_line":"    \"\"\"Mixin class to add rpc notifier methods to db_base_plugin_v2.\"\"\""},{"line_number":1064,"context_line":""},{"line_number":1065,"context_line":"    def notify_super_routers_updated(self, context, router_ids,"},{"line_number":1066,"context_line":"                                     operation\u003dNone, data\u003dNone):"},{"line_number":1067,"context_line":"        super(L3_NAT_db_mixin, self).notify_routers_updated("},{"line_number":1068,"context_line":"            context, router_ids, operation, data)"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_1b463b21","line":1065,"updated":"2014-07-28 13:43:17.000000000","message":"what\u0027s the purpose of the wrapper function? I don\u0027t see it used in multiple places. Could just call super() on L1147.","commit_id":"bcf3ec50e8eecb5137dd443c4be9d5a0896ea62b"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"942d4e9774b44c3b685a6484389383bfa562669a","unresolved":false,"context_lines":[{"line_number":1062,"context_line":"class L3_NAT_db_mixin(L3_NAT_dbonly_mixin, L3RpcNotifierMixin):"},{"line_number":1063,"context_line":"    \"\"\"Mixin class to add rpc notifier methods to db_base_plugin_v2.\"\"\""},{"line_number":1064,"context_line":""},{"line_number":1065,"context_line":"    def notify_super_routers_updated(self, context, router_ids,"},{"line_number":1066,"context_line":"                                     operation\u003dNone, data\u003dNone):"},{"line_number":1067,"context_line":"        super(L3_NAT_db_mixin, self).notify_routers_updated("},{"line_number":1068,"context_line":"            context, router_ids, operation, data)"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_a769adf9","line":1065,"in_reply_to":"baada198_1b463b21","updated":"2014-07-28 16:50:17.000000000","message":"Agree with Paul. Perhaps he wants to prepare a shortcut method, but it seems better to call super() directly.","commit_id":"bcf3ec50e8eecb5137dd443c4be9d5a0896ea62b"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"908e771dc9f6e188202bf2d65e50621e37f5b8dc","unresolved":false,"context_lines":[{"line_number":1062,"context_line":"class L3_NAT_db_mixin(L3_NAT_dbonly_mixin, L3RpcNotifierMixin):"},{"line_number":1063,"context_line":"    \"\"\"Mixin class to add rpc notifier methods to db_base_plugin_v2.\"\"\""},{"line_number":1064,"context_line":""},{"line_number":1065,"context_line":"    def notify_super_routers_updated(self, context, router_ids,"},{"line_number":1066,"context_line":"                                     operation\u003dNone, data\u003dNone):"},{"line_number":1067,"context_line":"        super(L3_NAT_db_mixin, self).notify_routers_updated("},{"line_number":1068,"context_line":"            context, router_ids, operation, data)"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_89cabb6d","line":1065,"in_reply_to":"baada198_a769adf9","updated":"2014-07-30 02:45:22.000000000","message":"Done","commit_id":"bcf3ec50e8eecb5137dd443c4be9d5a0896ea62b"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"f47a65988c0fd03ffcd4dde9411484f61ecf039d","unresolved":false,"context_lines":[{"line_number":1064,"context_line":""},{"line_number":1065,"context_line":"    def update_router(self, context, id, router):"},{"line_number":1066,"context_line":"        r \u003d router[\u0027router\u0027]"},{"line_number":1067,"context_line":"        payload \u003d {\u0027gw_exists\u0027: bool(r.get(EXTERNAL_GW_INFO,"},{"line_number":1068,"context_line":"                                           attributes.ATTR_NOT_SPECIFIED) !\u003d"},{"line_number":1069,"context_line":"                                     attributes.ATTR_NOT_SPECIFIED)}"},{"line_number":1070,"context_line":"        router_dict \u003d super(L3_NAT_db_mixin, self).update_router(context,"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_e13f3120","line":1067,"range":{"start_line":1067,"start_character":32,"end_line":1067,"end_character":36},"updated":"2014-08-04 07:02:29.000000000","message":"this bool() seems redundant.","commit_id":"71ae07ce37a166cc21612139804762c025273ea5"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"31d51fbed5deffa2da993155fcac85813a2e8ca1","unresolved":false,"context_lines":[{"line_number":1064,"context_line":""},{"line_number":1065,"context_line":"    def update_router(self, context, id, router):"},{"line_number":1066,"context_line":"        r \u003d router[\u0027router\u0027]"},{"line_number":1067,"context_line":"        payload \u003d {\u0027gw_exists\u0027: bool(r.get(EXTERNAL_GW_INFO,"},{"line_number":1068,"context_line":"                                           attributes.ATTR_NOT_SPECIFIED) !\u003d"},{"line_number":1069,"context_line":"                                     attributes.ATTR_NOT_SPECIFIED)}"},{"line_number":1070,"context_line":"        router_dict \u003d super(L3_NAT_db_mixin, self).update_router(context,"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_1cbf2a61","line":1067,"in_reply_to":"baada198_e13f3120","updated":"2014-08-04 07:32:38.000000000","message":"Done","commit_id":"71ae07ce37a166cc21612139804762c025273ea5"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"fdd158c5000760bf0da23cee3028f6f6377f9a95","unresolved":false,"context_lines":[{"line_number":1066,"context_line":"        r \u003d router[\u0027router\u0027]"},{"line_number":1067,"context_line":"        payload \u003d {\u0027gw_exists\u0027:"},{"line_number":1068,"context_line":"                   r.get(EXTERNAL_GW_INFO, attributes.ATTR_NOT_SPECIFIED) !\u003d"},{"line_number":1069,"context_line":"            attributes.ATTR_NOT_SPECIFIED}"},{"line_number":1070,"context_line":"        router_dict \u003d super(L3_NAT_db_mixin, self).update_router(context,"},{"line_number":1071,"context_line":"                                                                 id, router)"},{"line_number":1072,"context_line":"        self.notify_router_updated(context, router_dict[\u0027id\u0027], None, payload)"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_0208a425","line":1069,"updated":"2014-08-04 07:39:11.000000000","message":"weird indentation","commit_id":"928567f653bf52329b1d81dde435b2419c67ecba"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"aa039c4a229af9036f0d197df5c60cb9ffd84a76","unresolved":false,"context_lines":[{"line_number":1066,"context_line":"        r \u003d router[\u0027router\u0027]"},{"line_number":1067,"context_line":"        payload \u003d {\u0027gw_exists\u0027:"},{"line_number":1068,"context_line":"                   r.get(EXTERNAL_GW_INFO, attributes.ATTR_NOT_SPECIFIED) !\u003d"},{"line_number":1069,"context_line":"            attributes.ATTR_NOT_SPECIFIED}"},{"line_number":1070,"context_line":"        router_dict \u003d super(L3_NAT_db_mixin, self).update_router(context,"},{"line_number":1071,"context_line":"                                                                 id, router)"},{"line_number":1072,"context_line":"        self.notify_router_updated(context, router_dict[\u0027id\u0027], None, payload)"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_45d546b5","line":1069,"in_reply_to":"baada198_0208a425","updated":"2014-08-04 08:34:25.000000000","message":"Done","commit_id":"928567f653bf52329b1d81dde435b2419c67ecba"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"810e056d66196ae48dff7d10944b220ac30ee1b4","unresolved":false,"context_lines":[{"line_number":1043,"context_line":"    def l3_rpc_notifier(self, value):"},{"line_number":1044,"context_line":"        self._l3_rpc_notifier \u003d value"},{"line_number":1045,"context_line":""},{"line_number":1046,"context_line":"    def notify_router_updated(self, context, router_id,"},{"line_number":1047,"context_line":"                              operation\u003dNone, data\u003dNone):"},{"line_number":1048,"context_line":"        if router_id:"},{"line_number":1049,"context_line":"            self.l3_rpc_notifier.routers_updated("}],"source_content_type":"text/x-python","patch_set":8,"id":"baada198_f7244860","line":1046,"updated":"2014-08-04 11:25:25.000000000","message":"What\u0027s the reason for having two methods for router_update? Can we instead just rely on callers to pass a list [even if one-element one]?","commit_id":"45ec41f6e1b7db4ab6586a7582f8a486ca008964"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"99aa3a788930b97e4eb9aea17a0f924180a5eb45","unresolved":false,"context_lines":[{"line_number":1043,"context_line":"    def l3_rpc_notifier(self, value):"},{"line_number":1044,"context_line":"        self._l3_rpc_notifier \u003d value"},{"line_number":1045,"context_line":""},{"line_number":1046,"context_line":"    def notify_router_updated(self, context, router_id,"},{"line_number":1047,"context_line":"                              operation\u003dNone, data\u003dNone):"},{"line_number":1048,"context_line":"        if router_id:"},{"line_number":1049,"context_line":"            self.l3_rpc_notifier.routers_updated("}],"source_content_type":"text/x-python","patch_set":8,"id":"baada198_73d82c52","line":1046,"in_reply_to":"baada198_f7244860","updated":"2014-08-05 03:19:29.000000000","message":"For simple expression and efficiency.\nPlease notice that L1047 checks if the router_id is an empty string. (not an empty list)\nWithout this method, we need to sprinkle check of empty string by all callers or always filter it out in notify_routers_update.","commit_id":"45ec41f6e1b7db4ab6586a7582f8a486ca008964"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"67b053a3c0f8a2632316d0d0cc40753c9d41a448","unresolved":false,"context_lines":[{"line_number":1107,"context_line":""},{"line_number":1108,"context_line":"    def create_floatingip("},{"line_number":1109,"context_line":"        self, context, floatingip,"},{"line_number":1110,"context_line":"        initial_status\u003dl3_constants.FLOATINGIP_STATUS_ACTIVE):"},{"line_number":1111,"context_line":"        floatingip_dict \u003d super(L3_NAT_db_mixin, self).create_floatingip("},{"line_number":1112,"context_line":"            context, floatingip, initial_status)"},{"line_number":1113,"context_line":"        router_id \u003d floatingip_dict[\u0027router_id\u0027]"}],"source_content_type":"text/x-python","patch_set":8,"id":"baada198_f158d88a","line":1110,"updated":"2014-08-04 10:34:42.000000000","message":"args list should be indented. It looks confusing otherwise.","commit_id":"45ec41f6e1b7db4ab6586a7582f8a486ca008964"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"99aa3a788930b97e4eb9aea17a0f924180a5eb45","unresolved":false,"context_lines":[{"line_number":1107,"context_line":""},{"line_number":1108,"context_line":"    def create_floatingip("},{"line_number":1109,"context_line":"        self, context, floatingip,"},{"line_number":1110,"context_line":"        initial_status\u003dl3_constants.FLOATINGIP_STATUS_ACTIVE):"},{"line_number":1111,"context_line":"        floatingip_dict \u003d super(L3_NAT_db_mixin, self).create_floatingip("},{"line_number":1112,"context_line":"            context, floatingip, initial_status)"},{"line_number":1113,"context_line":"        router_id \u003d floatingip_dict[\u0027router_id\u0027]"}],"source_content_type":"text/x-python","patch_set":8,"id":"baada198_f3b8bc13","line":1110,"in_reply_to":"baada198_f158d88a","updated":"2014-08-05 03:19:29.000000000","message":"Done.\n\nthe original method is also fixed for consitency","commit_id":"45ec41f6e1b7db4ab6586a7582f8a486ca008964"}]}
