)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"fd5abb7a6ee422ca528dd204e11ceab7aa1ca6ff","unresolved":false,"context_lines":[{"line_number":11,"context_line":"It acomplishes this by looking at a \"subnets\" key that needs to be set as a property of aggregates that hosts are members of and in order to pass the filter one of the subnets the host has access to must not be out of IP capacity."},{"line_number":12,"context_line":"The value for \"subnets\" should be a comma seperated list of subnet names that hosts within the aggregate have access to."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"This is effectively a work around for https://blueprints.launchpad.net/nova/+spec/prep-for-network-aware-scheduling-pike"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: Ifa73d40763917cd9dbcbff75a8234c11ccdc5ed0"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"9fdfeff1_be11d2ae","line":14,"updated":"2019-01-25 18:00:35.000000000","message":"Commit message is hard to read in gerrit if you don\u0027t wrap the lines at 72 chars.","commit_id":"8702928d359941437d7ce20bc5a774dcb7eaa64f"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"a769f9245e241140c208f87d35db28e88ed1ba53","unresolved":false,"context_lines":[{"line_number":11,"context_line":"It acomplishes this by looking at a \"subnets\" key that needs to be set as a property of aggregates that hosts are members of and in order to pass the filter one of the subnets the host has access to must not be out of IP capacity."},{"line_number":12,"context_line":"The value for \"subnets\" should be a comma seperated list of subnet names that hosts within the aggregate have access to."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"This is effectively a work around for https://blueprints.launchpad.net/nova/+spec/prep-for-network-aware-scheduling-pike"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: Ifa73d40763917cd9dbcbff75a8234c11ccdc5ed0"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"9fdfeff1_c81f2e59","line":14,"in_reply_to":"9fdfeff1_be11d2ae","updated":"2019-01-28 00:22:33.000000000","message":"See https://wiki.openstack.org/wiki/GitCommitMessages#Summary_of_Git_commit_message_structure","commit_id":"8702928d359941437d7ce20bc5a774dcb7eaa64f"},{"author":{"_account_id":24965,"name":"Kevin Rasmussen","email":"kj_529@hotmail.com","username":"krasmussen"},"change_message_id":"a0e64359589ae86dc02d0d534a4d1253b5f9879e","unresolved":false,"context_lines":[{"line_number":11,"context_line":"It acomplishes this by looking at a \"subnets\" key that needs to be set as a property of aggregates that hosts are members of and in order to pass the filter one of the subnets the host has access to must not be out of IP capacity."},{"line_number":12,"context_line":"The value for \"subnets\" should be a comma seperated list of subnet names that hosts within the aggregate have access to."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"This is effectively a work around for https://blueprints.launchpad.net/nova/+spec/prep-for-network-aware-scheduling-pike"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: Ifa73d40763917cd9dbcbff75a8234c11ccdc5ed0"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"9fdfeff1_01edadb5","line":14,"in_reply_to":"9fdfeff1_c81f2e59","updated":"2019-02-01 20:52:07.000000000","message":"Thanks, I\u0027ll update the commit message to fit ^ once the blueprint has been reviewed.","commit_id":"8702928d359941437d7ce20bc5a774dcb7eaa64f"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"25b6dcf4c946b10d537db3bd143144de24468100","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"created AggregateSubnetAvailabilityFilter"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This is a filter that looks at the available ip capacity for individual subnets."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"It acomplishes this by looking at a \"subnets\" key that needs to be set as a property of aggregates that hosts are members of and in order to pass the filter one of the subnets the host has access to must not be out of IP capacity."},{"line_number":12,"context_line":"The value for \"subnets\" should be a comma seperated list of subnet names that hosts within the aggregate have access to."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"This is effectively a work around for https://blueprints.launchpad.net/nova/+spec/prep-for-network-aware-scheduling-pike"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: Ifa73d40763917cd9dbcbff75a8234c11ccdc5ed0"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"5fc1f717_840f2f2d","line":14,"range":{"start_line":9,"start_character":0,"end_line":14,"end_character":120},"updated":"2019-03-07 09:53:25.000000000","message":"this looks a little big urgly, should follow the guide for commit msg. and do we have a detailed design for this now?","commit_id":"3e1b63f1e8acd23b5db0d7fefd305e78114e65d5"}],"nova/scheduler/filters/aggregate_subnet_availability_filter.py":[{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"fd5abb7a6ee422ca528dd204e11ceab7aa1ca6ff","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        if not hasattr(spec_obj, \u0027subnet_ip_availability\u0027):"},{"line_number":32,"context_line":"            ip_availability_dict \u003d {}"},{"line_number":33,"context_line":"            neutron_api \u003d neutronapi.get_client(spec_obj.obj_context)"},{"line_number":34,"context_line":"            results \u003d neutron_api.list_network_ip_availabilities()"},{"line_number":35,"context_line":"            for network in results.get(\u0027network_ip_availabilities\u0027, []):"},{"line_number":36,"context_line":"                for subnet in network.get(\u0027subnet_ip_availability\u0027):"},{"line_number":37,"context_line":"                    subnet_name \u003d subnet[\u0027subnet_name\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"9fdfeff1_5e6d4630","line":34,"updated":"2019-01-25 18:00:35.000000000","message":"I\u0027m not sure calling neutron for every compute host candidate per request is going to perform adequately if there are a large number of compute hosts.","commit_id":"8702928d359941437d7ce20bc5a774dcb7eaa64f"},{"author":{"_account_id":24965,"name":"Kevin Rasmussen","email":"kj_529@hotmail.com","username":"krasmussen"},"change_message_id":"5db67d580ab7215674ca4a9b4761a14e7b3b13f0","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        if not hasattr(spec_obj, \u0027subnet_ip_availability\u0027):"},{"line_number":32,"context_line":"            ip_availability_dict \u003d {}"},{"line_number":33,"context_line":"            neutron_api \u003d neutronapi.get_client(spec_obj.obj_context)"},{"line_number":34,"context_line":"            results \u003d neutron_api.list_network_ip_availabilities()"},{"line_number":35,"context_line":"            for network in results.get(\u0027network_ip_availabilities\u0027, []):"},{"line_number":36,"context_line":"                for subnet in network.get(\u0027subnet_ip_availability\u0027):"},{"line_number":37,"context_line":"                    subnet_name \u003d subnet[\u0027subnet_name\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"9fdfeff1_e1c7bf11","line":34,"in_reply_to":"9fdfeff1_5e6d4630","updated":"2019-01-25 19:13:51.000000000","message":"I may be incorrect as this is my first stab at a scheduler filter but doesn\u0027t the same spec_obj get passed for each candidate?\n\nAdding `spec_obj.subnet_ip_availability \u003d ip_availability_dict` was done to avoid calling neutron for each candidate.","commit_id":"8702928d359941437d7ce20bc5a774dcb7eaa64f"},{"author":{"_account_id":10962,"name":"David Bingham","email":"dbingham@godaddy.com","username":"wwriverrat"},"change_message_id":"5df63b177afe76ab4728e00b8d73ade91dd6f451","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        if not hasattr(spec_obj, \u0027subnet_ip_availability\u0027):"},{"line_number":32,"context_line":"            ip_availability_dict \u003d {}"},{"line_number":33,"context_line":"            neutron_api \u003d neutronapi.get_client(spec_obj.obj_context)"},{"line_number":34,"context_line":"            results \u003d neutron_api.list_network_ip_availabilities()"},{"line_number":35,"context_line":"            for network in results.get(\u0027network_ip_availabilities\u0027, []):"},{"line_number":36,"context_line":"                for subnet in network.get(\u0027subnet_ip_availability\u0027):"},{"line_number":37,"context_line":"                    subnet_name \u003d subnet[\u0027subnet_name\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"9fdfeff1_9d04e219","line":34,"in_reply_to":"9fdfeff1_c1495b8b","updated":"2019-01-29 17:49:37.000000000","message":"Just thinking, but maybe:\n\nFetch the \"list_network_ip_availabilities\" from filter_properties in the spec_obj. If missing, fetch from neutron and push result into filter_properties. First host takes the hit, remainder of the hosts use the cached value.\n\nJust an idea :-)","commit_id":"8702928d359941437d7ce20bc5a774dcb7eaa64f"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"d365cced844ee0b7b444bc3b158864a636539b95","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        if not hasattr(spec_obj, \u0027subnet_ip_availability\u0027):"},{"line_number":32,"context_line":"            ip_availability_dict \u003d {}"},{"line_number":33,"context_line":"            neutron_api \u003d neutronapi.get_client(spec_obj.obj_context)"},{"line_number":34,"context_line":"            results \u003d neutron_api.list_network_ip_availabilities()"},{"line_number":35,"context_line":"            for network in results.get(\u0027network_ip_availabilities\u0027, []):"},{"line_number":36,"context_line":"                for subnet in network.get(\u0027subnet_ip_availability\u0027):"},{"line_number":37,"context_line":"                    subnet_name \u003d subnet[\u0027subnet_name\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"9fdfeff1_c1495b8b","line":34,"in_reply_to":"9fdfeff1_e1c7bf11","updated":"2019-01-25 19:26:26.000000000","message":"No, I think you\u0027re right. I skimmed over this without realizing you\u0027re caching the result on the request spec object after the first call. That said, we would probably add a new field to RequestSpec instead of setting an arbitrary attribute, to be less error prone.\n\nBut, don\u0027t change anything yet since we first need to discuss this proposal as a team and determine whether it should be added.","commit_id":"8702928d359941437d7ce20bc5a774dcb7eaa64f"},{"author":{"_account_id":24965,"name":"Kevin Rasmussen","email":"kj_529@hotmail.com","username":"krasmussen"},"change_message_id":"74f5250f9a84277f2083b3706f654f51f3be4811","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        for agg in host_state.aggregates:"},{"line_number":45,"context_line":"            metadata \u003d agg.get(\u0027_obj_metadata\u0027, {})"},{"line_number":46,"context_line":"            for subnet in metadata.get(\u0027subnets\u0027, \u0027\u0027).split(\u0027,\u0027):"},{"line_number":47,"context_line":"                subnets.add(subnet)"},{"line_number":48,"context_line":"        # Check ip availability of the host\u0027s subnets"},{"line_number":49,"context_line":"        for subnet in subnets:"},{"line_number":50,"context_line":"            if spec_obj.subnet_ip_availability.get(subnet, 0) \u003e 0:"}],"source_content_type":"text/x-python","patch_set":4,"id":"5fc1f717_6e3b02d1","line":47,"updated":"2019-03-07 08:03:52.000000000","message":"Fixes a bug with the previous code that caused hosts that belonged to multiple aggregates to only grab one of the aggregates it was a part of at random to get the subnets from.","commit_id":"3e1b63f1e8acd23b5db0d7fefd305e78114e65d5"}]}
