)]}'
{"specs/newton/approved/distinct-subset-shard-scheduler.rst":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"a7ee2964d008fb44eb0eabcd068ffde093e3b488","unresolved":false,"context_lines":[{"line_number":14,"context_line":"and have requests routed to a separate nova-scheduler cluster for each subset."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Problem description"},{"line_number":17,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"In many deployments the hypervisor hosts can be grouped into distinct subsets,"},{"line_number":20,"context_line":"where ever user build request can only be served by one of those distinct"}],"source_content_type":"text/x-rst","patch_set":2,"id":"dab17558_e6b6e8da","line":17,"updated":"2016-05-16 14:30:46.000000000","message":"on reflection we have two things here, (1) a nice sharding, (2) splitting up the configuration","commit_id":"3763182018060908c75d89c190fe741bb3f6e216"},{"author":{"_account_id":7789,"name":"John Wood","email":"john.wood@rackspace.com","username":"woodster"},"change_message_id":"8adc0edc8b7b937cac5ace66db75eb3b45868ea5","unresolved":false,"context_lines":[{"line_number":28,"context_line":"rules for each subset. For example, you may want to isolate a set of hosts"},{"line_number":29,"context_line":"just for real time workloads. While much of this can be done with existing"},{"line_number":30,"context_line":"filters, its very messy. Having a separate scheduler, with a separate set of"},{"line_number":31,"context_line":"rules for each subset, is an easier metal model."},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"However, the main motivation around dedicated separate schedulers is so you"},{"line_number":34,"context_line":"can scale out the number of nova-schedulers in each of the host subsets to"}],"source_content_type":"text/x-rst","patch_set":2,"id":"bab6814e_186937bf","line":31,"updated":"2016-05-18 19:30:09.000000000","message":"nit: s/metal/mental?","commit_id":"3763182018060908c75d89c190fe741bb3f6e216"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"a7ee2964d008fb44eb0eabcd068ffde093e3b488","unresolved":false,"context_lines":[{"line_number":59,"context_line":""},{"line_number":60,"context_line":"* No impact to the scheduler API"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"* Setup one or more nova-scheduler processes for each distinct subset of hosts"},{"line_number":63,"context_line":"  by configuring the processes to be for a specific shard uuid, it then"},{"line_number":64,"context_line":"  listens on the queue \"scheduler.\u003cuuid\u003e\", if no uuid is set, it listens on"},{"line_number":65,"context_line":"  the default queue of \"scheduler\", i.e. the \"default\" shard."}],"source_content_type":"text/x-rst","patch_set":2,"id":"dab17558_8699dc7b","line":62,"range":{"start_line":62,"start_character":2,"end_line":62,"end_character":44},"updated":"2016-05-16 14:30:46.000000000","message":"Jay made a good point in today\u0027s meeting, this is messy.\n\nNow undoing that restriction is messy for the configuration, but its worth considering.","commit_id":"3763182018060908c75d89c190fe741bb3f6e216"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"f385061feb84fb194caf945a02fd8f4d1d18cc4b","unresolved":false,"context_lines":[{"line_number":30,"context_line":"rules for each subset. For example, you may want to isolate a set of hosts"},{"line_number":31,"context_line":"just for real time workloads. While much of this can be done with existing"},{"line_number":32,"context_line":"filters, its very messy. Having a separate set of configuration for each"},{"line_number":33,"context_line":"subset, is an easier metal model."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"However, the main motivation around this is to help shard the work of the"},{"line_number":36,"context_line":"scheduler, so we are able to scale out the scheduler. They key thing this"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9abb7d3a_4a1144ac","line":33,"range":{"start_line":33,"start_character":21,"end_line":33,"end_character":26},"updated":"2016-05-27 14:41:56.000000000","message":"mental","commit_id":"5e90f4956a4080bb1eda0828c226b0b6d00d2e7e"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"f385061feb84fb194caf945a02fd8f4d1d18cc4b","unresolved":false,"context_lines":[{"line_number":35,"context_line":"However, the main motivation around this is to help shard the work of the"},{"line_number":36,"context_line":"scheduler, so we are able to scale out the scheduler. They key thing this"},{"line_number":37,"context_line":"helps with is reducing the contention when claiming a host in a way that"},{"line_number":38,"context_line":"aligns with existing capacity planning concerns. With more aribry modulo"},{"line_number":39,"context_line":"based shardings, with certain pathalogical build patterns, its possible"},{"line_number":40,"context_line":"to end up with very \"lumpy\" capacity spreading."},{"line_number":41,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"9abb7d3a_ea775800","line":38,"range":{"start_line":38,"start_character":59,"end_line":38,"end_character":65},"updated":"2016-05-27 14:41:56.000000000","message":"arbitrary","commit_id":"5e90f4956a4080bb1eda0828c226b0b6d00d2e7e"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"44591615a692ff341b04b65b37c851fd60998295","unresolved":false,"context_lines":[{"line_number":39,"context_line":"based shardings, with certain pathalogical build patterns, its possible"},{"line_number":40,"context_line":"to end up with very \"lumpy\" capacity spreading."},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"Existing cells v1 users are used to have separate scheduling rules for each"},{"line_number":43,"context_line":"cell, and scaling out the scheduler separately in each cell. Adopting this"},{"line_number":44,"context_line":"subset scheduler will ease the transition from cells v1 to cells v2. The big"},{"line_number":45,"context_line":"change between this proposal and the existing cells v1 scheduler is that it"},{"line_number":46,"context_line":"is not a hierarchical scheduler, its a sharded shared state scheduler."},{"line_number":47,"context_line":"There are issues with the cells v1 scheduler because of the need to child"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9abb7d3a_a3e877e3","line":44,"range":{"start_line":42,"start_character":0,"end_line":44,"end_character":69},"updated":"2016-05-31 09:17:23.000000000","message":"TBH, the above is the main motivation driver for this idea of sharding the schedulers, which I am, at first hand, not fully on-board with the idea yet, but can be envisaged for very specific deployment-related heterogenous workloads.","commit_id":"5e90f4956a4080bb1eda0828c226b0b6d00d2e7e"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"08c8f5c68cbb421bab9fa86a14861afef10c346a","unresolved":false,"context_lines":[{"line_number":39,"context_line":"based shardings, with certain pathalogical build patterns, its possible"},{"line_number":40,"context_line":"to end up with very \"lumpy\" capacity spreading."},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"Existing cells v1 users are used to have separate scheduling rules for each"},{"line_number":43,"context_line":"cell, and scaling out the scheduler separately in each cell. Adopting this"},{"line_number":44,"context_line":"subset scheduler will ease the transition from cells v1 to cells v2. The big"},{"line_number":45,"context_line":"change between this proposal and the existing cells v1 scheduler is that it"},{"line_number":46,"context_line":"is not a hierarchical scheduler, its a sharded shared state scheduler."},{"line_number":47,"context_line":"There are issues with the cells v1 scheduler because of the need to child"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9abb7d3a_3ed60328","line":44,"range":{"start_line":42,"start_character":0,"end_line":44,"end_character":69},"in_reply_to":"9abb7d3a_a3e877e3","updated":"2016-06-01 15:59:55.000000000","message":"So if we don\u0027t have a story for this, its hard to delete cells v1.\n\nThere is a general thing with a single region that has several logically different sets of resources, as described elsewhere here.","commit_id":"5e90f4956a4080bb1eda0828c226b0b6d00d2e7e"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"44591615a692ff341b04b65b37c851fd60998295","unresolved":false,"context_lines":[{"line_number":42,"context_line":"Existing cells v1 users are used to have separate scheduling rules for each"},{"line_number":43,"context_line":"cell, and scaling out the scheduler separately in each cell. Adopting this"},{"line_number":44,"context_line":"subset scheduler will ease the transition from cells v1 to cells v2. The big"},{"line_number":45,"context_line":"change between this proposal and the existing cells v1 scheduler is that it"},{"line_number":46,"context_line":"is not a hierarchical scheduler, its a sharded shared state scheduler."},{"line_number":47,"context_line":"There are issues with the cells v1 scheduler because of the need to child"},{"line_number":48,"context_line":"cells to report capacity to the parent cell, this scheduler in this proposal"},{"line_number":49,"context_line":"avoids those problems. Another bit difference is while the subset can be"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9abb7d3a_23bbe7e6","line":46,"range":{"start_line":45,"start_character":73,"end_line":46,"end_character":31},"updated":"2016-05-31 09:17:23.000000000","message":"yes please, this is very very important.","commit_id":"5e90f4956a4080bb1eda0828c226b0b6d00d2e7e"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"f385061feb84fb194caf945a02fd8f4d1d18cc4b","unresolved":false,"context_lines":[{"line_number":46,"context_line":"is not a hierarchical scheduler, its a sharded shared state scheduler."},{"line_number":47,"context_line":"There are issues with the cells v1 scheduler because of the need to child"},{"line_number":48,"context_line":"cells to report capacity to the parent cell, this scheduler in this proposal"},{"line_number":49,"context_line":"avoids those problems. Another bit difference is while the subset can be"},{"line_number":50,"context_line":"aligned with cells boundaries, that is not a required. You can now add a cell"},{"line_number":51,"context_line":"that has a mix of hosts from each type of host type. It is worth noting that"},{"line_number":52,"context_line":"different cells of compute can be managed by different teams."}],"source_content_type":"text/x-rst","patch_set":3,"id":"9abb7d3a_6a9fe803","line":49,"range":{"start_line":49,"start_character":31,"end_line":49,"end_character":34},"updated":"2016-05-27 14:41:56.000000000","message":"big","commit_id":"5e90f4956a4080bb1eda0828c226b0b6d00d2e7e"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"f385061feb84fb194caf945a02fd8f4d1d18cc4b","unresolved":false,"context_lines":[{"line_number":56,"context_line":""},{"line_number":57,"context_line":"* Provide different scheduling rules for each distinct subsets of hosts,"},{"line_number":58,"context_line":"  for example you may want to stack first resources on SSD based hosts,"},{"line_number":59,"context_line":"  but spread first resources on spinning rust based hosts. In a similar way"},{"line_number":60,"context_line":"  ironic resources are likely to have a (logically) different set of filters"},{"line_number":61,"context_line":"  you want to apply to that set of hosts."},{"line_number":62,"context_line":"* Help scale out the scheduler by making use of an existing sharding that is"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9abb7d3a_aab0b08c","line":59,"range":{"start_line":59,"start_character":41,"end_line":59,"end_character":45},"updated":"2016-05-27 14:41:56.000000000","message":"Was this intentional? :)","commit_id":"5e90f4956a4080bb1eda0828c226b0b6d00d2e7e"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"08c8f5c68cbb421bab9fa86a14861afef10c346a","unresolved":false,"context_lines":[{"line_number":56,"context_line":""},{"line_number":57,"context_line":"* Provide different scheduling rules for each distinct subsets of hosts,"},{"line_number":58,"context_line":"  for example you may want to stack first resources on SSD based hosts,"},{"line_number":59,"context_line":"  but spread first resources on spinning rust based hosts. In a similar way"},{"line_number":60,"context_line":"  ironic resources are likely to have a (logically) different set of filters"},{"line_number":61,"context_line":"  you want to apply to that set of hosts."},{"line_number":62,"context_line":"* Help scale out the scheduler by making use of an existing sharding that is"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9abb7d3a_beeaf3d8","line":59,"range":{"start_line":59,"start_character":41,"end_line":59,"end_character":45},"in_reply_to":"9abb7d3a_aab0b08c","updated":"2016-06-01 15:59:55.000000000","message":"yep, I should probably call it something better.","commit_id":"5e90f4956a4080bb1eda0828c226b0b6d00d2e7e"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"44591615a692ff341b04b65b37c851fd60998295","unresolved":false,"context_lines":[{"line_number":75,"context_line":"  member of zero or one shards. If it is in zero shards it is considered"},{"line_number":76,"context_line":"  to be in the \"default\" shard. If a host is a member of multiple shards"},{"line_number":77,"context_line":"  a warning should be logged, and it should be considered part of the"},{"line_number":78,"context_line":"  default shard."},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"* The host aggregate optionally can override any scheduler configuration"},{"line_number":81,"context_line":"  options, by setting the key \"conf:\u003cname_of_conf\u003e\". The option is assumed to"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9abb7d3a_a3dcf7e4","line":78,"updated":"2016-05-31 09:17:23.000000000","message":"that semantics makes it very analog to the concept of Availability Zones, in terms of exclusive sets of hosts. I\u0027m not saying we should favor AZs for that vs. aggregates, just that aggregates are probably a wrong notion.\n\nAggregates are maybe a false concept to consider because it does allow some complex grouping of hosts, either subsets and supersets, or where the union of two aggregates can be not empty.\n\nHere, we\u0027re talking of shards, which denote a strong set theory notion of exclusiveness.","commit_id":"5e90f4956a4080bb1eda0828c226b0b6d00d2e7e"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"56d2d4d62d945af5275ff030fb37a7915874d1d7","unresolved":false,"context_lines":[{"line_number":75,"context_line":"  member of zero or one shards. If it is in zero shards it is considered"},{"line_number":76,"context_line":"  to be in the \"default\" shard. If a host is a member of multiple shards"},{"line_number":77,"context_line":"  a warning should be logged, and it should be considered part of the"},{"line_number":78,"context_line":"  default shard."},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"* The host aggregate optionally can override any scheduler configuration"},{"line_number":81,"context_line":"  options, by setting the key \"conf:\u003cname_of_conf\u003e\". The option is assumed to"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9abb7d3a_d2d4e2be","line":78,"in_reply_to":"9abb7d3a_a3dcf7e4","updated":"2016-06-02 08:14:42.000000000","message":"So not all aggregates are a shard, its just using aggregates to represent the shards.\n\nI was thinking about a separate concept, like top level each compute reporting which shard they are in, but it just seemed to complicate things for no good reason.","commit_id":"5e90f4956a4080bb1eda0828c226b0b6d00d2e7e"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"f385061feb84fb194caf945a02fd8f4d1d18cc4b","unresolved":false,"context_lines":[{"line_number":80,"context_line":"* The host aggregate optionally can override any scheduler configuration"},{"line_number":81,"context_line":"  options, by setting the key \"conf:\u003cname_of_conf\u003e\". The option is assumed to"},{"line_number":82,"context_line":"  be in the scheduler group of options. This allows each shard to have its own"},{"line_number":83,"context_line":"  separate list of filter and weigher configurations, if needed."},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"* A flavor can have an associated shard uuid. If it does not, it is assumed"},{"line_number":86,"context_line":"  to be sent to hosts from the \"default\" shard."}],"source_content_type":"text/x-rst","patch_set":3,"id":"9abb7d3a_4d25dea9","line":83,"updated":"2016-05-27 14:41:56.000000000","message":"Rather than a generic override can this be narrowed to just overriding the filters/weighers?","commit_id":"5e90f4956a4080bb1eda0828c226b0b6d00d2e7e"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"08c8f5c68cbb421bab9fa86a14861afef10c346a","unresolved":false,"context_lines":[{"line_number":80,"context_line":"* The host aggregate optionally can override any scheduler configuration"},{"line_number":81,"context_line":"  options, by setting the key \"conf:\u003cname_of_conf\u003e\". The option is assumed to"},{"line_number":82,"context_line":"  be in the scheduler group of options. This allows each shard to have its own"},{"line_number":83,"context_line":"  separate list of filter and weigher configurations, if needed."},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"* A flavor can have an associated shard uuid. If it does not, it is assumed"},{"line_number":86,"context_line":"  to be sent to hosts from the \"default\" shard."}],"source_content_type":"text/x-rst","patch_set":3,"id":"9abb7d3a_6b1baa81","line":83,"in_reply_to":"9abb7d3a_4d25dea9","updated":"2016-06-01 15:59:55.000000000","message":"Yeah, this is a bit general. It just the filters and weigher have conf settings that also need to be set. But you are right, this is too wide.","commit_id":"5e90f4956a4080bb1eda0828c226b0b6d00d2e7e"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"f385061feb84fb194caf945a02fd8f4d1d18cc4b","unresolved":false,"context_lines":[{"line_number":82,"context_line":"  be in the scheduler group of options. This allows each shard to have its own"},{"line_number":83,"context_line":"  separate list of filter and weigher configurations, if needed."},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"* A flavor can have an associated shard uuid. If it does not, it is assumed"},{"line_number":86,"context_line":"  to be sent to hosts from the \"default\" shard."},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"* When the scheduler looks at a request for a specific shard, it applies the"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9abb7d3a_ad68cabb","line":85,"updated":"2016-05-27 14:41:56.000000000","message":"How does a flavor have an associated shard uuid?","commit_id":"5e90f4956a4080bb1eda0828c226b0b6d00d2e7e"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"08c8f5c68cbb421bab9fa86a14861afef10c346a","unresolved":false,"context_lines":[{"line_number":82,"context_line":"  be in the scheduler group of options. This allows each shard to have its own"},{"line_number":83,"context_line":"  separate list of filter and weigher configurations, if needed."},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"* A flavor can have an associated shard uuid. If it does not, it is assumed"},{"line_number":86,"context_line":"  to be sent to hosts from the \"default\" shard."},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"* When the scheduler looks at a request for a specific shard, it applies the"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9abb7d3a_266279d8","line":85,"in_reply_to":"9abb7d3a_034ea395","updated":"2016-06-01 15:59:55.000000000","message":"So this is just one possible way to do the split, but it seems to be the most common one that keeps coming up.\n\nWe need some way to route each user request to one, and only one of the shards. Largely, it seems this is done by the flavor that is chosen.\n\nNow I could see us supporting additional ways in the future, but this seems like a reasonable starting point.","commit_id":"5e90f4956a4080bb1eda0828c226b0b6d00d2e7e"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"56d2d4d62d945af5275ff030fb37a7915874d1d7","unresolved":false,"context_lines":[{"line_number":82,"context_line":"  be in the scheduler group of options. This allows each shard to have its own"},{"line_number":83,"context_line":"  separate list of filter and weigher configurations, if needed."},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"* A flavor can have an associated shard uuid. If it does not, it is assumed"},{"line_number":86,"context_line":"  to be sent to hosts from the \"default\" shard."},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"* When the scheduler looks at a request for a specific shard, it applies the"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9abb7d3a_b22f9ea6","line":85,"in_reply_to":"9abb7d3a_1c586255","updated":"2016-06-02 08:14:42.000000000","message":"Very good point, I should make it clear this is just a starting point.\n\nIn terms of a shard uuid, thats a good point, this is just metadata on and aggregate and a flavor right now. That is a little... loose. Maybe its really just a shard name right now, and I should name it as such.","commit_id":"5e90f4956a4080bb1eda0828c226b0b6d00d2e7e"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"eab3042aa510f601f79aee0aeb88bb104b97da1d","unresolved":false,"context_lines":[{"line_number":82,"context_line":"  be in the scheduler group of options. This allows each shard to have its own"},{"line_number":83,"context_line":"  separate list of filter and weigher configurations, if needed."},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"* A flavor can have an associated shard uuid. If it does not, it is assumed"},{"line_number":86,"context_line":"  to be sent to hosts from the \"default\" shard."},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"* When the scheduler looks at a request for a specific shard, it applies the"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9abb7d3a_1c586255","line":85,"in_reply_to":"9abb7d3a_266279d8","updated":"2016-06-01 16:49:20.000000000","message":"Picking an easy starting point is good. But I think it should be clear that the routing is intended to eventually be extensible even if it doesn\u0027t start that way. That will affect the implementation.\n\nHow you intend to create a shard uuid is still an open question. Ideally I feel that this would key off of something else, like a flavor class, but a sharding uuid could be fine if handled well.","commit_id":"5e90f4956a4080bb1eda0828c226b0b6d00d2e7e"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"44591615a692ff341b04b65b37c851fd60998295","unresolved":false,"context_lines":[{"line_number":82,"context_line":"  be in the scheduler group of options. This allows each shard to have its own"},{"line_number":83,"context_line":"  separate list of filter and weigher configurations, if needed."},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"* A flavor can have an associated shard uuid. If it does not, it is assumed"},{"line_number":86,"context_line":"  to be sent to hosts from the \"default\" shard."},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"* When the scheduler looks at a request for a specific shard, it applies the"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9abb7d3a_034ea395","line":85,"in_reply_to":"9abb7d3a_ad68cabb","updated":"2016-05-31 09:17:23.000000000","message":"Right, I don\u0027t really like the idea of using flavors for implicitly giving which shard an instance should be using.","commit_id":"5e90f4956a4080bb1eda0828c226b0b6d00d2e7e"}],"specs/newton/distinct-subset-shard-scheduler.rst":[{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"cdf2eb3188db087caf55c3783edd5745ab822ff2","unresolved":false,"context_lines":[{"line_number":58,"context_line":"There are several key steps:"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"* Setup multiple scheduler clusters. So we need the ability to create new"},{"line_number":61,"context_line":"  scheduler database for each cluster"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"* Compute hosts configured to send their scheduler calls and info to a"},{"line_number":64,"context_line":"  specific scheduler cluster. Each compute node must only be a member of"}],"source_content_type":"text/x-rst","patch_set":1,"id":"dab17558_1126d114","line":61,"updated":"2016-05-10 13:22:08.000000000","message":"Couldn\u0027t all of the schedulers share the database but only concern themselves with a subset of the data in it? If the list of compute hosts can be filtered in the db I think you can avoid setting up multiple databases.","commit_id":"bc24a9a3ea6f699edcec6c0f7628cc8c4d5c2d0a"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"b9bb665255b16d9da915fedb5583a695b2cbd717","unresolved":false,"context_lines":[{"line_number":58,"context_line":"There are several key steps:"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"* Setup multiple scheduler clusters. So we need the ability to create new"},{"line_number":61,"context_line":"  scheduler database for each cluster"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"* Compute hosts configured to send their scheduler calls and info to a"},{"line_number":64,"context_line":"  specific scheduler cluster. Each compute node must only be a member of"}],"source_content_type":"text/x-rst","patch_set":1,"id":"dab17558_bb05e946","line":61,"in_reply_to":"dab17558_1126d114","updated":"2016-05-11 12:44:38.000000000","message":"I like the failure independence you get from separate DBs for each shard, but you are correct, you can get 99% of the benefits without doing that (as I assume our contention is row based).\n\nI would like to keep the option open, but let me put this into a phase 2, or similar. We should probably try to avoid that complexity.","commit_id":"bc24a9a3ea6f699edcec6c0f7628cc8c4d5c2d0a"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"cdf2eb3188db087caf55c3783edd5745ab822ff2","unresolved":false,"context_lines":[{"line_number":65,"context_line":"  one scheduler cluster."},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"* API conductor has configuration that assigns a uuid to a scheduler"},{"line_number":68,"context_line":"  connection URL"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"* Ability to map a specific flavor to scheduler cluster uuid."},{"line_number":71,"context_line":"  We could add this in flavor extra specs, \"scheduler_cluster\"\u003d\u003cuuid\u003e"}],"source_content_type":"text/x-rst","patch_set":1,"id":"dab17558_b1bee562","line":68,"updated":"2016-05-10 13:22:08.000000000","message":"I\u0027m pretty strongly against this. Any sharding of the scheduler should be hidden behind the scheduler API. From a Nova POV, considering Nova to be everything but the scheduler, it should just make a single API call to get a destination. How the scheduler achieves that, or scales, is an implementation detail that does not need to be exposed.\n\nSo what I would expect is that the scheduler would have a top level router node to direct a scheduling request to the correct scheduling shard.","commit_id":"bc24a9a3ea6f699edcec6c0f7628cc8c4d5c2d0a"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"cdf2eb3188db087caf55c3783edd5745ab822ff2","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"* Ability to map a specific flavor to scheduler cluster uuid."},{"line_number":71,"context_line":"  We could add this in flavor extra specs, \"scheduler_cluster\"\u003d\u003cuuid\u003e"},{"line_number":72,"context_line":"  where the uuid can be used to look up the scheduler configuration"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"* The API conductor can now use the flavor information, and its configuration"},{"line_number":75,"context_line":"  to route build requests to the correct scheduler. Should the flavor not have"}],"source_content_type":"text/x-rst","patch_set":1,"id":"dab17558_8c06241b","line":72,"updated":"2016-05-10 13:22:08.000000000","message":"As above, this should be hidden in the scheduler.\n\nAlso, please do not use flavor extra specs. The flavor doesn\u0027t know where it needs to go, the scheduler knows where a flavor needs to go.\n\nAdditionally this only deals with sharding along flavor lines. There may end up being different partitioning schemes that deployers would like to use so I don\u0027t think the concept of sharding with flavors should be too baked in. Unless this is only about sharding with flavors in which case I think it should be very clear that\u0027s the case. Like rename this to flavor sharding scheduler.","commit_id":"bc24a9a3ea6f699edcec6c0f7628cc8c4d5c2d0a"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"fb3d13334260e34236b6a600989ce1361f974d53","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"* Ability to map a specific flavor to scheduler cluster uuid."},{"line_number":71,"context_line":"  We could add this in flavor extra specs, \"scheduler_cluster\"\u003d\u003cuuid\u003e"},{"line_number":72,"context_line":"  where the uuid can be used to look up the scheduler configuration"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"* The API conductor can now use the flavor information, and its configuration"},{"line_number":75,"context_line":"  to route build requests to the correct scheduler. Should the flavor not have"}],"source_content_type":"text/x-rst","patch_set":1,"id":"bab6814e_7814399f","line":72,"in_reply_to":"bab6814e_b86ce1d0","updated":"2016-05-26 20:51:18.000000000","message":"Yes, a generic router is what I was getting at. From a client point of view the API is what\u0027s important and the implementation should not change it. Then a deployer could choose to route requests to various cells schedulers based on the flavor class as input, assuming Nova has this knowledge, and another deployer could route based on different criteria if they chose to.\n\nI also would like to retain the ability to plug in a completely different scheduler as well which is why I would like the API to be independent of the implementation.","commit_id":"bc24a9a3ea6f699edcec6c0f7628cc8c4d5c2d0a"},{"author":{"_account_id":7789,"name":"John Wood","email":"john.wood@rackspace.com","username":"woodster"},"change_message_id":"732113ecd9789fe2f07fd859c6dc3062a5064f0c","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"* Ability to map a specific flavor to scheduler cluster uuid."},{"line_number":71,"context_line":"  We could add this in flavor extra specs, \"scheduler_cluster\"\u003d\u003cuuid\u003e"},{"line_number":72,"context_line":"  where the uuid can be used to look up the scheduler configuration"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"* The API conductor can now use the flavor information, and its configuration"},{"line_number":75,"context_line":"  to route build requests to the correct scheduler. Should the flavor not have"}],"source_content_type":"text/x-rst","patch_set":1,"id":"bab6814e_b86ce1d0","line":72,"in_reply_to":"dab17558_8c06241b","updated":"2016-05-26 20:39:44.000000000","message":"So if I\u0027m understanding your concern Andrew, you\u0027d like for clients (as well as Nova the future client of a separate scheduler API) that ask to create instances to not be aware of *how* they are being scheduled. Would the notion of a scheduler \u0027group\u0027 or \u0027route\u0027 that only exists within the scheduler API help out then? It could accept instance information (flavor in the case of Rackspace-style flavor classes) and then route the request to a particular scheduler to handle the request. This would be that \u0027top level scheduling\u0027 process you mention above I believe?\n\nYes, I am also trying to find a \u0027home\u0027 for our internal flavor classes (whereby a flavor is tagged with a class name, and then cells that can handle these flavored instances are configured to have that class name. A cell filter in the scheduler does the final matching). \n\nIt seems a generic router would be able to act on any part of the request\u0027s data to do a similar matching action, except it would delegate to a separate hierarchical scheduling process rather than trying to add a new custom filter in a monolithic scheduler.","commit_id":"bc24a9a3ea6f699edcec6c0f7628cc8c4d5c2d0a"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"cdf2eb3188db087caf55c3783edd5745ab822ff2","unresolved":false,"context_lines":[{"line_number":74,"context_line":"* The API conductor can now use the flavor information, and its configuration"},{"line_number":75,"context_line":"  to route build requests to the correct scheduler. Should the flavor not have"},{"line_number":76,"context_line":"  a cluster uuid specified, we fallback to the api cell database and RPC"},{"line_number":77,"context_line":"  to use the \"default\" scheduler."},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"Alternatives"},{"line_number":80,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"dab17558_4c19dc78","line":77,"updated":"2016-05-10 13:22:08.000000000","message":"Again, this should be the responsibility of the scheduler, not Nova.","commit_id":"bc24a9a3ea6f699edcec6c0f7628cc8c4d5c2d0a"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"b9bb665255b16d9da915fedb5583a695b2cbd717","unresolved":false,"context_lines":[{"line_number":74,"context_line":"* The API conductor can now use the flavor information, and its configuration"},{"line_number":75,"context_line":"  to route build requests to the correct scheduler. Should the flavor not have"},{"line_number":76,"context_line":"  a cluster uuid specified, we fallback to the api cell database and RPC"},{"line_number":77,"context_line":"  to use the \"default\" scheduler."},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"Alternatives"},{"line_number":80,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"dab17558_1b6995f9","line":77,"in_reply_to":"dab17558_4c19dc78","updated":"2016-05-11 12:44:38.000000000","message":"Yeah, good point, it works better if the scheduler understands the shard, rather than Nova understanding multiple schedulers.\n\nI was thinking true failure independence, but thats overkill / over complex.","commit_id":"bc24a9a3ea6f699edcec6c0f7628cc8c4d5c2d0a"}]}
