)]}'
{"neutron/agent/l3/ha_router.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"6031a328b3bfce41163fe92b0aeecb6975298c13","unresolved":false,"context_lines":[{"line_number":183,"context_line":""},{"line_number":184,"context_line":"        instance \u003d self._get_keepalived_instance()"},{"line_number":185,"context_line":"        instance.virtual_routes.set_extra_routes("},{"line_number":186,"context_line":"            [keepalived.KeepalivedVirtualRoute(route[\u0027destination\u0027],"},{"line_number":187,"context_line":"                                               route[\u0027nexthop\u0027])"},{"line_number":188,"context_line":"             for route in new_routes])"},{"line_number":189,"context_line":"        self.routes \u003d new_routes"}],"source_content_type":"text/x-python","patch_set":15,"id":"da9b358b_854e6b6d","line":186,"updated":"2015-04-01 08:32:35.000000000","message":"KeepalivedVirtualRoute.__init__ takes no arguments, but you pass two args.","commit_id":"66856f9998481c91287ff673e0eda6c3a6c47243"},{"author":{"_account_id":10257,"name":"Sridhar Gaddam","email":"sgaddam@redhat.com","username":"sridhargaddam"},"change_message_id":"1fca099e161c3b7875b57a955cd6c529acf305e3","unresolved":false,"context_lines":[{"line_number":183,"context_line":""},{"line_number":184,"context_line":"        instance \u003d self._get_keepalived_instance()"},{"line_number":185,"context_line":"        instance.virtual_routes.set_extra_routes("},{"line_number":186,"context_line":"            [keepalived.KeepalivedVirtualRoute(route[\u0027destination\u0027],"},{"line_number":187,"context_line":"                                               route[\u0027nexthop\u0027])"},{"line_number":188,"context_line":"             for route in new_routes])"},{"line_number":189,"context_line":"        self.routes \u003d new_routes"}],"source_content_type":"text/x-python","patch_set":15,"id":"da9b358b_d4cd4286","line":186,"in_reply_to":"da9b358b_854e6b6d","updated":"2015-04-01 11:15:10.000000000","message":"It takes two arguments, please see.  \nhttps://github.com/openstack/neutron/blob/master/neutron/agent/linux/keepalived.py#L98","commit_id":"66856f9998481c91287ff673e0eda6c3a6c47243"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"01f77814dd53a08c75a8204f074ef30560bf79af","unresolved":false,"context_lines":[{"line_number":183,"context_line":""},{"line_number":184,"context_line":"        instance \u003d self._get_keepalived_instance()"},{"line_number":185,"context_line":"        instance.virtual_routes.set_extra_routes("},{"line_number":186,"context_line":"            [keepalived.KeepalivedVirtualRoute(route[\u0027destination\u0027],"},{"line_number":187,"context_line":"                                               route[\u0027nexthop\u0027])"},{"line_number":188,"context_line":"             for route in new_routes])"},{"line_number":189,"context_line":"        self.routes \u003d new_routes"}],"source_content_type":"text/x-python","patch_set":15,"id":"7aaa499b_133c1be1","line":186,"in_reply_to":"da9b358b_d4cd4286","updated":"2015-04-14 08:28:02.000000000","message":"Thanks, I was confused with VirtualRoute and InstanceRouters (introduced in this patch).","commit_id":"66856f9998481c91287ff673e0eda6c3a6c47243"},{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"f43ee5a73f6326fc52435c5f3b5644235f547205","unresolved":false,"context_lines":[{"line_number":186,"context_line":"        self.routes \u003d new_routes"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"    def _add_default_gw_virtual_route(self, ex_gw_port, interface_name):"},{"line_number":189,"context_line":"        subnets \u003d ex_gw_port.get(\u0027subnets\u0027, [])"},{"line_number":190,"context_line":"        default_gw_rts \u003d []"},{"line_number":191,"context_line":"        for subnet in subnets:"},{"line_number":192,"context_line":"            gw_ip \u003d subnet[\u0027gateway_ip\u0027]"}],"source_content_type":"text/x-python","patch_set":18,"id":"dac4157f_bf37a4e2","line":189,"updated":"2015-04-20 13:09:08.000000000","message":"rts -\u003e routes would be nice if we end up respinning.","commit_id":"e214b56da9205be7ba927142cc92e4f69ad09b01"}],"neutron/agent/linux/keepalived.py":[{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d700fddd53261225cd0c9178f6e5a9cde9a3e4bc","unresolved":false,"context_lines":[{"line_number":126,"context_line":"        \"\"\""},{"line_number":127,"context_line":"        self.extra_routes \u003d routes"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    def filter_interface(self, interface_name):"},{"line_number":130,"context_line":"        if (self.gateway_route and"},{"line_number":131,"context_line":"                self.gateway_route[0].interface_name \u003d\u003d interface_name):"},{"line_number":132,"context_line":"            self.gateway_route \u003d []"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a80dd14_aa922f9d","line":129,"updated":"2015-03-04 05:45:58.000000000","message":"remove_routes_on_interface is a better name?","commit_id":"b54bb2c493e415ac025e28f08d1feac92d776e7a"},{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"d042cfe66d99f781a07f5b473586098db147e335","unresolved":false,"context_lines":[{"line_number":126,"context_line":"        \"\"\""},{"line_number":127,"context_line":"        self.extra_routes \u003d routes"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    def filter_interface(self, interface_name):"},{"line_number":130,"context_line":"        if (self.gateway_route and"},{"line_number":131,"context_line":"                self.gateway_route[0].interface_name \u003d\u003d interface_name):"},{"line_number":132,"context_line":"            self.gateway_route \u003d []"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a80dd14_5ceecf8c","line":129,"in_reply_to":"9a80dd14_aa922f9d","updated":"2015-03-04 14:19:57.000000000","message":"Done","commit_id":"b54bb2c493e415ac025e28f08d1feac92d776e7a"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d700fddd53261225cd0c9178f6e5a9cde9a3e4bc","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        if (self.gateway_route and"},{"line_number":131,"context_line":"                self.gateway_route[0].interface_name \u003d\u003d interface_name):"},{"line_number":132,"context_line":"            self.gateway_route \u003d []"},{"line_number":133,"context_line":"        #NOTE(amuller): extra_routes are not initialized with interface_name"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    @property"},{"line_number":136,"context_line":"    def routes(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a80dd14_2a79df93","line":133,"updated":"2015-03-04 05:45:58.000000000","message":"how about extra_routes are routes from neutron virual router\u0027s \u0027routers\u0027 attr, which are without interface?","commit_id":"b54bb2c493e415ac025e28f08d1feac92d776e7a"},{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"d042cfe66d99f781a07f5b473586098db147e335","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        if (self.gateway_route and"},{"line_number":131,"context_line":"                self.gateway_route[0].interface_name \u003d\u003d interface_name):"},{"line_number":132,"context_line":"            self.gateway_route \u003d []"},{"line_number":133,"context_line":"        #NOTE(amuller): extra_routes are not initialized with interface_name"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    @property"},{"line_number":136,"context_line":"    def routes(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a80dd14_bced0b8e","line":133,"in_reply_to":"9a80dd14_2a79df93","updated":"2015-03-04 14:19:57.000000000","message":"Done, I\u0027ll clarify the message a bit.","commit_id":"b54bb2c493e415ac025e28f08d1feac92d776e7a"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"25bf5832b9fe3c534ffdc48049f6812a9b3c4f49","unresolved":false,"context_lines":[{"line_number":126,"context_line":"        \"\"\""},{"line_number":127,"context_line":"        self.extra_routes \u003d routes"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    def remove_routes_on_interface(self, interface_name):"},{"line_number":130,"context_line":"        if (self.gateway_route and"},{"line_number":131,"context_line":"                self.gateway_route[0].interface_name \u003d\u003d interface_name):"},{"line_number":132,"context_line":"            self.gateway_route \u003d []"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_ce6cc139","line":129,"updated":"2015-03-04 16:03:39.000000000","message":"since this is affecting only gateway routes, maybe \"remove_gateway_from_interface\" would be more clear?","commit_id":"d616681c2737b23a184ea94a37f5aeb941e3dfee"},{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"deca51e8b7d3a3472cec7f39f59e3d570985c343","unresolved":false,"context_lines":[{"line_number":126,"context_line":"        \"\"\""},{"line_number":127,"context_line":"        self.extra_routes \u003d routes"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    def remove_routes_on_interface(self, interface_name):"},{"line_number":130,"context_line":"        if (self.gateway_route and"},{"line_number":131,"context_line":"                self.gateway_route[0].interface_name \u003d\u003d interface_name):"},{"line_number":132,"context_line":"            self.gateway_route \u003d []"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_4e9531e3","line":129,"in_reply_to":"9a80dd14_ce6cc139","updated":"2015-03-04 16:05:59.000000000","message":"The next patch in the series introduced onlink routes to HA routers, and those are filtered via this method.","commit_id":"d616681c2737b23a184ea94a37f5aeb941e3dfee"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"0b44a07059f15ecc62277666b037ed12818efa6d","unresolved":false,"context_lines":[{"line_number":121,"context_line":""},{"line_number":122,"context_line":"class KeepalivedInstanceRoutes(object):"},{"line_number":123,"context_line":"    def __init__(self):"},{"line_number":124,"context_line":"        self.gateway_route \u003d []"},{"line_number":125,"context_line":"        self.extra_routes \u003d []"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    def set_gateway(self, route):"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a80dd14_56329ea7","line":124,"updated":"2015-03-13 10:24:06.000000000","message":"I\u0027m curious why did you pick a list?\nfuture proofing?\n\nIn that case you should have future proofed the interface of the class as well, providing methods for setting multiple gateway routes","commit_id":"3be576b010ba0c7943ae26cb438a3707130d85f8"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"66355f747a0f0568704ec16f7e78653507c27f2f","unresolved":false,"context_lines":[{"line_number":121,"context_line":""},{"line_number":122,"context_line":"class KeepalivedInstanceRoutes(object):"},{"line_number":123,"context_line":"    def __init__(self):"},{"line_number":124,"context_line":"        self.gateway_route \u003d []"},{"line_number":125,"context_line":"        self.extra_routes \u003d []"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    def set_gateway(self, route):"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a80dd14_4198f169","line":124,"in_reply_to":"9a80dd14_56329ea7","updated":"2015-03-14 05:30:11.000000000","message":"Done","commit_id":"3be576b010ba0c7943ae26cb438a3707130d85f8"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"9ae20038e1de04c95cbae4088dfd9d3d4c0d8c75","unresolved":false,"context_lines":[{"line_number":121,"context_line":""},{"line_number":122,"context_line":"class KeepalivedInstanceRoutes(object):"},{"line_number":123,"context_line":"    def __init__(self):"},{"line_number":124,"context_line":"        self.gateway_route \u003d []"},{"line_number":125,"context_line":"        self.extra_routes \u003d []"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    def set_gateway(self, route):"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a80dd14_8db16103","line":124,"in_reply_to":"9a80dd14_56329ea7","updated":"2015-03-13 12:19:26.000000000","message":"The future is unpredictable. I would say YAGNI and not use a list yet.","commit_id":"3be576b010ba0c7943ae26cb438a3707130d85f8"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"66355f747a0f0568704ec16f7e78653507c27f2f","unresolved":false,"context_lines":[{"line_number":121,"context_line":""},{"line_number":122,"context_line":"class KeepalivedInstanceRoutes(object):"},{"line_number":123,"context_line":"    def __init__(self):"},{"line_number":124,"context_line":"        self.gateway_route \u003d []"},{"line_number":125,"context_line":"        self.extra_routes \u003d []"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    def set_gateway(self, route):"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a80dd14_619b3566","line":124,"in_reply_to":"9a80dd14_8db16103","updated":"2015-03-14 05:30:11.000000000","message":"Done","commit_id":"3be576b010ba0c7943ae26cb438a3707130d85f8"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"c33aea1856865dd498dec5ccb83b0a7a93f3b3d0","unresolved":false,"context_lines":[{"line_number":154,"context_line":"            return self.extra_routes"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    def __len__(self):"},{"line_number":157,"context_line":"        return len(self.routes)"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"    def build_config(self):"},{"line_number":160,"context_line":"        return itertools.chain([\u0027    virtual_routes {\u0027],"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a80dd14_6fa58046","line":157,"updated":"2015-03-17 12:14:23.000000000","message":"It seems strange that:\n\n len(self.routes) !\u003d len(self) \n\nwhen self.gateway_route","commit_id":"eb1bcf73f328357e39a182322f7f8ed102b2658f"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"b6ccae8e883333b0d0806c9d8a2ff007df599d3d","unresolved":false,"context_lines":[{"line_number":154,"context_line":"            return self.extra_routes"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    def __len__(self):"},{"line_number":157,"context_line":"        return len(self.routes)"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"    def build_config(self):"},{"line_number":160,"context_line":"        return itertools.chain([\u0027    virtual_routes {\u0027],"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a80dd14_02dbfb7d","line":157,"in_reply_to":"9a80dd14_4f2d1ca8","updated":"2015-03-17 12:23:19.000000000","message":"oups, i misread self.(extra)routes","commit_id":"eb1bcf73f328357e39a182322f7f8ed102b2658f"},{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"98e45f01c6473e6343f953a2080e0eaa66e26db8","unresolved":false,"context_lines":[{"line_number":154,"context_line":"            return self.extra_routes"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    def __len__(self):"},{"line_number":157,"context_line":"        return len(self.routes)"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"    def build_config(self):"},{"line_number":160,"context_line":"        return itertools.chain([\u0027    virtual_routes {\u0027],"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a80dd14_4f2d1ca8","line":157,"in_reply_to":"9a80dd14_6fa58046","updated":"2015-03-17 12:16:58.000000000","message":"Eh? len(self) \u003d\u003d len(self.routes), always. I\u0027m not following.","commit_id":"eb1bcf73f328357e39a182322f7f8ed102b2658f"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"e6495d269b697dd85d8d2a33f5c6c72adc2be997","unresolved":false,"context_lines":[{"line_number":145,"context_line":"        return len(self.routes)"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"    def build_config(self):"},{"line_number":148,"context_line":"        return itertools.chain([\u0027    virtual_routes {\u0027],"},{"line_number":149,"context_line":"                               (\u0027        %s\u0027 % route.build_config()"},{"line_number":150,"context_line":"                                for route in self.routes),"},{"line_number":151,"context_line":"                               [\u0027    }\u0027])"}],"source_content_type":"text/x-python","patch_set":13,"id":"1a6ced46_2bba810a","line":148,"updated":"2015-03-24 02:59:46.000000000","message":"is the use of itertools buying us something?","commit_id":"abc4c879162998ba1abe583c3efadbb8301e6f3f"},{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"5ed2977507391307bb366725771c19194080cfa3","unresolved":false,"context_lines":[{"line_number":145,"context_line":"        return len(self.routes)"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"    def build_config(self):"},{"line_number":148,"context_line":"        return itertools.chain([\u0027    virtual_routes {\u0027],"},{"line_number":149,"context_line":"                               (\u0027        %s\u0027 % route.build_config()"},{"line_number":150,"context_line":"                                for route in self.routes),"},{"line_number":151,"context_line":"                               [\u0027    }\u0027])"}],"source_content_type":"text/x-python","patch_set":13,"id":"1a6ced46_cc4e51c1","line":148,"in_reply_to":"1a6ced46_2bba810a","updated":"2015-03-24 14:39:05.000000000","message":"Consistency with all other keepalived objects, at the least.","commit_id":"abc4c879162998ba1abe583c3efadbb8301e6f3f"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"fd2ec54bf079075521ed7ed3ce6f0a438a2024ce","unresolved":false,"context_lines":[{"line_number":112,"context_line":"        self.gateway_route \u003d None"},{"line_number":113,"context_line":"        self.extra_routes \u003d []"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    def set_gateway(self, route):"},{"line_number":116,"context_line":"        \"\"\"Set the router\u0027s default gateway route."},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"        :param route: An instance of KeepalivedVirtualRoute"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa963961_62ecb9c7","line":115,"updated":"2015-03-27 21:16:47.000000000","message":"This kind of mutator might be suggested in Java-land, but in python direct attribute manipulation makes more sense.  If/when specialized behavior is required, properties allow specialization without having to modify any of the clients.","commit_id":"265be66b6f45dd6ed24788bd07375bb9275e8dfa"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"fd2ec54bf079075521ed7ed3ce6f0a438a2024ce","unresolved":false,"context_lines":[{"line_number":288,"context_line":""},{"line_number":289,"context_line":"        config.extend(self._build_vips_config())"},{"line_number":290,"context_line":""},{"line_number":291,"context_line":"        if len(self.virtual_routes):"},{"line_number":292,"context_line":"            config.extend(self.virtual_routes.build_config())"},{"line_number":293,"context_line":""},{"line_number":294,"context_line":"        config.append(\u0027}\u0027)"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa963961_42277512","line":291,"updated":"2015-03-27 21:16:47.000000000","message":"This - and the __len__ impl - seem unnecessary to me.  Is there a reason not to do the following?\n\nif self.virtual_routes.routes:\n pass","commit_id":"265be66b6f45dd6ed24788bd07375bb9275e8dfa"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"6031a328b3bfce41163fe92b0aeecb6975298c13","unresolved":false,"context_lines":[{"line_number":108,"context_line":""},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"class KeepalivedInstanceRoutes(object):"},{"line_number":111,"context_line":"    def __init__(self):"},{"line_number":112,"context_line":"        self.gateway_routes \u003d []"},{"line_number":113,"context_line":"        self.extra_routes \u003d []"},{"line_number":114,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"da9b358b_05e93be6","line":111,"updated":"2015-04-01 08:32:35.000000000","message":"in ha_router.py, two arguments are passed to  KeepalivedVirtualRoute.__init__ takes no arguments.\nI think you need to add arguments.\n\nIn addition, the test case does not cover the use case in ha_router. Some tests need to be added to cover the possible use case.","commit_id":"66856f9998481c91287ff673e0eda6c3a6c47243"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"f3b5e8fa38038788f529543e059128433d7ccf2b","unresolved":false,"context_lines":[{"line_number":108,"context_line":""},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"class KeepalivedInstanceRoutes(object):"},{"line_number":111,"context_line":"    def __init__(self):"},{"line_number":112,"context_line":"        self.gateway_routes \u003d []"},{"line_number":113,"context_line":"        self.extra_routes \u003d []"},{"line_number":114,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"7aaa499b_b69f954f","line":111,"in_reply_to":"da9b358b_05e93be6","updated":"2015-04-14 08:32:33.000000000","message":"The above my comment is not correct. please ignore.","commit_id":"66856f9998481c91287ff673e0eda6c3a6c47243"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"7f86eddea3caa1a3ff231fa68c16b0b57b1da3fc","unresolved":false,"context_lines":[{"line_number":112,"context_line":"        self.gateway_routes \u003d []"},{"line_number":113,"context_line":"        self.extra_routes \u003d []"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    def set_extra_routes(self, routes):"},{"line_number":116,"context_line":"        \"\"\"Set the router\u0027s extra routes."},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"        :param routes: A list of KeepalivedVirtualRoutes"}],"source_content_type":"text/x-python","patch_set":16,"id":"1ab14d0d_3eb9652f","line":115,"updated":"2015-04-17 23:58:41.000000000","message":"I was kind of hoping you\u0027d take the hint from PS14 and remove this unnecessary mutator as well...I trust you\u0027ll clean up in a follow-on patch?","commit_id":"4605a83069b5be22ec4dd20fc0acb5923db583fe"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"6067820b4d30dff8e872fe917617edba4deea4eb","unresolved":false,"context_lines":[{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    @property"},{"line_number":123,"context_line":"    def routes(self):"},{"line_number":124,"context_line":"        if self.gateway_routes:"},{"line_number":125,"context_line":"            return self.gateway_routes + self.extra_routes"},{"line_number":126,"context_line":"        else:"},{"line_number":127,"context_line":"            return self.extra_routes"}],"source_content_type":"text/x-python","patch_set":17,"id":"dac4157f_9be76612","line":124,"updated":"2015-04-20 02:43:44.000000000","message":"nit: you shouldn\u0027t need this if statement just return  self.gateway_routes + self.extra_routes  ; it just adds two lists together.","commit_id":"aefddc3568dcac3d15190bc8facb6b725b5820db"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"7c36c387838a4a7f2309987e73e1a1d2ea146b1c","unresolved":false,"context_lines":[{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    @property"},{"line_number":123,"context_line":"    def routes(self):"},{"line_number":124,"context_line":"        if self.gateway_routes:"},{"line_number":125,"context_line":"            return self.gateway_routes + self.extra_routes"},{"line_number":126,"context_line":"        else:"},{"line_number":127,"context_line":"            return self.extra_routes"}],"source_content_type":"text/x-python","patch_set":17,"id":"dac4157f_8ccbaa72","line":124,"in_reply_to":"dac4157f_9be76612","updated":"2015-04-20 06:17:58.000000000","message":"Done","commit_id":"aefddc3568dcac3d15190bc8facb6b725b5820db"}],"neutron/tests/unit/agent/linux/test_keepalived.py":[{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"0b44a07059f15ecc62277666b037ed12818efa6d","unresolved":false,"context_lines":[{"line_number":199,"context_line":""},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"class KeepalivedInstanceRoutesTestCase(base.BaseTestCase):"},{"line_number":202,"context_line":"    def test_filter_interface(self):"},{"line_number":203,"context_line":"        routes \u003d keepalived.KeepalivedInstanceRoutes()"},{"line_number":204,"context_line":"        default_gw \u003d keepalived.KeepalivedVirtualRoute("},{"line_number":205,"context_line":"            \u00270.0.0.0/0\u0027, \u00271.0.0.254\u0027, \u0027eth0\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a80dd14_166666bb","line":202,"updated":"2015-03-13 10:24:06.000000000","message":"nit: add a blank line before line 201, if you\u0027d like","commit_id":"3be576b010ba0c7943ae26cb438a3707130d85f8"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"66355f747a0f0568704ec16f7e78653507c27f2f","unresolved":false,"context_lines":[{"line_number":199,"context_line":""},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"class KeepalivedInstanceRoutesTestCase(base.BaseTestCase):"},{"line_number":202,"context_line":"    def test_filter_interface(self):"},{"line_number":203,"context_line":"        routes \u003d keepalived.KeepalivedInstanceRoutes()"},{"line_number":204,"context_line":"        default_gw \u003d keepalived.KeepalivedVirtualRoute("},{"line_number":205,"context_line":"            \u00270.0.0.0/0\u0027, \u00271.0.0.254\u0027, \u0027eth0\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a80dd14_81a589a3","line":202,"in_reply_to":"9a80dd14_166666bb","updated":"2015-03-14 05:30:11.000000000","message":"Done","commit_id":"3be576b010ba0c7943ae26cb438a3707130d85f8"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"e6495d269b697dd85d8d2a33f5c6c72adc2be997","unresolved":false,"context_lines":[{"line_number":190,"context_line":""},{"line_number":191,"context_line":"class KeepalivedInstanceRoutesTestCase(base.BaseTestCase):"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"    def test_remove_routes_on_interface(self):"},{"line_number":194,"context_line":"        routes \u003d keepalived.KeepalivedInstanceRoutes()"},{"line_number":195,"context_line":"        default_gw \u003d keepalived.KeepalivedVirtualRoute("},{"line_number":196,"context_line":"            \u00270.0.0.0/0\u0027, \u00271.0.0.254\u0027, \u0027eth0\u0027)"}],"source_content_type":"text/x-python","patch_set":13,"id":"1a6ced46_2b51a1d8","line":193,"updated":"2015-03-24 02:59:46.000000000","message":"perhaps routes and build_config deserve a unit test too","commit_id":"abc4c879162998ba1abe583c3efadbb8301e6f3f"},{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"5ed2977507391307bb366725771c19194080cfa3","unresolved":false,"context_lines":[{"line_number":190,"context_line":""},{"line_number":191,"context_line":"class KeepalivedInstanceRoutesTestCase(base.BaseTestCase):"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"    def test_remove_routes_on_interface(self):"},{"line_number":194,"context_line":"        routes \u003d keepalived.KeepalivedInstanceRoutes()"},{"line_number":195,"context_line":"        default_gw \u003d keepalived.KeepalivedVirtualRoute("},{"line_number":196,"context_line":"            \u00270.0.0.0/0\u0027, \u00271.0.0.254\u0027, \u0027eth0\u0027)"}],"source_content_type":"text/x-python","patch_set":13,"id":"1a6ced46_b7779e3a","line":193,"in_reply_to":"1a6ced46_2b51a1d8","updated":"2015-03-24 14:39:05.000000000","message":"Done","commit_id":"abc4c879162998ba1abe583c3efadbb8301e6f3f"}]}
