)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"bee79d0ac0f40f0963ec7320f9c34df15384a763","unresolved":false,"context_lines":[{"line_number":10,"context_line":"This new filter will deprecate the current AggregateInstanceExtraSpecsFilter"},{"line_number":11,"context_line":"filter. This new filter, AggregateInstanceTypeFilter, will be backwards"},{"line_number":12,"context_line":"compatible with the deprecated one and will introduce the use of sentinel"},{"line_number":13,"context_line":"values to add more flexibility during the process of creation filtering rules."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"blueprint aggregate-instance-type-filter"},{"line_number":16,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"7aa08908_8c4a03ab","line":13,"updated":"2016-06-06 16:57:37.000000000","message":"s/creation/creating/","commit_id":"9f6caedd338e171ef7ea57c6488ab41547f11557"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"6c1990096fd3ec047ff766072a8ffdd49a4e1fe1","unresolved":false,"context_lines":[{"line_number":10,"context_line":"This new filter will deprecate the current AggregateInstanceExtraSpecsFilter"},{"line_number":11,"context_line":"filter. This new filter, AggregateInstanceTypeFilter, will be backwards"},{"line_number":12,"context_line":"compatible with the deprecated one and will introduce the use of sentinel"},{"line_number":13,"context_line":"values to add more flexibility during the process of creation filtering rules."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"blueprint aggregate-instance-type-filter"},{"line_number":16,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"7aa08908_8aa2c7ac","line":13,"in_reply_to":"7aa08908_8c4a03ab","updated":"2016-06-07 07:34:32.000000000","message":"Done","commit_id":"9f6caedd338e171ef7ea57c6488ab41547f11557"}],"specs/newton/approved/aggregate-instance-affinity-filter.rst":[{"author":{"_account_id":9396,"name":"igordcard","email":"igordcard@gmail.com","username":"igordcard"},"change_message_id":"5c1f1bbf32c8a207d5088ff8f9f8c812583094ca","unresolved":false,"context_lines":[{"line_number":8,"context_line":"Filter - Aggregate Instance Affinity Filter"},{"line_number":9,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"This blueprint introduces a new filter to the nova filter scheduler."},{"line_number":12,"context_line":"This new filter will deprecate the current"},{"line_number":13,"context_line":"``AggregateInstanceExtraSpecsFilter`` filter. This new filter,"},{"line_number":14,"context_line":"``AggregateInstanceAffinityFilter``, will be backwards compatible with the"}],"source_content_type":"text/x-rst","patch_set":3,"id":"dab17558_fc6af4eb","line":11,"range":{"start_line":11,"start_character":46,"end_line":11,"end_character":50},"updated":"2016-05-10 17:32:03.000000000","message":"Nova","commit_id":"f8963b9742365f49f33476ecb462c995034742ab"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"2cc2cb99dd79ba8aebfc91737830d6ac2c994a95","unresolved":false,"context_lines":[{"line_number":8,"context_line":"Filter - Aggregate Instance Affinity Filter"},{"line_number":9,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"This blueprint introduces a new filter to the nova filter scheduler."},{"line_number":12,"context_line":"This new filter will deprecate the current"},{"line_number":13,"context_line":"``AggregateInstanceExtraSpecsFilter`` filter. This new filter,"},{"line_number":14,"context_line":"``AggregateInstanceAffinityFilter``, will be backwards compatible with the"}],"source_content_type":"text/x-rst","patch_set":3,"id":"dab17558_b3f520ee","line":11,"range":{"start_line":11,"start_character":46,"end_line":11,"end_character":50},"in_reply_to":"dab17558_fc6af4eb","updated":"2016-05-11 07:52:33.000000000","message":"Done","commit_id":"f8963b9742365f49f33476ecb462c995034742ab"},{"author":{"_account_id":9396,"name":"igordcard","email":"igordcard@gmail.com","username":"igordcard"},"change_message_id":"5c1f1bbf32c8a207d5088ff8f9f8c812583094ca","unresolved":false,"context_lines":[{"line_number":13,"context_line":"``AggregateInstanceExtraSpecsFilter`` filter. This new filter,"},{"line_number":14,"context_line":"``AggregateInstanceAffinityFilter``, will be backwards compatible with the"},{"line_number":15,"context_line":"deprecated one and will introduce the use of sentinel values to add more"},{"line_number":16,"context_line":"flexibility during the process of creation filtering rules."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Problem description"},{"line_number":19,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":3,"id":"dab17558_5c2a2091","line":16,"range":{"start_line":16,"start_character":34,"end_line":16,"end_character":42},"updated":"2016-05-10 17:32:03.000000000","message":"creating","commit_id":"f8963b9742365f49f33476ecb462c995034742ab"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"2cc2cb99dd79ba8aebfc91737830d6ac2c994a95","unresolved":false,"context_lines":[{"line_number":13,"context_line":"``AggregateInstanceExtraSpecsFilter`` filter. This new filter,"},{"line_number":14,"context_line":"``AggregateInstanceAffinityFilter``, will be backwards compatible with the"},{"line_number":15,"context_line":"deprecated one and will introduce the use of sentinel values to add more"},{"line_number":16,"context_line":"flexibility during the process of creation filtering rules."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Problem description"},{"line_number":19,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":3,"id":"dab17558_13e18c2d","line":16,"range":{"start_line":16,"start_character":34,"end_line":16,"end_character":42},"in_reply_to":"dab17558_5c2a2091","updated":"2016-05-11 07:52:33.000000000","message":"Done","commit_id":"f8963b9742365f49f33476ecb462c995034742ab"},{"author":{"_account_id":9396,"name":"igordcard","email":"igordcard@gmail.com","username":"igordcard"},"change_message_id":"5c1f1bbf32c8a207d5088ff8f9f8c812583094ca","unresolved":false,"context_lines":[{"line_number":21,"context_line":"At present the filter scheduler allows operators to associate an instance"},{"line_number":22,"context_line":"type with a host aggregate via the ``AggregateInstanceExtraSpecsFilter`` [1]."},{"line_number":23,"context_line":"This filter enforces that an aggregate of hosts satisfies all conditions,"},{"line_number":24,"context_line":"defined as extra specifications in the flavor; this conditions are set as"},{"line_number":25,"context_line":"metadata in the aggregate class."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"However, now the operator must include in the extra specifications variables"}],"source_content_type":"text/x-rst","patch_set":3,"id":"dab17558_5c018005","line":24,"range":{"start_line":24,"start_character":47,"end_line":24,"end_character":51},"updated":"2016-05-10 17:32:03.000000000","message":"these","commit_id":"f8963b9742365f49f33476ecb462c995034742ab"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"2cc2cb99dd79ba8aebfc91737830d6ac2c994a95","unresolved":false,"context_lines":[{"line_number":21,"context_line":"At present the filter scheduler allows operators to associate an instance"},{"line_number":22,"context_line":"type with a host aggregate via the ``AggregateInstanceExtraSpecsFilter`` [1]."},{"line_number":23,"context_line":"This filter enforces that an aggregate of hosts satisfies all conditions,"},{"line_number":24,"context_line":"defined as extra specifications in the flavor; this conditions are set as"},{"line_number":25,"context_line":"metadata in the aggregate class."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"However, now the operator must include in the extra specifications variables"}],"source_content_type":"text/x-rst","patch_set":3,"id":"dab17558_f3db287a","line":24,"range":{"start_line":24,"start_character":47,"end_line":24,"end_character":51},"in_reply_to":"dab17558_5c018005","updated":"2016-05-11 07:52:33.000000000","message":"Done","commit_id":"f8963b9742365f49f33476ecb462c995034742ab"},{"author":{"_account_id":9396,"name":"igordcard","email":"igordcard@gmail.com","username":"igordcard"},"change_message_id":"5c1f1bbf32c8a207d5088ff8f9f8c812583094ca","unresolved":false,"context_lines":[{"line_number":24,"context_line":"defined as extra specifications in the flavor; this conditions are set as"},{"line_number":25,"context_line":"metadata in the aggregate class."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"However, now the operator must include in the extra specifications variables"},{"line_number":28,"context_line":"all the values to be match in the aggregate metadata and can’t specify a"},{"line_number":29,"context_line":"unique value to represent all data [use case 1]. Also, each variable included"},{"line_number":30,"context_line":"in the extraspecs must be present in the aggregate metadata, not giving the"},{"line_number":31,"context_line":"operator the choice of making this variable not mandatory [use case 2] or"}],"source_content_type":"text/x-rst","patch_set":3,"id":"dab17558_7f3276f3","line":28,"range":{"start_line":27,"start_character":67,"end_line":28,"end_character":26},"updated":"2016-05-10 17:32:03.000000000","message":"variables for all the values to be matched?","commit_id":"f8963b9742365f49f33476ecb462c995034742ab"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"2cc2cb99dd79ba8aebfc91737830d6ac2c994a95","unresolved":false,"context_lines":[{"line_number":24,"context_line":"defined as extra specifications in the flavor; this conditions are set as"},{"line_number":25,"context_line":"metadata in the aggregate class."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"However, now the operator must include in the extra specifications variables"},{"line_number":28,"context_line":"all the values to be match in the aggregate metadata and can’t specify a"},{"line_number":29,"context_line":"unique value to represent all data [use case 1]. Also, each variable included"},{"line_number":30,"context_line":"in the extraspecs must be present in the aggregate metadata, not giving the"},{"line_number":31,"context_line":"operator the choice of making this variable not mandatory [use case 2] or"}],"source_content_type":"text/x-rst","patch_set":3,"id":"dab17558_73d61850","line":28,"range":{"start_line":27,"start_character":67,"end_line":28,"end_character":26},"in_reply_to":"dab17558_7f3276f3","updated":"2016-05-11 07:52:33.000000000","message":"Done","commit_id":"f8963b9742365f49f33476ecb462c995034742ab"},{"author":{"_account_id":9396,"name":"igordcard","email":"igordcard@gmail.com","username":"igordcard"},"change_message_id":"5c1f1bbf32c8a207d5088ff8f9f8c812583094ca","unresolved":false,"context_lines":[{"line_number":27,"context_line":"However, now the operator must include in the extra specifications variables"},{"line_number":28,"context_line":"all the values to be match in the aggregate metadata and can’t specify a"},{"line_number":29,"context_line":"unique value to represent all data [use case 1]. Also, each variable included"},{"line_number":30,"context_line":"in the extraspecs must be present in the aggregate metadata, not giving the"},{"line_number":31,"context_line":"operator the choice of making this variable not mandatory [use case 2] or"},{"line_number":32,"context_line":"force the absence of this variable [use case 3]."},{"line_number":33,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"dab17558_3f98eebf","line":30,"range":{"start_line":30,"start_character":7,"end_line":30,"end_character":17},"updated":"2016-05-10 17:32:03.000000000","message":"``extra_specs``","commit_id":"f8963b9742365f49f33476ecb462c995034742ab"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"2cc2cb99dd79ba8aebfc91737830d6ac2c994a95","unresolved":false,"context_lines":[{"line_number":27,"context_line":"However, now the operator must include in the extra specifications variables"},{"line_number":28,"context_line":"all the values to be match in the aggregate metadata and can’t specify a"},{"line_number":29,"context_line":"unique value to represent all data [use case 1]. Also, each variable included"},{"line_number":30,"context_line":"in the extraspecs must be present in the aggregate metadata, not giving the"},{"line_number":31,"context_line":"operator the choice of making this variable not mandatory [use case 2] or"},{"line_number":32,"context_line":"force the absence of this variable [use case 3]."},{"line_number":33,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"dab17558_b3cc00bc","line":30,"range":{"start_line":30,"start_character":7,"end_line":30,"end_character":17},"in_reply_to":"dab17558_3f98eebf","updated":"2016-05-11 07:52:33.000000000","message":"Done","commit_id":"f8963b9742365f49f33476ecb462c995034742ab"},{"author":{"_account_id":9396,"name":"igordcard","email":"igordcard@gmail.com","username":"igordcard"},"change_message_id":"5c1f1bbf32c8a207d5088ff8f9f8c812583094ca","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":"Another limitation of the current implementation of"},{"line_number":35,"context_line":"AggregateInstanceExtraSpecsFilter filter is the logic imposed. The current"},{"line_number":36,"context_line":"logic implies an injective logic from flavor extra specifications to aggregate"},{"line_number":37,"context_line":"metadata. That means, all elements present in the flavor must be present in"},{"line_number":38,"context_line":"the aggregate to pass the filter. If the flavor has, for example, three extra"},{"line_number":39,"context_line":"specs, the aggregate must have those three specs and the values must satisfy"}],"source_content_type":"text/x-rst","patch_set":3,"id":"dab17558_1fdc0a72","line":36,"range":{"start_line":36,"start_character":0,"end_line":36,"end_character":5},"updated":"2016-05-10 17:32:03.000000000","message":"implementation","commit_id":"f8963b9742365f49f33476ecb462c995034742ab"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"2cc2cb99dd79ba8aebfc91737830d6ac2c994a95","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":"Another limitation of the current implementation of"},{"line_number":35,"context_line":"AggregateInstanceExtraSpecsFilter filter is the logic imposed. The current"},{"line_number":36,"context_line":"logic implies an injective logic from flavor extra specifications to aggregate"},{"line_number":37,"context_line":"metadata. That means, all elements present in the flavor must be present in"},{"line_number":38,"context_line":"the aggregate to pass the filter. If the flavor has, for example, three extra"},{"line_number":39,"context_line":"specs, the aggregate must have those three specs and the values must satisfy"}],"source_content_type":"text/x-rst","patch_set":3,"id":"dab17558_f3c20884","line":36,"range":{"start_line":36,"start_character":0,"end_line":36,"end_character":5},"in_reply_to":"dab17558_1fdc0a72","updated":"2016-05-11 07:52:33.000000000","message":"implemented logic","commit_id":"f8963b9742365f49f33476ecb462c995034742ab"},{"author":{"_account_id":9396,"name":"igordcard","email":"igordcard@gmail.com","username":"igordcard"},"change_message_id":"5c1f1bbf32c8a207d5088ff8f9f8c812583094ca","unresolved":false,"context_lines":[{"line_number":38,"context_line":"the aggregate to pass the filter. If the flavor has, for example, three extra"},{"line_number":39,"context_line":"specs, the aggregate must have those three specs and the values must satisfy"},{"line_number":40,"context_line":"the logic conditions present in the flavor extra specs. This new filter"},{"line_number":41,"context_line":"proposes, as an aggregate option, to have also a surjective. That means that,"},{"line_number":42,"context_line":"instead of forcing the aggregate to satisfy the extra specs conditions present"},{"line_number":43,"context_line":"in the flavor, now the flavor is enforced to satisfy the conditions given by"},{"line_number":44,"context_line":"the aggregate defined as metadata. In this case, all metadata elements must be"}],"source_content_type":"text/x-rst","patch_set":3,"id":"dab17558_ff55c6c1","line":41,"range":{"start_line":41,"start_character":34,"end_line":41,"end_character":59},"updated":"2016-05-10 17:32:03.000000000","message":"surjective?\nalso consider rewriting what is highlighted.","commit_id":"f8963b9742365f49f33476ecb462c995034742ab"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"2cc2cb99dd79ba8aebfc91737830d6ac2c994a95","unresolved":false,"context_lines":[{"line_number":38,"context_line":"the aggregate to pass the filter. If the flavor has, for example, three extra"},{"line_number":39,"context_line":"specs, the aggregate must have those three specs and the values must satisfy"},{"line_number":40,"context_line":"the logic conditions present in the flavor extra specs. This new filter"},{"line_number":41,"context_line":"proposes, as an aggregate option, to have also a surjective. That means that,"},{"line_number":42,"context_line":"instead of forcing the aggregate to satisfy the extra specs conditions present"},{"line_number":43,"context_line":"in the flavor, now the flavor is enforced to satisfy the conditions given by"},{"line_number":44,"context_line":"the aggregate defined as metadata. In this case, all metadata elements must be"}],"source_content_type":"text/x-rst","patch_set":3,"id":"dab17558_d35704c8","line":41,"range":{"start_line":41,"start_character":34,"end_line":41,"end_character":59},"in_reply_to":"dab17558_ff55c6c1","updated":"2016-05-11 07:52:33.000000000","message":"https://en.wikipedia.org/wiki/Surjective_function\n\nThe sentence wasn\u0027t correctly ended. My bad.","commit_id":"f8963b9742365f49f33476ecb462c995034742ab"},{"author":{"_account_id":9396,"name":"igordcard","email":"igordcard@gmail.com","username":"igordcard"},"change_message_id":"5c1f1bbf32c8a207d5088ff8f9f8c812583094ca","unresolved":false,"context_lines":[{"line_number":48,"context_line":"To add also more flexibility to this new feature, the new sentinels defined in"},{"line_number":49,"context_line":"this blueprint could be used in the aggregate metadata [use case 5]."},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"Other limitation seen in the old filter [1] is the lack of choice of using the"},{"line_number":52,"context_line":"operators defined in the AggregateInstanceExtraSpecsFilter filter [use case6]."},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"Finally, the latest limitation detected is how the namespaced variables are"},{"line_number":55,"context_line":"filtered. Only those variables using a defined scope are actually used to"}],"source_content_type":"text/x-rst","patch_set":3,"id":"dab17558_5f717243","line":52,"range":{"start_line":51,"start_character":51,"end_line":52,"end_character":9},"updated":"2016-05-10 17:32:03.000000000","message":"Is this the inability of using the operators defined in the old filter or is it the lack of more operators in the old filter? Confused as a general outsider.. consider rewriting highlighted text.","commit_id":"f8963b9742365f49f33476ecb462c995034742ab"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"2cc2cb99dd79ba8aebfc91737830d6ac2c994a95","unresolved":false,"context_lines":[{"line_number":48,"context_line":"To add also more flexibility to this new feature, the new sentinels defined in"},{"line_number":49,"context_line":"this blueprint could be used in the aggregate metadata [use case 5]."},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"Other limitation seen in the old filter [1] is the lack of choice of using the"},{"line_number":52,"context_line":"operators defined in the AggregateInstanceExtraSpecsFilter filter [use case6]."},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"Finally, the latest limitation detected is how the namespaced variables are"},{"line_number":55,"context_line":"filtered. Only those variables using a defined scope are actually used to"}],"source_content_type":"text/x-rst","patch_set":3,"id":"dab17558_b3b6c0f6","line":52,"range":{"start_line":51,"start_character":51,"end_line":52,"end_character":9},"in_reply_to":"dab17558_5f717243","updated":"2016-05-11 07:52:33.000000000","message":"Yes, you are right: this sentence is confusing.\n-\u003e \"inability of using the operators defined in...\"","commit_id":"f8963b9742365f49f33476ecb462c995034742ab"},{"author":{"_account_id":9396,"name":"igordcard","email":"igordcard@gmail.com","username":"igordcard"},"change_message_id":"5c1f1bbf32c8a207d5088ff8f9f8c812583094ca","unresolved":false,"context_lines":[{"line_number":98,"context_line":"This use case could be used to force a flavor to contain a set of keys present"},{"line_number":99,"context_line":"in the aggregate metadata. This constrain is added to the normal filter"},{"line_number":100,"context_line":"process, which will try to match the keys present in the flavor with the keys"},{"line_number":101,"context_line":"in the aggregate metadata. To notice the filter this extra verification must"},{"line_number":102,"context_line":"be made, a new metadata key is introduced: {\"force_metadata_check\": \"True\"}."},{"line_number":103,"context_line":"E.g.:"},{"line_number":104,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"dab17558_ff32e65c","line":101,"range":{"start_line":101,"start_character":26,"end_line":101,"end_character":58},"updated":"2016-05-10 17:32:03.000000000","message":"To activate the filter an extra (...)?","commit_id":"f8963b9742365f49f33476ecb462c995034742ab"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"2cc2cb99dd79ba8aebfc91737830d6ac2c994a95","unresolved":false,"context_lines":[{"line_number":98,"context_line":"This use case could be used to force a flavor to contain a set of keys present"},{"line_number":99,"context_line":"in the aggregate metadata. This constrain is added to the normal filter"},{"line_number":100,"context_line":"process, which will try to match the keys present in the flavor with the keys"},{"line_number":101,"context_line":"in the aggregate metadata. To notice the filter this extra verification must"},{"line_number":102,"context_line":"be made, a new metadata key is introduced: {\"force_metadata_check\": \"True\"}."},{"line_number":103,"context_line":"E.g.:"},{"line_number":104,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"dab17558_f3932859","line":101,"range":{"start_line":101,"start_character":26,"end_line":101,"end_character":58},"in_reply_to":"dab17558_ff32e65c","updated":"2016-05-11 07:52:33.000000000","message":"I\u0027ll rephrase this. Also is not an extra verification...","commit_id":"f8963b9742365f49f33476ecb462c995034742ab"},{"author":{"_account_id":9396,"name":"igordcard","email":"igordcard@gmail.com","username":"igordcard"},"change_message_id":"5c1f1bbf32c8a207d5088ff8f9f8c812583094ca","unresolved":false,"context_lines":[{"line_number":138,"context_line":"^^^^^^^^^^"},{"line_number":139,"context_line":"Again, if the key ``force_metadata_check`` is set in the aggregate metadata,"},{"line_number":140,"context_line":"the operator will be able to use the operator ``\u003cor\u003e`` to define multiple"},{"line_number":141,"context_line":"values for a key. This change doesn’t broke the logic of the old filter:"},{"line_number":142,"context_line":"aggregate metadata checked inside the filter is a set of values combining the"},{"line_number":143,"context_line":"data contained in the key of each aggregate metadata; this set now will"},{"line_number":144,"context_line":"contain also the values inside the \"or\" junction. E.g.:"}],"source_content_type":"text/x-rst","patch_set":3,"id":"dab17558_1f6c0a34","line":141,"range":{"start_line":141,"start_character":38,"end_line":141,"end_character":43},"updated":"2016-05-10 17:32:03.000000000","message":"break","commit_id":"f8963b9742365f49f33476ecb462c995034742ab"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"2cc2cb99dd79ba8aebfc91737830d6ac2c994a95","unresolved":false,"context_lines":[{"line_number":138,"context_line":"^^^^^^^^^^"},{"line_number":139,"context_line":"Again, if the key ``force_metadata_check`` is set in the aggregate metadata,"},{"line_number":140,"context_line":"the operator will be able to use the operator ``\u003cor\u003e`` to define multiple"},{"line_number":141,"context_line":"values for a key. This change doesn’t broke the logic of the old filter:"},{"line_number":142,"context_line":"aggregate metadata checked inside the filter is a set of values combining the"},{"line_number":143,"context_line":"data contained in the key of each aggregate metadata; this set now will"},{"line_number":144,"context_line":"contain also the values inside the \"or\" junction. E.g.:"}],"source_content_type":"text/x-rst","patch_set":3,"id":"dab17558_b39b6065","line":141,"range":{"start_line":141,"start_character":38,"end_line":141,"end_character":43},"in_reply_to":"dab17558_1f6c0a34","updated":"2016-05-11 07:52:33.000000000","message":"Done","commit_id":"f8963b9742365f49f33476ecb462c995034742ab"},{"author":{"_account_id":9396,"name":"igordcard","email":"igordcard@gmail.com","username":"igordcard"},"change_message_id":"5c1f1bbf32c8a207d5088ff8f9f8c812583094ca","unresolved":false,"context_lines":[{"line_number":202,"context_line":""},{"line_number":203,"context_line":"The extra spec key ``force_metadata_check`` will be a reserved word. Its use"},{"line_number":204,"context_line":"is explained in [use case 4], [use case 5] and [use case 6]. It\u0027s a boolean"},{"line_number":205,"context_line":"value; if the key is is present and the value is \"True\", the logic explained"},{"line_number":206,"context_line":"in those use cases will apply. However, if the kay is not present or the value"},{"line_number":207,"context_line":"is \"False\", the filter won\u0027t apply this new logic."},{"line_number":208,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"dab17558_1f0b6a2b","line":205,"range":{"start_line":205,"start_character":18,"end_line":205,"end_character":23},"updated":"2016-05-10 17:32:03.000000000","message":"is","commit_id":"f8963b9742365f49f33476ecb462c995034742ab"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"2cc2cb99dd79ba8aebfc91737830d6ac2c994a95","unresolved":false,"context_lines":[{"line_number":202,"context_line":""},{"line_number":203,"context_line":"The extra spec key ``force_metadata_check`` will be a reserved word. Its use"},{"line_number":204,"context_line":"is explained in [use case 4], [use case 5] and [use case 6]. It\u0027s a boolean"},{"line_number":205,"context_line":"value; if the key is is present and the value is \"True\", the logic explained"},{"line_number":206,"context_line":"in those use cases will apply. However, if the kay is not present or the value"},{"line_number":207,"context_line":"is \"False\", the filter won\u0027t apply this new logic."},{"line_number":208,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"dab17558_f3a16895","line":205,"range":{"start_line":205,"start_character":18,"end_line":205,"end_character":23},"in_reply_to":"dab17558_1f0b6a2b","updated":"2016-05-11 07:52:33.000000000","message":"Done","commit_id":"f8963b9742365f49f33476ecb462c995034742ab"},{"author":{"_account_id":9396,"name":"igordcard","email":"igordcard@gmail.com","username":"igordcard"},"change_message_id":"5c1f1bbf32c8a207d5088ff8f9f8c812583094ca","unresolved":false,"context_lines":[{"line_number":203,"context_line":"The extra spec key ``force_metadata_check`` will be a reserved word. Its use"},{"line_number":204,"context_line":"is explained in [use case 4], [use case 5] and [use case 6]. It\u0027s a boolean"},{"line_number":205,"context_line":"value; if the key is is present and the value is \"True\", the logic explained"},{"line_number":206,"context_line":"in those use cases will apply. However, if the kay is not present or the value"},{"line_number":207,"context_line":"is \"False\", the filter won\u0027t apply this new logic."},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"A new filter class ``AggregateInstanceAffinityFilter`` will be implement and"}],"source_content_type":"text/x-rst","patch_set":3,"id":"dab17558_3a12bc57","line":206,"range":{"start_line":206,"start_character":47,"end_line":206,"end_character":50},"updated":"2016-05-10 17:32:03.000000000","message":"key","commit_id":"f8963b9742365f49f33476ecb462c995034742ab"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"2cc2cb99dd79ba8aebfc91737830d6ac2c994a95","unresolved":false,"context_lines":[{"line_number":203,"context_line":"The extra spec key ``force_metadata_check`` will be a reserved word. Its use"},{"line_number":204,"context_line":"is explained in [use case 4], [use case 5] and [use case 6]. It\u0027s a boolean"},{"line_number":205,"context_line":"value; if the key is is present and the value is \"True\", the logic explained"},{"line_number":206,"context_line":"in those use cases will apply. However, if the kay is not present or the value"},{"line_number":207,"context_line":"is \"False\", the filter won\u0027t apply this new logic."},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"A new filter class ``AggregateInstanceAffinityFilter`` will be implement and"}],"source_content_type":"text/x-rst","patch_set":3,"id":"dab17558_33a81077","line":206,"range":{"start_line":206,"start_character":47,"end_line":206,"end_character":50},"in_reply_to":"dab17558_3a12bc57","updated":"2016-05-11 07:52:33.000000000","message":"Done","commit_id":"f8963b9742365f49f33476ecb462c995034742ab"},{"author":{"_account_id":9396,"name":"igordcard","email":"igordcard@gmail.com","username":"igordcard"},"change_message_id":"5c1f1bbf32c8a207d5088ff8f9f8c812583094ca","unresolved":false,"context_lines":[{"line_number":249,"context_line":"Performance Impact"},{"line_number":250,"context_line":"------------------"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"This filter will be optionally and will only take effect when configured"},{"line_number":253,"context_line":"by the deployer. This filter provides a potential optimisation point for"},{"line_number":254,"context_line":"an operator to tune the performance of the nova filter scheduler by"},{"line_number":255,"context_line":"creating host aggregate and defining flavor_extra_spec metadata values"}],"source_content_type":"text/x-rst","patch_set":3,"id":"dab17558_5a3ce0c7","line":252,"range":{"start_line":252,"start_character":20,"end_line":252,"end_character":30},"updated":"2016-05-10 17:32:03.000000000","message":"optional","commit_id":"f8963b9742365f49f33476ecb462c995034742ab"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"2cc2cb99dd79ba8aebfc91737830d6ac2c994a95","unresolved":false,"context_lines":[{"line_number":249,"context_line":"Performance Impact"},{"line_number":250,"context_line":"------------------"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"This filter will be optionally and will only take effect when configured"},{"line_number":253,"context_line":"by the deployer. This filter provides a potential optimisation point for"},{"line_number":254,"context_line":"an operator to tune the performance of the nova filter scheduler by"},{"line_number":255,"context_line":"creating host aggregate and defining flavor_extra_spec metadata values"}],"source_content_type":"text/x-rst","patch_set":3,"id":"dab17558_73bc58bb","line":252,"range":{"start_line":252,"start_character":20,"end_line":252,"end_character":30},"in_reply_to":"dab17558_5a3ce0c7","updated":"2016-05-11 07:52:33.000000000","message":"Done","commit_id":"f8963b9742365f49f33476ecb462c995034742ab"},{"author":{"_account_id":9396,"name":"igordcard","email":"igordcard@gmail.com","username":"igordcard"},"change_message_id":"5c1f1bbf32c8a207d5088ff8f9f8c812583094ca","unresolved":false,"context_lines":[{"line_number":253,"context_line":"by the deployer. This filter provides a potential optimisation point for"},{"line_number":254,"context_line":"an operator to tune the performance of the nova filter scheduler by"},{"line_number":255,"context_line":"creating host aggregate and defining flavor_extra_spec metadata values"},{"line_number":256,"context_line":"for common extra spec values based on there knowledge of there deployment."},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"Other deployer impact"},{"line_number":259,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"dab17558_5a434042","line":256,"range":{"start_line":256,"start_character":38,"end_line":256,"end_character":43},"updated":"2016-05-10 17:32:03.000000000","message":"the","commit_id":"f8963b9742365f49f33476ecb462c995034742ab"},{"author":{"_account_id":9396,"name":"igordcard","email":"igordcard@gmail.com","username":"igordcard"},"change_message_id":"5c1f1bbf32c8a207d5088ff8f9f8c812583094ca","unresolved":false,"context_lines":[{"line_number":253,"context_line":"by the deployer. This filter provides a potential optimisation point for"},{"line_number":254,"context_line":"an operator to tune the performance of the nova filter scheduler by"},{"line_number":255,"context_line":"creating host aggregate and defining flavor_extra_spec metadata values"},{"line_number":256,"context_line":"for common extra spec values based on there knowledge of there deployment."},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"Other deployer impact"},{"line_number":259,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"dab17558_7a460450","line":256,"range":{"start_line":256,"start_character":57,"end_line":256,"end_character":62},"updated":"2016-05-10 17:32:03.000000000","message":"their","commit_id":"f8963b9742365f49f33476ecb462c995034742ab"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"2cc2cb99dd79ba8aebfc91737830d6ac2c994a95","unresolved":false,"context_lines":[{"line_number":253,"context_line":"by the deployer. This filter provides a potential optimisation point for"},{"line_number":254,"context_line":"an operator to tune the performance of the nova filter scheduler by"},{"line_number":255,"context_line":"creating host aggregate and defining flavor_extra_spec metadata values"},{"line_number":256,"context_line":"for common extra spec values based on there knowledge of there deployment."},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"Other deployer impact"},{"line_number":259,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"dab17558_33bf70ab","line":256,"range":{"start_line":256,"start_character":38,"end_line":256,"end_character":43},"in_reply_to":"dab17558_5a434042","updated":"2016-05-11 07:52:33.000000000","message":"Done","commit_id":"f8963b9742365f49f33476ecb462c995034742ab"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"2cc2cb99dd79ba8aebfc91737830d6ac2c994a95","unresolved":false,"context_lines":[{"line_number":253,"context_line":"by the deployer. This filter provides a potential optimisation point for"},{"line_number":254,"context_line":"an operator to tune the performance of the nova filter scheduler by"},{"line_number":255,"context_line":"creating host aggregate and defining flavor_extra_spec metadata values"},{"line_number":256,"context_line":"for common extra spec values based on there knowledge of there deployment."},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"Other deployer impact"},{"line_number":259,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"dab17558_d3e6e4e6","line":256,"range":{"start_line":256,"start_character":57,"end_line":256,"end_character":62},"in_reply_to":"dab17558_7a460450","updated":"2016-05-11 07:52:33.000000000","message":"Done","commit_id":"f8963b9742365f49f33476ecb462c995034742ab"},{"author":{"_account_id":9396,"name":"igordcard","email":"igordcard@gmail.com","username":"igordcard"},"change_message_id":"5c1f1bbf32c8a207d5088ff8f9f8c812583094ca","unresolved":false,"context_lines":[{"line_number":263,"context_line":"filter the ordering of this filter and other should be considered and adjusted"},{"line_number":264,"context_line":"to optimise the filtering process."},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"In general filters that remove large amounts of host and are computationally"},{"line_number":267,"context_line":"cheap should be first. Filters that remove few hosts and are computationally"},{"line_number":268,"context_line":"intensive should be last. The optimum ordering of this filter will depend"},{"line_number":269,"context_line":"on the deployment could configuration, its workload and the host aggregate"}],"source_content_type":"text/x-rst","patch_set":3,"id":"dab17558_9ab76839","line":266,"range":{"start_line":266,"start_character":48,"end_line":266,"end_character":52},"updated":"2016-05-10 17:32:03.000000000","message":"hosts","commit_id":"f8963b9742365f49f33476ecb462c995034742ab"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"2cc2cb99dd79ba8aebfc91737830d6ac2c994a95","unresolved":false,"context_lines":[{"line_number":263,"context_line":"filter the ordering of this filter and other should be considered and adjusted"},{"line_number":264,"context_line":"to optimise the filtering process."},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"In general filters that remove large amounts of host and are computationally"},{"line_number":267,"context_line":"cheap should be first. Filters that remove few hosts and are computationally"},{"line_number":268,"context_line":"intensive should be last. The optimum ordering of this filter will depend"},{"line_number":269,"context_line":"on the deployment could configuration, its workload and the host aggregate"}],"source_content_type":"text/x-rst","patch_set":3,"id":"dab17558_b3008067","line":266,"range":{"start_line":266,"start_character":48,"end_line":266,"end_character":52},"in_reply_to":"dab17558_9ab76839","updated":"2016-05-11 07:52:33.000000000","message":"Done","commit_id":"f8963b9742365f49f33476ecb462c995034742ab"},{"author":{"_account_id":9396,"name":"igordcard","email":"igordcard@gmail.com","username":"igordcard"},"change_message_id":"5c1f1bbf32c8a207d5088ff8f9f8c812583094ca","unresolved":false,"context_lines":[{"line_number":266,"context_line":"In general filters that remove large amounts of host and are computationally"},{"line_number":267,"context_line":"cheap should be first. Filters that remove few hosts and are computationally"},{"line_number":268,"context_line":"intensive should be last. The optimum ordering of this filter will depend"},{"line_number":269,"context_line":"on the deployment could configuration, its workload and the host aggregate"},{"line_number":270,"context_line":"metadata defined."},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"Developer impact"}],"source_content_type":"text/x-rst","patch_set":3,"id":"dab17558_5a9860c0","line":269,"range":{"start_line":269,"start_character":18,"end_line":269,"end_character":23},"updated":"2016-05-10 17:32:03.000000000","message":"delete","commit_id":"f8963b9742365f49f33476ecb462c995034742ab"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"2cc2cb99dd79ba8aebfc91737830d6ac2c994a95","unresolved":false,"context_lines":[{"line_number":266,"context_line":"In general filters that remove large amounts of host and are computationally"},{"line_number":267,"context_line":"cheap should be first. Filters that remove few hosts and are computationally"},{"line_number":268,"context_line":"intensive should be last. The optimum ordering of this filter will depend"},{"line_number":269,"context_line":"on the deployment could configuration, its workload and the host aggregate"},{"line_number":270,"context_line":"metadata defined."},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"Developer impact"}],"source_content_type":"text/x-rst","patch_set":3,"id":"dab17558_53f2f49a","line":269,"range":{"start_line":269,"start_character":18,"end_line":269,"end_character":23},"in_reply_to":"dab17558_5a9860c0","updated":"2016-05-11 07:52:33.000000000","message":"Done","commit_id":"f8963b9742365f49f33476ecb462c995034742ab"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"600a8d34cd66a476ae26331643508bf5b9908885","unresolved":false,"context_lines":[{"line_number":161,"context_line":"key is also present in the aggregate metadata, the value will be checked as a"},{"line_number":162,"context_line":"regular key. E.g.:"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"flavor extra specs: {\"hw:key\": \"1\"}"},{"line_number":165,"context_line":"aggregate 1 metadata: {\"hw:key\": \"1\"}"},{"line_number":166,"context_line":"aggregate 2 metadata: {\"hw:key\": \"2\"}"},{"line_number":167,"context_line":"aggregate 3 metadata: {}"}],"source_content_type":"text/x-rst","patch_set":7,"id":"dab17558_f62263a2","line":164,"range":{"start_line":164,"start_character":22,"end_line":164,"end_character":28},"updated":"2016-05-13 16:03:57.000000000","message":"maybe you should use hw:cpu_policy\u003dshared|dedicated here as a concrete example","commit_id":"c80f59d2dc6f6d0a7409ce77d055a8eaff82b6db"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"fca04818d0ded712ef05d44dca6070b4fe66f037","unresolved":false,"context_lines":[{"line_number":161,"context_line":"key is also present in the aggregate metadata, the value will be checked as a"},{"line_number":162,"context_line":"regular key. E.g.:"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"flavor extra specs: {\"hw:key\": \"1\"}"},{"line_number":165,"context_line":"aggregate 1 metadata: {\"hw:key\": \"1\"}"},{"line_number":166,"context_line":"aggregate 2 metadata: {\"hw:key\": \"2\"}"},{"line_number":167,"context_line":"aggregate 3 metadata: {}"}],"source_content_type":"text/x-rst","patch_set":7,"id":"dab17558_99f22899","line":164,"range":{"start_line":164,"start_character":22,"end_line":164,"end_character":28},"in_reply_to":"dab17558_f62263a2","updated":"2016-05-13 16:12:15.000000000","message":"Yes, this is a better example.","commit_id":"c80f59d2dc6f6d0a7409ce77d055a8eaff82b6db"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"600a8d34cd66a476ae26331643508bf5b9908885","unresolved":false,"context_lines":[{"line_number":197,"context_line":"The sentinel value exclamation mark ``!`` may be used to specify that the key"},{"line_number":198,"context_line":"must not be present.  e.g. \"key1\" \u003d \"!\""},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"The asterisk, tilde and exclamation mark sentinels are mutually exclusive and"},{"line_number":201,"context_line":"may only appear once per key."},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"The extra spec key ``force_metadata_check`` will be a reserved word. Its use"}],"source_content_type":"text/x-rst","patch_set":7,"id":"dab17558_761b13cb","line":200,"range":{"start_line":200,"start_character":4,"end_line":200,"end_character":40},"updated":"2016-05-13 16:03:57.000000000","message":"tilde(optional) and asterick(present with any value) are not mutually exclucive\n\nexclamation mark (not set/present) is exclusive with both.\n\ne.g. \"key1\" \u003d \"\u003cor\u003e * \u003cor\u003e ~\"\n\nis logically correct meaning the key may or may not exist with any value. in the case of force_metadata_check\u003dTrue this is equivalent to not specifying the value in the aggregate_metadata. in the case of force_metadata_check\u003dFalse it changes the behavior in the following edgecase.\n\nflavor 1 extra specs: {\"key\": \"~\"}\nflavor 2 extra specs: {\"key\": \"\u003cor\u003e * \u003cor\u003e ~\"}\nflavor 3 extra specs: {\"key\": \"*\"}\nflavor 4 extra specs: {}\naggregate 1 metadata: {\"key\": \"1\", \"force_metadata_check\": \"False\"}\naggregate 2 metadata: {}\naggregate 3 metadata: {\"other key\": \"1\", \"force_metadata_check\": \"False\"}\n\nflavor 1 can be booted on aggregate 2 and 3\nflavor 2 can be booted on all aggregates\nflavor 3 can be booted on aggregate 1 only\nflavor 4 can be booted on all aggregates","commit_id":"c80f59d2dc6f6d0a7409ce77d055a8eaff82b6db"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"fca04818d0ded712ef05d44dca6070b4fe66f037","unresolved":false,"context_lines":[{"line_number":197,"context_line":"The sentinel value exclamation mark ``!`` may be used to specify that the key"},{"line_number":198,"context_line":"must not be present.  e.g. \"key1\" \u003d \"!\""},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"The asterisk, tilde and exclamation mark sentinels are mutually exclusive and"},{"line_number":201,"context_line":"may only appear once per key."},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"The extra spec key ``force_metadata_check`` will be a reserved word. Its use"}],"source_content_type":"text/x-rst","patch_set":7,"id":"dab17558_791b04cb","line":200,"range":{"start_line":200,"start_character":4,"end_line":200,"end_character":40},"in_reply_to":"dab17558_761b13cb","updated":"2016-05-13 16:12:15.000000000","message":"Yes, this is a huge mistake. I\u0027ll use your examples to illustrate this point. Thank you!","commit_id":"c80f59d2dc6f6d0a7409ce77d055a8eaff82b6db"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"9eaf92621587242becb2ad107f1115c476c27e08","unresolved":false,"context_lines":[{"line_number":11,"context_line":"This blueprint introduces a new filter to the Nova scheduler."},{"line_number":12,"context_line":"This new filter will deprecate the current"},{"line_number":13,"context_line":"``AggregateInstanceExtraSpecsFilter`` filter. This new filter,"},{"line_number":14,"context_line":"``AggregateInstanceAffinityFilter``, will be backwards compatible with the"},{"line_number":15,"context_line":"deprecated one and will introduce the use of sentinel values to add more"},{"line_number":16,"context_line":"flexibility during the process of creating filtering rules."},{"line_number":17,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"9abb7d3a_d9003969","line":14,"range":{"start_line":14,"start_character":2,"end_line":14,"end_character":33},"updated":"2016-06-03 11:28:16.000000000","message":"I\u0027m not super good at naming, but I\u0027d propose AggregateInstanceTypeFilter rather than AggregateInstanceAffinityFilter which uses the word \"Affinity\" which has a very different meaning in other filters.\n\nAfter all, a filter is just a way to get affinity between a request and a host :-)","commit_id":"6756a5677cc7e7efe1b6f57b686b15e4e1c16b11"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"bec5e8e6501f9140da41433b5b1a4e31638c4dda","unresolved":false,"context_lines":[{"line_number":11,"context_line":"This blueprint introduces a new filter to the Nova scheduler."},{"line_number":12,"context_line":"This new filter will deprecate the current"},{"line_number":13,"context_line":"``AggregateInstanceExtraSpecsFilter`` filter. This new filter,"},{"line_number":14,"context_line":"``AggregateInstanceAffinityFilter``, will be backwards compatible with the"},{"line_number":15,"context_line":"deprecated one and will introduce the use of sentinel values to add more"},{"line_number":16,"context_line":"flexibility during the process of creating filtering rules."},{"line_number":17,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"9abb7d3a_28548d52","line":14,"range":{"start_line":14,"start_character":2,"end_line":14,"end_character":33},"in_reply_to":"9abb7d3a_d9003969","updated":"2016-06-03 13:41:05.000000000","message":"I remember having some discussions about this. I\u0027ll change the name to \"AggregateInstanceTypeFilter\".\n\n\u003e\u003e I\u0027m not super good at naming\nMe neither","commit_id":"6756a5677cc7e7efe1b6f57b686b15e4e1c16b11"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"9eaf92621587242becb2ad107f1115c476c27e08","unresolved":false,"context_lines":[{"line_number":108,"context_line":"aggregate metadata: {\"key\": \"1\", \"force_metadata_check\": \"True\"}"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"In this example, hosts in this aggregate will pass only using the flavor 1."},{"line_number":111,"context_line":"Without the key ``force_metadata_check`` set to \"True\", the flavor 3 will"},{"line_number":112,"context_line":"allow the use of hosts in the aggregate."},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"Use case 5"},{"line_number":115,"context_line":"^^^^^^^^^^"}],"source_content_type":"text/x-rst","patch_set":9,"id":"9abb7d3a_fc1feb58","line":112,"range":{"start_line":111,"start_character":0,"end_line":112,"end_character":40},"updated":"2016-06-03 11:28:16.000000000","message":"Nice, you\u0027re keeping the old behaviour where no extra specs meant the host was OK.\n\n        if (not instance_type.obj_attr_is_set(\u0027extra_specs\u0027)\n                or not instance_type.extra_specs):\n            return True","commit_id":"6756a5677cc7e7efe1b6f57b686b15e4e1c16b11"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"bec5e8e6501f9140da41433b5b1a4e31638c4dda","unresolved":false,"context_lines":[{"line_number":108,"context_line":"aggregate metadata: {\"key\": \"1\", \"force_metadata_check\": \"True\"}"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"In this example, hosts in this aggregate will pass only using the flavor 1."},{"line_number":111,"context_line":"Without the key ``force_metadata_check`` set to \"True\", the flavor 3 will"},{"line_number":112,"context_line":"allow the use of hosts in the aggregate."},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"Use case 5"},{"line_number":115,"context_line":"^^^^^^^^^^"}],"source_content_type":"text/x-rst","patch_set":9,"id":"9abb7d3a_93284a87","line":112,"range":{"start_line":111,"start_character":0,"end_line":112,"end_character":40},"in_reply_to":"9abb7d3a_fc1feb58","updated":"2016-06-03 13:41:05.000000000","message":"Yes, we made this spec always maintaining backwards compatibility.","commit_id":"6756a5677cc7e7efe1b6f57b686b15e4e1c16b11"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"9eaf92621587242becb2ad107f1115c476c27e08","unresolved":false,"context_lines":[{"line_number":122,"context_line":"flavor 3 extra specs: {}"},{"line_number":123,"context_line":"aggregate metadata: {\"key\": \"*\", \"force_metadata_check\": \"True\"}"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"In this example, flavor 1 and 2 will pass hosts belonging to this aggregate."},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"flavor 1 extra specs: {\"key\": \"1\"}"},{"line_number":128,"context_line":"flavor 2 extra specs: {\"key\": \"2\"}"}],"source_content_type":"text/x-rst","patch_set":9,"id":"9abb7d3a_5c9a776f","line":125,"updated":"2016-06-03 11:28:16.000000000","message":"What happens if the operator wrote that metadata :\n\naggregate metadata: {\"key\": \"*\"}\n\nIn that case, flavor3 should pass if we keep the backwards-compatible behaviour. You should mention that explicitly.","commit_id":"6756a5677cc7e7efe1b6f57b686b15e4e1c16b11"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"bec5e8e6501f9140da41433b5b1a4e31638c4dda","unresolved":false,"context_lines":[{"line_number":122,"context_line":"flavor 3 extra specs: {}"},{"line_number":123,"context_line":"aggregate metadata: {\"key\": \"*\", \"force_metadata_check\": \"True\"}"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"In this example, flavor 1 and 2 will pass hosts belonging to this aggregate."},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"flavor 1 extra specs: {\"key\": \"1\"}"},{"line_number":128,"context_line":"flavor 2 extra specs: {\"key\": \"2\"}"}],"source_content_type":"text/x-rst","patch_set":9,"id":"9abb7d3a_33687eba","line":125,"in_reply_to":"9abb7d3a_5c9a776f","updated":"2016-06-03 13:41:05.000000000","message":"I\u0027ll write this example. In this case (with \"force\"\u003dFalse), the unique accepted flavor is 3, because doesn\u0027t require any key.","commit_id":"6756a5677cc7e7efe1b6f57b686b15e4e1c16b11"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"9eaf92621587242becb2ad107f1115c476c27e08","unresolved":false,"context_lines":[{"line_number":131,"context_line":""},{"line_number":132,"context_line":"In this second example, only flavor 3 will allow hosts in the aggregate."},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"This additional logic is backwards compatible with the existing one."},{"line_number":135,"context_line":""},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"Use case 6"}],"source_content_type":"text/x-rst","patch_set":9,"id":"9abb7d3a_3cf8537c","line":134,"updated":"2016-06-03 11:28:16.000000000","message":"see my point above, you need to make sure for claiming that that :\n\n- #1 if force_metadata_check key is not provided, any flavor without extra specs would be accepted (flipping the logic)\n\n\n- #2 if flavorX extra specs: {\"foo\": \"1\", \"bar\": \"2\"} and aggregate metadata is {\"foo\": \"1\"} then flavorX won\u0027t be accepted (corrollar to #1, applied with multiple specs per flavor)","commit_id":"6756a5677cc7e7efe1b6f57b686b15e4e1c16b11"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"bec5e8e6501f9140da41433b5b1a4e31638c4dda","unresolved":false,"context_lines":[{"line_number":131,"context_line":""},{"line_number":132,"context_line":"In this second example, only flavor 3 will allow hosts in the aggregate."},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"This additional logic is backwards compatible with the existing one."},{"line_number":135,"context_line":""},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"Use case 6"}],"source_content_type":"text/x-rst","patch_set":9,"id":"9abb7d3a_536702b7","line":134,"in_reply_to":"9abb7d3a_3cf8537c","updated":"2016-06-03 13:41:05.000000000","message":"You are right: we must add more information in this point to clarify the logical implications of not having \"force_metadata_check\".","commit_id":"6756a5677cc7e7efe1b6f57b686b15e4e1c16b11"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"9eaf92621587242becb2ad107f1115c476c27e08","unresolved":false,"context_lines":[{"line_number":149,"context_line":"flavor 4 extra specs: {}"},{"line_number":150,"context_line":"aggregate metadata: {\"key\": \"\u003cor\u003e 1 \u003cor\u003e 2\", \"force_metadata_check\": \"True\"}"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"In this example, only flavor 4 won’t pass the hosts inside the aggregate."},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"Use case 7"},{"line_number":155,"context_line":"^^^^^^^^^^"}],"source_content_type":"text/x-rst","patch_set":9,"id":"9abb7d3a_df593937","line":152,"updated":"2016-06-03 11:28:16.000000000","message":"Playing devils\u0027 advocate, what happens if :\n\naggregate metadata: {\"key\": \"\u003cor\u003e 1 \u003cor\u003e 2\"}, we\u0027re just literally only accepting flavors that match that string, ie. none of the flavors you provided, right?","commit_id":"6756a5677cc7e7efe1b6f57b686b15e4e1c16b11"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"bec5e8e6501f9140da41433b5b1a4e31638c4dda","unresolved":false,"context_lines":[{"line_number":149,"context_line":"flavor 4 extra specs: {}"},{"line_number":150,"context_line":"aggregate metadata: {\"key\": \"\u003cor\u003e 1 \u003cor\u003e 2\", \"force_metadata_check\": \"True\"}"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"In this example, only flavor 4 won’t pass the hosts inside the aggregate."},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"Use case 7"},{"line_number":155,"context_line":"^^^^^^^^^^"}],"source_content_type":"text/x-rst","patch_set":9,"id":"9abb7d3a_226e69c9","line":152,"in_reply_to":"9abb7d3a_df593937","updated":"2016-06-03 13:41:05.000000000","message":"That\u0027s correct: if the user writes this aggr metadata key, this is the expected behaviour.\n\nBy default, after the filter migration, no system will have this kind of aggr metadata. If an administrator modifies the aggr metadata and doesn\u0027t set the \"force_metadata_check\" key, the filter will check the string literally. If we don\u0027t want to have compatibility problems, we should not modify the former logic (but that\u0027s my opinion).\n\nBTW: I\u0027ll write this comment in the spec.","commit_id":"6756a5677cc7e7efe1b6f57b686b15e4e1c16b11"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"9eaf92621587242becb2ad107f1115c476c27e08","unresolved":false,"context_lines":[{"line_number":186,"context_line":"Proposed change"},{"line_number":187,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"A new host aggregates metadata entry flavor_extra_spec will be added."},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"The sentinel value asterisk ``*`` may be used to specify that any value"},{"line_number":192,"context_line":"is valid if the key is present. e.g. \"key1\" \u003d \"*\""}],"source_content_type":"text/x-rst","patch_set":9,"id":"9abb7d3a_35a22b4c","line":189,"range":{"start_line":189,"start_character":0,"end_line":189,"end_character":69},"updated":"2016-06-03 11:28:16.000000000","message":"I\u0027m maybe confused. I want to be 100% sure that operators won\u0027t need to modify neither their aggregates or their flavors for replacing the legacy filter by the one you propose. I guess you\u0027re proposing that new key for clarifying, but I want to make sure it won\u0027t break the existing.","commit_id":"6756a5677cc7e7efe1b6f57b686b15e4e1c16b11"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"bec5e8e6501f9140da41433b5b1a4e31638c4dda","unresolved":false,"context_lines":[{"line_number":186,"context_line":"Proposed change"},{"line_number":187,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"A new host aggregates metadata entry flavor_extra_spec will be added."},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"The sentinel value asterisk ``*`` may be used to specify that any value"},{"line_number":192,"context_line":"is valid if the key is present. e.g. \"key1\" \u003d \"*\""}],"source_content_type":"text/x-rst","patch_set":9,"id":"9abb7d3a_f334364b","line":189,"range":{"start_line":189,"start_character":0,"end_line":189,"end_character":69},"in_reply_to":"9abb7d3a_35a22b4c","updated":"2016-06-03 13:41:05.000000000","message":"I\u0027ll add this clarification: this is an extra key NOT needed, just used to add more/other logic to the filter. The new filter must be 100% backward compatible.","commit_id":"6756a5677cc7e7efe1b6f57b686b15e4e1c16b11"}],"specs/newton/approved/aggregate-instance-type-filter.rst":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"bee79d0ac0f40f0963ec7320f9c34df15384a763","unresolved":false,"context_lines":[{"line_number":96,"context_line":"Use case 4"},{"line_number":97,"context_line":"^^^^^^^^^^"},{"line_number":98,"context_line":"This use case could be used to force a flavor to contain a set of keys present"},{"line_number":99,"context_line":"in the aggregate metadata. This constrain is added to the normal filter"},{"line_number":100,"context_line":"process, which will try to match the keys present in the flavor with the keys"},{"line_number":101,"context_line":"in the aggregate metadata. To activate in the filter this new verification"},{"line_number":102,"context_line":"logic, a new metadata key is introduced: {\"force_metadata_check\": \"True\"}."}],"source_content_type":"text/x-rst","patch_set":10,"id":"7aa08908_ecc74710","line":99,"updated":"2016-06-06 16:57:37.000000000","message":"s/constrain/constraint/","commit_id":"9f6caedd338e171ef7ea57c6488ab41547f11557"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"6c1990096fd3ec047ff766072a8ffdd49a4e1fe1","unresolved":false,"context_lines":[{"line_number":96,"context_line":"Use case 4"},{"line_number":97,"context_line":"^^^^^^^^^^"},{"line_number":98,"context_line":"This use case could be used to force a flavor to contain a set of keys present"},{"line_number":99,"context_line":"in the aggregate metadata. This constrain is added to the normal filter"},{"line_number":100,"context_line":"process, which will try to match the keys present in the flavor with the keys"},{"line_number":101,"context_line":"in the aggregate metadata. To activate in the filter this new verification"},{"line_number":102,"context_line":"logic, a new metadata key is introduced: {\"force_metadata_check\": \"True\"}."}],"source_content_type":"text/x-rst","patch_set":10,"id":"7aa08908_6aa5dbb3","line":99,"in_reply_to":"7aa08908_ecc74710","updated":"2016-06-07 07:34:32.000000000","message":"Done","commit_id":"9f6caedd338e171ef7ea57c6488ab41547f11557"}]}
