)]}'
{"neutron/common/utils.py":[{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"6925faaea695db164cd143f053185c3e7ba608d7","unresolved":false,"context_lines":[{"line_number":812,"context_line":"            raise ValueError(_("},{"line_number":813,"context_line":"                \"Invalid resource_provider_bandwidths: \""},{"line_number":814,"context_line":"                \"Device name %(dev_name)s is missing from \""},{"line_number":815,"context_line":"                \"device mappings\") % {\u0027dev_name\u0027: dev_name})"}],"source_content_type":"text/x-python","patch_set":19,"id":"3f79a3b5_11092d2a","line":815,"range":{"start_line":815,"start_character":17,"end_line":815,"end_character":32},"updated":"2018-10-08 10:13:31.000000000","message":"should be \u0027physical device mappings\u0027","commit_id":"c256ace8149197a9a6135ba8be3fd33490a7ea10"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"032c3923ef9e5535ecdf35d53a807bb0b3bd5251","unresolved":false,"context_lines":[{"line_number":812,"context_line":"            raise ValueError(_("},{"line_number":813,"context_line":"                \"Invalid resource_provider_bandwidths: \""},{"line_number":814,"context_line":"                \"Device name %(dev_name)s is missing from \""},{"line_number":815,"context_line":"                \"device mappings\") % {\u0027dev_name\u0027: dev_name})"}],"source_content_type":"text/x-python","patch_set":19,"id":"3f79a3b5_a7503b61","line":815,"range":{"start_line":815,"start_character":17,"end_line":815,"end_character":32},"in_reply_to":"3f79a3b5_11092d2a","updated":"2018-10-08 12:50:22.000000000","message":"Yeah, it is a little cheating, as in case ovs it\u0027s really bridge_mappings, in case or sriov it is physical_device_mappings, so I tried to be natural with device mappings.","commit_id":"c256ace8149197a9a6135ba8be3fd33490a7ea10"}],"neutron/conf/plugins/ml2/drivers/ovs_conf.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"38fc05c30a6c2a62cb26faa427d4f36eda634071","unresolved":false,"context_lines":[{"line_number":67,"context_line":"                help\u003d_(\"Comma-separated list of \""},{"line_number":68,"context_line":"                       \"\u003cbridge\u003e:\u003cegress_bw\u003e:\u003cingress_bw\u003e tuples, showing \""},{"line_number":69,"context_line":"                       \"the available bandwidth for the given bridge in the \""},{"line_number":70,"context_line":"                       \"given direction. The direction is meant from VM \""},{"line_number":71,"context_line":"                       \"perspective. Bandwidth is measured in kilobits per \""},{"line_number":72,"context_line":"                       \"second (kbps). The bridge must appear in \""},{"line_number":73,"context_line":"                       \"bridge_mappings as the value.\")),"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_70a30d00","line":70,"range":{"start_line":70,"start_character":69,"end_line":70,"end_character":71},"updated":"2018-06-26 19:04:21.000000000","message":"\u0027from port user perspective\u0027 to keep it generic","commit_id":"f3bc1c5c0e627ad2471494def6a407b1f0cbfc19"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"inactive contributor"},"change_message_id":"c771a3e255387cf7b9b7ca99a926406a8f4b2aee","unresolved":false,"context_lines":[{"line_number":67,"context_line":"                help\u003d_(\"Comma-separated list of \""},{"line_number":68,"context_line":"                       \"\u003cbridge\u003e:\u003cegress_bw\u003e:\u003cingress_bw\u003e tuples, showing \""},{"line_number":69,"context_line":"                       \"the available bandwidth for the given bridge in the \""},{"line_number":70,"context_line":"                       \"given direction. The direction is meant from VM \""},{"line_number":71,"context_line":"                       \"perspective. Bandwidth is measured in kilobits per \""},{"line_number":72,"context_line":"                       \"second (kbps). The bridge must appear in \""},{"line_number":73,"context_line":"                       \"bridge_mappings as the value.\")),"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_978d6dd5","line":70,"range":{"start_line":70,"start_character":69,"end_line":70,"end_character":71},"in_reply_to":"5f7c97a3_70a30d00","updated":"2018-07-06 14:29:47.000000000","message":"Come on. This is end-user documentation. We need to use language that\u0027s understandable even if it\u0027s not perfectly generic.","commit_id":"f3bc1c5c0e627ad2471494def6a407b1f0cbfc19"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"38fc05c30a6c2a62cb26faa427d4f36eda634071","unresolved":false,"context_lines":[{"line_number":70,"context_line":"                       \"given direction. The direction is meant from VM \""},{"line_number":71,"context_line":"                       \"perspective. Bandwidth is measured in kilobits per \""},{"line_number":72,"context_line":"                       \"second (kbps). The bridge must appear in \""},{"line_number":73,"context_line":"                       \"bridge_mappings as the value.\")),"},{"line_number":74,"context_line":"    cfg.DictOpt(\u0027resource_provider_inventory_defaults\u0027,"},{"line_number":75,"context_line":"                default\u003d\u0027allocation_ratio:1.0,\u0027"},{"line_number":76,"context_line":"                        \u0027min_unit:1,\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_b0ebe50f","line":73,"updated":"2018-06-26 19:04:21.000000000","message":"I might add that not all bridge from bridge_mapping needs to appear in this list. If a bridge does not appear in this config then available is assumed to be 0 in both direction.","commit_id":"f3bc1c5c0e627ad2471494def6a407b1f0cbfc19"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"inactive contributor"},"change_message_id":"c771a3e255387cf7b9b7ca99a926406a8f4b2aee","unresolved":false,"context_lines":[{"line_number":70,"context_line":"                       \"given direction. The direction is meant from VM \""},{"line_number":71,"context_line":"                       \"perspective. Bandwidth is measured in kilobits per \""},{"line_number":72,"context_line":"                       \"second (kbps). The bridge must appear in \""},{"line_number":73,"context_line":"                       \"bridge_mappings as the value.\")),"},{"line_number":74,"context_line":"    cfg.DictOpt(\u0027resource_provider_inventory_defaults\u0027,"},{"line_number":75,"context_line":"                default\u003d\u0027allocation_ratio:1.0,\u0027"},{"line_number":76,"context_line":"                        \u0027min_unit:1,\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_52efe385","line":73,"in_reply_to":"5f7c97a3_b0ebe50f","updated":"2018-07-06 14:29:47.000000000","message":"Improved the help text. However I don\u0027t think we should report total\u003d0 inventories for omitted bridges. Instead we should neither create an rp, nor report inventories against.","commit_id":"f3bc1c5c0e627ad2471494def6a407b1f0cbfc19"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"38fc05c30a6c2a62cb26faa427d4f36eda634071","unresolved":false,"context_lines":[{"line_number":77,"context_line":"                        \u0027step_size:1,\u0027"},{"line_number":78,"context_line":"                        \u0027reserved:0\u0027,"},{"line_number":79,"context_line":"                help\u003d_(\"Key:value pairs to specify defaults used while \""},{"line_number":80,"context_line":"                       \"reporting resource provider inventories.\")),"},{"line_number":81,"context_line":"    cfg.BoolOpt(\u0027use_veth_interconnection\u0027, default\u003dFalse,"},{"line_number":82,"context_line":"                help\u003d_(\"Use veths instead of patch ports to interconnect the \""},{"line_number":83,"context_line":"                       \"integration bridge to physical networks. \""}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_30d7d551","line":80,"updated":"2018-06-26 19:04:21.000000000","message":"we could refer to the placement API ref about the meaning of these fields.","commit_id":"f3bc1c5c0e627ad2471494def6a407b1f0cbfc19"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"inactive contributor"},"change_message_id":"c771a3e255387cf7b9b7ca99a926406a8f4b2aee","unresolved":false,"context_lines":[{"line_number":77,"context_line":"                        \u0027step_size:1,\u0027"},{"line_number":78,"context_line":"                        \u0027reserved:0\u0027,"},{"line_number":79,"context_line":"                help\u003d_(\"Key:value pairs to specify defaults used while \""},{"line_number":80,"context_line":"                       \"reporting resource provider inventories.\")),"},{"line_number":81,"context_line":"    cfg.BoolOpt(\u0027use_veth_interconnection\u0027, default\u003dFalse,"},{"line_number":82,"context_line":"                help\u003d_(\"Use veths instead of patch ports to interconnect the \""},{"line_number":83,"context_line":"                       \"integration bridge to physical networks. \""}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_f2ab8f1a","line":80,"in_reply_to":"5f7c97a3_30d7d551","updated":"2018-07-06 14:29:47.000000000","message":"Done","commit_id":"f3bc1c5c0e627ad2471494def6a407b1f0cbfc19"},{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"e6d943ea320465773d2334f86d651c6884d95c7b","unresolved":false,"context_lines":[{"line_number":62,"context_line":"                       \"mapping, make sure to disconnect it from the \""},{"line_number":63,"context_line":"                       \"integration bridge as it won\u0027t be managed by the \""},{"line_number":64,"context_line":"                       \"agent anymore.\")),"},{"line_number":65,"context_line":"    cfg.ListOpt(\u0027resource_provider_bandwidths\u0027,"},{"line_number":66,"context_line":"                default\u003d[],"},{"line_number":67,"context_line":"                help\u003d_(\"Comma-separated list of \""},{"line_number":68,"context_line":"                       \"\u003cbridge\u003e:\u003cegress_bw\u003e:\u003cingress_bw\u003e tuples, showing \""}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_67e2d104","line":65,"updated":"2018-07-27 15:40:05.000000000","message":"I left a comment on the spec (that was merged months ago), but why are we introducing this config option and putting the onus on deployment tools, when Neutron can access the same information, by discovering which physical device the bridge is connected to and querying it to know the bandwidth it has available?","commit_id":"d97863ad926408c3e7b7e18da26b5239683d6aaa"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"inactive contributor"},"change_message_id":"0277b6f8190718bff0724279cf0a37f034f1bcd6","unresolved":false,"context_lines":[{"line_number":62,"context_line":"                       \"mapping, make sure to disconnect it from the \""},{"line_number":63,"context_line":"                       \"integration bridge as it won\u0027t be managed by the \""},{"line_number":64,"context_line":"                       \"agent anymore.\")),"},{"line_number":65,"context_line":"    cfg.ListOpt(\u0027resource_provider_bandwidths\u0027,"},{"line_number":66,"context_line":"                default\u003d[],"},{"line_number":67,"context_line":"                help\u003d_(\"Comma-separated list of \""},{"line_number":68,"context_line":"                       \"\u003cbridge\u003e:\u003cegress_bw\u003e:\u003cingress_bw\u003e tuples, showing \""}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_e276410c","line":65,"in_reply_to":"5f7c97a3_67e2d104","updated":"2018-08-03 11:55:54.000000000","message":"Sorry, I didn\u0027t notice your comment on the merged spec.\n\nBasically, we\u0027d like to get there where we autodiscovery works too. However I think we cannot spare having a config option, because an admin may want to intentionally over- or underallocate bandwidth, that cannot be automatically discovered. It also may make sense for an admin to list some physical interfaces in the config but not others.\n\nTherefore I see the config option as a must and autodiscovery as a nice to have feature, so we have the autodiscovery somewhere deeper down in our to do list. It\u0027s there, just we\u0027ll need some tome until we get there.","commit_id":"d97863ad926408c3e7b7e18da26b5239683d6aaa"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"06bd587edb5500e0efa936a1e4ac8411c9836923","unresolved":false,"context_lines":[{"line_number":81,"context_line":"                        \u0027min_unit:1,\u0027"},{"line_number":82,"context_line":"                        \u0027step_size:1,\u0027"},{"line_number":83,"context_line":"                        \u0027reserved:0\u0027,"},{"line_number":84,"context_line":"                help\u003d_(\"Key:value pairs to specify defaults used while \""},{"line_number":85,"context_line":"                       \"reporting resource provider inventories. See also: \""},{"line_number":86,"context_line":"                       \"https://developer.openstack.org/api-ref/placement/\""},{"line_number":87,"context_line":"                       \"#update-resource-provider-inventories\")),"},{"line_number":88,"context_line":"    cfg.BoolOpt(\u0027use_veth_interconnection\u0027, default\u003dFalse,"},{"line_number":89,"context_line":"                help\u003d_(\"Use veths instead of patch ports to interconnect the \""},{"line_number":90,"context_line":"                       \"integration bridge to physical networks. \""}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_06fd9139","line":87,"range":{"start_line":84,"start_character":24,"end_line":87,"end_character":61},"updated":"2018-08-06 13:03:55.000000000","message":"Just for clarity I would list here all the possible keys, perhaps with the allowed value type (int/float).","commit_id":"c3a711bcd25748b66e6f2df80c2b9a897fb58ef7"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"inactive contributor"},"change_message_id":"4953147ef22f79a2da606f21441091f4aceadd58","unresolved":false,"context_lines":[{"line_number":81,"context_line":"                        \u0027min_unit:1,\u0027"},{"line_number":82,"context_line":"                        \u0027step_size:1,\u0027"},{"line_number":83,"context_line":"                        \u0027reserved:0\u0027,"},{"line_number":84,"context_line":"                help\u003d_(\"Key:value pairs to specify defaults used while \""},{"line_number":85,"context_line":"                       \"reporting resource provider inventories. See also: \""},{"line_number":86,"context_line":"                       \"https://developer.openstack.org/api-ref/placement/\""},{"line_number":87,"context_line":"                       \"#update-resource-provider-inventories\")),"},{"line_number":88,"context_line":"    cfg.BoolOpt(\u0027use_veth_interconnection\u0027, default\u003dFalse,"},{"line_number":89,"context_line":"                help\u003d_(\"Use veths instead of patch ports to interconnect the \""},{"line_number":90,"context_line":"                       \"integration bridge to physical networks. \""}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_bc362cb4","line":87,"range":{"start_line":84,"start_character":24,"end_line":87,"end_character":61},"in_reply_to":"3f79a3b5_06fd9139","updated":"2018-08-06 14:02:17.000000000","message":"Will do that in the next patch set.","commit_id":"c3a711bcd25748b66e6f2df80c2b9a897fb58ef7"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"f3610dd36be2c76077dd76f5585a77b5ec459f07","unresolved":false,"context_lines":[{"line_number":86,"context_line":"                       \"Possible keys with their types: \""},{"line_number":87,"context_line":"                       \"allocation_ratio:float, \""},{"line_number":88,"context_line":"                       \"max_unit:int, min_unit:int, \""},{"line_number":89,"context_line":"                       \"reserved:int, reserved:int, \""},{"line_number":90,"context_line":"                       \"See also: \""},{"line_number":91,"context_line":"                       \"https://developer.openstack.org/api-ref/placement/\""},{"line_number":92,"context_line":"                       \"#update-resource-provider-inventories\")),"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f79a3b5_ea591afe","line":89,"range":{"start_line":89,"start_character":24,"end_line":89,"end_character":51},"updated":"2018-08-07 22:35:13.000000000","message":"They are duplicated?","commit_id":"632ff94b1f5d35a5d3edf030060deffa8089aa31"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"inactive contributor"},"change_message_id":"3da379110b1d3130bc9e1f8d4a8f4454fb0db3b5","unresolved":false,"context_lines":[{"line_number":86,"context_line":"                       \"Possible keys with their types: \""},{"line_number":87,"context_line":"                       \"allocation_ratio:float, \""},{"line_number":88,"context_line":"                       \"max_unit:int, min_unit:int, \""},{"line_number":89,"context_line":"                       \"reserved:int, reserved:int, \""},{"line_number":90,"context_line":"                       \"See also: \""},{"line_number":91,"context_line":"                       \"https://developer.openstack.org/api-ref/placement/\""},{"line_number":92,"context_line":"                       \"#update-resource-provider-inventories\")),"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f79a3b5_c32e7d42","line":89,"range":{"start_line":89,"start_character":24,"end_line":89,"end_character":51},"in_reply_to":"3f79a3b5_ea591afe","updated":"2018-08-08 08:31:41.000000000","message":"Good catch. And I made the same error in the patch on top of this too. Fix coming in the next patch set.","commit_id":"632ff94b1f5d35a5d3edf030060deffa8089aa31"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"f23b7767a8e57e50195451b193ea9b4c1bf068a8","unresolved":false,"context_lines":[{"line_number":76,"context_line":"                       \"placement nor report inventories against. An omitted \""},{"line_number":77,"context_line":"                       \"direction means we do not report an inventory for the \""},{"line_number":78,"context_line":"                       \"corresponding class.\")),"},{"line_number":79,"context_line":"    cfg.DictOpt(\u0027resource_provider_inventory_defaults\u0027,"},{"line_number":80,"context_line":"                default\u003d{\u0027allocation_ratio\u0027: 1.0,"},{"line_number":81,"context_line":"                         \u0027min_unit\u0027: 1,"},{"line_number":82,"context_line":"                         \u0027step_size\u0027: 1,"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_5528c2ec","line":79,"range":{"start_line":79,"start_character":17,"end_line":79,"end_character":53},"updated":"2018-09-27 13:34:56.000000000","message":"Could you please give an example of this config option?","commit_id":"094805b1e9053e4d841b8a588063c5ba278b6770"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"2a271d608128e6d948e6aa7735b33c65b6240a8c","unresolved":false,"context_lines":[{"line_number":76,"context_line":"                       \"placement nor report inventories against. An omitted \""},{"line_number":77,"context_line":"                       \"direction means we do not report an inventory for the \""},{"line_number":78,"context_line":"                       \"corresponding class.\")),"},{"line_number":79,"context_line":"    cfg.DictOpt(\u0027resource_provider_inventory_defaults\u0027,"},{"line_number":80,"context_line":"                default\u003d{\u0027allocation_ratio\u0027: 1.0,"},{"line_number":81,"context_line":"                         \u0027min_unit\u0027: 1,"},{"line_number":82,"context_line":"                         \u0027step_size\u0027: 1,"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_db32525d","line":79,"range":{"start_line":79,"start_character":17,"end_line":79,"end_character":53},"in_reply_to":"3f79a3b5_5528c2ec","updated":"2018-10-03 11:41:48.000000000","message":"As Manjeet wrote it should be something like:\nresource_provider_inventory_defaults \u003d allocation_ratio:1.0,min_unit:1,reserved:0,step_size:1\n\nDo you think that perhaps some more documentation is needed?\nIt is in the generated config sample, but I can add example to the admin guide as well.","commit_id":"094805b1e9053e4d841b8a588063c5ba278b6770"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"912d18f7fe911492336b00a7a18fbd87f4efdcbf","unresolved":false,"context_lines":[{"line_number":77,"context_line":"                       \"direction means we do not report an inventory for the \""},{"line_number":78,"context_line":"                       \"corresponding class.\")),"},{"line_number":79,"context_line":"    cfg.DictOpt(\u0027resource_provider_inventory_defaults\u0027,"},{"line_number":80,"context_line":"                default\u003d{\u0027allocation_ratio\u0027: 1.0,"},{"line_number":81,"context_line":"                         \u0027min_unit\u0027: 1,"},{"line_number":82,"context_line":"                         \u0027step_size\u0027: 1,"},{"line_number":83,"context_line":"                         \u0027reserved\u0027: 0},"},{"line_number":84,"context_line":"                help\u003d_(\"Key:value pairs to specify defaults used \""},{"line_number":85,"context_line":"                       \"while reporting resource provider inventories. \""},{"line_number":86,"context_line":"                       \"Possible keys with their types: \""}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_3f2f008a","line":83,"range":{"start_line":80,"start_character":25,"end_line":83,"end_character":40},"updated":"2018-09-28 20:34:09.000000000","message":"\"           \"allocation_ratio\": 1.0,\n            \"max_unit\": 35,\n            \"min_unit\": 1,\n            \"reserved\": 0,\n            \"step_size\": 1,\n            \"total\": 35 \"\n\nsnippet from documentation just a question why total and max_unit aren\u0027t added to default value ? or is that something decided at runtime ?\n\nNote: This comment doesn\u0027t contribute to -1 if given.","commit_id":"094805b1e9053e4d841b8a588063c5ba278b6770"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"2a271d608128e6d948e6aa7735b33c65b6240a8c","unresolved":false,"context_lines":[{"line_number":77,"context_line":"                       \"direction means we do not report an inventory for the \""},{"line_number":78,"context_line":"                       \"corresponding class.\")),"},{"line_number":79,"context_line":"    cfg.DictOpt(\u0027resource_provider_inventory_defaults\u0027,"},{"line_number":80,"context_line":"                default\u003d{\u0027allocation_ratio\u0027: 1.0,"},{"line_number":81,"context_line":"                         \u0027min_unit\u0027: 1,"},{"line_number":82,"context_line":"                         \u0027step_size\u0027: 1,"},{"line_number":83,"context_line":"                         \u0027reserved\u0027: 0},"},{"line_number":84,"context_line":"                help\u003d_(\"Key:value pairs to specify defaults used \""},{"line_number":85,"context_line":"                       \"while reporting resource provider inventories. \""},{"line_number":86,"context_line":"                       \"Possible keys with their types: \""}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_d911fa5d","line":83,"range":{"start_line":80,"start_character":25,"end_line":83,"end_character":40},"in_reply_to":"3f79a3b5_3f2f008a","updated":"2018-10-03 11:41:48.000000000","message":"For the max_unit the problem is that the default (even in placement but I am not sure) should be the total available, but here we don\u0027t know that.\n\nFor total: that comes from the resource_provider_bandwidths, and will be different rp inventory for every bridge and direction (egress, ingress), so the full inventory values will be counted runtime.","commit_id":"094805b1e9053e4d841b8a588063c5ba278b6770"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"db0df4e0e4ab6246132c8104e4fd57b7cf45e818","unresolved":false,"context_lines":[{"line_number":89,"context_line":"                       \"reserved:int, step_size:int, \""},{"line_number":90,"context_line":"                       \"See also: \""},{"line_number":91,"context_line":"                       \"https://developer.openstack.org/api-ref/placement/\""},{"line_number":92,"context_line":"                       \"#update-resource-provider-inventories\")),"},{"line_number":93,"context_line":"    cfg.BoolOpt(\u0027use_veth_interconnection\u0027, default\u003dFalse,"},{"line_number":94,"context_line":"                help\u003d_(\"Use veths instead of patch ports to interconnect the \""},{"line_number":95,"context_line":"                       \"integration bridge to physical networks. \""}],"source_content_type":"text/x-python","patch_set":20,"id":"3f79a3b5_ce245dc6","line":92,"updated":"2018-10-09 09:33:00.000000000","message":"those options are (almost) the same as for sriov agent (and I guess, for LB agent will be also the same). Maybe You could move it to neutron/conf/plugins/ml2/drivers/agent.py and reuse for each agent?","commit_id":"1a8dc852ebb7a6ce0de87c4066f40d9b3a278fc4"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"8077ee995466f104646a5fe0e7d4393ea4370258","unresolved":false,"context_lines":[{"line_number":89,"context_line":"                       \"reserved:int, step_size:int, \""},{"line_number":90,"context_line":"                       \"See also: \""},{"line_number":91,"context_line":"                       \"https://developer.openstack.org/api-ref/placement/\""},{"line_number":92,"context_line":"                       \"#update-resource-provider-inventories\")),"},{"line_number":93,"context_line":"    cfg.BoolOpt(\u0027use_veth_interconnection\u0027, default\u003dFalse,"},{"line_number":94,"context_line":"                help\u003d_(\"Use veths instead of patch ports to interconnect the \""},{"line_number":95,"context_line":"                       \"integration bridge to physical networks. \""}],"source_content_type":"text/x-python","patch_set":20,"id":"3f79a3b5_cc56882c","line":92,"in_reply_to":"3f79a3b5_2cb85ce6","updated":"2018-10-10 10:27:44.000000000","message":"I checked and I can\u0027t add resource_provider_inventory_defaults to [ovs] group if I move it to neutron/conf/plugins/ml2/drivers/agent.py","commit_id":"1a8dc852ebb7a6ce0de87c4066f40d9b3a278fc4"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"1e3822e24bbabca28c7c951063378c2aa577aef9","unresolved":false,"context_lines":[{"line_number":89,"context_line":"                       \"reserved:int, step_size:int, \""},{"line_number":90,"context_line":"                       \"See also: \""},{"line_number":91,"context_line":"                       \"https://developer.openstack.org/api-ref/placement/\""},{"line_number":92,"context_line":"                       \"#update-resource-provider-inventories\")),"},{"line_number":93,"context_line":"    cfg.BoolOpt(\u0027use_veth_interconnection\u0027, default\u003dFalse,"},{"line_number":94,"context_line":"                help\u003d_(\"Use veths instead of patch ports to interconnect the \""},{"line_number":95,"context_line":"                       \"integration bridge to physical networks. \""}],"source_content_type":"text/x-python","patch_set":20,"id":"3f79a3b5_2cb85ce6","line":92,"in_reply_to":"3f79a3b5_ce245dc6","updated":"2018-10-10 10:08:14.000000000","message":"Not exactly the same, so I would prefer to keep them separately.\nPerhaps the resource_provider_inventory_defaults should be in some common file.","commit_id":"1a8dc852ebb7a6ce0de87c4066f40d9b3a278fc4"}],"neutron/plugins/ml2/drivers/openvswitch/agent/ovs_neutron_agent.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"38fc05c30a6c2a62cb26faa427d4f36eda634071","unresolved":false,"context_lines":[{"line_number":187,"context_line":"            ovs_conf.resource_provider_bandwidths,"},{"line_number":188,"context_line":"            device_mappings\u003dself.bridge_mappings)"},{"line_number":189,"context_line":"        self.rp_inventory_defaults \u003d self._parse_rp_inventory_defaults("},{"line_number":190,"context_line":"            ovs_conf.resource_provider_inventory_defaults)"},{"line_number":191,"context_line":"        self.placement_state \u003d self._gen_placement_state("},{"line_number":192,"context_line":"            device_mappings\u003dself.bridge_mappings)"},{"line_number":193,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_107df91a","line":190,"updated":"2018-06-26 19:04:21.000000000","message":"It is possible that we need to do some compound config checks like:\n* min_unit is bigger than any of the egress or ingress values defined\n* step_size is bigger than any of the egress or ingress values","commit_id":"f3bc1c5c0e627ad2471494def6a407b1f0cbfc19"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"38fc05c30a6c2a62cb26faa427d4f36eda634071","unresolved":false,"context_lines":[{"line_number":343,"context_line":"                if egress_str \u003d\u003d \u0027\u0027:"},{"line_number":344,"context_line":"                    egress \u003d None  # not set in configuration"},{"line_number":345,"context_line":"                else:"},{"line_number":346,"context_line":"                    egress \u003d int(egress_str)"},{"line_number":347,"context_line":"            except ValueError:"},{"line_number":348,"context_line":"                raise ValueError(_("},{"line_number":349,"context_line":"                    \u0027Cannot parse resource_provider_bandwidths. \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_d072214a","line":346,"updated":"2018-06-26 19:04:21.000000000","message":"I think we need to ensure it is a non-negative int","commit_id":"f3bc1c5c0e627ad2471494def6a407b1f0cbfc19"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"inactive contributor"},"change_message_id":"c771a3e255387cf7b9b7ca99a926406a8f4b2aee","unresolved":false,"context_lines":[{"line_number":343,"context_line":"                if egress_str \u003d\u003d \u0027\u0027:"},{"line_number":344,"context_line":"                    egress \u003d None  # not set in configuration"},{"line_number":345,"context_line":"                else:"},{"line_number":346,"context_line":"                    egress \u003d int(egress_str)"},{"line_number":347,"context_line":"            except ValueError:"},{"line_number":348,"context_line":"                raise ValueError(_("},{"line_number":349,"context_line":"                    \u0027Cannot parse resource_provider_bandwidths. \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_4d750297","line":346,"in_reply_to":"5f7c97a3_d072214a","updated":"2018-07-06 14:29:47.000000000","message":"Done","commit_id":"f3bc1c5c0e627ad2471494def6a407b1f0cbfc19"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"38fc05c30a6c2a62cb26faa427d4f36eda634071","unresolved":false,"context_lines":[{"line_number":357,"context_line":"                raise ValueError(_("},{"line_number":358,"context_line":"                    \u0027Cannot parse resource_provider_bandwidths. \u0027"},{"line_number":359,"context_line":"                    \u0027Expected: integer ingress value, got: %s\u0027) % ingress_str)"},{"line_number":360,"context_line":"            rv[device] \u003d {"},{"line_number":361,"context_line":"                \u0027egress\u0027: egress,"},{"line_number":362,"context_line":"                \u0027ingress\u0027: ingress,"},{"line_number":363,"context_line":"            }"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_70b46df1","line":360,"updated":"2018-06-26 19:04:21.000000000","message":"If the config param contains the same device twice then this saves the combined result preferring the last value if it defined multiple times. I don\u0027t know if this is something we want to detect or not","commit_id":"f3bc1c5c0e627ad2471494def6a407b1f0cbfc19"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"inactive contributor"},"change_message_id":"c771a3e255387cf7b9b7ca99a926406a8f4b2aee","unresolved":false,"context_lines":[{"line_number":357,"context_line":"                raise ValueError(_("},{"line_number":358,"context_line":"                    \u0027Cannot parse resource_provider_bandwidths. \u0027"},{"line_number":359,"context_line":"                    \u0027Expected: integer ingress value, got: %s\u0027) % ingress_str)"},{"line_number":360,"context_line":"            rv[device] \u003d {"},{"line_number":361,"context_line":"                \u0027egress\u0027: egress,"},{"line_number":362,"context_line":"                \u0027ingress\u0027: ingress,"},{"line_number":363,"context_line":"            }"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_0d6b8ab8","line":360,"in_reply_to":"5f7c97a3_70b46df1","updated":"2018-07-06 14:29:47.000000000","message":"Done","commit_id":"f3bc1c5c0e627ad2471494def6a407b1f0cbfc19"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"38fc05c30a6c2a62cb26faa427d4f36eda634071","unresolved":false,"context_lines":[{"line_number":368,"context_line":"    def _parse_rp_inventory_defaults(self, inventory_defaults):"},{"line_number":369,"context_line":"        LOG.debug(\u0027XXX inventory_defaults in {!r}\u0027.format(inventory_defaults))"},{"line_number":370,"context_line":""},{"line_number":371,"context_line":"        # allocation_ratio is a float"},{"line_number":372,"context_line":"        try:"},{"line_number":373,"context_line":"            if \u0027allocation_ratio\u0027 in inventory_defaults:"},{"line_number":374,"context_line":"                inventory_defaults[\u0027allocation_ratio\u0027] \u003d float("}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_908ee924","line":371,"updated":"2018-06-26 19:04:21.000000000","message":"I think it should be a non-negative float","commit_id":"f3bc1c5c0e627ad2471494def6a407b1f0cbfc19"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"inactive contributor"},"change_message_id":"c771a3e255387cf7b9b7ca99a926406a8f4b2aee","unresolved":false,"context_lines":[{"line_number":368,"context_line":"    def _parse_rp_inventory_defaults(self, inventory_defaults):"},{"line_number":369,"context_line":"        LOG.debug(\u0027XXX inventory_defaults in {!r}\u0027.format(inventory_defaults))"},{"line_number":370,"context_line":""},{"line_number":371,"context_line":"        # allocation_ratio is a float"},{"line_number":372,"context_line":"        try:"},{"line_number":373,"context_line":"            if \u0027allocation_ratio\u0027 in inventory_defaults:"},{"line_number":374,"context_line":"                inventory_defaults[\u0027allocation_ratio\u0027] \u003d float("}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_8d8c7a80","line":371,"in_reply_to":"5f7c97a3_908ee924","updated":"2018-07-06 14:29:47.000000000","message":"Done","commit_id":"f3bc1c5c0e627ad2471494def6a407b1f0cbfc19"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"38fc05c30a6c2a62cb26faa427d4f36eda634071","unresolved":false,"context_lines":[{"line_number":379,"context_line":"                \u0027Expected: float, got: %s\u0027) % inventory_defaults["},{"line_number":380,"context_line":"                    \u0027allocation_ratio\u0027])"},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"        # the others are ints"},{"line_number":383,"context_line":"        for key in (\u0027min_unit\u0027, \u0027max_unit\u0027, \u0027reserved\u0027, \u0027step_size\u0027):"},{"line_number":384,"context_line":"            try:"},{"line_number":385,"context_line":"                if key in inventory_defaults:"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_d099c179","line":382,"updated":"2018-06-26 19:04:21.000000000","message":"Actually I think they need to be _non-negative_ integers.","commit_id":"f3bc1c5c0e627ad2471494def6a407b1f0cbfc19"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"inactive contributor"},"change_message_id":"c771a3e255387cf7b9b7ca99a926406a8f4b2aee","unresolved":false,"context_lines":[{"line_number":379,"context_line":"                \u0027Expected: float, got: %s\u0027) % inventory_defaults["},{"line_number":380,"context_line":"                    \u0027allocation_ratio\u0027])"},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"        # the others are ints"},{"line_number":383,"context_line":"        for key in (\u0027min_unit\u0027, \u0027max_unit\u0027, \u0027reserved\u0027, \u0027step_size\u0027):"},{"line_number":384,"context_line":"            try:"},{"line_number":385,"context_line":"                if key in inventory_defaults:"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_6deb1e11","line":382,"in_reply_to":"5f7c97a3_d099c179","updated":"2018-07-06 14:29:47.000000000","message":"Done","commit_id":"f3bc1c5c0e627ad2471494def6a407b1f0cbfc19"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"38fc05c30a6c2a62cb26faa427d4f36eda634071","unresolved":false,"context_lines":[{"line_number":380,"context_line":"                    \u0027allocation_ratio\u0027])"},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"        # the others are ints"},{"line_number":383,"context_line":"        for key in (\u0027min_unit\u0027, \u0027max_unit\u0027, \u0027reserved\u0027, \u0027step_size\u0027):"},{"line_number":384,"context_line":"            try:"},{"line_number":385,"context_line":"                if key in inventory_defaults:"},{"line_number":386,"context_line":"                    inventory_defaults[key] \u003d int(inventory_defaults[key])"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_90a029a7","line":383,"range":{"start_line":383,"start_character":33,"end_line":383,"end_character":41},"updated":"2018-06-26 19:04:21.000000000","message":"this is missing from the config definition","commit_id":"f3bc1c5c0e627ad2471494def6a407b1f0cbfc19"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"inactive contributor"},"change_message_id":"c771a3e255387cf7b9b7ca99a926406a8f4b2aee","unresolved":false,"context_lines":[{"line_number":380,"context_line":"                    \u0027allocation_ratio\u0027])"},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"        # the others are ints"},{"line_number":383,"context_line":"        for key in (\u0027min_unit\u0027, \u0027max_unit\u0027, \u0027reserved\u0027, \u0027step_size\u0027):"},{"line_number":384,"context_line":"            try:"},{"line_number":385,"context_line":"                if key in inventory_defaults:"},{"line_number":386,"context_line":"                    inventory_defaults[key] \u003d int(inventory_defaults[key])"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_0dc70a9a","line":383,"range":{"start_line":383,"start_character":33,"end_line":383,"end_character":41},"in_reply_to":"5f7c97a3_90a029a7","updated":"2018-07-06 14:29:47.000000000","message":"The user can use this in the config. It\u0027s only missing from the default value. And that was intentional. Because there\u0027s no good static default for max_unit.","commit_id":"f3bc1c5c0e627ad2471494def6a407b1f0cbfc19"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"38fc05c30a6c2a62cb26faa427d4f36eda634071","unresolved":false,"context_lines":[{"line_number":394,"context_line":""},{"line_number":395,"context_line":"        LOG.debug(\u0027XXX inventory_defaults out {!r}\u0027.format(inventory_defaults))"},{"line_number":396,"context_line":"        return inventory_defaults"},{"line_number":397,"context_line":""},{"line_number":398,"context_line":"    # NOTE(bence romsics): In _gen_placement_state_* methods adapt the format"},{"line_number":399,"context_line":"    # of records returned to create/update method signatures in"},{"line_number":400,"context_line":"    # neutron_lib.clients.placement.PlacementAPIClient. They are meant to"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_30cb554a","line":397,"updated":"2018-06-26 19:04:21.000000000","message":"I didn\u0027t read the rest as I know it will change substantially.","commit_id":"f3bc1c5c0e627ad2471494def6a407b1f0cbfc19"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"inactive contributor"},"change_message_id":"c771a3e255387cf7b9b7ca99a926406a8f4b2aee","unresolved":false,"context_lines":[{"line_number":394,"context_line":""},{"line_number":395,"context_line":"        LOG.debug(\u0027XXX inventory_defaults out {!r}\u0027.format(inventory_defaults))"},{"line_number":396,"context_line":"        return inventory_defaults"},{"line_number":397,"context_line":""},{"line_number":398,"context_line":"    # NOTE(bence romsics): In _gen_placement_state_* methods adapt the format"},{"line_number":399,"context_line":"    # of records returned to create/update method signatures in"},{"line_number":400,"context_line":"    # neutron_lib.clients.placement.PlacementAPIClient. They are meant to"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_2d3f6686","line":397,"in_reply_to":"5f7c97a3_30cb554a","updated":"2018-07-06 14:29:47.000000000","message":"Yep, it\u0027s going to.","commit_id":"f3bc1c5c0e627ad2471494def6a407b1f0cbfc19"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"ceb29dc50bfc6ccae930fbbd17362341865ec0f9","unresolved":false,"context_lines":[{"line_number":322,"context_line":"        except ValueError as e:"},{"line_number":323,"context_line":"            raise ValueError(_(\"Parsing bridge_mappings failed: %s.\") % e)"},{"line_number":324,"context_line":""},{"line_number":325,"context_line":"    def _validate_rp_bandwidths(self):"},{"line_number":326,"context_line":"        for dev_name in self.rp_bandwidths.keys():"},{"line_number":327,"context_line":"            if dev_name not in self.bridge_mappings.values():"},{"line_number":328,"context_line":"                raise ValueError(_("}],"source_content_type":"text/x-python","patch_set":11,"id":"3f79a3b5_dfee57ec","line":325,"range":{"start_line":325,"start_character":9,"end_line":325,"end_character":31},"updated":"2018-08-30 18:08:56.000000000","message":"_parse_bandwidths is doing validations for bandwidths,\nthis is just validating bridge devices, might wanna rename it properly, _validate_rp_bandwidth_bridges/devices, for a moment I thought this was doing validation for entire param value.","commit_id":"74cc7a93e4e3bd575d95d1d738f29f4d9566ea41"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"inactive contributor"},"change_message_id":"fbbad826ad09eee75f899a8466b74b3678f89b3f","unresolved":false,"context_lines":[{"line_number":322,"context_line":"        except ValueError as e:"},{"line_number":323,"context_line":"            raise ValueError(_(\"Parsing bridge_mappings failed: %s.\") % e)"},{"line_number":324,"context_line":""},{"line_number":325,"context_line":"    def _validate_rp_bandwidths(self):"},{"line_number":326,"context_line":"        for dev_name in self.rp_bandwidths.keys():"},{"line_number":327,"context_line":"            if dev_name not in self.bridge_mappings.values():"},{"line_number":328,"context_line":"                raise ValueError(_("}],"source_content_type":"text/x-python","patch_set":11,"id":"3f79a3b5_8e9be862","line":325,"range":{"start_line":325,"start_character":9,"end_line":325,"end_character":31},"in_reply_to":"3f79a3b5_dfee57ec","updated":"2018-09-26 12:08:40.000000000","message":"Done","commit_id":"74cc7a93e4e3bd575d95d1d738f29f4d9566ea41"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"b2bf7e4168cdb2ef81d2099608e8b71a798bd96a","unresolved":false,"context_lines":[{"line_number":277,"context_line":"            \u0027host\u0027: host,"},{"line_number":278,"context_line":"            \u0027topic\u0027: n_const.L2_AGENT_TOPIC,"},{"line_number":279,"context_line":"            \u0027configurations\u0027: {\u0027bridge_mappings\u0027: self.bridge_mappings,"},{"line_number":280,"context_line":"                               \u0027rp_bandwidths\u0027: self.rp_bandwidths,"},{"line_number":281,"context_line":"                               \u0027rp_inventory_defaults\u0027:"},{"line_number":282,"context_line":"                               self.rp_inventory_defaults,"},{"line_number":283,"context_line":"                               \u0027tunnel_types\u0027: self.tunnel_types,"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_dd87db5a","line":280,"updated":"2018-10-01 08:19:37.000000000","message":"I agree, as this is something visible for users, let\u0027s make it clear and not use shortcuts :)","commit_id":"094805b1e9053e4d841b8a588063c5ba278b6770"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"f23b7767a8e57e50195451b193ea9b4c1bf068a8","unresolved":false,"context_lines":[{"line_number":277,"context_line":"            \u0027host\u0027: host,"},{"line_number":278,"context_line":"            \u0027topic\u0027: n_const.L2_AGENT_TOPIC,"},{"line_number":279,"context_line":"            \u0027configurations\u0027: {\u0027bridge_mappings\u0027: self.bridge_mappings,"},{"line_number":280,"context_line":"                               \u0027rp_bandwidths\u0027: self.rp_bandwidths,"},{"line_number":281,"context_line":"                               \u0027rp_inventory_defaults\u0027:"},{"line_number":282,"context_line":"                               self.rp_inventory_defaults,"},{"line_number":283,"context_line":"                               \u0027tunnel_types\u0027: self.tunnel_types,"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_75c7fe12","line":280,"range":{"start_line":280,"start_character":32,"end_line":280,"end_character":34},"updated":"2018-09-27 13:34:56.000000000","message":"IMO, it\u0027s better to leave the full context here to make consistent with the config option.","commit_id":"094805b1e9053e4d841b8a588063c5ba278b6770"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"2a271d608128e6d948e6aa7735b33c65b6240a8c","unresolved":false,"context_lines":[{"line_number":277,"context_line":"            \u0027host\u0027: host,"},{"line_number":278,"context_line":"            \u0027topic\u0027: n_const.L2_AGENT_TOPIC,"},{"line_number":279,"context_line":"            \u0027configurations\u0027: {\u0027bridge_mappings\u0027: self.bridge_mappings,"},{"line_number":280,"context_line":"                               \u0027rp_bandwidths\u0027: self.rp_bandwidths,"},{"line_number":281,"context_line":"                               \u0027rp_inventory_defaults\u0027:"},{"line_number":282,"context_line":"                               self.rp_inventory_defaults,"},{"line_number":283,"context_line":"                               \u0027tunnel_types\u0027: self.tunnel_types,"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_b43523f8","line":280,"range":{"start_line":280,"start_character":32,"end_line":280,"end_character":34},"in_reply_to":"3f79a3b5_75c7fe12","updated":"2018-10-03 11:41:48.000000000","message":"Done","commit_id":"094805b1e9053e4d841b8a588063c5ba278b6770"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"a1cc1f4e2a8169ce69b2322447c2f3c490c326eb","unresolved":false,"context_lines":[{"line_number":277,"context_line":"            \u0027host\u0027: host,"},{"line_number":278,"context_line":"            \u0027topic\u0027: n_const.L2_AGENT_TOPIC,"},{"line_number":279,"context_line":"            \u0027configurations\u0027: {\u0027bridge_mappings\u0027: self.bridge_mappings,"},{"line_number":280,"context_line":"                               \u0027rp_bandwidths\u0027: self.rp_bandwidths,"},{"line_number":281,"context_line":"                               \u0027rp_inventory_defaults\u0027:"},{"line_number":282,"context_line":"                               self.rp_inventory_defaults,"},{"line_number":283,"context_line":"                               \u0027tunnel_types\u0027: self.tunnel_types,"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_9b6681ee","line":280,"range":{"start_line":280,"start_character":32,"end_line":280,"end_character":34},"in_reply_to":"3f79a3b5_75c7fe12","updated":"2018-09-27 21:37:40.000000000","message":"Yes, and I somehow agree with @Liu Yulong that \u0027resource_provider_bandwidths\u0027 will look better from the API users point of view. It is not a big ideal though. I can live without it.","commit_id":"094805b1e9053e4d841b8a588063c5ba278b6770"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"f23b7767a8e57e50195451b193ea9b4c1bf068a8","unresolved":false,"context_lines":[{"line_number":278,"context_line":"            \u0027topic\u0027: n_const.L2_AGENT_TOPIC,"},{"line_number":279,"context_line":"            \u0027configurations\u0027: {\u0027bridge_mappings\u0027: self.bridge_mappings,"},{"line_number":280,"context_line":"                               \u0027rp_bandwidths\u0027: self.rp_bandwidths,"},{"line_number":281,"context_line":"                               \u0027rp_inventory_defaults\u0027:"},{"line_number":282,"context_line":"                               self.rp_inventory_defaults,"},{"line_number":283,"context_line":"                               \u0027tunnel_types\u0027: self.tunnel_types,"},{"line_number":284,"context_line":"                               \u0027tunneling_ip\u0027: self.local_ip,"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_d5d7f2bf","line":281,"range":{"start_line":281,"start_character":32,"end_line":281,"end_character":34},"updated":"2018-09-27 13:34:56.000000000","message":"ditto","commit_id":"094805b1e9053e4d841b8a588063c5ba278b6770"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"2a271d608128e6d948e6aa7735b33c65b6240a8c","unresolved":false,"context_lines":[{"line_number":278,"context_line":"            \u0027topic\u0027: n_const.L2_AGENT_TOPIC,"},{"line_number":279,"context_line":"            \u0027configurations\u0027: {\u0027bridge_mappings\u0027: self.bridge_mappings,"},{"line_number":280,"context_line":"                               \u0027rp_bandwidths\u0027: self.rp_bandwidths,"},{"line_number":281,"context_line":"                               \u0027rp_inventory_defaults\u0027:"},{"line_number":282,"context_line":"                               self.rp_inventory_defaults,"},{"line_number":283,"context_line":"                               \u0027tunnel_types\u0027: self.tunnel_types,"},{"line_number":284,"context_line":"                               \u0027tunneling_ip\u0027: self.local_ip,"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_f42f1ba4","line":281,"range":{"start_line":281,"start_character":32,"end_line":281,"end_character":34},"in_reply_to":"3f79a3b5_d5d7f2bf","updated":"2018-10-03 11:41:48.000000000","message":"Done","commit_id":"094805b1e9053e4d841b8a588063c5ba278b6770"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"446c7265d807d4932546ecec0ac5ce89ab6d71d2","unresolved":false,"context_lines":[{"line_number":324,"context_line":"            raise ValueError(_(\"Parsing bridge_mappings failed: %s.\") % e)"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"    def _validate_rp_bandwidth_bridges(self):"},{"line_number":327,"context_line":"        for dev_name in self.rp_bandwidths.keys():"},{"line_number":328,"context_line":"            if dev_name not in self.bridge_mappings.values():"},{"line_number":329,"context_line":"                raise ValueError(_("},{"line_number":330,"context_line":"                    \"Invalid resource_provider_bandwidths: \""}],"source_content_type":"text/x-python","patch_set":16,"id":"3f79a3b5_d9649323","line":327,"range":{"start_line":327,"start_character":42,"end_line":327,"end_character":49},"updated":"2018-10-03 15:33:37.000000000","message":"nit: not needed","commit_id":"74c7d367d5840641e285901cdc8f80ff37bf4670"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"ba0283a5425ff2b52feec64510cd3ab5210ab81e","unresolved":false,"context_lines":[{"line_number":324,"context_line":"            raise ValueError(_(\"Parsing bridge_mappings failed: %s.\") % e)"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"    def _validate_rp_bandwidth_bridges(self):"},{"line_number":327,"context_line":"        for dev_name in self.rp_bandwidths.keys():"},{"line_number":328,"context_line":"            if dev_name not in self.bridge_mappings.values():"},{"line_number":329,"context_line":"                raise ValueError(_("},{"line_number":330,"context_line":"                    \"Invalid resource_provider_bandwidths: \""}],"source_content_type":"text/x-python","patch_set":16,"id":"3f79a3b5_bdb40a1e","line":327,"range":{"start_line":327,"start_character":42,"end_line":327,"end_character":49},"in_reply_to":"3f79a3b5_d9649323","updated":"2018-10-04 12:49:59.000000000","message":"I moved the validation to common/utils (see: https://review.openstack.org/#/c/577223/17/neutron/common/utils.py@797)\nAnd removed keys()","commit_id":"74c7d367d5840641e285901cdc8f80ff37bf4670"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"dce1a51512622aa7475cd9e94c890ad8d6217c7d","unresolved":false,"context_lines":[{"line_number":192,"context_line":"        self.rp_bandwidths \u003d place_utils.parse_rp_bandwidths("},{"line_number":193,"context_line":"            ovs_conf.resource_provider_bandwidths)"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"        br_set \u003d set(itervalues(self.bridge_mappings))"},{"line_number":196,"context_line":"        n_utils.validate_rp_bandwidth(self.rp_bandwidths,"},{"line_number":197,"context_line":"                                      br_set)"},{"line_number":198,"context_line":"        self.rp_inventory_defaults \u003d place_utils.parse_rp_inventory_defaults("}],"source_content_type":"text/x-python","patch_set":17,"id":"3f79a3b5_03059815","line":195,"range":{"start_line":195,"start_character":21,"end_line":195,"end_character":31},"updated":"2018-10-04 19:07:54.000000000","message":"A code style issue. The convention is using \u003cmodule\u003e.\u003cmethod\u003e so here should be six.itervalues(...)","commit_id":"2181d04cf90e0b8535b9a312e31d9c79f5a08792"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"722368f5859a58f9df19aaa31841b550552f1283","unresolved":false,"context_lines":[{"line_number":192,"context_line":"        self.rp_bandwidths \u003d place_utils.parse_rp_bandwidths("},{"line_number":193,"context_line":"            ovs_conf.resource_provider_bandwidths)"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"        br_set \u003d set(itervalues(self.bridge_mappings))"},{"line_number":196,"context_line":"        n_utils.validate_rp_bandwidth(self.rp_bandwidths,"},{"line_number":197,"context_line":"                                      br_set)"},{"line_number":198,"context_line":"        self.rp_inventory_defaults \u003d place_utils.parse_rp_inventory_defaults("}],"source_content_type":"text/x-python","patch_set":17,"id":"3f79a3b5_e4c71465","line":195,"range":{"start_line":195,"start_character":21,"end_line":195,"end_character":31},"in_reply_to":"3f79a3b5_03059815","updated":"2018-10-08 09:31:14.000000000","message":"Thanks, sorry I didn\u0027t notice this comment.\nActually I followed the way six.moves was imported, but your comment is valid.","commit_id":"2181d04cf90e0b8535b9a312e31d9c79f5a08792"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"db0df4e0e4ab6246132c8104e4fd57b7cf45e818","unresolved":false,"context_lines":[{"line_number":280,"context_line":"            \u0027host\u0027: host,"},{"line_number":281,"context_line":"            \u0027topic\u0027: n_const.L2_AGENT_TOPIC,"},{"line_number":282,"context_line":"            \u0027configurations\u0027: {\u0027bridge_mappings\u0027: self.bridge_mappings,"},{"line_number":283,"context_line":"                               \u0027resource_provider_bandwidths\u0027:"},{"line_number":284,"context_line":"                                   self.rp_bandwidths,"},{"line_number":285,"context_line":"                               \u0027resource_provider_inventory_defaults\u0027:"},{"line_number":286,"context_line":"                                   self.rp_inventory_defaults,"}],"source_content_type":"text/x-python","patch_set":20,"id":"3f79a3b5_914be45c","line":283,"range":{"start_line":283,"start_character":31,"end_line":283,"end_character":61},"updated":"2018-10-09 09:33:00.000000000","message":"shouldn\u0027t this key be defined somewhere as constant as it is used in many places?","commit_id":"1a8dc852ebb7a6ce0de87c4066f40d9b3a278fc4"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"1e3822e24bbabca28c7c951063378c2aa577aef9","unresolved":false,"context_lines":[{"line_number":280,"context_line":"            \u0027host\u0027: host,"},{"line_number":281,"context_line":"            \u0027topic\u0027: n_const.L2_AGENT_TOPIC,"},{"line_number":282,"context_line":"            \u0027configurations\u0027: {\u0027bridge_mappings\u0027: self.bridge_mappings,"},{"line_number":283,"context_line":"                               \u0027resource_provider_bandwidths\u0027:"},{"line_number":284,"context_line":"                                   self.rp_bandwidths,"},{"line_number":285,"context_line":"                               \u0027resource_provider_inventory_defaults\u0027:"},{"line_number":286,"context_line":"                                   self.rp_inventory_defaults,"}],"source_content_type":"text/x-python","patch_set":20,"id":"3f79a3b5_6c73b44f","line":283,"range":{"start_line":283,"start_character":31,"end_line":283,"end_character":61},"in_reply_to":"3f79a3b5_914be45c","updated":"2018-10-10 10:08:14.000000000","message":"Done","commit_id":"1a8dc852ebb7a6ce0de87c4066f40d9b3a278fc4"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"db0df4e0e4ab6246132c8104e4fd57b7cf45e818","unresolved":false,"context_lines":[{"line_number":282,"context_line":"            \u0027configurations\u0027: {\u0027bridge_mappings\u0027: self.bridge_mappings,"},{"line_number":283,"context_line":"                               \u0027resource_provider_bandwidths\u0027:"},{"line_number":284,"context_line":"                                   self.rp_bandwidths,"},{"line_number":285,"context_line":"                               \u0027resource_provider_inventory_defaults\u0027:"},{"line_number":286,"context_line":"                                   self.rp_inventory_defaults,"},{"line_number":287,"context_line":"                               \u0027integration_bridge\u0027:"},{"line_number":288,"context_line":"                               ovs_conf.integration_bridge,"}],"source_content_type":"text/x-python","patch_set":20,"id":"3f79a3b5_31521014","line":285,"range":{"start_line":285,"start_character":31,"end_line":285,"end_character":69},"updated":"2018-10-09 09:33:00.000000000","message":"same for this one","commit_id":"1a8dc852ebb7a6ce0de87c4066f40d9b3a278fc4"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"1e3822e24bbabca28c7c951063378c2aa577aef9","unresolved":false,"context_lines":[{"line_number":282,"context_line":"            \u0027configurations\u0027: {\u0027bridge_mappings\u0027: self.bridge_mappings,"},{"line_number":283,"context_line":"                               \u0027resource_provider_bandwidths\u0027:"},{"line_number":284,"context_line":"                                   self.rp_bandwidths,"},{"line_number":285,"context_line":"                               \u0027resource_provider_inventory_defaults\u0027:"},{"line_number":286,"context_line":"                                   self.rp_inventory_defaults,"},{"line_number":287,"context_line":"                               \u0027integration_bridge\u0027:"},{"line_number":288,"context_line":"                               ovs_conf.integration_bridge,"}],"source_content_type":"text/x-python","patch_set":20,"id":"3f79a3b5_2c8b7c17","line":285,"range":{"start_line":285,"start_character":31,"end_line":285,"end_character":69},"in_reply_to":"3f79a3b5_31521014","updated":"2018-10-10 10:08:14.000000000","message":"Done","commit_id":"1a8dc852ebb7a6ce0de87c4066f40d9b3a278fc4"}],"neutron/tests/unit/common/test_utils.py":[{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"b04cfd254e1ec4ab0156ccbcb8fae6825949c08d","unresolved":false,"context_lines":[{"line_number":552,"context_line":"        self.assertRaises(ValueError, utils.validate_rp_bandwidth,"},{"line_number":553,"context_line":"                          not_valid_rp_bandwidth, self.device_name_set)"},{"line_number":554,"context_line":""},{"line_number":555,"context_line":"    def test_validate_rp_bandwidth_with_bridge_mappings(self):"},{"line_number":556,"context_line":"        valid_rp_bandwidths \u003d {\u0027br0\u0027: {\u0027egress\u0027: 10000, \u0027ingress\u0027: 10000}}"},{"line_number":557,"context_line":"        not_valid_rp_bandwidth \u003d {\u0027br1\u0027: {\u0027egress\u0027: 10000, \u0027ingress\u0027: 10000}}"},{"line_number":558,"context_line":"        try:"},{"line_number":559,"context_line":"            utils.validate_rp_bandwidth(valid_rp_bandwidths,"},{"line_number":560,"context_line":"                                        self.bridge_mapping.values())"},{"line_number":561,"context_line":"        except ValueError:"},{"line_number":562,"context_line":"            self.fail(\"validate_rp_bandwidth failed to validate %s\" %"},{"line_number":563,"context_line":"                      self.valid_rp_bandwidths)"},{"line_number":564,"context_line":""},{"line_number":565,"context_line":"        self.assertRaises(ValueError, utils.validate_rp_bandwidth,"},{"line_number":566,"context_line":"                          not_valid_rp_bandwidth, self.bridge_mapping.values())"}],"source_content_type":"text/x-python","patch_set":17,"id":"3f79a3b5_7d198b85","line":566,"range":{"start_line":555,"start_character":4,"end_line":566,"end_character":79},"updated":"2018-10-04 17:35:20.000000000","message":"this is not testing anything different just repeating the testing of code already tested in previous test. IMO this can be removed.","commit_id":"2181d04cf90e0b8535b9a312e31d9c79f5a08792"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"722368f5859a58f9df19aaa31841b550552f1283","unresolved":false,"context_lines":[{"line_number":552,"context_line":"        self.assertRaises(ValueError, utils.validate_rp_bandwidth,"},{"line_number":553,"context_line":"                          not_valid_rp_bandwidth, self.device_name_set)"},{"line_number":554,"context_line":""},{"line_number":555,"context_line":"    def test_validate_rp_bandwidth_with_bridge_mappings(self):"},{"line_number":556,"context_line":"        valid_rp_bandwidths \u003d {\u0027br0\u0027: {\u0027egress\u0027: 10000, \u0027ingress\u0027: 10000}}"},{"line_number":557,"context_line":"        not_valid_rp_bandwidth \u003d {\u0027br1\u0027: {\u0027egress\u0027: 10000, \u0027ingress\u0027: 10000}}"},{"line_number":558,"context_line":"        try:"},{"line_number":559,"context_line":"            utils.validate_rp_bandwidth(valid_rp_bandwidths,"},{"line_number":560,"context_line":"                                        self.bridge_mapping.values())"},{"line_number":561,"context_line":"        except ValueError:"},{"line_number":562,"context_line":"            self.fail(\"validate_rp_bandwidth failed to validate %s\" %"},{"line_number":563,"context_line":"                      self.valid_rp_bandwidths)"},{"line_number":564,"context_line":""},{"line_number":565,"context_line":"        self.assertRaises(ValueError, utils.validate_rp_bandwidth,"},{"line_number":566,"context_line":"                          not_valid_rp_bandwidth, self.bridge_mapping.values())"}],"source_content_type":"text/x-python","patch_set":17,"id":"3f79a3b5_448a8813","line":566,"range":{"start_line":555,"start_character":4,"end_line":566,"end_character":79},"in_reply_to":"3f79a3b5_7d198b85","updated":"2018-10-08 09:31:14.000000000","message":"Sorry, I didn\u0027t noticed your comment, I removed this test, as really there is no extra value in it.","commit_id":"2181d04cf90e0b8535b9a312e31d9c79f5a08792"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"a4b14c422bdc86841b35778460437d28944869ed","unresolved":false,"context_lines":[{"line_number":552,"context_line":"        self.assertRaises(ValueError, utils.validate_rp_bandwidth,"},{"line_number":553,"context_line":"                          not_valid_rp_bandwidth, self.device_name_set)"},{"line_number":554,"context_line":""},{"line_number":555,"context_line":"    def test_validate_rp_bandwidth_with_bridge_mappings(self):"},{"line_number":556,"context_line":"        valid_rp_bandwidths \u003d {\u0027br0\u0027: {\u0027egress\u0027: 10000, \u0027ingress\u0027: 10000}}"},{"line_number":557,"context_line":"        not_valid_rp_bandwidth \u003d {\u0027br1\u0027: {\u0027egress\u0027: 10000, \u0027ingress\u0027: 10000}}"},{"line_number":558,"context_line":"        try:"},{"line_number":559,"context_line":"            utils.validate_rp_bandwidth(valid_rp_bandwidths,"},{"line_number":560,"context_line":"                                        self.bridge_mapping.values())"},{"line_number":561,"context_line":"        except ValueError:"},{"line_number":562,"context_line":"            self.fail(\"validate_rp_bandwidth failed to validate %s\" %"},{"line_number":563,"context_line":"                      self.valid_rp_bandwidths)"},{"line_number":564,"context_line":""},{"line_number":565,"context_line":"        self.assertRaises(ValueError, utils.validate_rp_bandwidth,"},{"line_number":566,"context_line":"                          not_valid_rp_bandwidth, self.bridge_mapping.values())"}],"source_content_type":"text/x-python","patch_set":18,"id":"3f79a3b5_578fb175","line":566,"range":{"start_line":555,"start_character":4,"end_line":566,"end_character":79},"updated":"2018-10-05 17:26:40.000000000","message":"as I said in previous PS, this is not adding any coverage to tests, testing the same code tested in previous test, however if you want to keep it define a helper like to reduce repeated code.\n\ndef _test_validate_rp_bandwidths(self, valid_rpb,  \n                                 invalid_rpb, device_set):\n    try:\n       utils.validate_rp_bandwidth(valid_rp_bandwidths,\n                                   device_set)\n    except ValueError:\n       self.fail(\"valid_rpb failed to validate %s\" %\n                  valid_rpb)\n\n        self.assertRaises(ValueError,   \n                          utils.validate_rp_bandwidth,\n                          invalid_rpb,   \n                          device_set)\n\ncall it out in both test cases with appropriate device_set\n\nagain this is suggestion to remove repeated code, whatever is there already is fine too.\n\nNote: this comment doesn\u0027t contribute to -1","commit_id":"d447b4b6c502b79b479839e7573218cb95224692"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"722368f5859a58f9df19aaa31841b550552f1283","unresolved":false,"context_lines":[{"line_number":552,"context_line":"        self.assertRaises(ValueError, utils.validate_rp_bandwidth,"},{"line_number":553,"context_line":"                          not_valid_rp_bandwidth, self.device_name_set)"},{"line_number":554,"context_line":""},{"line_number":555,"context_line":"    def test_validate_rp_bandwidth_with_bridge_mappings(self):"},{"line_number":556,"context_line":"        valid_rp_bandwidths \u003d {\u0027br0\u0027: {\u0027egress\u0027: 10000, \u0027ingress\u0027: 10000}}"},{"line_number":557,"context_line":"        not_valid_rp_bandwidth \u003d {\u0027br1\u0027: {\u0027egress\u0027: 10000, \u0027ingress\u0027: 10000}}"},{"line_number":558,"context_line":"        try:"},{"line_number":559,"context_line":"            utils.validate_rp_bandwidth(valid_rp_bandwidths,"},{"line_number":560,"context_line":"                                        self.bridge_mapping.values())"},{"line_number":561,"context_line":"        except ValueError:"},{"line_number":562,"context_line":"            self.fail(\"validate_rp_bandwidth failed to validate %s\" %"},{"line_number":563,"context_line":"                      self.valid_rp_bandwidths)"},{"line_number":564,"context_line":""},{"line_number":565,"context_line":"        self.assertRaises(ValueError, utils.validate_rp_bandwidth,"},{"line_number":566,"context_line":"                          not_valid_rp_bandwidth, self.bridge_mapping.values())"}],"source_content_type":"text/x-python","patch_set":18,"id":"3f79a3b5_04ad7083","line":566,"range":{"start_line":555,"start_character":4,"end_line":566,"end_character":79},"in_reply_to":"3f79a3b5_578fb175","updated":"2018-10-08 09:31:14.000000000","message":"Thanks, your previous comment was valid, I removed this test.","commit_id":"d447b4b6c502b79b479839e7573218cb95224692"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"f949363fbd07351169daadecbd865eafda3b1dd0","unresolved":false,"context_lines":[{"line_number":540,"context_line":"        }"},{"line_number":541,"context_line":""},{"line_number":542,"context_line":"    def test_validate_rp_bandwidth_with_device_names(self):"},{"line_number":543,"context_line":"        valid_rp_bandwidths \u003d {\u0027ens7\u0027: {\u0027egress\u0027: 10000, \u0027ingress\u0027: 10000}}"},{"line_number":544,"context_line":"        not_valid_rp_bandwidth \u003d {\u0027ens8\u0027: {\u0027egress\u0027: 10000, \u0027ingress\u0027: 10000}}"},{"line_number":545,"context_line":"        try:"},{"line_number":546,"context_line":"            utils.validate_rp_bandwidth(valid_rp_bandwidths,"}],"source_content_type":"text/x-python","patch_set":20,"id":"3f79a3b5_fc6321aa","line":543,"range":{"start_line":543,"start_character":8,"end_line":543,"end_character":75},"updated":"2018-10-08 16:54:36.000000000","message":"this can be removed and self.valid_rp_bandwidths can be used in this test","commit_id":"1a8dc852ebb7a6ce0de87c4066f40d9b3a278fc4"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"db0df4e0e4ab6246132c8104e4fd57b7cf45e818","unresolved":false,"context_lines":[{"line_number":540,"context_line":"        }"},{"line_number":541,"context_line":""},{"line_number":542,"context_line":"    def test_validate_rp_bandwidth_with_device_names(self):"},{"line_number":543,"context_line":"        valid_rp_bandwidths \u003d {\u0027ens7\u0027: {\u0027egress\u0027: 10000, \u0027ingress\u0027: 10000}}"},{"line_number":544,"context_line":"        not_valid_rp_bandwidth \u003d {\u0027ens8\u0027: {\u0027egress\u0027: 10000, \u0027ingress\u0027: 10000}}"},{"line_number":545,"context_line":"        try:"},{"line_number":546,"context_line":"            utils.validate_rp_bandwidth(valid_rp_bandwidths,"}],"source_content_type":"text/x-python","patch_set":20,"id":"3f79a3b5_cefd3d0a","line":543,"range":{"start_line":543,"start_character":8,"end_line":543,"end_character":75},"in_reply_to":"3f79a3b5_fc6321aa","updated":"2018-10-09 09:33:00.000000000","message":"+1","commit_id":"1a8dc852ebb7a6ce0de87c4066f40d9b3a278fc4"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"1e3822e24bbabca28c7c951063378c2aa577aef9","unresolved":false,"context_lines":[{"line_number":540,"context_line":"        }"},{"line_number":541,"context_line":""},{"line_number":542,"context_line":"    def test_validate_rp_bandwidth_with_device_names(self):"},{"line_number":543,"context_line":"        valid_rp_bandwidths \u003d {\u0027ens7\u0027: {\u0027egress\u0027: 10000, \u0027ingress\u0027: 10000}}"},{"line_number":544,"context_line":"        not_valid_rp_bandwidth \u003d {\u0027ens8\u0027: {\u0027egress\u0027: 10000, \u0027ingress\u0027: 10000}}"},{"line_number":545,"context_line":"        try:"},{"line_number":546,"context_line":"            utils.validate_rp_bandwidth(valid_rp_bandwidths,"}],"source_content_type":"text/x-python","patch_set":20,"id":"3f79a3b5_ec94a438","line":543,"range":{"start_line":543,"start_character":8,"end_line":543,"end_character":75},"in_reply_to":"3f79a3b5_fc6321aa","updated":"2018-10-10 10:08:14.000000000","message":"Thanks, removed.","commit_id":"1a8dc852ebb7a6ce0de87c4066f40d9b3a278fc4"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"db0df4e0e4ab6246132c8104e4fd57b7cf45e818","unresolved":false,"context_lines":[{"line_number":541,"context_line":""},{"line_number":542,"context_line":"    def test_validate_rp_bandwidth_with_device_names(self):"},{"line_number":543,"context_line":"        valid_rp_bandwidths \u003d {\u0027ens7\u0027: {\u0027egress\u0027: 10000, \u0027ingress\u0027: 10000}}"},{"line_number":544,"context_line":"        not_valid_rp_bandwidth \u003d {\u0027ens8\u0027: {\u0027egress\u0027: 10000, \u0027ingress\u0027: 10000}}"},{"line_number":545,"context_line":"        try:"},{"line_number":546,"context_line":"            utils.validate_rp_bandwidth(valid_rp_bandwidths,"},{"line_number":547,"context_line":"                                        self.device_name_set)"}],"source_content_type":"text/x-python","patch_set":20,"id":"3f79a3b5_51078c18","line":544,"range":{"start_line":544,"start_character":8,"end_line":544,"end_character":30},"updated":"2018-10-09 09:33:00.000000000","message":"self.not_valid_rp_bandwidth maybe?","commit_id":"1a8dc852ebb7a6ce0de87c4066f40d9b3a278fc4"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"1e3822e24bbabca28c7c951063378c2aa577aef9","unresolved":false,"context_lines":[{"line_number":541,"context_line":""},{"line_number":542,"context_line":"    def test_validate_rp_bandwidth_with_device_names(self):"},{"line_number":543,"context_line":"        valid_rp_bandwidths \u003d {\u0027ens7\u0027: {\u0027egress\u0027: 10000, \u0027ingress\u0027: 10000}}"},{"line_number":544,"context_line":"        not_valid_rp_bandwidth \u003d {\u0027ens8\u0027: {\u0027egress\u0027: 10000, \u0027ingress\u0027: 10000}}"},{"line_number":545,"context_line":"        try:"},{"line_number":546,"context_line":"            utils.validate_rp_bandwidth(valid_rp_bandwidths,"},{"line_number":547,"context_line":"                                        self.device_name_set)"}],"source_content_type":"text/x-python","patch_set":20,"id":"3f79a3b5_8ca3b09b","line":544,"range":{"start_line":544,"start_character":8,"end_line":544,"end_character":30},"in_reply_to":"3f79a3b5_51078c18","updated":"2018-10-10 10:08:14.000000000","message":"Done","commit_id":"1a8dc852ebb7a6ce0de87c4066f40d9b3a278fc4"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"f949363fbd07351169daadecbd865eafda3b1dd0","unresolved":false,"context_lines":[{"line_number":543,"context_line":"        valid_rp_bandwidths \u003d {\u0027ens7\u0027: {\u0027egress\u0027: 10000, \u0027ingress\u0027: 10000}}"},{"line_number":544,"context_line":"        not_valid_rp_bandwidth \u003d {\u0027ens8\u0027: {\u0027egress\u0027: 10000, \u0027ingress\u0027: 10000}}"},{"line_number":545,"context_line":"        try:"},{"line_number":546,"context_line":"            utils.validate_rp_bandwidth(valid_rp_bandwidths,"},{"line_number":547,"context_line":"                                        self.device_name_set)"},{"line_number":548,"context_line":"        except ValueError:"},{"line_number":549,"context_line":"            self.fail(\"validate_rp_bandwidth failed to validate %s\" %"}],"source_content_type":"text/x-python","patch_set":20,"id":"3f79a3b5_dcfd05b3","line":546,"range":{"start_line":546,"start_character":40,"end_line":546,"end_character":59},"updated":"2018-10-08 16:54:36.000000000","message":"self.valid_rp_bandwidths","commit_id":"1a8dc852ebb7a6ce0de87c4066f40d9b3a278fc4"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"1e3822e24bbabca28c7c951063378c2aa577aef9","unresolved":false,"context_lines":[{"line_number":543,"context_line":"        valid_rp_bandwidths \u003d {\u0027ens7\u0027: {\u0027egress\u0027: 10000, \u0027ingress\u0027: 10000}}"},{"line_number":544,"context_line":"        not_valid_rp_bandwidth \u003d {\u0027ens8\u0027: {\u0027egress\u0027: 10000, \u0027ingress\u0027: 10000}}"},{"line_number":545,"context_line":"        try:"},{"line_number":546,"context_line":"            utils.validate_rp_bandwidth(valid_rp_bandwidths,"},{"line_number":547,"context_line":"                                        self.device_name_set)"},{"line_number":548,"context_line":"        except ValueError:"},{"line_number":549,"context_line":"            self.fail(\"validate_rp_bandwidth failed to validate %s\" %"}],"source_content_type":"text/x-python","patch_set":20,"id":"3f79a3b5_0c980067","line":546,"range":{"start_line":546,"start_character":40,"end_line":546,"end_character":59},"in_reply_to":"3f79a3b5_dcfd05b3","updated":"2018-10-10 10:08:14.000000000","message":"Done","commit_id":"1a8dc852ebb7a6ce0de87c4066f40d9b3a278fc4"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"db0df4e0e4ab6246132c8104e4fd57b7cf45e818","unresolved":false,"context_lines":[{"line_number":550,"context_line":"                      self.valid_rp_bandwidths)"},{"line_number":551,"context_line":""},{"line_number":552,"context_line":"        self.assertRaises(ValueError, utils.validate_rp_bandwidth,"},{"line_number":553,"context_line":"                          not_valid_rp_bandwidth, self.device_name_set)"}],"source_content_type":"text/x-python","patch_set":20,"id":"3f79a3b5_f10d7836","line":553,"range":{"start_line":553,"start_character":26,"end_line":553,"end_character":48},"updated":"2018-10-09 09:33:00.000000000","message":"self.not_valid_rp_bandwidth","commit_id":"1a8dc852ebb7a6ce0de87c4066f40d9b3a278fc4"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"1e3822e24bbabca28c7c951063378c2aa577aef9","unresolved":false,"context_lines":[{"line_number":550,"context_line":"                      self.valid_rp_bandwidths)"},{"line_number":551,"context_line":""},{"line_number":552,"context_line":"        self.assertRaises(ValueError, utils.validate_rp_bandwidth,"},{"line_number":553,"context_line":"                          not_valid_rp_bandwidth, self.device_name_set)"}],"source_content_type":"text/x-python","patch_set":20,"id":"3f79a3b5_ac9eac52","line":553,"range":{"start_line":553,"start_character":26,"end_line":553,"end_character":48},"in_reply_to":"3f79a3b5_f10d7836","updated":"2018-10-10 10:08:14.000000000","message":"Done","commit_id":"1a8dc852ebb7a6ce0de87c4066f40d9b3a278fc4"}],"neutron/tests/unit/plugins/ml2/drivers/openvswitch/agent/test_ovs_neutron_agent.py":[{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"ceb29dc50bfc6ccae930fbbd17362341865ec0f9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"3f79a3b5_7fe863b2","updated":"2018-08-30 18:08:56.000000000","message":"one test case for success should also be added, by populating conf with a valid bridge device, rp_bandwidth and making sure no errors are raised.","commit_id":"74cc7a93e4e3bd575d95d1d738f29f4d9566ea41"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"inactive contributor"},"change_message_id":"fbbad826ad09eee75f899a8466b74b3678f89b3f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"3f79a3b5_eaa7e508","in_reply_to":"3f79a3b5_7fe863b2","updated":"2018-09-26 12:08:40.000000000","message":"Lajos has a functional test asserting exactly that:\n\nhttps://review.openstack.org/#/c/600002/3/neutron/tests/fullstack/test_agent_placement_report.py@38\n\nIs that okay for this purpose? The positive test here as a unit test would require some non-trivial mocking because agent startup wants to ensure the actual bridge setup.","commit_id":"74cc7a93e4e3bd575d95d1d738f29f4d9566ea41"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"9831ff6648184a986a756cc20f93bf2a026e3d9e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"3f79a3b5_9fa974de","in_reply_to":"3f79a3b5_eaa7e508","updated":"2018-09-28 20:35:52.000000000","message":"functional test looks good once it works over CI there","commit_id":"74cc7a93e4e3bd575d95d1d738f29f4d9566ea41"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"912d18f7fe911492336b00a7a18fbd87f4efdcbf","unresolved":false,"context_lines":[{"line_number":2315,"context_line":"                      self.agent.agent_state[\u0027configurations\u0027])"},{"line_number":2316,"context_line":""},{"line_number":2317,"context_line":"    def test_configurations_has_rp_default_inventory(self):"},{"line_number":2318,"context_line":"        self.assertIn(\u0027rp_inventory_defaults\u0027,"},{"line_number":2319,"context_line":"                      self.agent.agent_state[\u0027configurations\u0027])"},{"line_number":2320,"context_line":""},{"line_number":2321,"context_line":"    def test__validate_rp_bandwidth_bridges(self):"},{"line_number":2322,"context_line":"        with mock.patch.object(cfg.CONF.OVS, \u0027bridge_mappings\u0027, new\u003d[]), \\"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_df55acfa","line":2319,"range":{"start_line":2318,"start_character":8,"end_line":2319,"end_character":62},"updated":"2018-09-28 20:34:09.000000000","message":"how about asserting default key value pairs as well for rp_inventory_defaults ? like min_unit:0, allocation_ratio etc ?","commit_id":"094805b1e9053e4d841b8a588063c5ba278b6770"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"2a271d608128e6d948e6aa7735b33c65b6240a8c","unresolved":false,"context_lines":[{"line_number":2315,"context_line":"                      self.agent.agent_state[\u0027configurations\u0027])"},{"line_number":2316,"context_line":""},{"line_number":2317,"context_line":"    def test_configurations_has_rp_default_inventory(self):"},{"line_number":2318,"context_line":"        self.assertIn(\u0027rp_inventory_defaults\u0027,"},{"line_number":2319,"context_line":"                      self.agent.agent_state[\u0027configurations\u0027])"},{"line_number":2320,"context_line":""},{"line_number":2321,"context_line":"    def test__validate_rp_bandwidth_bridges(self):"},{"line_number":2322,"context_line":"        with mock.patch.object(cfg.CONF.OVS, \u0027bridge_mappings\u0027, new\u003d[]), \\"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_2f178048","line":2319,"range":{"start_line":2318,"start_character":8,"end_line":2319,"end_character":62},"in_reply_to":"3f79a3b5_df55acfa","updated":"2018-10-03 11:41:48.000000000","message":"Instead of asserting the values I check the keys, and the type of the values.","commit_id":"094805b1e9053e4d841b8a588063c5ba278b6770"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"2db342f50716096dfd48db212a387f32e375a6f3","unresolved":false,"context_lines":[{"line_number":2323,"context_line":"        self.assertListEqual("},{"line_number":2324,"context_line":"            sorted([\u0027reserved\u0027, \u0027min_unit\u0027, \u0027allocation_ratio\u0027, \u0027step_size\u0027]),"},{"line_number":2325,"context_line":"            sorted(list(rp_inv_defaults.keys())))"},{"line_number":2326,"context_line":"        self.assertIs(float, type(rp_inv_defaults[\u0027allocation_ratio\u0027]))"},{"line_number":2327,"context_line":"        self.assertIs(int, type(rp_inv_defaults[\u0027min_unit\u0027]))"},{"line_number":2328,"context_line":"        self.assertIs(int, type(rp_inv_defaults[\u0027step_size\u0027]))"},{"line_number":2329,"context_line":"        self.assertIs(int, type(rp_inv_defaults[\u0027reserved\u0027]))"}],"source_content_type":"text/x-python","patch_set":16,"id":"3f79a3b5_45adf4e7","line":2326,"range":{"start_line":2326,"start_character":8,"end_line":2326,"end_character":71},"updated":"2018-10-03 17:38:49.000000000","message":"self.assertIs(1.0, rp_inv_defaults[\u0027allocation_ratio\u0027])\n\nasserts both type and value. same can be done for other statements below by asserting value instead of type.","commit_id":"74c7d367d5840641e285901cdc8f80ff37bf4670"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"c291c349e92623bb44ecf2911f3325f977b6b17c","unresolved":false,"context_lines":[{"line_number":2323,"context_line":"        self.assertListEqual("},{"line_number":2324,"context_line":"            sorted([\u0027reserved\u0027, \u0027min_unit\u0027, \u0027allocation_ratio\u0027, \u0027step_size\u0027]),"},{"line_number":2325,"context_line":"            sorted(list(rp_inv_defaults.keys())))"},{"line_number":2326,"context_line":"        self.assertIs(float, type(rp_inv_defaults[\u0027allocation_ratio\u0027]))"},{"line_number":2327,"context_line":"        self.assertIs(int, type(rp_inv_defaults[\u0027min_unit\u0027]))"},{"line_number":2328,"context_line":"        self.assertIs(int, type(rp_inv_defaults[\u0027step_size\u0027]))"},{"line_number":2329,"context_line":"        self.assertIs(int, type(rp_inv_defaults[\u0027reserved\u0027]))"}],"source_content_type":"text/x-python","patch_set":16,"id":"3f79a3b5_7d9c32be","line":2326,"range":{"start_line":2326,"start_character":8,"end_line":2326,"end_character":71},"in_reply_to":"3f79a3b5_45adf4e7","updated":"2018-10-04 12:47:12.000000000","message":"I tried it but with py35 I got error like:\n\u0027testtools.matchers._impl.MismatchError: 1.0 is not 1.0\u0027","commit_id":"74c7d367d5840641e285901cdc8f80ff37bf4670"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"a4b14c422bdc86841b35778460437d28944869ed","unresolved":false,"context_lines":[{"line_number":2323,"context_line":"        self.assertListEqual("},{"line_number":2324,"context_line":"            sorted([\u0027reserved\u0027, \u0027min_unit\u0027, \u0027allocation_ratio\u0027, \u0027step_size\u0027]),"},{"line_number":2325,"context_line":"            sorted(list(rp_inv_defaults)))"},{"line_number":2326,"context_line":"        self.assertIs(float, type(rp_inv_defaults[\u0027allocation_ratio\u0027]))"},{"line_number":2327,"context_line":"        self.assertIs(int, type(rp_inv_defaults[\u0027min_unit\u0027]))"},{"line_number":2328,"context_line":"        self.assertIs(int, type(rp_inv_defaults[\u0027step_size\u0027]))"},{"line_number":2329,"context_line":"        self.assertIs(int, type(rp_inv_defaults[\u0027reserved\u0027]))"},{"line_number":2330,"context_line":""},{"line_number":2331,"context_line":"    def test__validate_rp_bandwidth_bridges(self):"},{"line_number":2332,"context_line":"        with mock.patch.object(cfg.CONF.OVS, \u0027bridge_mappings\u0027, new\u003d[]), \\"}],"source_content_type":"text/x-python","patch_set":18,"id":"3f79a3b5_97cb09a3","line":2329,"range":{"start_line":2326,"start_character":7,"end_line":2329,"end_character":61},"updated":"2018-10-05 17:26:40.000000000","message":"asserting values instead of types like it worked in sriov case?","commit_id":"d447b4b6c502b79b479839e7573218cb95224692"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"3c05a9ce98c6bac9cd1e977a48742ab77f3e9049","unresolved":false,"context_lines":[{"line_number":2323,"context_line":"        self.assertListEqual("},{"line_number":2324,"context_line":"            sorted([\u0027reserved\u0027, \u0027min_unit\u0027, \u0027allocation_ratio\u0027, \u0027step_size\u0027]),"},{"line_number":2325,"context_line":"            sorted(list(rp_inv_defaults)))"},{"line_number":2326,"context_line":"        self.assertIs(float, type(rp_inv_defaults[\u0027allocation_ratio\u0027]))"},{"line_number":2327,"context_line":"        self.assertIs(int, type(rp_inv_defaults[\u0027min_unit\u0027]))"},{"line_number":2328,"context_line":"        self.assertIs(int, type(rp_inv_defaults[\u0027step_size\u0027]))"},{"line_number":2329,"context_line":"        self.assertIs(int, type(rp_inv_defaults[\u0027reserved\u0027]))"},{"line_number":2330,"context_line":""},{"line_number":2331,"context_line":"    def test__validate_rp_bandwidth_bridges(self):"},{"line_number":2332,"context_line":"        with mock.patch.object(cfg.CONF.OVS, \u0027bridge_mappings\u0027, new\u003d[]), \\"}],"source_content_type":"text/x-python","patch_set":18,"id":"3f79a3b5_ffed5d24","line":2329,"range":{"start_line":2326,"start_character":7,"end_line":2329,"end_character":61},"in_reply_to":"3f79a3b5_1f09392a","updated":"2018-10-08 09:40:19.000000000","message":"I agree with Manjeet.\n\n\u003e testtools.matchers._impl.MismatchError: 1.0 is not 1.0\nDid if happen with allocation_ratio? You should test\n  self.assertEqual(1.0, rp_inv_defaults[\u0027allocation_ratio\u0027])\nforcing the reference parameter to be float.","commit_id":"d447b4b6c502b79b479839e7573218cb95224692"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"722368f5859a58f9df19aaa31841b550552f1283","unresolved":false,"context_lines":[{"line_number":2323,"context_line":"        self.assertListEqual("},{"line_number":2324,"context_line":"            sorted([\u0027reserved\u0027, \u0027min_unit\u0027, \u0027allocation_ratio\u0027, \u0027step_size\u0027]),"},{"line_number":2325,"context_line":"            sorted(list(rp_inv_defaults)))"},{"line_number":2326,"context_line":"        self.assertIs(float, type(rp_inv_defaults[\u0027allocation_ratio\u0027]))"},{"line_number":2327,"context_line":"        self.assertIs(int, type(rp_inv_defaults[\u0027min_unit\u0027]))"},{"line_number":2328,"context_line":"        self.assertIs(int, type(rp_inv_defaults[\u0027step_size\u0027]))"},{"line_number":2329,"context_line":"        self.assertIs(int, type(rp_inv_defaults[\u0027reserved\u0027]))"},{"line_number":2330,"context_line":""},{"line_number":2331,"context_line":"    def test__validate_rp_bandwidth_bridges(self):"},{"line_number":2332,"context_line":"        with mock.patch.object(cfg.CONF.OVS, \u0027bridge_mappings\u0027, new\u003d[]), \\"}],"source_content_type":"text/x-python","patch_set":18,"id":"3f79a3b5_1f09392a","line":2329,"range":{"start_line":2326,"start_character":7,"end_line":2329,"end_character":61},"in_reply_to":"3f79a3b5_97cb09a3","updated":"2018-10-08 09:31:14.000000000","message":"I tried, but for this patch I still receive the message: \ntesttools.matchers._impl.MismatchError: 1.0 is not 1.0\n\nI have just a weird feeling that this is somehow perhaps related to the fact that in case ovs the values are run through oslo config.\n\nAs that can happen anytime that the default in config values are changed, that will cause that these assertions will fail, but if the assertion checks the type of the values that I feel more future proof.","commit_id":"d447b4b6c502b79b479839e7573218cb95224692"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"032c3923ef9e5535ecdf35d53a807bb0b3bd5251","unresolved":false,"context_lines":[{"line_number":2323,"context_line":"        self.assertListEqual("},{"line_number":2324,"context_line":"            sorted([\u0027reserved\u0027, \u0027min_unit\u0027, \u0027allocation_ratio\u0027, \u0027step_size\u0027]),"},{"line_number":2325,"context_line":"            sorted(list(rp_inv_defaults)))"},{"line_number":2326,"context_line":"        self.assertIs(float, type(rp_inv_defaults[\u0027allocation_ratio\u0027]))"},{"line_number":2327,"context_line":"        self.assertIs(int, type(rp_inv_defaults[\u0027min_unit\u0027]))"},{"line_number":2328,"context_line":"        self.assertIs(int, type(rp_inv_defaults[\u0027step_size\u0027]))"},{"line_number":2329,"context_line":"        self.assertIs(int, type(rp_inv_defaults[\u0027reserved\u0027]))"},{"line_number":2330,"context_line":""},{"line_number":2331,"context_line":"    def test__validate_rp_bandwidth_bridges(self):"},{"line_number":2332,"context_line":"        with mock.patch.object(cfg.CONF.OVS, \u0027bridge_mappings\u0027, new\u003d[]), \\"}],"source_content_type":"text/x-python","patch_set":18,"id":"3f79a3b5_27c2eb03","line":2329,"range":{"start_line":2326,"start_character":7,"end_line":2329,"end_character":61},"in_reply_to":"3f79a3b5_ffed5d24","updated":"2018-10-08 12:50:22.000000000","message":"I changed here and in the next patch as well to assertEqual","commit_id":"d447b4b6c502b79b479839e7573218cb95224692"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"db0df4e0e4ab6246132c8104e4fd57b7cf45e818","unresolved":false,"context_lines":[{"line_number":2329,"context_line":"        self.assertEqual(0, rp_inv_defaults[\u0027reserved\u0027])"},{"line_number":2330,"context_line":""},{"line_number":2331,"context_line":"    def test__validate_rp_bandwidth_bridges(self):"},{"line_number":2332,"context_line":"        with mock.patch.object(cfg.CONF.OVS, \u0027bridge_mappings\u0027, new\u003d[]), \\"},{"line_number":2333,"context_line":"             mock.patch.object(cfg.CONF.OVS, \u0027resource_provider_bandwidths\u0027,"},{"line_number":2334,"context_line":"                new\u003d[\u0027no_such_br_in_bridge_mappings:1:1\u0027]):"},{"line_number":2335,"context_line":"            self.assertRaises(ValueError, self._make_agent)"},{"line_number":2336,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"3f79a3b5_f16498e8","line":2333,"range":{"start_line":2332,"start_character":0,"end_line":2333,"end_character":76},"updated":"2018-10-09 09:33:00.000000000","message":"You can use cfg.CONF.set_override() to change value of some config option","commit_id":"1a8dc852ebb7a6ce0de87c4066f40d9b3a278fc4"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"1e3822e24bbabca28c7c951063378c2aa577aef9","unresolved":false,"context_lines":[{"line_number":2329,"context_line":"        self.assertEqual(0, rp_inv_defaults[\u0027reserved\u0027])"},{"line_number":2330,"context_line":""},{"line_number":2331,"context_line":"    def test__validate_rp_bandwidth_bridges(self):"},{"line_number":2332,"context_line":"        with mock.patch.object(cfg.CONF.OVS, \u0027bridge_mappings\u0027, new\u003d[]), \\"},{"line_number":2333,"context_line":"             mock.patch.object(cfg.CONF.OVS, \u0027resource_provider_bandwidths\u0027,"},{"line_number":2334,"context_line":"                new\u003d[\u0027no_such_br_in_bridge_mappings:1:1\u0027]):"},{"line_number":2335,"context_line":"            self.assertRaises(ValueError, self._make_agent)"},{"line_number":2336,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"3f79a3b5_ecad8484","line":2333,"range":{"start_line":2332,"start_character":0,"end_line":2333,"end_character":76},"in_reply_to":"3f79a3b5_f16498e8","updated":"2018-10-10 10:08:14.000000000","message":"Thanks, done","commit_id":"1a8dc852ebb7a6ce0de87c4066f40d9b3a278fc4"}],"releasenotes/notes/bandwidth-config-ovs-5bede7fb43b0a574.yaml":[{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"912d18f7fe911492336b00a7a18fbd87f4efdcbf","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    New configuration options for neutron-ovs-agent under section ``[ovs]``:"},{"line_number":5,"context_line":"    ``resource_provider_bandwidths`` and"},{"line_number":6,"context_line":"    ``resource_provider_inventory_defaults``."},{"line_number":7,"context_line":"    The former controls the ``total`` field of the physical network interface"},{"line_number":8,"context_line":"    resource provider inventories. It defaults to not creating resource"},{"line_number":9,"context_line":"    providers in Placement. The latter can be used to tune the other fields"},{"line_number":10,"context_line":"    of resource provider inventories."}],"source_content_type":"text/x-yaml","patch_set":13,"id":"3f79a3b5_3f5dc015","line":7,"range":{"start_line":7,"start_character":28,"end_line":7,"end_character":37},"updated":"2018-09-28 20:34:09.000000000","message":"this is confusing, as total is used for other resource_provider as well, can you reword this in context of available bandwidth ?","commit_id":"094805b1e9053e4d841b8a588063c5ba278b6770"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"2a271d608128e6d948e6aa7735b33c65b6240a8c","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    New configuration options for neutron-ovs-agent under section ``[ovs]``:"},{"line_number":5,"context_line":"    ``resource_provider_bandwidths`` and"},{"line_number":6,"context_line":"    ``resource_provider_inventory_defaults``."},{"line_number":7,"context_line":"    The former controls the ``total`` field of the physical network interface"},{"line_number":8,"context_line":"    resource provider inventories. It defaults to not creating resource"},{"line_number":9,"context_line":"    providers in Placement. The latter can be used to tune the other fields"},{"line_number":10,"context_line":"    of resource provider inventories."}],"source_content_type":"text/x-yaml","patch_set":13,"id":"3f79a3b5_ef2668ba","line":7,"range":{"start_line":7,"start_character":28,"end_line":7,"end_character":37},"in_reply_to":"3f79a3b5_3f5dc015","updated":"2018-10-03 11:41:48.000000000","message":"As the resource provider inventory field has total field, I added the available bandwidth in brackets, to make the wording clearer","commit_id":"094805b1e9053e4d841b8a588063c5ba278b6770"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"912d18f7fe911492336b00a7a18fbd87f4efdcbf","unresolved":false,"context_lines":[{"line_number":6,"context_line":"    ``resource_provider_inventory_defaults``."},{"line_number":7,"context_line":"    The former controls the ``total`` field of the physical network interface"},{"line_number":8,"context_line":"    resource provider inventories. It defaults to not creating resource"},{"line_number":9,"context_line":"    providers in Placement. The latter can be used to tune the other fields"},{"line_number":10,"context_line":"    of resource provider inventories."}],"source_content_type":"text/x-yaml","patch_set":13,"id":"3f79a3b5_9f3bb4c6","line":9,"range":{"start_line":9,"start_character":63,"end_line":9,"end_character":68},"updated":"2018-09-28 20:34:09.000000000","message":"may be worth adding brief info about other fields ? here ?","commit_id":"094805b1e9053e4d841b8a588063c5ba278b6770"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"2a271d608128e6d948e6aa7735b33c65b6240a8c","unresolved":false,"context_lines":[{"line_number":6,"context_line":"    ``resource_provider_inventory_defaults``."},{"line_number":7,"context_line":"    The former controls the ``total`` field of the physical network interface"},{"line_number":8,"context_line":"    resource provider inventories. It defaults to not creating resource"},{"line_number":9,"context_line":"    providers in Placement. The latter can be used to tune the other fields"},{"line_number":10,"context_line":"    of resource provider inventories."}],"source_content_type":"text/x-yaml","patch_set":13,"id":"3f79a3b5_af1cf065","line":9,"range":{"start_line":9,"start_character":63,"end_line":9,"end_character":68},"in_reply_to":"3f79a3b5_9f3bb4c6","updated":"2018-10-03 11:41:48.000000000","message":"Done","commit_id":"094805b1e9053e4d841b8a588063c5ba278b6770"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"2db342f50716096dfd48db212a387f32e375a6f3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"3f79a3b5_058cdc7d","updated":"2018-10-03 17:38:49.000000000","message":"thanks for change looks better now.","commit_id":"74c7d367d5840641e285901cdc8f80ff37bf4670"}]}
