)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"6394fd876974915641fde25ea52dfcbd9f368eb4","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Use neutron port_list when filtering instance by ip"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The performance of filtering instance by IP is poor, this is due to that"},{"line_number":10,"context_line":"IP address is one part of the instance.network_info JSON, we have to"},{"line_number":11,"context_line":"iterate one by one to find the instance that matches the request."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"As discussed in Queens PTG[1], one possible solution is to get filtered"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"9f91af0f_4b86b115","line":10,"range":{"start_line":9,"start_character":53,"end_line":10,"end_character":56},"updated":"2018-01-11 01:19:12.000000000","message":"due to the fact that the IP address is part of a JSON-encoded field and we need to unpack the field and do a search on the field for each record in the instances table.","commit_id":"67de9a597a2c668414fccb81d83d16840467192c"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"b4637cb08bf65b2e0236b1f19f4743b3f876273d","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Use neutron port_list when filtering instance by ip"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The performance of filtering instance by IP is poor, this is due to that"},{"line_number":10,"context_line":"IP address is one part of the instance.network_info JSON, we have to"},{"line_number":11,"context_line":"iterate one by one to find the instance that matches the request."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"As discussed in Queens PTG[1], one possible solution is to get filtered"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"7f96bb07_ea4b8cad","line":10,"range":{"start_line":9,"start_character":53,"end_line":10,"end_character":56},"in_reply_to":"9f91af0f_4b86b115","updated":"2018-01-11 04:07:06.000000000","message":"Done","commit_id":"67de9a597a2c668414fccb81d83d16840467192c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"6394fd876974915641fde25ea52dfcbd9f368eb4","unresolved":false,"context_lines":[{"line_number":15,"context_line":"and then merge to the other filters."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"As Nova provides regex matching manner filtering for IP filter, so this is"},{"line_number":18,"context_line":"depend on Neutron changes that addes regex matching manner to the"},{"line_number":19,"context_line":"GET /ports API[2]"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"[1]http://lists.openstack.org/pipermail/openstack-dev/2017-September/122258.html"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"9f91af0f_ab741d37","line":18,"range":{"start_line":18,"start_character":31,"end_line":18,"end_character":36},"updated":"2018-01-11 01:19:12.000000000","message":"add","commit_id":"67de9a597a2c668414fccb81d83d16840467192c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"6394fd876974915641fde25ea52dfcbd9f368eb4","unresolved":false,"context_lines":[{"line_number":15,"context_line":"and then merge to the other filters."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"As Nova provides regex matching manner filtering for IP filter, so this is"},{"line_number":18,"context_line":"depend on Neutron changes that addes regex matching manner to the"},{"line_number":19,"context_line":"GET /ports API[2]"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"[1]http://lists.openstack.org/pipermail/openstack-dev/2017-September/122258.html"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"9f91af0f_2b96cd3f","line":18,"range":{"start_line":18,"start_character":52,"end_line":18,"end_character":58},"updated":"2018-01-11 01:19:12.000000000","message":"functionality","commit_id":"67de9a597a2c668414fccb81d83d16840467192c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"6394fd876974915641fde25ea52dfcbd9f368eb4","unresolved":false,"context_lines":[{"line_number":14,"context_line":"ports from Neutron and retrieve the instance uuid from the port.device_id"},{"line_number":15,"context_line":"and then merge to the other filters."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"As Nova provides regex matching manner filtering for IP filter, so this is"},{"line_number":18,"context_line":"depend on Neutron changes that addes regex matching manner to the"},{"line_number":19,"context_line":"GET /ports API[2]"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"[1]http://lists.openstack.org/pipermail/openstack-dev/2017-September/122258.html"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"9f91af0f_0b7c291d","line":18,"range":{"start_line":17,"start_character":67,"end_line":18,"end_character":6},"updated":"2018-01-11 01:19:12.000000000","message":"this depends on","commit_id":"67de9a597a2c668414fccb81d83d16840467192c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f2000a2aac0d6b04d40f80a1a48ed6b6d3ad174d","unresolved":false,"context_lines":[{"line_number":15,"context_line":"and then merge to the other filters."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"As Nova provides regex matching manner filtering for IP filter, so this is"},{"line_number":18,"context_line":"depend on Neutron changes that addes regex matching manner to the"},{"line_number":19,"context_line":"GET /ports API[2]"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"The performance test results of the POC are presented in[3]."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"7f96bb07_cf0102b2","line":18,"range":{"start_line":18,"start_character":37,"end_line":18,"end_character":42},"updated":"2018-01-11 02:29:27.000000000","message":"nit: neutron isn\u0027t really support a regex, they are support a substring match using LIKE in the database.","commit_id":"47097e70dab50d1b7b941045aae6fbde9793bf1d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"cac49f99598e69f4a67de11a336bfc6eb702cc07","unresolved":false,"context_lines":[{"line_number":16,"context_line":"and then merge to the other filters."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"As Nova provides regex matching manner filtering for IP filter, so this"},{"line_number":19,"context_line":"depend on Neutron changes that add substring  matching functionality to"},{"line_number":20,"context_line":"the GET /ports API[2]"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"The performance test results of the POC are presented in[3]."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"7f96bb07_c2dc6648","line":19,"range":{"start_line":19,"start_character":44,"end_line":19,"end_character":46},"updated":"2018-01-11 16:55:08.000000000","message":"nit: single space","commit_id":"fdc75ec8a736f8c7d61621592fc8515775434922"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"b4208df50aa9c1f70d21612d90fa6125d4ce18ad","unresolved":false,"context_lines":[{"line_number":16,"context_line":"and then merge to the other filters."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"As Nova provides regex matching manner filtering for IP filter, so this"},{"line_number":19,"context_line":"depend on Neutron changes that add substring  matching functionality to"},{"line_number":20,"context_line":"the GET /ports API[2]"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"The performance test results of the POC are presented in[3]."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"7f96bb07_4cdaa0e9","line":19,"range":{"start_line":19,"start_character":44,"end_line":19,"end_character":46},"in_reply_to":"7f96bb07_c2dc6648","updated":"2018-01-23 02:11:58.000000000","message":"Done","commit_id":"fdc75ec8a736f8c7d61621592fc8515775434922"}],"nova/compute/api.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c95e876fbcf6a2640887afa88d4c8abaac441909","unresolved":false,"context_lines":[{"line_number":2348,"context_line":"        orig_limit \u003d limit"},{"line_number":2349,"context_line":"        skip_old_school_ip_filtering \u003d False"},{"line_number":2350,"context_line":"        if filter_ip:"},{"line_number":2351,"context_line":"            if self.network_api._has_substr_port_filtering_extension():"},{"line_number":2352,"context_line":"                filters[\u0027ip\u0027] \u003d orig_ip_filters"},{"line_number":2353,"context_line":"                skip_old_school_ip_filtering \u003d True"},{"line_number":2354,"context_line":"                instance_uuids \u003d self._ip_filter_using_neutron(context,"}],"source_content_type":"text/x-python","patch_set":4,"id":"df87a7cf_613c9792","line":2351,"updated":"2017-12-12 19:37:48.000000000","message":"This needs to also have a utils.is_neutron() check since we can\u0027t do this if we\u0027re using nova-network.","commit_id":"b4ae4abf017709870564a21a24173135ecb4e8a4"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6f63e0c0d95f285b1b391ad4b7eb97a689e7f13c","unresolved":false,"context_lines":[{"line_number":2348,"context_line":"        orig_limit \u003d limit"},{"line_number":2349,"context_line":"        skip_old_school_ip_filtering \u003d False"},{"line_number":2350,"context_line":"        if filter_ip:"},{"line_number":2351,"context_line":"            if self.network_api._has_substr_port_filtering_extension():"},{"line_number":2352,"context_line":"                filters[\u0027ip\u0027] \u003d orig_ip_filters"},{"line_number":2353,"context_line":"                skip_old_school_ip_filtering \u003d True"},{"line_number":2354,"context_line":"                instance_uuids \u003d self._ip_filter_using_neutron(context,"}],"source_content_type":"text/x-python","patch_set":4,"id":"df87a7cf_8152fbdc","line":2351,"range":{"start_line":2351,"start_character":32,"end_line":2351,"end_character":68},"updated":"2017-12-12 19:40:43.000000000","message":"TypeError: this requires a context parameter:\n\nhttp://logs.openstack.org/05/525505/4/check/legacy-tempest-dsvm-neutron-full/b316bd0/logs/screen-n-api.txt.gz?level\u003dTRACE#_Dec_07_23_28_47_174096","commit_id":"b4ae4abf017709870564a21a24173135ecb4e8a4"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9c6f7b1c1329172bca7447f5038f94c24462f5fa","unresolved":false,"context_lines":[{"line_number":2349,"context_line":"        skip_old_school_ip_filtering \u003d False"},{"line_number":2350,"context_line":"        if filter_ip:"},{"line_number":2351,"context_line":"            if self.network_api._has_substr_port_filtering_extension():"},{"line_number":2352,"context_line":"                filters[\u0027ip\u0027] \u003d orig_ip_filters"},{"line_number":2353,"context_line":"                skip_old_school_ip_filtering \u003d True"},{"line_number":2354,"context_line":"                instance_uuids \u003d self._ip_filter_using_neutron(context,"},{"line_number":2355,"context_line":"                                                               filters)"}],"source_content_type":"text/x-python","patch_set":4,"id":"df87a7cf_b2c7b396","line":2352,"range":{"start_line":2352,"start_character":16,"end_line":2352,"end_character":47},"updated":"2017-12-07 22:59:35.000000000","message":"What is the point in this? Your setting the value in the filters dict back to the thing you pulled out of it.","commit_id":"b4ae4abf017709870564a21a24173135ecb4e8a4"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d6935dfd5bc8e235978770a14ddd69cbfc1ca24b","unresolved":false,"context_lines":[{"line_number":2349,"context_line":"        skip_old_school_ip_filtering \u003d False"},{"line_number":2350,"context_line":"        if filter_ip:"},{"line_number":2351,"context_line":"            if self.network_api._has_substr_port_filtering_extension():"},{"line_number":2352,"context_line":"                filters[\u0027ip\u0027] \u003d orig_ip_filters"},{"line_number":2353,"context_line":"                skip_old_school_ip_filtering \u003d True"},{"line_number":2354,"context_line":"                instance_uuids \u003d self._ip_filter_using_neutron(context,"},{"line_number":2355,"context_line":"                                                               filters)"}],"source_content_type":"text/x-python","patch_set":4,"id":"df87a7cf_61d7b74c","line":2352,"range":{"start_line":2352,"start_character":16,"end_line":2352,"end_character":47},"in_reply_to":"df87a7cf_6dbf0961","updated":"2017-12-12 19:36:59.000000000","message":"So here you\u0027re setting it back to the unmapped value in the filters dict, which is going to be re-used below in the DB queries; I guess that\u0027s why you have the skip_old_school_ip_filtering variable.\n\nIt might be cleaner to simply delete the ip filter from the filters dict if filtering via neutron works, and then set filter_ip \u003d False so it\u0027s not done by Nova later (L2414). Otherwise the filter_ip and skip_old_school_ip_filtering variables are essentially the same thing.","commit_id":"b4ae4abf017709870564a21a24173135ecb4e8a4"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"21e9d79a42e400bd52239a43955f1a74fa7ca80c","unresolved":false,"context_lines":[{"line_number":2349,"context_line":"        skip_old_school_ip_filtering \u003d False"},{"line_number":2350,"context_line":"        if filter_ip:"},{"line_number":2351,"context_line":"            if self.network_api._has_substr_port_filtering_extension():"},{"line_number":2352,"context_line":"                filters[\u0027ip\u0027] \u003d orig_ip_filters"},{"line_number":2353,"context_line":"                skip_old_school_ip_filtering \u003d True"},{"line_number":2354,"context_line":"                instance_uuids \u003d self._ip_filter_using_neutron(context,"},{"line_number":2355,"context_line":"                                                               filters)"}],"source_content_type":"text/x-python","patch_set":4,"id":"df87a7cf_6dbf0961","line":2352,"range":{"start_line":2352,"start_character":16,"end_line":2352,"end_character":47},"in_reply_to":"df87a7cf_b2c7b396","updated":"2017-12-08 01:05:19.000000000","message":"The address has been transformed in line 2306 and cannot be used for Neutron filtering.","commit_id":"b4ae4abf017709870564a21a24173135ecb4e8a4"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9c6f7b1c1329172bca7447f5038f94c24462f5fa","unresolved":false,"context_lines":[{"line_number":2354,"context_line":"                instance_uuids \u003d self._ip_filter_using_neutron(context,"},{"line_number":2355,"context_line":"                                                               filters)"},{"line_number":2356,"context_line":"                if instance_uuids:"},{"line_number":2357,"context_line":"                    if \u0027uuid\u0027 in filters:"},{"line_number":2358,"context_line":"                        filters[\u0027uuid\u0027].extend(instance_uuids)"},{"line_number":2359,"context_line":"                    else:"},{"line_number":2360,"context_line":"                        filters[\u0027uuid\u0027] \u003d instance_uuids"}],"source_content_type":"text/x-python","patch_set":4,"id":"df87a7cf_d2491731","line":2357,"range":{"start_line":2357,"start_character":20,"end_line":2357,"end_character":41},"updated":"2017-12-07 22:59:35.000000000","message":"\u0027uuid\u0027 isn\u0027t something that we support for filtering instances:\n\nhttps://github.com/openstack/nova/blob/master/nova/api/openstack/compute/schemas/servers.py#L313","commit_id":"b4ae4abf017709870564a21a24173135ecb4e8a4"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d6935dfd5bc8e235978770a14ddd69cbfc1ca24b","unresolved":false,"context_lines":[{"line_number":2354,"context_line":"                instance_uuids \u003d self._ip_filter_using_neutron(context,"},{"line_number":2355,"context_line":"                                                               filters)"},{"line_number":2356,"context_line":"                if instance_uuids:"},{"line_number":2357,"context_line":"                    if \u0027uuid\u0027 in filters:"},{"line_number":2358,"context_line":"                        filters[\u0027uuid\u0027].extend(instance_uuids)"},{"line_number":2359,"context_line":"                    else:"},{"line_number":2360,"context_line":"                        filters[\u0027uuid\u0027] \u003d instance_uuids"}],"source_content_type":"text/x-python","patch_set":4,"id":"df87a7cf_e1c2e784","line":2357,"range":{"start_line":2357,"start_character":20,"end_line":2357,"end_character":41},"in_reply_to":"df87a7cf_cd7ad5b8","updated":"2017-12-12 19:36:59.000000000","message":"I meant we don\u0027t support filtering instances via uuid in the REST API given my link to the schema - but yes it looks like it works for the DB API. I just don\u0027t think you need to check if \u0027uuid\u0027 is in the filters provided by the REST API user since I don\u0027t think that\u0027s allowed.\n\nHmm, but then again:\n\nhttps://github.com/openstack/nova/blob/master/nova/api/openstack/compute/schemas/servers.py#L373\n\nSo I guess you could pass through a uuid filter today...yuck.","commit_id":"b4ae4abf017709870564a21a24173135ecb4e8a4"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"21e9d79a42e400bd52239a43955f1a74fa7ca80c","unresolved":false,"context_lines":[{"line_number":2354,"context_line":"                instance_uuids \u003d self._ip_filter_using_neutron(context,"},{"line_number":2355,"context_line":"                                                               filters)"},{"line_number":2356,"context_line":"                if instance_uuids:"},{"line_number":2357,"context_line":"                    if \u0027uuid\u0027 in filters:"},{"line_number":2358,"context_line":"                        filters[\u0027uuid\u0027].extend(instance_uuids)"},{"line_number":2359,"context_line":"                    else:"},{"line_number":2360,"context_line":"                        filters[\u0027uuid\u0027] \u003d instance_uuids"}],"source_content_type":"text/x-python","patch_set":4,"id":"df87a7cf_cd7ad5b8","line":2357,"range":{"start_line":2357,"start_character":20,"end_line":2357,"end_character":41},"in_reply_to":"df87a7cf_d2491731","updated":"2017-12-08 01:05:19.000000000","message":"https://github.com/openstack/nova/blob/master/nova/api/openstack/compute/schemas/servers.py#L351\nNo we supported it, and it is a strict match in DB:\nhttps://github.com/openstack/nova/blob/master/nova/db/sqlalchemy/api.py#L2230\n\nI tested, it could work well, get rid of the limit/marker/sort problem perfectly this way :)","commit_id":"b4ae4abf017709870564a21a24173135ecb4e8a4"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3983f4f17e533a9e1d8735cbcfbde7290bf243a1","unresolved":false,"context_lines":[{"line_number":2514,"context_line":"        uuids \u003d []"},{"line_number":2515,"context_line":"        try:"},{"line_number":2516,"context_line":"            ports \u003d self.network_api.list_ports("},{"line_number":2517,"context_line":"                context, fixed_ips\u003d\u0027ip_address\u003d\u0027 + address,"},{"line_number":2518,"context_line":"                fields\u003d[\u0027device_id\u0027])[\u0027ports\u0027]"},{"line_number":2519,"context_line":"            for port in ports:"},{"line_number":2520,"context_line":"                uuids.append(port[\u0027device_id\u0027])"}],"source_content_type":"text/x-python","patch_set":5,"id":"df87a7cf_6aed468a","line":2517,"range":{"start_line":2517,"start_character":36,"end_line":2517,"end_character":46},"updated":"2017-12-13 03:00:24.000000000","message":"This is the exact match filter correct? We need to change this to the substring filter.","commit_id":"8b3f2e63b00eaf9f53863fdf31b62505843464c5"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"ecf3616d01d224eae902f054b54c9b602791cf50","unresolved":false,"context_lines":[{"line_number":2514,"context_line":"        uuids \u003d []"},{"line_number":2515,"context_line":"        try:"},{"line_number":2516,"context_line":"            ports \u003d self.network_api.list_ports("},{"line_number":2517,"context_line":"                context, fixed_ips\u003d\u0027ip_address\u003d\u0027 + address,"},{"line_number":2518,"context_line":"                fields\u003d[\u0027device_id\u0027])[\u0027ports\u0027]"},{"line_number":2519,"context_line":"            for port in ports:"},{"line_number":2520,"context_line":"                uuids.append(port[\u0027device_id\u0027])"}],"source_content_type":"text/x-python","patch_set":5,"id":"df87a7cf_6d44801c","line":2517,"range":{"start_line":2517,"start_character":36,"end_line":2517,"end_character":46},"in_reply_to":"df87a7cf_6aed468a","updated":"2017-12-13 03:20:48.000000000","message":"Yeah, I guess we need a patch in neutronclinet also","commit_id":"8b3f2e63b00eaf9f53863fdf31b62505843464c5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9755b3f1d74778fa4a6162253c8db26ec3d2c1fa","unresolved":false,"context_lines":[{"line_number":2514,"context_line":"        uuids \u003d []"},{"line_number":2515,"context_line":"        try:"},{"line_number":2516,"context_line":"            ports \u003d self.network_api.list_ports("},{"line_number":2517,"context_line":"                context, fixed_ips\u003d\u0027ip_address\u003d\u0027 + address,"},{"line_number":2518,"context_line":"                fields\u003d[\u0027device_id\u0027])[\u0027ports\u0027]"},{"line_number":2519,"context_line":"            for port in ports:"},{"line_number":2520,"context_line":"                uuids.append(port[\u0027device_id\u0027])"}],"source_content_type":"text/x-python","patch_set":5,"id":"df87a7cf_e673b8b0","line":2517,"range":{"start_line":2517,"start_character":36,"end_line":2517,"end_character":46},"in_reply_to":"df87a7cf_6d44801c","updated":"2017-12-13 20:56:37.000000000","message":"For what? The filters are passed through neutronclient so that should be fine.","commit_id":"8b3f2e63b00eaf9f53863fdf31b62505843464c5"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"b2c061bbdd39e2705436e035d14f55d55676d618","unresolved":false,"context_lines":[{"line_number":2514,"context_line":"        uuids \u003d []"},{"line_number":2515,"context_line":"        try:"},{"line_number":2516,"context_line":"            ports \u003d self.network_api.list_ports("},{"line_number":2517,"context_line":"                context, fixed_ips\u003d\u0027ip_address\u003d\u0027 + address,"},{"line_number":2518,"context_line":"                fields\u003d[\u0027device_id\u0027])[\u0027ports\u0027]"},{"line_number":2519,"context_line":"            for port in ports:"},{"line_number":2520,"context_line":"                uuids.append(port[\u0027device_id\u0027])"}],"source_content_type":"text/x-python","patch_set":5,"id":"df87a7cf_890e7830","line":2517,"range":{"start_line":2517,"start_character":36,"end_line":2517,"end_character":46},"in_reply_to":"df87a7cf_e673b8b0","updated":"2017-12-14 02:35:01.000000000","message":"Yeah, I checked, it is fine.","commit_id":"8b3f2e63b00eaf9f53863fdf31b62505843464c5"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"6394fd876974915641fde25ea52dfcbd9f368eb4","unresolved":false,"context_lines":[{"line_number":2314,"context_line":"                \u0027flavor\u0027: _remap_flavor_filter,"},{"line_number":2315,"context_line":"                \u0027fixed_ip\u0027: _remap_fixed_ip_filter}"},{"line_number":2316,"context_line":""},{"line_number":2317,"context_line":"        # Save off the original user request filter before"},{"line_number":2318,"context_line":"        # _remap_fixed_ip_filter changes it."},{"line_number":2319,"context_line":"        orig_ip_filter \u003d filters.get(\u0027ip\u0027)"},{"line_number":2320,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9f91af0f_eba3059d","line":2317,"range":{"start_line":2317,"start_character":10,"end_line":2317,"end_character":19},"updated":"2018-01-11 01:19:12.000000000","message":"Save the original...","commit_id":"67de9a597a2c668414fccb81d83d16840467192c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"6394fd876974915641fde25ea52dfcbd9f368eb4","unresolved":false,"context_lines":[{"line_number":2314,"context_line":"                \u0027flavor\u0027: _remap_flavor_filter,"},{"line_number":2315,"context_line":"                \u0027fixed_ip\u0027: _remap_fixed_ip_filter}"},{"line_number":2316,"context_line":""},{"line_number":2317,"context_line":"        # Save off the original user request filter before"},{"line_number":2318,"context_line":"        # _remap_fixed_ip_filter changes it."},{"line_number":2319,"context_line":"        orig_ip_filter \u003d filters.get(\u0027ip\u0027)"},{"line_number":2320,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9f91af0f_0ba18994","line":2317,"range":{"start_line":2317,"start_character":37,"end_line":2317,"end_character":44},"updated":"2018-01-11 01:19:12.000000000","message":"requested","commit_id":"67de9a597a2c668414fccb81d83d16840467192c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"6394fd876974915641fde25ea52dfcbd9f368eb4","unresolved":false,"context_lines":[{"line_number":2315,"context_line":"                \u0027fixed_ip\u0027: _remap_fixed_ip_filter}"},{"line_number":2316,"context_line":""},{"line_number":2317,"context_line":"        # Save off the original user request filter before"},{"line_number":2318,"context_line":"        # _remap_fixed_ip_filter changes it."},{"line_number":2319,"context_line":"        orig_ip_filter \u003d filters.get(\u0027ip\u0027)"},{"line_number":2320,"context_line":""},{"line_number":2321,"context_line":"        # copy from search_opts, doing various remappings as necessary"}],"source_content_type":"text/x-python","patch_set":7,"id":"9f91af0f_2bafad7d","line":2318,"updated":"2018-01-11 01:19:12.000000000","message":"actually, I think:\n\n orig_ip_filter \u003d filters.get(\u0027ip\u0027)\n\nis self-explanatory and probably doesn\u0027t need the comment above.","commit_id":"67de9a597a2c668414fccb81d83d16840467192c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f2000a2aac0d6b04d40f80a1a48ed6b6d3ad174d","unresolved":false,"context_lines":[{"line_number":2508,"context_line":""},{"line_number":2509,"context_line":"    def _ip_filter_using_neutron(self, context, filters):"},{"line_number":2510,"context_line":"        ip4_address \u003d filters.get(\u0027ip\u0027)"},{"line_number":2511,"context_line":"        ip6_address \u003d filters.get(\u0027ip6\u0027)"},{"line_number":2512,"context_line":"        addresses \u003d [ip4_address, ip6_address]"},{"line_number":2513,"context_line":"        uuids \u003d []"},{"line_number":2514,"context_line":"        for address in addresses:"}],"source_content_type":"text/x-python","patch_set":15,"id":"7f96bb07_ef9abe6c","line":2511,"updated":"2018-01-11 02:29:27.000000000","message":"you don\u0027t have a test for this","commit_id":"47097e70dab50d1b7b941045aae6fbde9793bf1d"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"b4637cb08bf65b2e0236b1f19f4743b3f876273d","unresolved":false,"context_lines":[{"line_number":2508,"context_line":""},{"line_number":2509,"context_line":"    def _ip_filter_using_neutron(self, context, filters):"},{"line_number":2510,"context_line":"        ip4_address \u003d filters.get(\u0027ip\u0027)"},{"line_number":2511,"context_line":"        ip6_address \u003d filters.get(\u0027ip6\u0027)"},{"line_number":2512,"context_line":"        addresses \u003d [ip4_address, ip6_address]"},{"line_number":2513,"context_line":"        uuids \u003d []"},{"line_number":2514,"context_line":"        for address in addresses:"}],"source_content_type":"text/x-python","patch_set":15,"id":"7f96bb07_aa1824d3","line":2511,"in_reply_to":"7f96bb07_ef9abe6c","updated":"2018-01-11 04:07:06.000000000","message":"Done","commit_id":"47097e70dab50d1b7b941045aae6fbde9793bf1d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f2000a2aac0d6b04d40f80a1a48ed6b6d3ad174d","unresolved":false,"context_lines":[{"line_number":2519,"context_line":"                        fields\u003d[\u0027device_id\u0027])[\u0027ports\u0027]"},{"line_number":2520,"context_line":"                    for port in ports:"},{"line_number":2521,"context_line":"                        uuids.append(port[\u0027device_id\u0027])"},{"line_number":2522,"context_line":"                except Exception as e:"},{"line_number":2523,"context_line":"                    LOG.error(\u0027An error occurred while listing ports \u0027"},{"line_number":2524,"context_line":"                              \u0027with an ip_address filter value of \"%s\". \u0027"},{"line_number":2525,"context_line":"                              \u0027Error: %s\u0027,"}],"source_content_type":"text/x-python","patch_set":15,"id":"7f96bb07_af8ef62b","line":2522,"updated":"2018-01-11 02:29:27.000000000","message":"nor this","commit_id":"47097e70dab50d1b7b941045aae6fbde9793bf1d"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"b4637cb08bf65b2e0236b1f19f4743b3f876273d","unresolved":false,"context_lines":[{"line_number":2519,"context_line":"                        fields\u003d[\u0027device_id\u0027])[\u0027ports\u0027]"},{"line_number":2520,"context_line":"                    for port in ports:"},{"line_number":2521,"context_line":"                        uuids.append(port[\u0027device_id\u0027])"},{"line_number":2522,"context_line":"                except Exception as e:"},{"line_number":2523,"context_line":"                    LOG.error(\u0027An error occurred while listing ports \u0027"},{"line_number":2524,"context_line":"                              \u0027with an ip_address filter value of \"%s\". \u0027"},{"line_number":2525,"context_line":"                              \u0027Error: %s\u0027,"}],"source_content_type":"text/x-python","patch_set":15,"id":"7f96bb07_6a121cb4","line":2522,"in_reply_to":"7f96bb07_af8ef62b","updated":"2018-01-11 04:07:06.000000000","message":"Done","commit_id":"47097e70dab50d1b7b941045aae6fbde9793bf1d"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"2557140cc67abb48ead0b0b8db31b94eb435abcc","unresolved":false,"context_lines":[{"line_number":2352,"context_line":"                # We\u0027re going to filter by IP using Neutron so set filter_ip"},{"line_number":2353,"context_line":"                # to False so we don\u0027t attempt post-DB query filtering in"},{"line_number":2354,"context_line":"                # memory below."},{"line_number":2355,"context_line":"                filter_ip \u003d False"},{"line_number":2356,"context_line":"                instance_uuids \u003d self._ip_filter_using_neutron(context,"},{"line_number":2357,"context_line":"                                                               filters)"},{"line_number":2358,"context_line":"                if instance_uuids:"},{"line_number":2359,"context_line":"                    # Note that \u0027uuid\u0027 is not in the 2.1 GET /servers query"},{"line_number":2360,"context_line":"                    # parameter schema, however, we allow additionalProperties"}],"source_content_type":"text/x-python","patch_set":17,"id":"7f96bb07_c8f50eef","line":2357,"range":{"start_line":2355,"start_character":16,"end_line":2357,"end_character":70},"updated":"2018-01-24 05:05:21.000000000","message":"some error might occur in getting the instance ID, should \nwe consider that case and let filter_ip to be  true and let now filter again (slow though)","commit_id":"3f35fe6a88672ea2ab7e080a55235c5cca45dc2c"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"4971d6494057af2f5455fb77708b9fde177c6319","unresolved":false,"context_lines":[{"line_number":2352,"context_line":"                # We\u0027re going to filter by IP using Neutron so set filter_ip"},{"line_number":2353,"context_line":"                # to False so we don\u0027t attempt post-DB query filtering in"},{"line_number":2354,"context_line":"                # memory below."},{"line_number":2355,"context_line":"                filter_ip \u003d False"},{"line_number":2356,"context_line":"                instance_uuids \u003d self._ip_filter_using_neutron(context,"},{"line_number":2357,"context_line":"                                                               filters)"},{"line_number":2358,"context_line":"                if instance_uuids:"},{"line_number":2359,"context_line":"                    # Note that \u0027uuid\u0027 is not in the 2.1 GET /servers query"},{"line_number":2360,"context_line":"                    # parameter schema, however, we allow additionalProperties"}],"source_content_type":"text/x-python","patch_set":17,"id":"7f96bb07_51c6869c","line":2357,"range":{"start_line":2355,"start_character":16,"end_line":2357,"end_character":70},"in_reply_to":"7f96bb07_c8f50eef","updated":"2018-01-24 09:11:14.000000000","message":"I think we might do it in a simple try catch, maybe in a follow up patch as bug fix? it might also need some test changes, lets not block it for feature freeze?","commit_id":"3f35fe6a88672ea2ab7e080a55235c5cca45dc2c"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"5b4a2ed5ec23f94a7ef8872dfd887aa16a31f58d","unresolved":false,"context_lines":[{"line_number":2363,"context_line":"                    if \u0027uuid\u0027 in filters and filters[\u0027uuid\u0027]:"},{"line_number":2364,"context_line":"                        filter_uuids \u003d filters[\u0027uuid\u0027]"},{"line_number":2365,"context_line":"                        if isinstance(filter_uuids, list):"},{"line_number":2366,"context_line":"                            instance_uuids.extend(filter_uuids)"},{"line_number":2367,"context_line":"                        else:"},{"line_number":2368,"context_line":"                            # Assume a string. If it\u0027s a dict or tuple or"},{"line_number":2369,"context_line":"                            # something, well...that\u0027s too bad. This is why"}],"source_content_type":"text/x-python","patch_set":17,"id":"7f96bb07_387dd6b1","line":2366,"range":{"start_line":2366,"start_character":28,"end_line":2366,"end_character":63},"updated":"2018-01-24 14:25:01.000000000","message":"This allows duplicates while L2371 does not. I think duplicate uuids does not cause any problem as the instance_uuids list is used with an IN operator during the query.","commit_id":"3f35fe6a88672ea2ab7e080a55235c5cca45dc2c"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"5b4a2ed5ec23f94a7ef8872dfd887aa16a31f58d","unresolved":false,"context_lines":[{"line_number":2368,"context_line":"                            # Assume a string. If it\u0027s a dict or tuple or"},{"line_number":2369,"context_line":"                            # something, well...that\u0027s too bad. This is why"},{"line_number":2370,"context_line":"                            # we have query parameter schema definitions."},{"line_number":2371,"context_line":"                            if filter_uuids not in instance_uuids:"},{"line_number":2372,"context_line":"                                instance_uuids.append(filter_uuids)"},{"line_number":2373,"context_line":"                    filters[\u0027uuid\u0027] \u003d instance_uuids"},{"line_number":2374,"context_line":"                else:"},{"line_number":2375,"context_line":"                    # No matches on the ip filter(s), return an empty list."}],"source_content_type":"text/x-python","patch_set":17,"id":"7f96bb07_587a22ba","line":2372,"range":{"start_line":2371,"start_character":1,"end_line":2372,"end_character":1},"updated":"2018-01-24 14:25:01.000000000","message":"nit: This if could be dropped, see my comment in L2366","commit_id":"3f35fe6a88672ea2ab7e080a55235c5cca45dc2c"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"b8b4b2f8969cd0990fe8d659ace93e0ea7a7509b","unresolved":false,"context_lines":[{"line_number":2383,"context_line":"        # This means BuildRequest and cell0 instances first, then cell"},{"line_number":2384,"context_line":"        # instances"},{"line_number":2385,"context_line":"        try:"},{"line_number":2386,"context_line":"            build_requests \u003d objects.BuildRequestList.get_by_filters("},{"line_number":2387,"context_line":"                context, filters, limit\u003dlimit, marker\u003dmarker,"},{"line_number":2388,"context_line":"                sort_keys\u003dsort_keys, sort_dirs\u003dsort_dirs)"},{"line_number":2389,"context_line":"            # If we found the marker in we need to set it to None"},{"line_number":2390,"context_line":"            # so we don\u0027t expect to find it in the cells below."},{"line_number":2391,"context_line":"            marker \u003d None"}],"source_content_type":"text/x-python","patch_set":17,"id":"7f96bb07_f49d43bb","line":2388,"range":{"start_line":2386,"start_character":12,"end_line":2388,"end_character":57},"updated":"2018-01-24 08:04:18.000000000","message":"If we filter on IP, can we skip this? The instance is in building, it shouldn\u0027t have an IP. But this isn\u0027t a blocker, we can improve that in a followup.","commit_id":"3f35fe6a88672ea2ab7e080a55235c5cca45dc2c"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"c4fc4678e1c8e80b6b5bbd2de697f90367c1295a","unresolved":false,"context_lines":[{"line_number":2383,"context_line":"        # This means BuildRequest and cell0 instances first, then cell"},{"line_number":2384,"context_line":"        # instances"},{"line_number":2385,"context_line":"        try:"},{"line_number":2386,"context_line":"            build_requests \u003d objects.BuildRequestList.get_by_filters("},{"line_number":2387,"context_line":"                context, filters, limit\u003dlimit, marker\u003dmarker,"},{"line_number":2388,"context_line":"                sort_keys\u003dsort_keys, sort_dirs\u003dsort_dirs)"},{"line_number":2389,"context_line":"            # If we found the marker in we need to set it to None"},{"line_number":2390,"context_line":"            # so we don\u0027t expect to find it in the cells below."},{"line_number":2391,"context_line":"            marker \u003d None"}],"source_content_type":"text/x-python","patch_set":17,"id":"7f96bb07_d17616a5","line":2388,"range":{"start_line":2386,"start_character":12,"end_line":2388,"end_character":57},"in_reply_to":"7f96bb07_6e7b9f27","updated":"2018-01-24 09:08:09.000000000","message":"Checked, it is OK.","commit_id":"3f35fe6a88672ea2ab7e080a55235c5cca45dc2c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"87f343a67543d0581d62dde411eafd47493e2c4e","unresolved":false,"context_lines":[{"line_number":2383,"context_line":"        # This means BuildRequest and cell0 instances first, then cell"},{"line_number":2384,"context_line":"        # instances"},{"line_number":2385,"context_line":"        try:"},{"line_number":2386,"context_line":"            build_requests \u003d objects.BuildRequestList.get_by_filters("},{"line_number":2387,"context_line":"                context, filters, limit\u003dlimit, marker\u003dmarker,"},{"line_number":2388,"context_line":"                sort_keys\u003dsort_keys, sort_dirs\u003dsort_dirs)"},{"line_number":2389,"context_line":"            # If we found the marker in we need to set it to None"},{"line_number":2390,"context_line":"            # so we don\u0027t expect to find it in the cells below."},{"line_number":2391,"context_line":"            marker \u003d None"}],"source_content_type":"text/x-python","patch_set":17,"id":"7f96bb07_6eaf14e3","line":2388,"range":{"start_line":2386,"start_character":12,"end_line":2388,"end_character":57},"in_reply_to":"7f96bb07_d17616a5","updated":"2018-01-24 15:02:52.000000000","message":"You can\u0027t specify an IP when creating a server.\n\nAlex has a good point that we don\u0027t really need to check build requests if we\u0027re filtering on ip since build requests won\u0027t have an ip set yet, but this is a latent issue regardless of this change and could be optimized later if we cared enough.","commit_id":"3f35fe6a88672ea2ab7e080a55235c5cca45dc2c"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"340ac4a280fe9645b067e544c0e29d8882314cc2","unresolved":false,"context_lines":[{"line_number":2383,"context_line":"        # This means BuildRequest and cell0 instances first, then cell"},{"line_number":2384,"context_line":"        # instances"},{"line_number":2385,"context_line":"        try:"},{"line_number":2386,"context_line":"            build_requests \u003d objects.BuildRequestList.get_by_filters("},{"line_number":2387,"context_line":"                context, filters, limit\u003dlimit, marker\u003dmarker,"},{"line_number":2388,"context_line":"                sort_keys\u003dsort_keys, sort_dirs\u003dsort_dirs)"},{"line_number":2389,"context_line":"            # If we found the marker in we need to set it to None"},{"line_number":2390,"context_line":"            # so we don\u0027t expect to find it in the cells below."},{"line_number":2391,"context_line":"            marker \u003d None"}],"source_content_type":"text/x-python","patch_set":17,"id":"7f96bb07_6e7b9f27","line":2388,"range":{"start_line":2386,"start_character":12,"end_line":2388,"end_character":57},"in_reply_to":"7f96bb07_f49d43bb","updated":"2018-01-24 08:47:57.000000000","message":"What if we specify ip when build instance?","commit_id":"3f35fe6a88672ea2ab7e080a55235c5cca45dc2c"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"2557140cc67abb48ead0b0b8db31b94eb435abcc","unresolved":false,"context_lines":[{"line_number":2525,"context_line":"                    for port in ports:"},{"line_number":2526,"context_line":"                        uuids.append(port[\u0027device_id\u0027])"},{"line_number":2527,"context_line":"                except Exception as e:"},{"line_number":2528,"context_line":"                    LOG.error(\u0027An error occurred while listing ports \u0027"},{"line_number":2529,"context_line":"                              \u0027with an ip_address filter value of \"%s\". \u0027"},{"line_number":2530,"context_line":"                              \u0027Error: %s\u0027,"},{"line_number":2531,"context_line":"                              address, six.text_type(e))"},{"line_number":2532,"context_line":"        return uuids"},{"line_number":2533,"context_line":""},{"line_number":2534,"context_line":"    def _get_instances_by_filters(self, context, filters,"}],"source_content_type":"text/x-python","patch_set":17,"id":"7f96bb07_68971a92","line":2531,"range":{"start_line":2528,"start_character":19,"end_line":2531,"end_character":56},"updated":"2018-01-24 05:05:21.000000000","message":"there might be some exception this means uuids might not contain all the info we want to search for ? \nbut we ignore the exception with only a log..","commit_id":"3f35fe6a88672ea2ab7e080a55235c5cca45dc2c"}],"nova/network/neutronv2/constants.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d01c3a19c82dc7f9b3f9a1aa35fb2e48e50b5c55","unresolved":false,"context_lines":[{"line_number":18,"context_line":"VNIC_INDEX_EXT \u003d \u0027VNIC Index\u0027"},{"line_number":19,"context_line":"DNS_INTEGRATION \u003d \u0027DNS Integration\u0027"},{"line_number":20,"context_line":"MULTI_NET_EXT \u003d \u0027Multi Provider Network\u0027"},{"line_number":21,"context_line":"SUBSTR_PORT_FILTERING \u003d \u0027IP Substring Filtering\u0027"}],"source_content_type":"text/x-python","patch_set":15,"id":"7f96bb07_2fc8a653","line":21,"updated":"2018-01-11 02:32:00.000000000","message":"This changed to \"IP address substring filtering\":\n\nhttps://review.openstack.org/#/c/521683/19/neutron/extensions/ip_substring_port_filtering_lib.py#34","commit_id":"47097e70dab50d1b7b941045aae6fbde9793bf1d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"66ee5b83315783d418db2d52d3d8954476eb7b4d","unresolved":false,"context_lines":[{"line_number":18,"context_line":"VNIC_INDEX_EXT \u003d \u0027VNIC Index\u0027"},{"line_number":19,"context_line":"DNS_INTEGRATION \u003d \u0027DNS Integration\u0027"},{"line_number":20,"context_line":"MULTI_NET_EXT \u003d \u0027Multi Provider Network\u0027"},{"line_number":21,"context_line":"SUBSTR_PORT_FILTERING \u003d \u0027IP Substring Filtering\u0027"}],"source_content_type":"text/x-python","patch_set":15,"id":"7f96bb07_efd63ef2","line":21,"in_reply_to":"7f96bb07_2fc8a653","updated":"2018-01-11 02:32:44.000000000","message":"https://review.openstack.org/#/c/521683/19/neutron/extensions/ip_substring_port_filtering_lib.py@34","commit_id":"47097e70dab50d1b7b941045aae6fbde9793bf1d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"cac49f99598e69f4a67de11a336bfc6eb702cc07","unresolved":false,"context_lines":[{"line_number":18,"context_line":"VNIC_INDEX_EXT \u003d \u0027VNIC Index\u0027"},{"line_number":19,"context_line":"DNS_INTEGRATION \u003d \u0027DNS Integration\u0027"},{"line_number":20,"context_line":"MULTI_NET_EXT \u003d \u0027Multi Provider Network\u0027"},{"line_number":21,"context_line":"SUBSTR_PORT_FILTERING \u003d \u0027IP address substring filtering\u0027"}],"source_content_type":"text/x-python","patch_set":16,"id":"7f96bb07_c2b546f0","line":21,"updated":"2018-01-11 16:55:08.000000000","message":"yup: https://review.openstack.org/#/c/521683/20/neutron/extensions/ip_substring_port_filtering_lib.py@34","commit_id":"fdc75ec8a736f8c7d61621592fc8515775434922"}],"nova/tests/unit/compute/test_compute_api.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f2000a2aac0d6b04d40f80a1a48ed6b6d3ad174d","unresolved":false,"context_lines":[{"line_number":5574,"context_line":"                self.context, objects\u003dcell_instances)"},{"line_number":5575,"context_line":""},{"line_number":5576,"context_line":"            self.compute_api.get_all("},{"line_number":5577,"context_line":"                self.context, search_opts\u003d{\u0027ip\u0027: \u0027fake\u0027},"},{"line_number":5578,"context_line":"                limit\u003dNone, marker\u003d\u0027fake-marker\u0027, sort_keys\u003d[\u0027baz\u0027],"},{"line_number":5579,"context_line":"                sort_dirs\u003d[\u0027desc\u0027])"},{"line_number":5580,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"7f96bb07_2f918653","line":5577,"updated":"2018-01-11 02:29:27.000000000","message":"This only tests the ip filter, but doesn\u0027t make sure we also handle the ip6 filter.","commit_id":"47097e70dab50d1b7b941045aae6fbde9793bf1d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"cac49f99598e69f4a67de11a336bfc6eb702cc07","unresolved":false,"context_lines":[{"line_number":5605,"context_line":"                self.context, objects\u003dcell_instances)"},{"line_number":5606,"context_line":""},{"line_number":5607,"context_line":"            self.compute_api.get_all("},{"line_number":5608,"context_line":"                self.context, search_opts\u003d{\u0027ip6\u0027: \u0027fake\u0027},"},{"line_number":5609,"context_line":"                limit\u003dNone, marker\u003d\u0027fake-marker\u0027, sort_keys\u003d[\u0027baz\u0027],"},{"line_number":5610,"context_line":"                sort_dirs\u003d[\u0027desc\u0027])"},{"line_number":5611,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"7f96bb07_e2af2292","line":5608,"updated":"2018-01-11 16:55:08.000000000","message":"nit: I think this is the only unique difference between this test and the one above. Could have probably worked those into a single test using ddt to provide the filter name, or simply looped the ip and ip6 filters in a single test case to avoid the duplication, or use a private method where 2 public methods pass in the filter name. Anyway, I won\u0027t block on it, but it\u0027s gratuitous copy/paste.","commit_id":"fdc75ec8a736f8c7d61621592fc8515775434922"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"cac49f99598e69f4a67de11a336bfc6eb702cc07","unresolved":false,"context_lines":[{"line_number":5643,"context_line":""},{"line_number":5644,"context_line":"            mock_list_port.assert_has_calls(["},{"line_number":5645,"context_line":"                mock.call("},{"line_number":5646,"context_line":"                self.context, fixed_ips\u003d\u0027ip_address_substr\u003dfake1\u0027,"},{"line_number":5647,"context_line":"                fields\u003d[\u0027device_id\u0027]),"},{"line_number":5648,"context_line":"                mock.call("},{"line_number":5649,"context_line":"                    self.context, fixed_ips\u003d\u0027ip_address_substr\u003dfake2\u0027,"},{"line_number":5650,"context_line":"                    fields\u003d[\u0027device_id\u0027])"}],"source_content_type":"text/x-python","patch_set":16,"id":"7f96bb07_a2911a55","line":5647,"range":{"start_line":5646,"start_character":16,"end_line":5647,"end_character":38},"updated":"2018-01-11 16:55:08.000000000","message":"nit: indent this like the fake2 call below.","commit_id":"fdc75ec8a736f8c7d61621592fc8515775434922"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"b4208df50aa9c1f70d21612d90fa6125d4ce18ad","unresolved":false,"context_lines":[{"line_number":5643,"context_line":""},{"line_number":5644,"context_line":"            mock_list_port.assert_has_calls(["},{"line_number":5645,"context_line":"                mock.call("},{"line_number":5646,"context_line":"                self.context, fixed_ips\u003d\u0027ip_address_substr\u003dfake1\u0027,"},{"line_number":5647,"context_line":"                fields\u003d[\u0027device_id\u0027]),"},{"line_number":5648,"context_line":"                mock.call("},{"line_number":5649,"context_line":"                    self.context, fixed_ips\u003d\u0027ip_address_substr\u003dfake2\u0027,"},{"line_number":5650,"context_line":"                    fields\u003d[\u0027device_id\u0027])"}],"source_content_type":"text/x-python","patch_set":16,"id":"7f96bb07_6cd51cb7","line":5647,"range":{"start_line":5646,"start_character":16,"end_line":5647,"end_character":38},"in_reply_to":"7f96bb07_a2911a55","updated":"2018-01-23 02:11:58.000000000","message":"Done","commit_id":"fdc75ec8a736f8c7d61621592fc8515775434922"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"cac49f99598e69f4a67de11a336bfc6eb702cc07","unresolved":false,"context_lines":[{"line_number":5674,"context_line":"        mock_list_port.assert_called_once_with("},{"line_number":5675,"context_line":"            self.context, fixed_ips\u003d\u0027ip_address_substr\u003dfake\u0027,"},{"line_number":5676,"context_line":"            fields\u003d[\u0027device_id\u0027])"},{"line_number":5677,"context_line":"        self.assertEqual([], instances.objects)"},{"line_number":5678,"context_line":""},{"line_number":5679,"context_line":""},{"line_number":5680,"context_line":"class Cellsv1DeprecatedTestMixIn(object):"}],"source_content_type":"text/x-python","patch_set":16,"id":"7f96bb07_e2888220","line":5677,"range":{"start_line":5677,"start_character":8,"end_line":5677,"end_character":47},"updated":"2018-01-11 16:55:08.000000000","message":"alternatively: self.assertEqual(0, len(instances))","commit_id":"fdc75ec8a736f8c7d61621592fc8515775434922"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"b4208df50aa9c1f70d21612d90fa6125d4ce18ad","unresolved":false,"context_lines":[{"line_number":5674,"context_line":"        mock_list_port.assert_called_once_with("},{"line_number":5675,"context_line":"            self.context, fixed_ips\u003d\u0027ip_address_substr\u003dfake\u0027,"},{"line_number":5676,"context_line":"            fields\u003d[\u0027device_id\u0027])"},{"line_number":5677,"context_line":"        self.assertEqual([], instances.objects)"},{"line_number":5678,"context_line":""},{"line_number":5679,"context_line":""},{"line_number":5680,"context_line":"class Cellsv1DeprecatedTestMixIn(object):"}],"source_content_type":"text/x-python","patch_set":16,"id":"7f96bb07_0ce498ab","line":5677,"range":{"start_line":5677,"start_character":8,"end_line":5677,"end_character":47},"in_reply_to":"7f96bb07_e2888220","updated":"2018-01-23 02:11:58.000000000","message":"Done","commit_id":"fdc75ec8a736f8c7d61621592fc8515775434922"}]}
