)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"d060755c713dff8f0eb2d1916873b293bd6ced54","unresolved":false,"context_lines":[{"line_number":10,"context_line":"specifying multiple tenants but it doesn\u0027t. This change allows operators to set"},{"line_number":11,"context_line":"multiple tenants by using a comma separated list."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"eg. filter_tenant_id: \"tenantid1,tenantid2\""},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Closes-Bug: #1413087"},{"line_number":16,"context_line":"Change-Id: I010e85ff4c29171c4be6d7a7209dbf2d55da0b64"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"1a930d6b_1a115805","line":13,"updated":"2015-01-23 11:54:04.000000000","message":"Could we maybe ask to provide a list like [\"tenantid1\",\"tenantid2\"] so it could be reducing the risk of errors ? This way, it\u0027s basically a JSON encoded list and that doesn\u0027t complexify much operators\u0027s life","commit_id":"ec8cf9a25d6018d29d7ccc070cdfa5515f32bb18"},{"author":{"_account_id":7546,"name":"Blair Bethwaite","email":"blair.bethwaite@gmail.com","username":"blairo"},"change_message_id":"5a04ae63142eef076d6de2ff7356845204409f6f","unresolved":false,"context_lines":[{"line_number":10,"context_line":"specifying multiple tenants but it doesn\u0027t. This change allows operators to set"},{"line_number":11,"context_line":"multiple tenants by using a comma separated list."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"eg. filter_tenant_id: \"tenantid1,tenantid2\""},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Closes-Bug: #1413087"},{"line_number":16,"context_line":"Change-Id: I010e85ff4c29171c4be6d7a7209dbf2d55da0b64"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"1a930d6b_82f66c8d","line":13,"in_reply_to":"1a930d6b_1a115805","updated":"2015-01-27 00:14:57.000000000","message":"I\u0027m not sure how this would reduce the risk of errors, in fact I\u0027d expect more chance of errors as there is more formatting required. This appears to be the first/only filter using aggregate metadata in this way, so there isn\u0027t a precedent/standard set yet. Possibly something that should be discussed but not worth holding up the fix for.","commit_id":"ec8cf9a25d6018d29d7ccc070cdfa5515f32bb18"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"d060755c713dff8f0eb2d1916873b293bd6ced54","unresolved":false,"context_lines":[{"line_number":11,"context_line":"multiple tenants by using a comma separated list."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"eg. filter_tenant_id: \"tenantid1,tenantid2\""},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Closes-Bug: #1413087"},{"line_number":16,"context_line":"Change-Id: I010e85ff4c29171c4be6d7a7209dbf2d55da0b64"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"1a930d6b_fa09ecdd","line":14,"updated":"2015-01-23 11:54:04.000000000","message":"Missing DocImpact\n\nAlso, please update the devref reference that you can find here http://git.openstack.org/cgit/openstack/nova/tree/doc/source/devref/filter_scheduler.rst","commit_id":"ec8cf9a25d6018d29d7ccc070cdfa5515f32bb18"},{"author":{"_account_id":7546,"name":"Blair Bethwaite","email":"blair.bethwaite@gmail.com","username":"blairo"},"change_message_id":"5a04ae63142eef076d6de2ff7356845204409f6f","unresolved":false,"context_lines":[{"line_number":11,"context_line":"multiple tenants by using a comma separated list."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"eg. filter_tenant_id: \"tenantid1,tenantid2\""},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Closes-Bug: #1413087"},{"line_number":16,"context_line":"Change-Id: I010e85ff4c29171c4be6d7a7209dbf2d55da0b64"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"1a930d6b_42a804db","line":14,"in_reply_to":"1a930d6b_fa09ecdd","updated":"2015-01-27 00:14:57.000000000","message":"Hi Sylvain. The devref already describes the AggregateMultiTenancyIsolation as \"isolate tenants in specific aggregates\", i.e., the description matches the functionality introduced with this patch - that\u0027s why this was a bug.","commit_id":"ec8cf9a25d6018d29d7ccc070cdfa5515f32bb18"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"dbf4c504a6c663e1738f32c0c6b576a7c9501c77","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Support specifing multiple values for aggregate keys"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Currently the aggregate_multitenancy_isolation_filter looks as if it supports"},{"line_number":10,"context_line":"specifying multiple tenants but it doesn\u0027t. This change allows operators to set"},{"line_number":11,"context_line":"multiple tenants by using a comma separated list."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"da86d52c_7b2319bd","line":9,"updated":"2015-02-11 09:23:34.000000000","message":"Please change your commit message so that it\u0027s clear that it will change the behaviour for all the filters using the helper method that you\u0027re modifying","commit_id":"028159b5704eebc85a7cf0c0b0f33c2febb8ef35"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"dbf4c504a6c663e1738f32c0c6b576a7c9501c77","unresolved":false,"context_lines":[{"line_number":14,"context_line":"multiple values for the same key by using a comma as a delimiter."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"eg. filter_tenant_id: \"tenantid1,tenantid2\""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Closes-Bug: #1413087"},{"line_number":19,"context_line":"Change-Id: I010e85ff4c29171c4be6d7a7209dbf2d55da0b64"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"da86d52c_7b5cf94b","line":17,"updated":"2015-02-11 09:23:34.000000000","message":"It misses a DocImpact flag even if we\u0027re also changing the devref documentation","commit_id":"028159b5704eebc85a7cf0c0b0f33c2febb8ef35"}],"doc/source/devref/filter_scheduler.rst":[{"author":{"_account_id":7546,"name":"Blair Bethwaite","email":"blair.bethwaite@gmail.com","username":"blairo"},"change_message_id":"ba54bed26adf74c989f8ea32eb2abd18df34df0e","unresolved":false,"context_lines":[{"line_number":148,"context_line":"  ServerGroupAntiAffinityFilter.  The difference is that when you create the server"},{"line_number":149,"context_line":"  group, you should specify a policy of \u0027affinity\u0027."},{"line_number":150,"context_line":"* |AggregateMultiTenancyIsolation| - isolate tenants in specific aggregates."},{"line_number":151,"context_line":"  To specify multiple tenants use a comma. Eg. \"tenant1,tenant2\""},{"line_number":152,"context_line":"* |AggregateImagePropertiesIsolation| - isolates hosts based on image"},{"line_number":153,"context_line":"  properties and aggregate metadata."},{"line_number":154,"context_line":"* |MetricsFilter| - filters hosts based on metrics weight_setting. Only hosts with"}],"source_content_type":"text/x-rst","patch_set":7,"id":"ba7be1f8_36f82fe5","line":151,"updated":"2015-02-27 20:23:26.000000000","message":"If we\u0027re making another change here then please also fix style so that exempli gratia is used properly - it should be \"\"\"E.g., \"tenant1,\"\"\", with the dots indicating abbreviation, followed by a comma (for American English).","commit_id":"3a23be4a4b0a21076d671a8a950b27bbcfd8b665"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"67d49ed8d7f5c96ac5cacf527d4bac4c689dce88","unresolved":false,"context_lines":[{"line_number":148,"context_line":"  ServerGroupAntiAffinityFilter.  The difference is that when you create the server"},{"line_number":149,"context_line":"  group, you should specify a policy of \u0027affinity\u0027."},{"line_number":150,"context_line":"* |AggregateMultiTenancyIsolation| - isolate tenants in specific aggregates."},{"line_number":151,"context_line":"  To specify multiple tenants use a comma. Eg. \"tenant1,tenant2\""},{"line_number":152,"context_line":"* |AggregateImagePropertiesIsolation| - isolates hosts based on image"},{"line_number":153,"context_line":"  properties and aggregate metadata."},{"line_number":154,"context_line":"* |MetricsFilter| - filters hosts based on metrics weight_setting. Only hosts with"}],"source_content_type":"text/x-rst","patch_set":7,"id":"ba7be1f8_7f6c4537","line":151,"updated":"2015-02-27 17:28:22.000000000","message":"Now, all the filters using the same method are being able to have multiple values for a key, which are separated by a comma. You should update the other filter docs too.","commit_id":"3a23be4a4b0a21076d671a8a950b27bbcfd8b665"},{"author":{"_account_id":7546,"name":"Blair Bethwaite","email":"blair.bethwaite@gmail.com","username":"blairo"},"change_message_id":"ba54bed26adf74c989f8ea32eb2abd18df34df0e","unresolved":false,"context_lines":[{"line_number":191,"context_line":"instance.  E.g., an instance might require a host that supports the arm"},{"line_number":192,"context_line":"architecture on a qemu compute host.  The |ImagePropertiesFilter| will only"},{"line_number":193,"context_line":"pass hosts that can satisfy this request.  These instance"},{"line_number":194,"context_line":"properties are populated from properties define on the instance\u0027s image."},{"line_number":195,"context_line":"E.g. an image can be decorated with these properties using"},{"line_number":196,"context_line":"``glance image-update img-uuid --property architecture\u003darm --property"},{"line_number":197,"context_line":"hypervisor_type\u003dqemu``"}],"source_content_type":"text/x-rst","patch_set":7,"id":"ba7be1f8_96e63b43","line":194,"updated":"2015-02-27 20:23:26.000000000","message":"E.g.,","commit_id":"3a23be4a4b0a21076d671a8a950b27bbcfd8b665"},{"author":{"_account_id":7546,"name":"Blair Bethwaite","email":"blair.bethwaite@gmail.com","username":"blairo"},"change_message_id":"4ab8816b95c65ea29b7213240b275dc579af2221","unresolved":false,"context_lines":[{"line_number":151,"context_line":"  ServerGroupAntiAffinityFilter.  The difference is that when you create the server"},{"line_number":152,"context_line":"  group, you should specify a policy of \u0027affinity\u0027."},{"line_number":153,"context_line":"* |AggregateMultiTenancyIsolation| - isolate tenants in specific aggregates."},{"line_number":154,"context_line":"  To specify multiple tenants use a comma. Eg. \"tenant1,tenant2\""},{"line_number":155,"context_line":"* |AggregateImagePropertiesIsolation| - isolates hosts based on image"},{"line_number":156,"context_line":"  properties and aggregate metadata. Use a comma to specify multiple values for the"},{"line_number":157,"context_line":"  same property. The filter will then ensure at least one value matches."}],"source_content_type":"text/x-rst","patch_set":8,"id":"ba7be1f8_521028a8","line":154,"updated":"2015-03-02 09:48:45.000000000","message":"s/Eg\\./E.g.,/","commit_id":"45b385982f29019ff86a7b85d25028131ecd8059"}],"nova/scheduler/filters/aggregate_multitenancy_isolation.py":[{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"dd017b9327ab818e328b85d4db9ece77abe7fb70","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        \"filter_tenant_id\" it can only create instances from that tenant(s)."},{"line_number":33,"context_line":"        A host can be in different aggregates."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"        Specify multiple tenants by using a ,"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"        If a host doesn\u0027t belong to an aggregate with the metadata key"},{"line_number":38,"context_line":"        \"filter_tenant_id\" it can create instances from all tenants."}],"source_content_type":"text/x-python","patch_set":3,"id":"fa81d914_9c781291","line":35,"updated":"2015-01-29 02:01:42.000000000","message":"nit: by using a comma.","commit_id":"9bac5c3f3f4454af962f8d2230aaa996536b6d3d"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"dbf4c504a6c663e1738f32c0c6b576a7c9501c77","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        \"filter_tenant_id\" it can only create instances from that tenant(s)."},{"line_number":33,"context_line":"        A host can be in different aggregates."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"        Specify multiple tenants by using a comma."},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"        If a host doesn\u0027t belong to an aggregate with the metadata key"},{"line_number":38,"context_line":"        \"filter_tenant_id\" it can create instances from all tenants."}],"source_content_type":"text/x-python","patch_set":4,"id":"da86d52c_bb7bd1bc","line":35,"updated":"2015-02-11 09:23:34.000000000","message":"I would rather be in favor of only amending the docstring in the helper method (like you did) and modify devref RST file for the operator instructions","commit_id":"028159b5704eebc85a7cf0c0b0f33c2febb8ef35"}],"nova/scheduler/filters/utils.py":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"6c78c5c8e423239100b567340dcde9c7def2dc63","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        for k, v in aggr.metadata.iteritems():"},{"line_number":50,"context_line":"            values \u003d v.split(\u0027,\u0027)"},{"line_number":51,"context_line":"            for value in values:"},{"line_number":52,"context_line":"                metadata[k].add(value)"},{"line_number":53,"context_line":"    return metadata"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"da86d52c_93cd4860","line":52,"updated":"2015-02-03 11:23:07.000000000","message":"I would be in favor of only modifying the filter, not this helper","commit_id":"028159b5704eebc85a7cf0c0b0f33c2febb8ef35"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"dbf4c504a6c663e1738f32c0c6b576a7c9501c77","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        for k, v in aggr.metadata.iteritems():"},{"line_number":50,"context_line":"            values \u003d v.split(\u0027,\u0027)"},{"line_number":51,"context_line":"            for value in values:"},{"line_number":52,"context_line":"                metadata[k].add(value)"},{"line_number":53,"context_line":"    return metadata"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"da86d52c_fb69c9f9","line":52,"in_reply_to":"da86d52c_93cd4860","updated":"2015-02-11 09:23:34.000000000","message":"Ok, I got your point. Based on the Ops feedback, let\u0027s go for accepting a list of values separated by a comma for *all* filters.\n\nThat said, in that case, you need to also amend all the existing unittests for all the other filters that are calling this method to make sure that a string including commas is understandable and covered.","commit_id":"028159b5704eebc85a7cf0c0b0f33c2febb8ef35"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"8ab2765f844da6e2814073ee43bca85cce0d1424","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    metadata \u003d collections.defaultdict(set)"},{"line_number":48,"context_line":"    for aggr in aggrlist:"},{"line_number":49,"context_line":"        for k, v in aggr.metadata.iteritems():"},{"line_number":50,"context_line":"            values \u003d v.split(\u0027,\u0027)"},{"line_number":51,"context_line":"            for value in values:"},{"line_number":52,"context_line":"                metadata[k].add(value)"},{"line_number":53,"context_line":"    return metadata"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba7be1f8_5a2a53e8","line":50,"updated":"2015-02-27 02:52:37.000000000","message":"will that be better to trim space before add to metadata ?\nIn [1]: v \u003d \"a, b,    eee\"\n\nIn [2]: values \u003d v.split(\u0027,\u0027)\n\nIn [3]: print values\n[\u0027a\u0027, \u0027 b\u0027, \u0027    eee\u0027]\n\nand I think this need a test case too.\n\nthanks Eli.","commit_id":"12f8e1eb22c0fb291176fe977e54a0269dc6ffac"}],"nova/tests/unit/scheduler/filters/test_aggregate_multitenancy_isolation_filters.py":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"dbf4c504a6c663e1738f32c0c6b576a7c9501c77","unresolved":false,"context_lines":[{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def test_aggregate_multi_tenancy_isolation_no_meta_passes(self, agg_mock):"},{"line_number":68,"context_line":"        agg_mock.return_value \u003d {}"},{"line_number":69,"context_line":"        filter_properties \u003d {\u0027context\u0027: mock.sentinel.ctx,"},{"line_number":70,"context_line":"                             \u0027request_spec\u0027: {"},{"line_number":71,"context_line":"                                 \u0027instance_properties\u0027: {"},{"line_number":72,"context_line":"                                     \u0027project_id\u0027: \u0027my_tenantid\u0027}}}"}],"source_content_type":"text/x-python","patch_set":4,"id":"da86d52c_d6005c03","line":69,"updated":"2015-02-11 09:23:34.000000000","message":"you also need to amend the other testcases for the other filters that are being impacted by the behaviour change of the helper method","commit_id":"028159b5704eebc85a7cf0c0b0f33c2febb8ef35"}]}
