)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"47b85c99870518dab1100088ff348df2be3c15df","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Ensure that host routes are maintained for each subnet within"},{"line_number":10,"context_line":"a network. Subnets associated with different segments on the"},{"line_number":11,"context_line":"same network get\u0027s host_routes enties added/removed as"},{"line_number":12,"context_line":"subnets are created, deleted or updated."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"This change handle the host_routes for the peer subnets on the"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"5f7c97a3_cf14a144","line":11,"range":{"start_line":11,"start_character":13,"end_line":11,"end_character":18},"updated":"2018-06-27 17:29:18.000000000","message":"Nit: get","commit_id":"0f5e861bcbcc5a4350e6f79285a76fb534d731fe"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"47b85c99870518dab1100088ff348df2be3c15df","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Ensure that host routes are maintained for each subnet within"},{"line_number":10,"context_line":"a network. Subnets associated with different segments on the"},{"line_number":11,"context_line":"same network get\u0027s host_routes enties added/removed as"},{"line_number":12,"context_line":"subnets are created, deleted or updated."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"This change handle the host_routes for the peer subnets on the"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"5f7c97a3_8f28e985","line":11,"range":{"start_line":11,"start_character":31,"end_line":11,"end_character":37},"updated":"2018-06-27 17:29:18.000000000","message":"entries","commit_id":"0f5e861bcbcc5a4350e6f79285a76fb534d731fe"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"abe629a7e7304a62923c222e0505e06046e5d123","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Ensure that host routes are maintained for each subnet within"},{"line_number":10,"context_line":"a network. Subnets associated with different segments on the"},{"line_number":11,"context_line":"same network get\u0027s host_routes enties added/removed as"},{"line_number":12,"context_line":"subnets are created, deleted or updated."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"This change handle the host_routes for the peer subnets on the"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"5f7c97a3_2d3438df","line":11,"range":{"start_line":11,"start_character":31,"end_line":11,"end_character":37},"in_reply_to":"5f7c97a3_8f28e985","updated":"2018-06-28 06:32:20.000000000","message":"Done","commit_id":"0f5e861bcbcc5a4350e6f79285a76fb534d731fe"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"abe629a7e7304a62923c222e0505e06046e5d123","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Ensure that host routes are maintained for each subnet within"},{"line_number":10,"context_line":"a network. Subnets associated with different segments on the"},{"line_number":11,"context_line":"same network get\u0027s host_routes enties added/removed as"},{"line_number":12,"context_line":"subnets are created, deleted or updated."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"This change handle the host_routes for the peer subnets on the"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"5f7c97a3_cd3024ed","line":11,"range":{"start_line":11,"start_character":13,"end_line":11,"end_character":18},"in_reply_to":"5f7c97a3_cf14a144","updated":"2018-06-28 06:32:20.000000000","message":"Done","commit_id":"0f5e861bcbcc5a4350e6f79285a76fb534d731fe"}],"neutron/services/segments/plugin.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"afd410b993aafa48c6c80ecde7eb88dd18c64079","unresolved":false,"context_lines":[{"line_number":604,"context_line":"        network \u003d self._get_network(context, subnet[\u0027network_id\u0027])"},{"line_number":605,"context_line":"        # If there are other subnets on the network and subnet has segment_id"},{"line_number":606,"context_line":"        # ensure host routes for all subnets are updated."},{"line_number":607,"context_line":"        if len(network.subnets) \u003e 1 and subnet[\u0027segment_id\u0027] is not None:"},{"line_number":608,"context_line":"            self._update_routed_network_host_routes(context, network)"},{"line_number":609,"context_line":""},{"line_number":610,"context_line":"    @registry.receives(resources.SUBNET, [events.AFTER_DELETE])"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_d0a6a154","line":607,"range":{"start_line":607,"start_character":40,"end_line":607,"end_character":60},"updated":"2018-06-26 19:21:42.000000000","message":"should this be subnet.get(\u0027segment_id\u0027) ?","commit_id":"75c991119b6a9cc40bdbbeff404fe4eecb835fc7"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"1337afd549746d37e5f6c2a818d81441e05e5bbc","unresolved":false,"context_lines":[{"line_number":604,"context_line":"        network \u003d self._get_network(context, subnet[\u0027network_id\u0027])"},{"line_number":605,"context_line":"        # If there are other subnets on the network and subnet has segment_id"},{"line_number":606,"context_line":"        # ensure host routes for all subnets are updated."},{"line_number":607,"context_line":"        if len(network.subnets) \u003e 1 and subnet[\u0027segment_id\u0027] is not None:"},{"line_number":608,"context_line":"            self._update_routed_network_host_routes(context, network)"},{"line_number":609,"context_line":""},{"line_number":610,"context_line":"    @registry.receives(resources.SUBNET, [events.AFTER_DELETE])"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_84078717","line":607,"range":{"start_line":607,"start_character":40,"end_line":607,"end_character":60},"in_reply_to":"5f7c97a3_d0a6a154","updated":"2018-06-26 21:55:35.000000000","message":"hmm, subnet here is the result of _make_subnet_dict. I think it will always have segment key. But, yeah. Let\u0027s change it.","commit_id":"75c991119b6a9cc40bdbbeff404fe4eecb835fc7"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"afd410b993aafa48c6c80ecde7eb88dd18c64079","unresolved":false,"context_lines":[{"line_number":612,"context_line":"                                 subnet, **kwargs):"},{"line_number":613,"context_line":"        # If this is a routed network, remove any routes to this subnet on"},{"line_number":614,"context_line":"        # this networks remaining subnets."},{"line_number":615,"context_line":"        if subnet.get(\u0027segment_id\u0027, None):"},{"line_number":616,"context_line":"            network \u003d self._get_network(context, subnet[\u0027network_id\u0027])"},{"line_number":617,"context_line":"            self._update_routed_network_host_routes("},{"line_number":618,"context_line":"                context, network, deleted_cidr\u003dsubnet[\u0027cidr\u0027])"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_f0a15d3b","line":615,"range":{"start_line":615,"start_character":36,"end_line":615,"end_character":40},"updated":"2018-06-26 19:21:42.000000000","message":"None is default","commit_id":"75c991119b6a9cc40bdbbeff404fe4eecb835fc7"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"1337afd549746d37e5f6c2a818d81441e05e5bbc","unresolved":false,"context_lines":[{"line_number":612,"context_line":"                                 subnet, **kwargs):"},{"line_number":613,"context_line":"        # If this is a routed network, remove any routes to this subnet on"},{"line_number":614,"context_line":"        # this networks remaining subnets."},{"line_number":615,"context_line":"        if subnet.get(\u0027segment_id\u0027, None):"},{"line_number":616,"context_line":"            network \u003d self._get_network(context, subnet[\u0027network_id\u0027])"},{"line_number":617,"context_line":"            self._update_routed_network_host_routes("},{"line_number":618,"context_line":"                context, network, deleted_cidr\u003dsubnet[\u0027cidr\u0027])"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_440def32","line":615,"range":{"start_line":615,"start_character":36,"end_line":615,"end_character":40},"in_reply_to":"5f7c97a3_f0a15d3b","updated":"2018-06-26 21:55:35.000000000","message":"Done","commit_id":"75c991119b6a9cc40bdbbeff404fe4eecb835fc7"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"47b85c99870518dab1100088ff348df2be3c15df","unresolved":false,"context_lines":[{"line_number":437,"context_line":""},{"line_number":438,"context_line":""},{"line_number":439,"context_line":"@registry.has_registry_receivers"},{"line_number":440,"context_line":"class SegmentHostRoutes(db_base_plugin_v2.NeutronDbPluginV2):"},{"line_number":441,"context_line":""},{"line_number":442,"context_line":"    def _get_network(self, context, network_id):"},{"line_number":443,"context_line":"        return context.session.query(models_v2.Network).filter("}],"source_content_type":"text/x-python","patch_set":5,"id":"5f7c97a3_ef0ddd36","line":440,"range":{"start_line":440,"start_character":24,"end_line":440,"end_character":59},"updated":"2018-06-27 17:29:18.000000000","message":"See my question to L453","commit_id":"0f5e861bcbcc5a4350e6f79285a76fb534d731fe"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"abe629a7e7304a62923c222e0505e06046e5d123","unresolved":false,"context_lines":[{"line_number":437,"context_line":""},{"line_number":438,"context_line":""},{"line_number":439,"context_line":"@registry.has_registry_receivers"},{"line_number":440,"context_line":"class SegmentHostRoutes(db_base_plugin_v2.NeutronDbPluginV2):"},{"line_number":441,"context_line":""},{"line_number":442,"context_line":"    def _get_network(self, context, network_id):"},{"line_number":443,"context_line":"        return context.session.query(models_v2.Network).filter("}],"source_content_type":"text/x-python","patch_set":5,"id":"5f7c97a3_08aa8ad2","line":440,"range":{"start_line":440,"start_character":24,"end_line":440,"end_character":59},"in_reply_to":"5f7c97a3_ef0ddd36","updated":"2018-06-28 06:32:20.000000000","message":"Done","commit_id":"0f5e861bcbcc5a4350e6f79285a76fb534d731fe"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"2e0d64d54a38f1e82a70f4a6b07fb85dc41909d5","unresolved":false,"context_lines":[{"line_number":444,"context_line":"            models_v2.Network.id \u003d\u003d network_id).one()"},{"line_number":445,"context_line":""},{"line_number":446,"context_line":"    def _get_subnet_host_routes(self, context, subnet_id):"},{"line_number":447,"context_line":"        return [{\u0027destination\u0027: route.destination,"},{"line_number":448,"context_line":"                 \u0027nexthop\u0027: route.nexthop} for route in context.session.query("},{"line_number":449,"context_line":"            models_v2.SubnetRoute).filter("},{"line_number":450,"context_line":"            models_v2.SubnetRoute.subnet_id \u003d\u003d subnet_id).all()]"},{"line_number":451,"context_line":""},{"line_number":452,"context_line":"    def _update_subnet_host_routes(self, context, subnet_id, host_routes):"},{"line_number":453,"context_line":"        self.update_subnet(context, subnet_id,"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f7c97a3_2fa0b5f3","line":450,"range":{"start_line":447,"start_character":17,"end_line":450,"end_character":64},"updated":"2018-06-27 17:34:46.000000000","message":"subnet_obj.Route.get_objects can be used here, Since its available, by not using that I think it will add more debt for OVO work, for reference how its used please look at \n\nhttp://codesearch.openstack.org/?q\u003dsubnet_obj.Route\u0026i\u003dnope\u0026files\u003d\u0026repos\u003d","commit_id":"0f5e861bcbcc5a4350e6f79285a76fb534d731fe"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"abe629a7e7304a62923c222e0505e06046e5d123","unresolved":false,"context_lines":[{"line_number":444,"context_line":"            models_v2.Network.id \u003d\u003d network_id).one()"},{"line_number":445,"context_line":""},{"line_number":446,"context_line":"    def _get_subnet_host_routes(self, context, subnet_id):"},{"line_number":447,"context_line":"        return [{\u0027destination\u0027: route.destination,"},{"line_number":448,"context_line":"                 \u0027nexthop\u0027: route.nexthop} for route in context.session.query("},{"line_number":449,"context_line":"            models_v2.SubnetRoute).filter("},{"line_number":450,"context_line":"            models_v2.SubnetRoute.subnet_id \u003d\u003d subnet_id).all()]"},{"line_number":451,"context_line":""},{"line_number":452,"context_line":"    def _update_subnet_host_routes(self, context, subnet_id, host_routes):"},{"line_number":453,"context_line":"        self.update_subnet(context, subnet_id,"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f7c97a3_6d70f0a5","line":450,"range":{"start_line":447,"start_character":17,"end_line":450,"end_character":64},"in_reply_to":"5f7c97a3_2fa0b5f3","updated":"2018-06-28 06:32:20.000000000","message":"Thanks Manjeet. I ended up with _get_network and _get_subnet. (The routes are in the objects I get from subnet_obj.Subnet.get_objects().","commit_id":"0f5e861bcbcc5a4350e6f79285a76fb534d731fe"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"418a2f6060e605c30348d17f66a43ad9e1336f72","unresolved":false,"context_lines":[{"line_number":444,"context_line":"            models_v2.Network.id \u003d\u003d network_id).one()"},{"line_number":445,"context_line":""},{"line_number":446,"context_line":"    def _get_subnet_host_routes(self, context, subnet_id):"},{"line_number":447,"context_line":"        return [{\u0027destination\u0027: route.destination,"},{"line_number":448,"context_line":"                 \u0027nexthop\u0027: route.nexthop} for route in context.session.query("},{"line_number":449,"context_line":"            models_v2.SubnetRoute).filter("},{"line_number":450,"context_line":"            models_v2.SubnetRoute.subnet_id \u003d\u003d subnet_id).all()]"},{"line_number":451,"context_line":""},{"line_number":452,"context_line":"    def _update_subnet_host_routes(self, context, subnet_id, host_routes):"},{"line_number":453,"context_line":"        self.update_subnet(context, subnet_id,"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f7c97a3_3f03eb12","line":450,"range":{"start_line":447,"start_character":17,"end_line":450,"end_character":64},"in_reply_to":"5f7c97a3_6d70f0a5","updated":"2018-06-28 17:19:46.000000000","message":"that\u0027s a very good idea subnet.get_objects will reduce it to just one query to fetch all the subnets which have host route as synthetic fields and, no need to issue 2 queries for network and subnet_route separately.","commit_id":"0f5e861bcbcc5a4350e6f79285a76fb534d731fe"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"47b85c99870518dab1100088ff348df2be3c15df","unresolved":false,"context_lines":[{"line_number":450,"context_line":"            models_v2.SubnetRoute.subnet_id \u003d\u003d subnet_id).all()]"},{"line_number":451,"context_line":""},{"line_number":452,"context_line":"    def _update_subnet_host_routes(self, context, subnet_id, host_routes):"},{"line_number":453,"context_line":"        self.update_subnet(context, subnet_id,"},{"line_number":454,"context_line":"                           {\u0027subnet\u0027: {\u0027host_routes\u0027: host_routes}})"},{"line_number":455,"context_line":""},{"line_number":456,"context_line":"    def _calculate_routed_network_host_routes(self, context, ip_version,"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f7c97a3_041da076","line":453,"range":{"start_line":453,"start_character":8,"end_line":453,"end_character":26},"updated":"2018-06-27 17:29:18.000000000","message":"By inheriting in L440 from the DB plugin and then calling here the update_subnet method, you are leaving the ML2 plugin out of the picture. If you look at the update_subnet method in the ML2 plugin (https://github.com/openstack/neutron/blob/master/neutron/plugins/ml2/plugin.py#L1083), there is a lot going on calling pre_commit and post_commit in the mechanism drivers. How do you know that some of those mechanism drivers are interested in knowing that the subnet routes are being updated?\n\nIn deployments where other core plugins are involved, those core plugins might also be interested in knowing that the subnet routes are being updated.\n\nPlease look at L285 and L287 above. You can call whatever core plugin method you need to that way and keep everybody in the loop","commit_id":"0f5e861bcbcc5a4350e6f79285a76fb534d731fe"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"abe629a7e7304a62923c222e0505e06046e5d123","unresolved":false,"context_lines":[{"line_number":450,"context_line":"            models_v2.SubnetRoute.subnet_id \u003d\u003d subnet_id).all()]"},{"line_number":451,"context_line":""},{"line_number":452,"context_line":"    def _update_subnet_host_routes(self, context, subnet_id, host_routes):"},{"line_number":453,"context_line":"        self.update_subnet(context, subnet_id,"},{"line_number":454,"context_line":"                           {\u0027subnet\u0027: {\u0027host_routes\u0027: host_routes}})"},{"line_number":455,"context_line":""},{"line_number":456,"context_line":"    def _calculate_routed_network_host_routes(self, context, ip_version,"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f7c97a3_addda814","line":453,"range":{"start_line":453,"start_character":8,"end_line":453,"end_character":26},"in_reply_to":"5f7c97a3_041da076","updated":"2018-06-28 06:32:20.000000000","message":"Thanks Miguel, for the detailed explanation an pointers.\n\nbtw, I decided to drop this method. Since it is only called from one place.","commit_id":"0f5e861bcbcc5a4350e6f79285a76fb534d731fe"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"95a693e780a16ef3e5f3e94a82143fa5264fe26a","unresolved":false,"context_lines":[{"line_number":437,"context_line":"@registry.has_registry_receivers"},{"line_number":438,"context_line":"class SegmentHostRoutes(object):"},{"line_number":439,"context_line":""},{"line_number":440,"context_line":"    def _get_network(self, context, network_id):"},{"line_number":441,"context_line":"        return net_obj.Network.get_object(context, id\u003dnetwork_id)"},{"line_number":442,"context_line":""},{"line_number":443,"context_line":"    def _get_subnets(self, context, network_id):"},{"line_number":444,"context_line":"        return subnet_obj.Subnet.get_objects(context, network_id\u003dnetwork_id)"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_ddc0cd2e","line":441,"range":{"start_line":440,"start_character":4,"end_line":441,"end_character":65},"updated":"2018-06-28 08:44:55.000000000","message":"Looking over the code again.\nWe only need the network ID, this is available in the data we get on the events. Will do another pass to drop this method.","commit_id":"dc057842121fa1961a13a7d61fa973c980e2ebbc"}],"neutron/tests/unit/extensions/test_segment.py":[{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"418a2f6060e605c30348d17f66a43ad9e1336f72","unresolved":false,"context_lines":[{"line_number":2556,"context_line":"                           \u0027nexthop\u0027: gateway_ips[1]}],"},{"line_number":2557,"context_line":"                         sub_res[\u0027subnet\u0027][\u0027host_routes\u0027])"},{"line_number":2558,"context_line":""},{"line_number":2559,"context_line":"        del_req \u003d self.new_delete_request(\u0027subnets\u0027, subnet0[\u0027id\u0027])"},{"line_number":2560,"context_line":"        del_req.get_response(self.api)"},{"line_number":2561,"context_line":""},{"line_number":2562,"context_line":"        sh_req \u003d self.new_show_request(\u0027subnets\u0027, subnet1[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_82d664c4","line":2559,"range":{"start_line":2559,"start_character":8,"end_line":2559,"end_character":67},"updated":"2018-06-28 17:19:46.000000000","message":"before subnet0 is deleted, I guess it would be better to assert its existence ?","commit_id":"8361b8b5aebad4df3c1012952d9a87b936fef326"}],"releasenotes/notes/routed-networks-hostroutes-a13a9885f0db4f69.yaml":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"afd410b993aafa48c6c80ecde7eb88dd18c64079","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Adds host routes for subnets on the same network when using routed"},{"line_number":5,"context_line":"    networks. Static routes will be configured for subnets associated with"},{"line_number":6,"context_line":"    other segments on the same network. This ensures that traffic within a L3"},{"line_number":7,"context_line":"    routed network stays within the network also when the default route is on"},{"line_number":8,"context_line":"    a different interface."}],"source_content_type":"text/x-yaml","patch_set":4,"id":"5f7c97a3_706b0def","line":6,"range":{"start_line":6,"start_character":73,"end_line":6,"end_character":74},"updated":"2018-06-26 19:21:42.000000000","message":"s/an","commit_id":"75c991119b6a9cc40bdbbeff404fe4eecb835fc7"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"1337afd549746d37e5f6c2a818d81441e05e5bbc","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Adds host routes for subnets on the same network when using routed"},{"line_number":5,"context_line":"    networks. Static routes will be configured for subnets associated with"},{"line_number":6,"context_line":"    other segments on the same network. This ensures that traffic within a L3"},{"line_number":7,"context_line":"    routed network stays within the network also when the default route is on"},{"line_number":8,"context_line":"    a different interface."}],"source_content_type":"text/x-yaml","patch_set":4,"id":"5f7c97a3_89b000de","line":6,"range":{"start_line":6,"start_character":73,"end_line":6,"end_character":74},"in_reply_to":"5f7c97a3_706b0def","updated":"2018-06-26 21:55:35.000000000","message":"Done","commit_id":"75c991119b6a9cc40bdbbeff404fe4eecb835fc7"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"afd410b993aafa48c6c80ecde7eb88dd18c64079","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    Adds host routes for subnets on the same network when using routed"},{"line_number":5,"context_line":"    networks. Static routes will be configured for subnets associated with"},{"line_number":6,"context_line":"    other segments on the same network. This ensures that traffic within a L3"},{"line_number":7,"context_line":"    routed network stays within the network also when the default route is on"},{"line_number":8,"context_line":"    a different interface."}],"source_content_type":"text/x-yaml","patch_set":4,"id":"5f7c97a3_107659d9","line":7,"range":{"start_line":7,"start_character":44,"end_line":7,"end_character":48},"updated":"2018-06-26 19:21:42.000000000","message":"s/even ?","commit_id":"75c991119b6a9cc40bdbbeff404fe4eecb835fc7"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"1337afd549746d37e5f6c2a818d81441e05e5bbc","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    Adds host routes for subnets on the same network when using routed"},{"line_number":5,"context_line":"    networks. Static routes will be configured for subnets associated with"},{"line_number":6,"context_line":"    other segments on the same network. This ensures that traffic within a L3"},{"line_number":7,"context_line":"    routed network stays within the network also when the default route is on"},{"line_number":8,"context_line":"    a different interface."}],"source_content_type":"text/x-yaml","patch_set":4,"id":"5f7c97a3_29cbec52","line":7,"range":{"start_line":7,"start_character":44,"end_line":7,"end_character":48},"in_reply_to":"5f7c97a3_107659d9","updated":"2018-06-26 21:55:35.000000000","message":"Done","commit_id":"75c991119b6a9cc40bdbbeff404fe4eecb835fc7"}]}
