)]}'
{"neutron/api/rpc/agentnotifiers/dhcp_rpc_agent_api.py":[{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"d5d1e1211f95f8af9425ab9ce0e9f7faafc1344c","unresolved":false,"context_lines":[{"line_number":224,"context_line":"        segment_id \u003d None"},{"line_number":225,"context_line":"        if obj_type \u003d\u003d \u0027network\u0027 and \u0027id\u0027 in obj_value:"},{"line_number":226,"context_line":"            network_id \u003d obj_value[\u0027id\u0027]"},{"line_number":227,"context_line":"        elif obj_type in [\u0027port\u0027, \u0027subnet\u0027]:"},{"line_number":228,"context_line":"            network_id \u003d obj_value.get(\u0027network_id\u0027)"},{"line_number":229,"context_line":"            segment_id \u003d obj_value.get(\u0027segment_id\u0027)"},{"line_number":230,"context_line":"        if not network_id:"}],"source_content_type":"text/x-python","patch_set":1,"id":"7aa08908_800714c9","line":227,"range":{"start_line":227,"start_character":26,"end_line":227,"end_character":42},"updated":"2016-06-07 20:29:24.000000000","message":"nit:  You might consider splitting these.  At this time, we don\u0027t expect to have segment_id on a port.  So, it is clearer to not try looking for it, IMO.  It is a small thing though.","commit_id":"97427f43ca0973c3823a41125be9b301795243c1"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"e3618aa78f9e97314b0c1c46208b601edd2b1153","unresolved":false,"context_lines":[{"line_number":224,"context_line":"        segment_id \u003d None"},{"line_number":225,"context_line":"        if obj_type \u003d\u003d \u0027network\u0027 and \u0027id\u0027 in obj_value:"},{"line_number":226,"context_line":"            network_id \u003d obj_value[\u0027id\u0027]"},{"line_number":227,"context_line":"        elif obj_type in [\u0027port\u0027, \u0027subnet\u0027]:"},{"line_number":228,"context_line":"            network_id \u003d obj_value.get(\u0027network_id\u0027)"},{"line_number":229,"context_line":"            segment_id \u003d obj_value.get(\u0027segment_id\u0027)"},{"line_number":230,"context_line":"        if not network_id:"}],"source_content_type":"text/x-python","patch_set":1,"id":"7aa08908_fb7e8d17","line":227,"range":{"start_line":227,"start_character":26,"end_line":227,"end_character":42},"in_reply_to":"7aa08908_800714c9","updated":"2016-06-07 21:00:37.000000000","message":"good idea","commit_id":"97427f43ca0973c3823a41125be9b301795243c1"}],"neutron/db/agentschedulers_db.py":[{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"b1319e23e90fb9c1046fff7c802e542e494552ce","unresolved":false,"context_lines":[{"line_number":518,"context_line":"        else:"},{"line_number":519,"context_line":"            return {\u0027agents\u0027: []}"},{"line_number":520,"context_line":""},{"line_number":521,"context_line":"    def schedule_network(self, context, created_network, segment\u003dNone):"},{"line_number":522,"context_line":"        if self.network_scheduler:"},{"line_number":523,"context_line":"            return self.network_scheduler.schedule("},{"line_number":524,"context_line":"                self, context, created_network)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7aa08908_974d3cc6","line":521,"updated":"2016-06-09 05:37:39.000000000","message":"I missed removing this.","commit_id":"9b346d94fc96ab80669336ad1e22ae2f99a8adeb"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"d132a7bb18d3a029331b2ce0708122af4f845a44","unresolved":false,"context_lines":[{"line_number":406,"context_line":"        if network_ids:"},{"line_number":407,"context_line":"            query \u003d query.filter("},{"line_number":408,"context_line":"                NetworkDhcpAgentBinding.network_id.in_(network_ids))"},{"line_number":409,"context_line":"        if segment_ids:"},{"line_number":410,"context_line":"            query \u003d query.filter("},{"line_number":411,"context_line":"                NetworkDhcpAgentBinding.segment_id.in_(segment_ids))"},{"line_number":412,"context_line":"        if admin_state_up is not None:"},{"line_number":413,"context_line":"            query \u003d query.filter(agents_db.Agent.admin_state_up \u003d\u003d"},{"line_number":414,"context_line":"                                 admin_state_up)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7aa08908_1f82ecc8","line":411,"range":{"start_line":409,"start_character":0,"end_line":411,"end_character":68},"updated":"2016-06-09 13:52:09.000000000","message":"It looks like the segment_id in NetworkDhcpAgentBinding is only used here. The new attribute in the DB model is the pain in the dhcp scheduler binding. So I think, could we not add this new attribute here?\n\nThere are 2 assumptions if we don\u0027t add segment_id. The first is that one host will only have one dhcp agent. Now, it is possible to have multiple dhcp agents in one host, but it seems neutron server will only recognize one.\nThe second is that a host will only touch one segment in a given routed network. I had this discussion with Carl. Both of us could not find a valid usecase that a host have multiple segments in a routed network. There is such an assumption at [1]\n\nIf these 2 assumptions are met, we can query dhcp agents for segment in such filter. segment_id---\u003ehosts---\u003edhcp agents.\n\nWhat do you think?\n\n[1] https://github.com/openstack/neutron/blob/b49648dc9a78750bcb9f64d37a6f471032304a57/neutron/db/ipam_backend_mixin.py#L587","commit_id":"8626e5aab7565b6fd7811bc68e84456c4ddaa7c7"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"dd8d793d32fab014b590d1e04c7bf313cd703ba2","unresolved":false,"context_lines":[{"line_number":406,"context_line":"        if network_ids:"},{"line_number":407,"context_line":"            query \u003d query.filter("},{"line_number":408,"context_line":"                NetworkDhcpAgentBinding.network_id.in_(network_ids))"},{"line_number":409,"context_line":"        if segment_ids:"},{"line_number":410,"context_line":"            query \u003d query.filter("},{"line_number":411,"context_line":"                NetworkDhcpAgentBinding.segment_id.in_(segment_ids))"},{"line_number":412,"context_line":"        if admin_state_up is not None:"},{"line_number":413,"context_line":"            query \u003d query.filter(agents_db.Agent.admin_state_up \u003d\u003d"},{"line_number":414,"context_line":"                                 admin_state_up)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7aa08908_e63942da","line":411,"range":{"start_line":409,"start_character":0,"end_line":411,"end_character":68},"in_reply_to":"7aa08908_1f82ecc8","updated":"2016-06-09 19:23:01.000000000","message":"I might have to think about this.  But, you might be on to something.  I wonder if the segment_id on this table is redundant?  Could the scheduler derive segment coverage from the host / segment mapping and other places?","commit_id":"8626e5aab7565b6fd7811bc68e84456c4ddaa7c7"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"d4b8463df370d63cc006cef680e0a9b95acfa39e","unresolved":false,"context_lines":[{"line_number":406,"context_line":"        if network_ids:"},{"line_number":407,"context_line":"            query \u003d query.filter("},{"line_number":408,"context_line":"                NetworkDhcpAgentBinding.network_id.in_(network_ids))"},{"line_number":409,"context_line":"        if segment_ids:"},{"line_number":410,"context_line":"            query \u003d query.filter("},{"line_number":411,"context_line":"                NetworkDhcpAgentBinding.segment_id.in_(segment_ids))"},{"line_number":412,"context_line":"        if admin_state_up is not None:"},{"line_number":413,"context_line":"            query \u003d query.filter(agents_db.Agent.admin_state_up \u003d\u003d"},{"line_number":414,"context_line":"                                 admin_state_up)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7aa08908_5dd73223","line":411,"range":{"start_line":409,"start_character":0,"end_line":411,"end_character":68},"in_reply_to":"7aa08908_e63942da","updated":"2016-06-10 06:46:22.000000000","message":"i think this will work, just tested it out and it does appear to be viable.  good idea!","commit_id":"8626e5aab7565b6fd7811bc68e84456c4ddaa7c7"}],"neutron/services/segments/db.py":[{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"d5d1e1211f95f8af9425ab9ce0e9f7faafc1344c","unresolved":false,"context_lines":[{"line_number":75,"context_line":"               db.PHYSICAL_NETWORK: segment_db[db.PHYSICAL_NETWORK],"},{"line_number":76,"context_line":"               db.NETWORK_TYPE: segment_db[db.NETWORK_TYPE],"},{"line_number":77,"context_line":"               db.SEGMENTATION_ID: segment_db[db.SEGMENTATION_ID],"},{"line_number":78,"context_line":"               \u0027hosts\u0027: [mapping.host for mapping in"},{"line_number":79,"context_line":"                         segment_db.segment_host_mapping]}"},{"line_number":80,"context_line":"        return self._fields(res, fields)"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def _get_segment(self, context, segment_id):"}],"source_content_type":"text/x-python","patch_set":1,"id":"7aa08908_40c7ec63","line":79,"range":{"start_line":78,"start_character":15,"end_line":79,"end_character":58},"updated":"2016-06-07 20:29:24.000000000","message":"I don\u0027t think this belongs in this patch.  Unless I missed it, I don\u0027t think this patch makes use of it.","commit_id":"97427f43ca0973c3823a41125be9b301795243c1"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"e3618aa78f9e97314b0c1c46208b601edd2b1153","unresolved":false,"context_lines":[{"line_number":75,"context_line":"               db.PHYSICAL_NETWORK: segment_db[db.PHYSICAL_NETWORK],"},{"line_number":76,"context_line":"               db.NETWORK_TYPE: segment_db[db.NETWORK_TYPE],"},{"line_number":77,"context_line":"               db.SEGMENTATION_ID: segment_db[db.SEGMENTATION_ID],"},{"line_number":78,"context_line":"               \u0027hosts\u0027: [mapping.host for mapping in"},{"line_number":79,"context_line":"                         segment_db.segment_host_mapping]}"},{"line_number":80,"context_line":"        return self._fields(res, fields)"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def _get_segment(self, context, segment_id):"}],"source_content_type":"text/x-python","patch_set":1,"id":"7aa08908_dbe63114","line":79,"range":{"start_line":78,"start_character":15,"end_line":79,"end_character":58},"in_reply_to":"7aa08908_40c7ec63","updated":"2016-06-07 21:00:37.000000000","message":"oh you\u0027re right, it doesn\u0027t use it in this patch","commit_id":"97427f43ca0973c3823a41125be9b301795243c1"}]}
