)]}'
{"specs/queens/approved/return-destination-objects.rst":[{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"45a5bf64fe5415b0f6fb51c0acb18e75675cbd40","unresolved":false,"context_lines":[{"line_number":61,"context_line":"We could cache the allocation data in placement, and simply return a key along"},{"line_number":62,"context_line":"with the resource providers. When a claim needs to be made, the key would be"},{"line_number":63,"context_line":"POSTed instead of the full allocation data, and placement would use the cached"},{"line_number":64,"context_line":"data to carry out the claim."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"We could just return an unstructured bunch of Python data, and add a ton of"},{"line_number":67,"context_line":"comments everywhere it is used in the hope that anyone looking at the code"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7f287b81_81f0cffe","line":64,"updated":"2017-09-20 17:21:49.000000000","message":"to be complete, my idea was to use a cache-as-global-ram solution: scheduler puts the allocation requests in the cache, gives keys to super conductor which gives them to cell conductor, which uses the key to retrieve from global ram.\n\nAfter the scheduler has chosen the destinations the data is static.\n\nHaving placement cache the data I think is definitely a bad idea.","commit_id":"9fdbbe9f84c2dc84e2f8743b9fa9d7fde921833c"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"45a5bf64fe5415b0f6fb51c0acb18e75675cbd40","unresolved":false,"context_lines":[{"line_number":65,"context_line":""},{"line_number":66,"context_line":"We could just return an unstructured bunch of Python data, and add a ton of"},{"line_number":67,"context_line":"comments everywhere it is used in the hope that anyone looking at the code"},{"line_number":68,"context_line":"would understand what each bit represents."},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"Data model impact"},{"line_number":71,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7f287b81_21e59b09","line":68,"updated":"2017-09-20 17:21:49.000000000","message":"I really think this is overstating the situation and fear mongering a bit. The data being described in the proposed solution is a list of DestinationLists. Each Destination contains a compute host and the allocation request required to claim it. That\u0027s two attributes, for which the value is something that code does not need to look at.\n\nPython data, as a list of lists, with a dict or two keys is not significantly different, except that for a \"newcomer to the Nova codebase\" it is just python and operates just like Python.\n\nI don\u0027t see what\u0027s significantly different between `foo.bar` and `foo[\u0027bar\u0027]` except that the former makes people who like OO a bit more comfy.\n\nIf the goal here is that we want versioned and documented objects that have strictly typed structure, let\u0027s say that\u0027s what we want, but let\u0027s not wrap it up in a bunch of language about accessibility. It\u0027s not that","commit_id":"9fdbbe9f84c2dc84e2f8743b9fa9d7fde921833c"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"135e49d03d0ad750c45693e1aab36d4fd33b293c","unresolved":false,"context_lines":[{"line_number":61,"context_line":"We could cache the allocation data in placement, and simply return a key along"},{"line_number":62,"context_line":"with the resource providers. When a claim needs to be made, the key would be"},{"line_number":63,"context_line":"POSTed instead of the full allocation data, and placement would use the cached"},{"line_number":64,"context_line":"data to carry out the claim."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"We could just return an unstructured bunch of Python data, and add a ton of"},{"line_number":67,"context_line":"comments everywhere it is used in the hope that anyone looking at the code"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f287b81_61860316","line":64,"updated":"2017-08-29 15:06:23.000000000","message":"to be complete, my idea was to use a cache-as-global-ram solution: scheduler puts the allocation requests in the cache, gives keys to super conductor which gives them to cell conductor, which uses the key to retrieve from global ram.\n\nAfter the scheduler has chosen the destinations the data is static.\n\nHaving placement cache the data I think is definitely a bad idea.","commit_id":"0d2ff62e76d9438e27ab0600c265012bea183148"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"5cc9d2f696387fbaee1dc15ac09aba56b4916a71","unresolved":false,"context_lines":[{"line_number":61,"context_line":"We could cache the allocation data in placement, and simply return a key along"},{"line_number":62,"context_line":"with the resource providers. When a claim needs to be made, the key would be"},{"line_number":63,"context_line":"POSTed instead of the full allocation data, and placement would use the cached"},{"line_number":64,"context_line":"data to carry out the claim."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"We could just return an unstructured bunch of Python data, and add a ton of"},{"line_number":67,"context_line":"comments everywhere it is used in the hope that anyone looking at the code"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f287b81_dcd480eb","line":64,"in_reply_to":"7f287b81_1c3a08cb","updated":"2017-08-29 15:44:05.000000000","message":"that\u0027s why I said \"to be complete\": One of the other alternatives was my idea, as explained. I wasn\u0027t suggesting you include it, merely pointing out some of the differences between some of the ideas, so that the record has more detail, which is useful (I think) as we discuss this. It doesn\u0027t need to go in the final doc or anything.","commit_id":"0d2ff62e76d9438e27ab0600c265012bea183148"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"9465236857bce45b2f263eaccef48e7a0c111f53","unresolved":false,"context_lines":[{"line_number":61,"context_line":"We could cache the allocation data in placement, and simply return a key along"},{"line_number":62,"context_line":"with the resource providers. When a claim needs to be made, the key would be"},{"line_number":63,"context_line":"POSTed instead of the full allocation data, and placement would use the cached"},{"line_number":64,"context_line":"data to carry out the claim."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"We could just return an unstructured bunch of Python data, and add a ton of"},{"line_number":67,"context_line":"comments everywhere it is used in the hope that anyone looking at the code"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f287b81_1c3a08cb","line":64,"in_reply_to":"7f287b81_61860316","updated":"2017-08-29 15:23:55.000000000","message":"We discussed several approaches to the cache; this is the one that I proposed in the blog post in the references. I don\u0027t think it\u0027s too important to debate the implementation details of an approach that we\u0027ve rejected.","commit_id":"0d2ff62e76d9438e27ab0600c265012bea183148"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"135e49d03d0ad750c45693e1aab36d4fd33b293c","unresolved":false,"context_lines":[{"line_number":65,"context_line":""},{"line_number":66,"context_line":"We could just return an unstructured bunch of Python data, and add a ton of"},{"line_number":67,"context_line":"comments everywhere it is used in the hope that anyone looking at the code"},{"line_number":68,"context_line":"would understand what each bit represents."},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"Data model impact"},{"line_number":71,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f287b81_0175ff31","line":68,"updated":"2017-08-29 15:06:23.000000000","message":"I really think this is overstating the situation and fear mongering a bit. The data being described in the proposed solution is a list of DestinationLists. Each Destination contains a compute host and the allocation request required to claim it. That\u0027s two attributes, for which the value is something that code does not need to look at.\n\nPython data, as a list of lists, with a dict or two keys is not significantly different, except that for a \"newcomer to the Nova codebase\" it is just python and operates just like Python.\n\nI don\u0027t see what\u0027s significantly different between `foo.bar` and `foo[\u0027bar\u0027]` except that the former makes people who like OO a bit more comfy.\n\nIf the goal here is that we want versioned and documented objects that have strictly typed structure, let\u0027s say that\u0027s what we want, but let\u0027s not wrap it up in a bunch of language about accessibility. It\u0027s not that","commit_id":"0d2ff62e76d9438e27ab0600c265012bea183148"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"9465236857bce45b2f263eaccef48e7a0c111f53","unresolved":false,"context_lines":[{"line_number":65,"context_line":""},{"line_number":66,"context_line":"We could just return an unstructured bunch of Python data, and add a ton of"},{"line_number":67,"context_line":"comments everywhere it is used in the hope that anyone looking at the code"},{"line_number":68,"context_line":"would understand what each bit represents."},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"Data model impact"},{"line_number":71,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f287b81_4161c704","line":68,"in_reply_to":"7f287b81_0175ff31","updated":"2017-08-29 15:23:55.000000000","message":"Well, yeah, it is. For example, the conductor can ask the object to give it a host to build on. If that fails, the conductor can ask the object to give it another host. The object will handle tracking of which host is \"next in line\" to try, and whether it needs to be claimed (selected vs. alternate). It\u0027s not simply a case of \"foo[\u0027bar\u0027]\" vs. \"foo.bar\" - that\u0027s a gross oversimplification.","commit_id":"0d2ff62e76d9438e27ab0600c265012bea183148"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"5cc9d2f696387fbaee1dc15ac09aba56b4916a71","unresolved":false,"context_lines":[{"line_number":65,"context_line":""},{"line_number":66,"context_line":"We could just return an unstructured bunch of Python data, and add a ton of"},{"line_number":67,"context_line":"comments everywhere it is used in the hope that anyone looking at the code"},{"line_number":68,"context_line":"would understand what each bit represents."},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"Data model impact"},{"line_number":71,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f287b81_9c0cb8a5","line":68,"in_reply_to":"7f287b81_4161c704","updated":"2017-08-29 15:44:05.000000000","message":"The lack of detail you mention in your top level response is perhaps why I\u0027ve made a gross oversimplification? The proposed change doesn\u0027t appear to say anything about a DestinationList being a stateful iterator (which would be nice).\n\nHowever I understand that you can use pop() on a static list to get the \"next in line\", which is presumably the same thing as long as we are always in the same conductor when we do a retry.\n\nif we\u0027re not always in the same conductor when we do a retry, then managing state (whether it is a list or a DestinationList) is going to be a party.","commit_id":"0d2ff62e76d9438e27ab0600c265012bea183148"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"09e62e0cae53f458c2d2707a8717cc34dc59b06b","unresolved":false,"context_lines":[{"line_number":49,"context_line":"Proposed change"},{"line_number":50,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"We propose to create a new Destination object that would contain the data that"},{"line_number":53,"context_line":"represents a single destination: both the host information as well as the"},{"line_number":54,"context_line":"corresponding allocation needed for claiming. The host information, which is"},{"line_number":55,"context_line":"currently in a dictionary containing hoastname, nodename, and limits keys, will"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f287b81_f00a9fcf","line":52,"range":{"start_line":52,"start_character":14,"end_line":52,"end_character":45},"updated":"2017-08-30 15:30:37.000000000","message":"Do you really mean a new object?\n\nhttps://github.com/openstack/nova/blob/master/nova/objects/request_spec.py#L613-L633\n\nAre you actually going to modify the existing one or create something new, named slightly different?","commit_id":"c330f77462fa19eef226ecf877b3d457589a29a8"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"a6dab39eeab12a19872f70adb753cb31db0244f8","unresolved":false,"context_lines":[{"line_number":49,"context_line":"Proposed change"},{"line_number":50,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"We propose to create a new Destination object that would contain the data that"},{"line_number":53,"context_line":"represents a single destination: both the host information as well as the"},{"line_number":54,"context_line":"corresponding allocation needed for claiming. The host information, which is"},{"line_number":55,"context_line":"currently in a dictionary containing hoastname, nodename, and limits keys, will"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f287b81_e3851bae","line":52,"range":{"start_line":52,"start_character":14,"end_line":52,"end_character":45},"in_reply_to":"7f287b81_f00a9fcf","updated":"2017-08-31 14:31:39.000000000","message":"Yeah, I wrote this spec before writing the implementation POC code at https://review.openstack.org/499239, where I noticed that we already have a \u0027Destination\u0027 object as part of the RequestSpec code. I was hoping to discuss which would be the better direction for this; my preference would be to adapt the existing class, as they do overlap quite a bit.","commit_id":"c330f77462fa19eef226ecf877b3d457589a29a8"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"09e62e0cae53f458c2d2707a8717cc34dc59b06b","unresolved":false,"context_lines":[{"line_number":52,"context_line":"We propose to create a new Destination object that would contain the data that"},{"line_number":53,"context_line":"represents a single destination: both the host information as well as the"},{"line_number":54,"context_line":"corresponding allocation needed for claiming. The host information, which is"},{"line_number":55,"context_line":"currently in a dictionary containing hoastname, nodename, and limits keys, will"},{"line_number":56,"context_line":"now be stored as simple object fields along with the allocation. Additionally,"},{"line_number":57,"context_line":"the host_uuid field will be added, as it would be useful to have this available"},{"line_number":58,"context_line":"in some of our allocation cleanup tasks."}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f287b81_90fb5bbf","line":55,"range":{"start_line":55,"start_character":37,"end_line":55,"end_character":46},"updated":"2017-08-30 15:30:37.000000000","message":"hostname","commit_id":"c330f77462fa19eef226ecf877b3d457589a29a8"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"a6dab39eeab12a19872f70adb753cb31db0244f8","unresolved":false,"context_lines":[{"line_number":52,"context_line":"We propose to create a new Destination object that would contain the data that"},{"line_number":53,"context_line":"represents a single destination: both the host information as well as the"},{"line_number":54,"context_line":"corresponding allocation needed for claiming. The host information, which is"},{"line_number":55,"context_line":"currently in a dictionary containing hoastname, nodename, and limits keys, will"},{"line_number":56,"context_line":"now be stored as simple object fields along with the allocation. Additionally,"},{"line_number":57,"context_line":"the host_uuid field will be added, as it would be useful to have this available"},{"line_number":58,"context_line":"in some of our allocation cleanup tasks."}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f287b81_a38b93bd","line":55,"range":{"start_line":55,"start_character":37,"end_line":55,"end_character":46},"in_reply_to":"7f287b81_90fb5bbf","updated":"2017-08-31 14:31:39.000000000","message":"Done","commit_id":"c330f77462fa19eef226ecf877b3d457589a29a8"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"09e62e0cae53f458c2d2707a8717cc34dc59b06b","unresolved":false,"context_lines":[{"line_number":57,"context_line":"the host_uuid field will be added, as it would be useful to have this available"},{"line_number":58,"context_line":"in some of our allocation cleanup tasks."},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"A DestinationList object will also be created, which will contain one or more"},{"line_number":61,"context_line":"Destination objects. The Scheduler will return one DestinationList object for"},{"line_number":62,"context_line":"each requested instance, representing the selected host as well as any"},{"line_number":63,"context_line":"alternates. The DestinationList object will be an iterable, so the code in the"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f287b81_d0b443f4","line":60,"range":{"start_line":60,"start_character":2,"end_line":60,"end_character":17},"updated":"2017-08-30 15:30:37.000000000","message":"I think in general I\u0027m not in favor of adding List objects unless they either contain more than a list of objects, or if we need a place to host a query method. Since you can\u0027t query Destination objects, we fail the latter test. Is there any data that goes along with a list of destinations, aside from the destinations themselves? If not (and no plausible future case can be identified), then I propose we just use lists of these objects instead.","commit_id":"c330f77462fa19eef226ecf877b3d457589a29a8"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"a6dab39eeab12a19872f70adb753cb31db0244f8","unresolved":false,"context_lines":[{"line_number":57,"context_line":"the host_uuid field will be added, as it would be useful to have this available"},{"line_number":58,"context_line":"in some of our allocation cleanup tasks."},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"A DestinationList object will also be created, which will contain one or more"},{"line_number":61,"context_line":"Destination objects. The Scheduler will return one DestinationList object for"},{"line_number":62,"context_line":"each requested instance, representing the selected host as well as any"},{"line_number":63,"context_line":"alternates. The DestinationList object will be an iterable, so the code in the"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f287b81_7e01c404","line":60,"range":{"start_line":60,"start_character":2,"end_line":60,"end_character":17},"in_reply_to":"7f287b81_d0b443f4","updated":"2017-08-31 14:31:39.000000000","message":"In my mind, it seemed cleaner to pass a single DestinationList to the cell conductor rather than a list of Destinations, and have the conductor iterate over that. As it stands now, there is no big difference between the two, and so if there isn\u0027t any other bits of info that need to be included with this, we can just use a simple list.","commit_id":"c330f77462fa19eef226ecf877b3d457589a29a8"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"09e62e0cae53f458c2d2707a8717cc34dc59b06b","unresolved":false,"context_lines":[{"line_number":91,"context_line":"data to carry out the claim. This has the advantage that nothing on the Nova"},{"line_number":92,"context_line":"side of things ever uses the data in the allocation; to Nova, it\u0027s an opaque"},{"line_number":93,"context_line":"blob. The downside, of course, is that Placement would have to handle the"},{"line_number":94,"context_line":"cache."},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"We could return the full allocation data to the scheduler, and then handle the"},{"line_number":97,"context_line":"caching and key management on the Nova side. When a claim/unclaim is needed,"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f287b81_30d4a7e8","line":94,"updated":"2017-08-30 15:30:37.000000000","message":"Yeah and then we have cache coherency issues for scaling placement horizontally, or we have to persist, age, purge, etc them from the database. Nova is the one that has context around medium-lived build request and long-lived instances so I think we should own it.","commit_id":"c330f77462fa19eef226ecf877b3d457589a29a8"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"09e62e0cae53f458c2d2707a8717cc34dc59b06b","unresolved":false,"context_lines":[{"line_number":108,"context_line":"Data model impact"},{"line_number":109,"context_line":"-----------------"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"None"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"REST API impact"},{"line_number":114,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f287b81_504e13c1","line":111,"updated":"2017-08-30 15:30:37.000000000","message":"This whole thing is data model impact, IMHO. We should be documenting object model changes here.\n\nI want to see what the full object looks like, either in pseudocode or the actual definition in the spec here.","commit_id":"c330f77462fa19eef226ecf877b3d457589a29a8"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"a915d1edde0dfe984092c3a5f15cda6449769d17","unresolved":false,"context_lines":[{"line_number":108,"context_line":"Data model impact"},{"line_number":109,"context_line":"-----------------"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"None"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"REST API impact"},{"line_number":114,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f287b81_944a0caa","line":111,"in_reply_to":"7f287b81_1eb760f7","updated":"2017-08-31 17:35:32.000000000","message":"OK, now you\u0027re swinging my opinion back to cdent\u0027s: don\u0027t use an object, and just pass this nested list of different values. So if we go with that approach, which is already coded in https://review.openstack.org/#/c/486253/, there would be no data model impact, right?","commit_id":"c330f77462fa19eef226ecf877b3d457589a29a8"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"a6dab39eeab12a19872f70adb753cb31db0244f8","unresolved":false,"context_lines":[{"line_number":108,"context_line":"Data model impact"},{"line_number":109,"context_line":"-----------------"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"None"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"REST API impact"},{"line_number":114,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f287b81_9eb11047","line":111,"in_reply_to":"7f287b81_504e13c1","updated":"2017-08-31 14:31:39.000000000","message":"I don\u0027t follow - what changes to the data model do you see? Nothing in this is persisted to a database, and nothing queries a database. This is simply a cleaner, versioned package for a bunch of different bits of data that need to be passed as a single unit.","commit_id":"c330f77462fa19eef226ecf877b3d457589a29a8"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"94f7352a3fedb121cbcb4efded1a127ad21463ea","unresolved":false,"context_lines":[{"line_number":108,"context_line":"Data model impact"},{"line_number":109,"context_line":"-----------------"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"None"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"REST API impact"},{"line_number":114,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f287b81_1eb760f7","line":111,"in_reply_to":"7f287b81_9eb11047","updated":"2017-08-31 14:35:23.000000000","message":"The object model is part of our data model. As I said, even though you\u0027re not changing DB schema, you should still outline the object changes here so we can see what they will look like.","commit_id":"c330f77462fa19eef226ecf877b3d457589a29a8"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"09e62e0cae53f458c2d2707a8717cc34dc59b06b","unresolved":false,"context_lines":[{"line_number":165,"context_line":"* Create the Destination and DestinationList objects"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"* Modify the scheduler\u0027s select_destinations() method to populate these objects"},{"line_number":168,"context_line":"  with the selected host info and return them"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"* Modify the conductor to work with these objects for building instances and"},{"line_number":171,"context_line":"  claiming resources."}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f287b81_b0d2d7cf","line":168,"updated":"2017-08-30 15:30:37.000000000","message":"This is an RPC call. What is the plan to signal that we want the new return value? Could be new RPC call or a new_format\u003dTrue flag.","commit_id":"c330f77462fa19eef226ecf877b3d457589a29a8"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"a915d1edde0dfe984092c3a5f15cda6449769d17","unresolved":false,"context_lines":[{"line_number":165,"context_line":"* Create the Destination and DestinationList objects"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"* Modify the scheduler\u0027s select_destinations() method to populate these objects"},{"line_number":168,"context_line":"  with the selected host info and return them"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"* Modify the conductor to work with these objects for building instances and"},{"line_number":171,"context_line":"  claiming resources."}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f287b81_3720fa9b","line":168,"in_reply_to":"7f287b81_5ea608c3","updated":"2017-08-31 17:35:32.000000000","message":"I had been under the impression that there already was a BP/spec for returning alternates, but apparently this is not the case. So perhaps this entire spec is premature.","commit_id":"c330f77462fa19eef226ecf877b3d457589a29a8"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"a6dab39eeab12a19872f70adb753cb31db0244f8","unresolved":false,"context_lines":[{"line_number":165,"context_line":"* Create the Destination and DestinationList objects"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"* Modify the scheduler\u0027s select_destinations() method to populate these objects"},{"line_number":168,"context_line":"  with the selected host info and return them"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"* Modify the conductor to work with these objects for building instances and"},{"line_number":171,"context_line":"  claiming resources."}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f287b81_de47981c","line":168,"in_reply_to":"7f287b81_b0d2d7cf","updated":"2017-08-31 14:31:39.000000000","message":"I was under the assumption that conductor and scheduler would be updated together. Are you saying we need to handle the case where there is an old conductor and a new scheduler? If so, then yes, we\u0027d need to have to add such an indication to the request.","commit_id":"c330f77462fa19eef226ecf877b3d457589a29a8"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"94f7352a3fedb121cbcb4efded1a127ad21463ea","unresolved":false,"context_lines":[{"line_number":165,"context_line":"* Create the Destination and DestinationList objects"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"* Modify the scheduler\u0027s select_destinations() method to populate these objects"},{"line_number":168,"context_line":"  with the selected host info and return them"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"* Modify the conductor to work with these objects for building instances and"},{"line_number":171,"context_line":"  claiming resources."}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f287b81_5ea608c3","line":168,"in_reply_to":"7f287b81_de47981c","updated":"2017-08-31 14:35:23.000000000","message":"We still have versioned RPC between them, which comes with rules. If someone doesn\u0027t update them together and we just fail to dispatch RPC or something obscure then we fail.","commit_id":"c330f77462fa19eef226ecf877b3d457589a29a8"}],"specs/queens/approved/return-selection-objects.rst":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"c943a5653275d9f625ad92460d25303009b70f0d","unresolved":false,"context_lines":[{"line_number":5,"context_line":" http://creativecommons.org/licenses/by/3.0/legalcode"},{"line_number":6,"context_line":""},{"line_number":7,"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"},{"line_number":8,"context_line":"Example Spec - The title of your blueprint"},{"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"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"https://blueprints.launchpad.net/nova/+spec/return-selection-objects"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f2577a7_4c7ed7af","line":8,"updated":"2017-09-14 16:19:57.000000000","message":"Heh ;)","commit_id":"c763b2f5d096f5f639ba14b3baf2ef14e85a2b20"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"9805b5f74a87f79c5847ba0b58f1deb7a41798b7","unresolved":false,"context_lines":[{"line_number":5,"context_line":" http://creativecommons.org/licenses/by/3.0/legalcode"},{"line_number":6,"context_line":""},{"line_number":7,"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"},{"line_number":8,"context_line":"Example Spec - The title of your blueprint"},{"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"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"https://blueprints.launchpad.net/nova/+spec/return-selection-objects"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f2577a7_b280f647","line":8,"in_reply_to":"5f2577a7_4c7ed7af","updated":"2017-09-14 17:02:18.000000000","message":"D\u0027oh!","commit_id":"c763b2f5d096f5f639ba14b3baf2ef14e85a2b20"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"c943a5653275d9f625ad92460d25303009b70f0d","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"https://blueprints.launchpad.net/nova/+spec/return-selection-objects"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"In Queens, we are going to be returning a lot more information from the"},{"line_number":14,"context_line":"Scheduler to the Conductor. If we return it as a series of nested dictionaries"},{"line_number":15,"context_line":"and lists, it will be fragile and confusing. It would be far better to create"},{"line_number":16,"context_line":"an object to hold this data and make it accessible in a simpler and documented"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f2577a7_2c54ab20","line":13,"range":{"start_line":13,"start_character":11,"end_line":13,"end_character":29},"updated":"2017-09-14 16:19:57.000000000","message":"well, that\u0027s the intent of the spec, so I\u0027d briefly mention *why* we need to return more than just a list of tuples.","commit_id":"c763b2f5d096f5f639ba14b3baf2ef14e85a2b20"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"9805b5f74a87f79c5847ba0b58f1deb7a41798b7","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"https://blueprints.launchpad.net/nova/+spec/return-selection-objects"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"In Queens, we are going to be returning a lot more information from the"},{"line_number":14,"context_line":"Scheduler to the Conductor. If we return it as a series of nested dictionaries"},{"line_number":15,"context_line":"and lists, it will be fragile and confusing. It would be far better to create"},{"line_number":16,"context_line":"an object to hold this data and make it accessible in a simpler and documented"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f2577a7_12d46a47","line":13,"range":{"start_line":13,"start_character":11,"end_line":13,"end_character":29},"in_reply_to":"5f2577a7_2c54ab20","updated":"2017-09-14 17:02:18.000000000","message":"Done","commit_id":"c763b2f5d096f5f639ba14b3baf2ef14e85a2b20"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"c943a5653275d9f625ad92460d25303009b70f0d","unresolved":false,"context_lines":[{"line_number":19,"context_line":"Problem description"},{"line_number":20,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Before Queens, the scheduler\u0027s select_destinations() method returned a"},{"line_number":23,"context_line":"dictionary representing the selected host for each requested instance. In"},{"line_number":24,"context_line":"Queens, however, this will change to return a list of these dictionaries for"},{"line_number":25,"context_line":"each instance, with the first item being the selected host, and the rest being"},{"line_number":26,"context_line":"optional hosts in case the initial build fails. What\u0027s more, each of these host"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f2577a7_5790a4ed","line":23,"range":{"start_line":22,"start_character":60,"end_line":23,"end_character":71},"updated":"2017-09-14 16:19:57.000000000","message":"a bit unclear : it returns a list of dicts, each of those being the selected host for each requested instances.","commit_id":"c763b2f5d096f5f639ba14b3baf2ef14e85a2b20"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"c943a5653275d9f625ad92460d25303009b70f0d","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Before Queens, the scheduler\u0027s select_destinations() method returned a"},{"line_number":23,"context_line":"dictionary representing the selected host for each requested instance. In"},{"line_number":24,"context_line":"Queens, however, this will change to return a list of these dictionaries for"},{"line_number":25,"context_line":"each instance, with the first item being the selected host, and the rest being"},{"line_number":26,"context_line":"optional hosts in case the initial build fails. What\u0027s more, each of these host"},{"line_number":27,"context_line":"dictionaries must also include the corresponding allocation dictionary that"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f2577a7_775e0045","line":24,"range":{"start_line":24,"start_character":17,"end_line":24,"end_character":72},"updated":"2017-09-14 16:19:57.000000000","message":"I\u0027m lost. You\u0027re planning to use that blueprint for providing alternatives for each target, right ?\nThe \"this\" is confusing me whether returning alternative hosts is part of that BP to be clear.","commit_id":"c763b2f5d096f5f639ba14b3baf2ef14e85a2b20"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"9805b5f74a87f79c5847ba0b58f1deb7a41798b7","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Before Queens, the scheduler\u0027s select_destinations() method returned a"},{"line_number":23,"context_line":"dictionary representing the selected host for each requested instance. In"},{"line_number":24,"context_line":"Queens, however, this will change to return a list of these dictionaries for"},{"line_number":25,"context_line":"each instance, with the first item being the selected host, and the rest being"},{"line_number":26,"context_line":"optional hosts in case the initial build fails. What\u0027s more, each of these host"},{"line_number":27,"context_line":"dictionaries must also include the corresponding allocation dictionary that"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f2577a7_7254ce53","line":24,"range":{"start_line":24,"start_character":17,"end_line":24,"end_character":72},"in_reply_to":"5f2577a7_775e0045","updated":"2017-09-14 17:02:18.000000000","message":"Sorry, I can see that this wording is confusing. I\u0027ll re-word it.","commit_id":"c763b2f5d096f5f639ba14b3baf2ef14e85a2b20"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"c943a5653275d9f625ad92460d25303009b70f0d","unresolved":false,"context_lines":[{"line_number":24,"context_line":"Queens, however, this will change to return a list of these dictionaries for"},{"line_number":25,"context_line":"each instance, with the first item being the selected host, and the rest being"},{"line_number":26,"context_line":"optional hosts in case the initial build fails. What\u0027s more, each of these host"},{"line_number":27,"context_line":"dictionaries must also include the corresponding allocation dictionary that"},{"line_number":28,"context_line":"would be used to claim or unclaim the resources on that host for the instance."},{"line_number":29,"context_line":"The result of these changes would mean that the data returned would be a"},{"line_number":30,"context_line":"complex nested combination of dictionaries, lists, and tuples. This data"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f2577a7_f73790fe","line":27,"range":{"start_line":27,"start_character":0,"end_line":27,"end_character":12},"updated":"2017-09-14 16:19:57.000000000","message":"dictionaries or objects ?","commit_id":"c763b2f5d096f5f639ba14b3baf2ef14e85a2b20"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"9805b5f74a87f79c5847ba0b58f1deb7a41798b7","unresolved":false,"context_lines":[{"line_number":24,"context_line":"Queens, however, this will change to return a list of these dictionaries for"},{"line_number":25,"context_line":"each instance, with the first item being the selected host, and the rest being"},{"line_number":26,"context_line":"optional hosts in case the initial build fails. What\u0027s more, each of these host"},{"line_number":27,"context_line":"dictionaries must also include the corresponding allocation dictionary that"},{"line_number":28,"context_line":"would be used to claim or unclaim the resources on that host for the instance."},{"line_number":29,"context_line":"The result of these changes would mean that the data returned would be a"},{"line_number":30,"context_line":"complex nested combination of dictionaries, lists, and tuples. This data"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f2577a7_324ac6ab","line":27,"range":{"start_line":27,"start_character":0,"end_line":27,"end_character":12},"in_reply_to":"5f2577a7_f73790fe","updated":"2017-09-14 17:02:18.000000000","message":"They are dicts.","commit_id":"c763b2f5d096f5f639ba14b3baf2ef14e85a2b20"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"c943a5653275d9f625ad92460d25303009b70f0d","unresolved":false,"context_lines":[{"line_number":95,"context_line":" * host_name: fields.StringField"},{"line_number":96,"context_line":" * node_name: fields.StringField"},{"line_number":97,"context_line":" * limits: fields.DictOfIntegersField"},{"line_number":98,"context_line":" * allocation_json: fields.StringField"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"There isn\u0027t a good field type for the allocation, as it is a complex nested"},{"line_number":101,"context_line":"structure, so instead we\u0027ll store it as its JSON respresentation in a"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f2577a7_521af26e","line":98,"updated":"2017-09-14 16:19:57.000000000","message":"I think Dan proposed yesterday to pass the Placement API microversion as well. Should it be part of the JSON for the allocation, maybe ? We should clarify at least.","commit_id":"c763b2f5d096f5f639ba14b3baf2ef14e85a2b20"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"9805b5f74a87f79c5847ba0b58f1deb7a41798b7","unresolved":false,"context_lines":[{"line_number":95,"context_line":" * host_name: fields.StringField"},{"line_number":96,"context_line":" * node_name: fields.StringField"},{"line_number":97,"context_line":" * limits: fields.DictOfIntegersField"},{"line_number":98,"context_line":" * allocation_json: fields.StringField"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"There isn\u0027t a good field type for the allocation, as it is a complex nested"},{"line_number":101,"context_line":"structure, so instead we\u0027ll store it as its JSON respresentation in a"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f2577a7_264f276c","line":98,"in_reply_to":"5f2577a7_521af26e","updated":"2017-09-14 17:02:18.000000000","message":"The claim_resources() method doesn\u0027t take a version, so I don\u0027t see how that would be helpful.\n\nhttps://github.com/openstack/nova/blob/master/nova/scheduler/client/report.py#L957","commit_id":"c763b2f5d096f5f639ba14b3baf2ef14e85a2b20"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"c943a5653275d9f625ad92460d25303009b70f0d","unresolved":false,"context_lines":[{"line_number":99,"context_line":""},{"line_number":100,"context_line":"There isn\u0027t a good field type for the allocation, as it is a complex nested"},{"line_number":101,"context_line":"structure, so instead we\u0027ll store it as its JSON respresentation in a"},{"line_number":102,"context_line":"StringField."},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"REST API impact"},{"line_number":105,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f2577a7_970f2c36","line":102,"updated":"2017-09-14 16:19:57.000000000","message":"you should still mention what is a typical allocation JSON returned by Placement. That would help reviewing at least.","commit_id":"c763b2f5d096f5f639ba14b3baf2ef14e85a2b20"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"9805b5f74a87f79c5847ba0b58f1deb7a41798b7","unresolved":false,"context_lines":[{"line_number":99,"context_line":""},{"line_number":100,"context_line":"There isn\u0027t a good field type for the allocation, as it is a complex nested"},{"line_number":101,"context_line":"structure, so instead we\u0027ll store it as its JSON respresentation in a"},{"line_number":102,"context_line":"StringField."},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"REST API impact"},{"line_number":105,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f2577a7_666bef84","line":102,"in_reply_to":"5f2577a7_970f2c36","updated":"2017-09-14 17:02:18.000000000","message":"Done","commit_id":"c763b2f5d096f5f639ba14b3baf2ef14e85a2b20"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"c943a5653275d9f625ad92460d25303009b70f0d","unresolved":false,"context_lines":[{"line_number":159,"context_line":"  with the selected host info and return them."},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"* Modify the conductor to work with these objects for building instances and"},{"line_number":162,"context_line":"  claiming resources during retries."},{"line_number":163,"context_line":""},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"Dependencies"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f2577a7_f2531e16","line":162,"updated":"2017-09-14 16:19:57.000000000","message":"If you plan to work on retries with that spec, you should explain more how you plan to implement that.","commit_id":"c763b2f5d096f5f639ba14b3baf2ef14e85a2b20"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"9805b5f74a87f79c5847ba0b58f1deb7a41798b7","unresolved":false,"context_lines":[{"line_number":159,"context_line":"  with the selected host info and return them."},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"* Modify the conductor to work with these objects for building instances and"},{"line_number":162,"context_line":"  claiming resources during retries."},{"line_number":163,"context_line":""},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"Dependencies"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f2577a7_e6afdf7a","line":162,"in_reply_to":"5f2577a7_f2531e16","updated":"2017-09-14 17:02:18.000000000","message":"There really should be a spec for the change to return alternates. I was surprised to find that even though this was accepted back in the Atlanta PTG, it was never formally proposed as a spec.","commit_id":"c763b2f5d096f5f639ba14b3baf2ef14e85a2b20"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"45a5bf64fe5415b0f6fb51c0acb18e75675cbd40","unresolved":false,"context_lines":[{"line_number":108,"context_line":"StringField. The structure of an allocation, as described in this spec[2],"},{"line_number":109,"context_line":"looks like::"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"\t\"allocations\": ["},{"line_number":112,"context_line":"\t\t{"},{"line_number":113,"context_line":"\t\t\t\"resource_provider\": {"},{"line_number":114,"context_line":"\t\t\t\t\"uuid\": $COMPUTE_NODE1_UUID"}],"source_content_type":"text/x-rst","patch_set":6,"id":"bf57530f_e4f4de5d","line":111,"updated":"2017-09-20 17:21:49.000000000","message":"I forget, are we scared of tabs?","commit_id":"4597037306d516005fcda60dcaeee859f61a6a48"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"d632ea1ab0fd52a30273040b44226dbbeaf08c3f","unresolved":false,"context_lines":[{"line_number":108,"context_line":"StringField. The structure of an allocation, as described in this spec[2],"},{"line_number":109,"context_line":"looks like::"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"\t\"allocations\": ["},{"line_number":112,"context_line":"\t\t{"},{"line_number":113,"context_line":"\t\t\t\"resource_provider\": {"},{"line_number":114,"context_line":"\t\t\t\t\"uuid\": $COMPUTE_NODE1_UUID"}],"source_content_type":"text/x-rst","patch_set":6,"id":"9f5c4f37_0dae032e","line":111,"in_reply_to":"bf57530f_e4f4de5d","updated":"2017-09-21 12:45:09.000000000","message":"Weird - I copied that from the spec. Now I wish I could remember where. IAC, I\u0027ll fix that.","commit_id":"4597037306d516005fcda60dcaeee859f61a6a48"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"20b6c7416cd23fbbb38d12bf1e870e3b48b7bc32","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"In Queens, we will be changing what we return from select_destinations() in"},{"line_number":14,"context_line":"order to both provide additional \u0027alternate\u0027 hosts for each requested instance"},{"line_number":15,"context_line":"and also the allocations for building on each host. Returning this as an"},{"line_number":16,"context_line":"unstructured chunk of data will be fragile and potentially confusing. It would"},{"line_number":17,"context_line":"be far better to create an object to hold this data and make it accessible in a"},{"line_number":18,"context_line":"simpler and documented way."}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_77351a46","line":15,"range":{"start_line":15,"start_character":13,"end_line":15,"end_character":24},"updated":"2017-09-25 14:34:53.000000000","message":"allocation requests :)","commit_id":"5d46a996fe5d18f996eb466b275a3c9c22049a11"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"7a2778e9eec269e604f4705a02a1208fb80d4bc6","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"In Queens, we will be changing what we return from select_destinations() in"},{"line_number":14,"context_line":"order to both provide additional \u0027alternate\u0027 hosts for each requested instance"},{"line_number":15,"context_line":"and also the allocations for building on each host. Returning this as an"},{"line_number":16,"context_line":"unstructured chunk of data will be fragile and potentially confusing. It would"},{"line_number":17,"context_line":"be far better to create an object to hold this data and make it accessible in a"},{"line_number":18,"context_line":"simpler and documented way."}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_7c495ace","line":15,"range":{"start_line":15,"start_character":13,"end_line":15,"end_character":24},"in_reply_to":"7f515b1d_77351a46","updated":"2017-09-26 13:23:54.000000000","message":"Done","commit_id":"5d46a996fe5d18f996eb466b275a3c9c22049a11"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"751132f017587f82bcd2870fa5c22fef567480b4","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":"As a newcomer to the Nova codebase, I would like to be able to read code that"},{"line_number":50,"context_line":"is clear so that I can work with it quicker and with more confidence that my"},{"line_number":51,"context_line":"changes won\u0027t break something."},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"Proposed change"},{"line_number":54,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":7,"id":"9f5c4f37_7b39b03f","line":51,"updated":"2017-09-21 15:25:31.000000000","message":"Um, how about a use case for \"I want retries to work at all\" ? :P","commit_id":"5d46a996fe5d18f996eb466b275a3c9c22049a11"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"7a2778e9eec269e604f4705a02a1208fb80d4bc6","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":"As a newcomer to the Nova codebase, I would like to be able to read code that"},{"line_number":50,"context_line":"is clear so that I can work with it quicker and with more confidence that my"},{"line_number":51,"context_line":"changes won\u0027t break something."},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"Proposed change"},{"line_number":54,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_bcdb52eb","line":51,"in_reply_to":"7f515b1d_8241720e","updated":"2017-09-26 13:23:54.000000000","message":"@Jay - yes, and I was referring to the point that a Selection object isn\u0027t needed to do retries. We could change select_destinations to return unversioned 2-tuples of (host_state, allocation_request) instead. The whole point of this spec is to provide a cleaner and more maintainable manner of passing the information.","commit_id":"5d46a996fe5d18f996eb466b275a3c9c22049a11"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"20b6c7416cd23fbbb38d12bf1e870e3b48b7bc32","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":"As a newcomer to the Nova codebase, I would like to be able to read code that"},{"line_number":50,"context_line":"is clear so that I can work with it quicker and with more confidence that my"},{"line_number":51,"context_line":"changes won\u0027t break something."},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"Proposed change"},{"line_number":54,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_8241720e","line":51,"in_reply_to":"7f515b1d_acab8773","updated":"2017-09-25 14:34:53.000000000","message":"I think @dansmith is referring to the fact that there can be no upcalls from the cell to the superconductor.","commit_id":"5d46a996fe5d18f996eb466b275a3c9c22049a11"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"7424bcb558c8a9821d74c571d98900bd684a3ec2","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":"As a newcomer to the Nova codebase, I would like to be able to read code that"},{"line_number":50,"context_line":"is clear so that I can work with it quicker and with more confidence that my"},{"line_number":51,"context_line":"changes won\u0027t break something."},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"Proposed change"},{"line_number":54,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_acab8773","line":51,"in_reply_to":"9f5c4f37_7b39b03f","updated":"2017-09-21 21:01:51.000000000","message":"Well, they *could* work with confusingly-nested structures...","commit_id":"5d46a996fe5d18f996eb466b275a3c9c22049a11"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"20b6c7416cd23fbbb38d12bf1e870e3b48b7bc32","unresolved":false,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":"We propose to create a new Selection object that would contain the data that"},{"line_number":57,"context_line":"represents a single destination: both the host information as well as the"},{"line_number":58,"context_line":"corresponding allocation needed for claiming. The host information, which is"},{"line_number":59,"context_line":"currently in a dictionary containing hostname, nodename, and limits keys, will"},{"line_number":60,"context_line":"now be stored as simple object fields along with the allocation. Additionally,"},{"line_number":61,"context_line":"the host_uuid field will be added, as it would be useful to have this available"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_021c6210","line":58,"range":{"start_line":58,"start_character":14,"end_line":58,"end_character":24},"updated":"2017-09-25 14:34:53.000000000","message":"allocation request","commit_id":"5d46a996fe5d18f996eb466b275a3c9c22049a11"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"7a2778e9eec269e604f4705a02a1208fb80d4bc6","unresolved":false,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":"We propose to create a new Selection object that would contain the data that"},{"line_number":57,"context_line":"represents a single destination: both the host information as well as the"},{"line_number":58,"context_line":"corresponding allocation needed for claiming. The host information, which is"},{"line_number":59,"context_line":"currently in a dictionary containing hostname, nodename, and limits keys, will"},{"line_number":60,"context_line":"now be stored as simple object fields along with the allocation. Additionally,"},{"line_number":61,"context_line":"the host_uuid field will be added, as it would be useful to have this available"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_bc2592c4","line":58,"range":{"start_line":58,"start_character":14,"end_line":58,"end_character":24},"in_reply_to":"7f515b1d_021c6210","updated":"2017-09-26 13:23:54.000000000","message":"Done","commit_id":"5d46a996fe5d18f996eb466b275a3c9c22049a11"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"20b6c7416cd23fbbb38d12bf1e870e3b48b7bc32","unresolved":false,"context_lines":[{"line_number":58,"context_line":"corresponding allocation needed for claiming. The host information, which is"},{"line_number":59,"context_line":"currently in a dictionary containing hostname, nodename, and limits keys, will"},{"line_number":60,"context_line":"now be stored as simple object fields along with the allocation. Additionally,"},{"line_number":61,"context_line":"the host_uuid field will be added, as it would be useful to have this available"},{"line_number":62,"context_line":"in some of our allocation cleanup tasks."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"There is no need for a corresponding SelectionList object, as there is no need"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_62b9d6e7","line":61,"range":{"start_line":61,"start_character":4,"end_line":61,"end_character":13},"updated":"2017-09-25 14:34:53.000000000","message":"Recommend renaming to compute_node_uuid if the above is referring to the thing providing resources and not the RPC service endpoint, which I believe it is...","commit_id":"5d46a996fe5d18f996eb466b275a3c9c22049a11"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"7a2778e9eec269e604f4705a02a1208fb80d4bc6","unresolved":false,"context_lines":[{"line_number":58,"context_line":"corresponding allocation needed for claiming. The host information, which is"},{"line_number":59,"context_line":"currently in a dictionary containing hostname, nodename, and limits keys, will"},{"line_number":60,"context_line":"now be stored as simple object fields along with the allocation. Additionally,"},{"line_number":61,"context_line":"the host_uuid field will be added, as it would be useful to have this available"},{"line_number":62,"context_line":"in some of our allocation cleanup tasks."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"There is no need for a corresponding SelectionList object, as there is no need"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_0f2c6697","line":61,"range":{"start_line":61,"start_character":4,"end_line":61,"end_character":13},"in_reply_to":"7f515b1d_62b9d6e7","updated":"2017-09-26 13:23:54.000000000","message":"Done","commit_id":"5d46a996fe5d18f996eb466b275a3c9c22049a11"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"20b6c7416cd23fbbb38d12bf1e870e3b48b7bc32","unresolved":false,"context_lines":[{"line_number":65,"context_line":"for DB creation or retrieval. The select_destinations() method will return"},{"line_number":66,"context_line":"simple Python lists of Selection objects. The Scheduler will return one list"},{"line_number":67,"context_line":"of Selection objects for each requested instance, representing the selected"},{"line_number":68,"context_line":"host as well as any alternates."},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"Alternatives"},{"line_number":71,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_62879611","line":68,"updated":"2017-09-25 14:34:53.000000000","message":"++","commit_id":"5d46a996fe5d18f996eb466b275a3c9c22049a11"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"751132f017587f82bcd2870fa5c22fef567480b4","unresolved":false,"context_lines":[{"line_number":97,"context_line":"versioned object. This object will contain the following fields, along with"},{"line_number":98,"context_line":"their types::"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":" * host_uuid: fields.UUIDField"},{"line_number":101,"context_line":" * host_name: fields.StringField"},{"line_number":102,"context_line":" * node_name: fields.StringField"},{"line_number":103,"context_line":" * limits: fields.DictOfIntegersField"}],"source_content_type":"text/x-rst","patch_set":7,"id":"9f5c4f37_3b91f853","line":100,"updated":"2017-09-21 15:25:31.000000000","message":"This will be ComputeNode.uuid right? Calling it host might be a bit confusing because we have a lot of code where host means Service.uuid.","commit_id":"5d46a996fe5d18f996eb466b275a3c9c22049a11"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"7a2778e9eec269e604f4705a02a1208fb80d4bc6","unresolved":false,"context_lines":[{"line_number":97,"context_line":"versioned object. This object will contain the following fields, along with"},{"line_number":98,"context_line":"their types::"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":" * host_uuid: fields.UUIDField"},{"line_number":101,"context_line":" * host_name: fields.StringField"},{"line_number":102,"context_line":" * node_name: fields.StringField"},{"line_number":103,"context_line":" * limits: fields.DictOfIntegersField"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_af3c32c8","line":100,"in_reply_to":"7f515b1d_62b556cd","updated":"2017-09-26 13:23:54.000000000","message":"Done","commit_id":"5d46a996fe5d18f996eb466b275a3c9c22049a11"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"20b6c7416cd23fbbb38d12bf1e870e3b48b7bc32","unresolved":false,"context_lines":[{"line_number":97,"context_line":"versioned object. This object will contain the following fields, along with"},{"line_number":98,"context_line":"their types::"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":" * host_uuid: fields.UUIDField"},{"line_number":101,"context_line":" * host_name: fields.StringField"},{"line_number":102,"context_line":" * node_name: fields.StringField"},{"line_number":103,"context_line":" * limits: fields.DictOfIntegersField"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_62b556cd","line":100,"in_reply_to":"9f5c4f37_3b91f853","updated":"2017-09-25 14:34:53.000000000","message":"Agreed. Use compute_node_uuid for referring to the thing providing resources.","commit_id":"5d46a996fe5d18f996eb466b275a3c9c22049a11"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"751132f017587f82bcd2870fa5c22fef567480b4","unresolved":false,"context_lines":[{"line_number":98,"context_line":"their types::"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":" * host_uuid: fields.UUIDField"},{"line_number":101,"context_line":" * host_name: fields.StringField"},{"line_number":102,"context_line":" * node_name: fields.StringField"},{"line_number":103,"context_line":" * limits: fields.DictOfIntegersField"},{"line_number":104,"context_line":" * allocation_json: fields.StringField"}],"source_content_type":"text/x-rst","patch_set":7,"id":"9f5c4f37_db89bc26","line":101,"updated":"2017-09-21 15:25:31.000000000","message":"Again, which is this? I expect this needs to be Service.host so that you can address the RPC message to the right _service_ even though the scheduler has selected a _node_ right?","commit_id":"5d46a996fe5d18f996eb466b275a3c9c22049a11"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"20b6c7416cd23fbbb38d12bf1e870e3b48b7bc32","unresolved":false,"context_lines":[{"line_number":98,"context_line":"their types::"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":" * host_uuid: fields.UUIDField"},{"line_number":101,"context_line":" * host_name: fields.StringField"},{"line_number":102,"context_line":" * node_name: fields.StringField"},{"line_number":103,"context_line":" * limits: fields.DictOfIntegersField"},{"line_number":104,"context_line":" * allocation_json: fields.StringField"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_e2c0262d","line":101,"in_reply_to":"9f5c4f37_db89bc26","updated":"2017-09-25 14:34:53.000000000","message":"Yes. This is the RPC service routing host. Suggest calling this field service_host.","commit_id":"5d46a996fe5d18f996eb466b275a3c9c22049a11"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"751132f017587f82bcd2870fa5c22fef567480b4","unresolved":false,"context_lines":[{"line_number":99,"context_line":""},{"line_number":100,"context_line":" * host_uuid: fields.UUIDField"},{"line_number":101,"context_line":" * host_name: fields.StringField"},{"line_number":102,"context_line":" * node_name: fields.StringField"},{"line_number":103,"context_line":" * limits: fields.DictOfIntegersField"},{"line_number":104,"context_line":" * allocation_json: fields.StringField"},{"line_number":105,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"9f5c4f37_7b88901e","line":102,"updated":"2017-09-21 15:25:31.000000000","message":"And then this is the node I guess.","commit_id":"5d46a996fe5d18f996eb466b275a3c9c22049a11"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"20b6c7416cd23fbbb38d12bf1e870e3b48b7bc32","unresolved":false,"context_lines":[{"line_number":99,"context_line":""},{"line_number":100,"context_line":" * host_uuid: fields.UUIDField"},{"line_number":101,"context_line":" * host_name: fields.StringField"},{"line_number":102,"context_line":" * node_name: fields.StringField"},{"line_number":103,"context_line":" * limits: fields.DictOfIntegersField"},{"line_number":104,"context_line":" * allocation_json: fields.StringField"},{"line_number":105,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_42d13afb","line":102,"in_reply_to":"7f515b1d_4fed2524","updated":"2017-09-25 14:34:53.000000000","message":"It\u0027s nodename, not node_name, everywhere I can see in the code...","commit_id":"5d46a996fe5d18f996eb466b275a3c9c22049a11"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"7424bcb558c8a9821d74c571d98900bd684a3ec2","unresolved":false,"context_lines":[{"line_number":99,"context_line":""},{"line_number":100,"context_line":" * host_uuid: fields.UUIDField"},{"line_number":101,"context_line":" * host_name: fields.StringField"},{"line_number":102,"context_line":" * node_name: fields.StringField"},{"line_number":103,"context_line":" * limits: fields.DictOfIntegersField"},{"line_number":104,"context_line":" * allocation_json: fields.StringField"},{"line_number":105,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_4fed2524","line":102,"in_reply_to":"9f5c4f37_7b88901e","updated":"2017-09-21 21:01:51.000000000","message":"The existing code calls them \u0027host\u0027 and \u0027nodename\u0027, and I was trying to be consistent with it. If you think it would be clearer to change these names, it will just require a bit more twiddling in the calling code.","commit_id":"5d46a996fe5d18f996eb466b275a3c9c22049a11"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"751132f017587f82bcd2870fa5c22fef567480b4","unresolved":false,"context_lines":[{"line_number":100,"context_line":" * host_uuid: fields.UUIDField"},{"line_number":101,"context_line":" * host_name: fields.StringField"},{"line_number":102,"context_line":" * node_name: fields.StringField"},{"line_number":103,"context_line":" * limits: fields.DictOfIntegersField"},{"line_number":104,"context_line":" * allocation_json: fields.StringField"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"There isn\u0027t a good field type for the allocation, as it is a complex nested"}],"source_content_type":"text/x-rst","patch_set":7,"id":"9f5c4f37_1bc5143d","line":103,"updated":"2017-09-21 15:25:31.000000000","message":"Ugh, isn\u0027t this in the requestspec or something?","commit_id":"5d46a996fe5d18f996eb466b275a3c9c22049a11"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"7a2778e9eec269e604f4705a02a1208fb80d4bc6","unresolved":false,"context_lines":[{"line_number":100,"context_line":" * host_uuid: fields.UUIDField"},{"line_number":101,"context_line":" * host_name: fields.StringField"},{"line_number":102,"context_line":" * node_name: fields.StringField"},{"line_number":103,"context_line":" * limits: fields.DictOfIntegersField"},{"line_number":104,"context_line":" * allocation_json: fields.StringField"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"There isn\u0027t a good field type for the allocation, as it is a complex nested"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_ef0fcade","line":103,"in_reply_to":"7f515b1d_423ffa24","updated":"2017-09-26 13:23:54.000000000","message":"ugh - please let\u0027s not do special snowflakes again.\n\nI can follow the pattern in the existing code that dictifies the NUMATopologyLimits object first. But that means that we need something that can handle more complex dicts that DictOfIntegersField allows. So I\u0027ll make this a StringField, too, with the same encoding/decoding requirements as for the allocation_requests.","commit_id":"5d46a996fe5d18f996eb466b275a3c9c22049a11"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"20b6c7416cd23fbbb38d12bf1e870e3b48b7bc32","unresolved":false,"context_lines":[{"line_number":100,"context_line":" * host_uuid: fields.UUIDField"},{"line_number":101,"context_line":" * host_name: fields.StringField"},{"line_number":102,"context_line":" * node_name: fields.StringField"},{"line_number":103,"context_line":" * limits: fields.DictOfIntegersField"},{"line_number":104,"context_line":" * allocation_json: fields.StringField"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"There isn\u0027t a good field type for the allocation, as it is a complex nested"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_423ffa24","line":103,"in_reply_to":"7f515b1d_6c190f87","updated":"2017-09-25 14:34:53.000000000","message":"Yeah, sucks :( See also my comment on the related code patch. We will probably need to have a limits and a numa_limits field because the latter isn\u0027t an integer... it\u0027s a NUMATopologyLimits object :(","commit_id":"5d46a996fe5d18f996eb466b275a3c9c22049a11"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"433067e3b039756ce4303fa16a3e5f36de221d46","unresolved":false,"context_lines":[{"line_number":100,"context_line":" * host_uuid: fields.UUIDField"},{"line_number":101,"context_line":" * host_name: fields.StringField"},{"line_number":102,"context_line":" * node_name: fields.StringField"},{"line_number":103,"context_line":" * limits: fields.DictOfIntegersField"},{"line_number":104,"context_line":" * allocation_json: fields.StringField"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"There isn\u0027t a good field type for the allocation, as it is a complex nested"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_0310bd00","line":103,"in_reply_to":"7f515b1d_ef0fcade","updated":"2017-09-26 14:59:39.000000000","message":"I think either @dansmith or @mriedem mentioned in the code series that the whole simple integer limits stuff should eventually just disappear -- there isn\u0027t a need to pass that stuff now because the placement inventory records have all that information and the compute node can both read and set those integer limits itself by interacting with the placement API.\n\nSo, yeah, NUMA is a snowflake, but I don\u0027t see adding an unformatted string field with a bunch of unversioned, encoded JSON being better than just sending a numa_limists field that is of type ObjectField(\u0027NUMATopologyLimits\u0027)","commit_id":"5d46a996fe5d18f996eb466b275a3c9c22049a11"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"7424bcb558c8a9821d74c571d98900bd684a3ec2","unresolved":false,"context_lines":[{"line_number":100,"context_line":" * host_uuid: fields.UUIDField"},{"line_number":101,"context_line":" * host_name: fields.StringField"},{"line_number":102,"context_line":" * node_name: fields.StringField"},{"line_number":103,"context_line":" * limits: fields.DictOfIntegersField"},{"line_number":104,"context_line":" * allocation_json: fields.StringField"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"There isn\u0027t a good field type for the allocation, as it is a complex nested"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_6c190f87","line":103,"in_reply_to":"9f5c4f37_1bc5143d","updated":"2017-09-21 21:01:51.000000000","message":"It\u0027s in HostState: https://github.com/openstack/nova/blob/master/nova/scheduler/manager.py#L57-L61\n\nSince it was part of the returned value from select_destinations, I figured I should keep it.","commit_id":"5d46a996fe5d18f996eb466b275a3c9c22049a11"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"751132f017587f82bcd2870fa5c22fef567480b4","unresolved":false,"context_lines":[{"line_number":106,"context_line":"There isn\u0027t a good field type for the allocation, as it is a complex nested"},{"line_number":107,"context_line":"structure, so instead we\u0027ll store it as its JSON respresentation in a"},{"line_number":108,"context_line":"StringField. The structure of an allocation, as described in this spec[2],"},{"line_number":109,"context_line":"looks like::"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    \"allocations\": ["},{"line_number":112,"context_line":"        {"}],"source_content_type":"text/x-rst","patch_set":7,"id":"9f5c4f37_5bf94c7e","line":109,"updated":"2017-09-21 15:25:31.000000000","message":"...and it should be opaque to us.\n\nWhat about storing the microversion from the headers when we received this? Otherwise we\u0027ll fling it at placement with our microversion, which might be different.","commit_id":"5d46a996fe5d18f996eb466b275a3c9c22049a11"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"49f7346671abff9be93c2f29ae44a3d110e6a114","unresolved":false,"context_lines":[{"line_number":106,"context_line":"There isn\u0027t a good field type for the allocation, as it is a complex nested"},{"line_number":107,"context_line":"structure, so instead we\u0027ll store it as its JSON respresentation in a"},{"line_number":108,"context_line":"StringField. The structure of an allocation, as described in this spec[2],"},{"line_number":109,"context_line":"looks like::"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    \"allocations\": ["},{"line_number":112,"context_line":"        {"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_3000ba67","line":109,"in_reply_to":"7f515b1d_22207eb0","updated":"2017-09-25 22:56:26.000000000","message":"1. Assume placement service is running Rocky.\n\n2. Assume superconductor and scheduler are running Rocky.\n\n3. Assume cell conductor and compute are running Queens.\n\n4. Rocky scheduler calls Rocky placement service\u0027s GET /allocation_candidates URL using its embedded scheduler/report.py client.\n\n5. Rocky scheduler determines a target host and claims resources using one of the allocation_requests in the returned body.\n\n6. Rocky scheduler adds a set of allocation_request BLOBs to the returned result of the select_destinations() RPC call.\n\n7. Rocky superconductor routes the launch request to the original Queens target compute in the cell.\n\n8. The build fails for some reason on Queens target compute.\n\n9. Queens conductor attempts to retry the build. It looks at the allocation_request BLOBs it was passed to it from the failing compute (who got them from the Rocky superconductor/scheduler)\n\n10. Queens conductor calls claim_resources() using its embedded scheduler/report.py client with one of the allocation_request BLOBs that it picked as an alternate destination. The claim_resources() call in that Queens embedded scheduler/report.py client is going to going to set API microversion \u003d\u003d 1.10 (or whatever the latest known microversion is for the PUT /allocations/{consumer_uuid} endpoint at the end of Queens). However, it will be passing a BLOB generated from a potentially *later* API microversion from the Rocky placement service.\n\n11. Rocky placement will receive an HTTP header saying microversion 1.10 but containing an HTTP payload (the allocation_request BLOB) for PUT /allocations/{consumer_uuid} that may be of a schema that is *after* 1.10.\n\nThat\u0027s the situation we\u0027re trying to cover here.","commit_id":"5d46a996fe5d18f996eb466b275a3c9c22049a11"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"ec95215e94f810801c3382cf5bb0477e18d49bf4","unresolved":false,"context_lines":[{"line_number":106,"context_line":"There isn\u0027t a good field type for the allocation, as it is a complex nested"},{"line_number":107,"context_line":"structure, so instead we\u0027ll store it as its JSON respresentation in a"},{"line_number":108,"context_line":"StringField. The structure of an allocation, as described in this spec[2],"},{"line_number":109,"context_line":"looks like::"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    \"allocations\": ["},{"line_number":112,"context_line":"        {"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_2642b211","line":109,"in_reply_to":"7f515b1d_3000ba67","updated":"2017-09-26 09:49:51.000000000","message":"Thanks Jay, the missing piece of the detail pie was rocky superconductor with queens cell conductor. My brain was doing \"doesn\u0027t matter if the computes are queens\" and leaving out the cell conductor. In that case I guess conditional microversion handling server-side is reasonable least-worst solution. However I think we should:\n\n* attempt to parse at whatever version the conductor has declared in headers\n* when that fails, log a warning (limited to not get too many repeats)\n* then attempt latest, next lowest, next lowest, next lowest, etc, fail\n\nAssuming that placement is updated earliest that means we get:\n\n* microversions working somewhat meaningfully for clients making allocations not generated by allocation_candidates\n* a warn of an old cell\n* first retry succeeds","commit_id":"5d46a996fe5d18f996eb466b275a3c9c22049a11"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"790426db262f3b0c193ee93f1d7a13cceae7d16b","unresolved":false,"context_lines":[{"line_number":106,"context_line":"There isn\u0027t a good field type for the allocation, as it is a complex nested"},{"line_number":107,"context_line":"structure, so instead we\u0027ll store it as its JSON respresentation in a"},{"line_number":108,"context_line":"StringField. The structure of an allocation, as described in this spec[2],"},{"line_number":109,"context_line":"looks like::"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    \"allocations\": ["},{"line_number":112,"context_line":"        {"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_da68b522","line":109,"in_reply_to":"7f515b1d_4fa525b5","updated":"2017-09-21 21:25:11.000000000","message":"The JSON validation where?","commit_id":"5d46a996fe5d18f996eb466b275a3c9c22049a11"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"efdf7c7a462bc04682abcc5ef3d6fa61195b8f8c","unresolved":false,"context_lines":[{"line_number":106,"context_line":"There isn\u0027t a good field type for the allocation, as it is a complex nested"},{"line_number":107,"context_line":"structure, so instead we\u0027ll store it as its JSON respresentation in a"},{"line_number":108,"context_line":"StringField. The structure of an allocation, as described in this spec[2],"},{"line_number":109,"context_line":"looks like::"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    \"allocations\": ["},{"line_number":112,"context_line":"        {"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_22207eb0","line":109,"in_reply_to":"7f515b1d_a2ca2e17","updated":"2017-09-25 14:39:06.000000000","message":"Jay, yeah, that\u0027s discussed earlier in this stack of comments and I\u0027m pretty -1 on that idea, especially as we can\u0027t seem to agree on why it is needed. If you go back through the whole stack of comments maybe we can figure out a different plan or help me to understand why the server-side plan is the best.","commit_id":"5d46a996fe5d18f996eb466b275a3c9c22049a11"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"17bf68dee18cfb9529ac49d4f2dea63ab4d9f64c","unresolved":false,"context_lines":[{"line_number":106,"context_line":"There isn\u0027t a good field type for the allocation, as it is a complex nested"},{"line_number":107,"context_line":"structure, so instead we\u0027ll store it as its JSON respresentation in a"},{"line_number":108,"context_line":"StringField. The structure of an allocation, as described in this spec[2],"},{"line_number":109,"context_line":"looks like::"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    \"allocations\": ["},{"line_number":112,"context_line":"        {"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_d1a085a8","line":109,"in_reply_to":"7f515b1d_be35d8f9","updated":"2017-09-22 13:50:52.000000000","message":"Okay, that\u0027s clarifies things for me. I guess I should have asked \"do you mean the schema validation in the placement itself?\" because it sounded a bit like you could have meant the construction of the JSON before sending it.\n\nGiven what you\u0027ve said, I\u0027m not sure having conditional validation is a great idea. It\u0027s a bit like saying \"we do microversions, except when we don\u0027t\". It violates the principle of least surprise for non-nova clients.\n\nI don\u0027t know what you mean by \"the allocation blobs are never persisted\". If you\u0027re talking about the validation in _set_allocations then those allocations are persisted then. I guess you mean that the blobs are not persisted on the client side and thus there\u0027s no time gap that would allow for the microversion to be changed from when they are created to when they are used.\n\nI think we should put the magic for this (if any is really required) in the client side. If we want the server to fail to latest, then the client should  ask for latest.\n\nI\u0027m not sure, however, that we need any kind of magic. We\u0027re already explicitly stating a microversion (of 1.10) when we put allocations. That will track with changes we make and where it doesn\u0027t we could check for schema violation client side, and retry with \u0027latest\u0027 and warn to the log that an upgrade is needed. Most of this work is happening in conductors and schedulers, not computes, so version mismatch should be uncommon, shouldn\u0027t it?\n\nMaybe I\u0027m just confused about the contexts in which there would be a microversion mismatch. Maybe that could be clarified?\n\n(Note that I\u0027m not blocking on this in any way, I figure it will come out in the wash as we mess with stuff, but I am trying to make sure that we don\u0027t needlessly make the server weird.)","commit_id":"5d46a996fe5d18f996eb466b275a3c9c22049a11"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"bd5ad4b66ca4b2e5b2abd9202ca2876f672c6373","unresolved":false,"context_lines":[{"line_number":106,"context_line":"There isn\u0027t a good field type for the allocation, as it is a complex nested"},{"line_number":107,"context_line":"structure, so instead we\u0027ll store it as its JSON respresentation in a"},{"line_number":108,"context_line":"StringField. The structure of an allocation, as described in this spec[2],"},{"line_number":109,"context_line":"looks like::"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    \"allocations\": ["},{"line_number":112,"context_line":"        {"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_e0a7254f","line":109,"in_reply_to":"7f515b1d_d1a085a8","updated":"2017-09-22 16:31:46.000000000","message":"There should *never* be a microversion mismatch, because what will be sent to Placement is something that Placement just created moments earlier. Nevertheless, there are people who want to guard against that. Placement, conductor, scheduler - they should all be updated together. It\u0027s only the computes that might lag behind, and computes will not be claiming/unclaiming. The notion of having Placement retry with its latest schema was a compromise to avoid the over-engineering (IMO) of passing microversions from placement, through the Selection object, and then back again to placement via the microversion header.","commit_id":"5d46a996fe5d18f996eb466b275a3c9c22049a11"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"67e7ab582348a20246bdfe3c6c3811f83a183f15","unresolved":false,"context_lines":[{"line_number":106,"context_line":"There isn\u0027t a good field type for the allocation, as it is a complex nested"},{"line_number":107,"context_line":"structure, so instead we\u0027ll store it as its JSON respresentation in a"},{"line_number":108,"context_line":"StringField. The structure of an allocation, as described in this spec[2],"},{"line_number":109,"context_line":"looks like::"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    \"allocations\": ["},{"line_number":112,"context_line":"        {"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_be35d8f9","line":109,"in_reply_to":"7f515b1d_da68b522","updated":"2017-09-22 13:28:09.000000000","message":"The JSON is validated against the schema here:\n\nhttps://github.com/openstack/nova/blob/master/nova/api/openstack/placement/handlers/allocation.py#L218\n\nIn the rare event that placement gets an allocation from a client requesting an old microversion which is associated with an older schema, and that validation fails, we are proposing to have placement re-run the extract_json() call with its latest schema. As these allocation blobs are never persisted, we could not come up with a scenario where that would be problematic.","commit_id":"5d46a996fe5d18f996eb466b275a3c9c22049a11"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"992c68dcbfd8a882ced3103907648f517405f952","unresolved":false,"context_lines":[{"line_number":106,"context_line":"There isn\u0027t a good field type for the allocation, as it is a complex nested"},{"line_number":107,"context_line":"structure, so instead we\u0027ll store it as its JSON respresentation in a"},{"line_number":108,"context_line":"StringField. The structure of an allocation, as described in this spec[2],"},{"line_number":109,"context_line":"looks like::"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    \"allocations\": ["},{"line_number":112,"context_line":"        {"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_b48a7018","line":109,"in_reply_to":"7f515b1d_e0a7254f","updated":"2017-09-25 13:42:56.000000000","message":"The claiming agent still needs to express a microversion, which it has to choose from somewhere. Right now it chooses that from it being hardcoded in the report client. I think that will continue to work if placement, conductor and scheduler are updated in sync, so why do anything?","commit_id":"5d46a996fe5d18f996eb466b275a3c9c22049a11"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"20b6c7416cd23fbbb38d12bf1e870e3b48b7bc32","unresolved":false,"context_lines":[{"line_number":106,"context_line":"There isn\u0027t a good field type for the allocation, as it is a complex nested"},{"line_number":107,"context_line":"structure, so instead we\u0027ll store it as its JSON respresentation in a"},{"line_number":108,"context_line":"StringField. The structure of an allocation, as described in this spec[2],"},{"line_number":109,"context_line":"looks like::"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    \"allocations\": ["},{"line_number":112,"context_line":"        {"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_a2ca2e17","line":109,"in_reply_to":"7f515b1d_e0a7254f","updated":"2017-09-25 14:34:53.000000000","message":"What we agreed to in Denver was to have the *server-side* code attempt to parse the  PUT /allocations/{consumer_uuid} request body with the latest microversion. And if that failed, attempt to parse the request using lower versions.","commit_id":"5d46a996fe5d18f996eb466b275a3c9c22049a11"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"7424bcb558c8a9821d74c571d98900bd684a3ec2","unresolved":false,"context_lines":[{"line_number":106,"context_line":"There isn\u0027t a good field type for the allocation, as it is a complex nested"},{"line_number":107,"context_line":"structure, so instead we\u0027ll store it as its JSON respresentation in a"},{"line_number":108,"context_line":"StringField. The structure of an allocation, as described in this spec[2],"},{"line_number":109,"context_line":"looks like::"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    \"allocations\": ["},{"line_number":112,"context_line":"        {"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_4fa525b5","line":109,"in_reply_to":"9f5c4f37_5bf94c7e","updated":"2017-09-21 21:01:51.000000000","message":"Jay and I discussed this, and we determined that Placement should only ever get back the latest version, since none of these are ever persisted, and scheduler/conductor should always be upgraded together with Placement. We thought it would be simpler to have the JSON validation in the claim process always check the latest version, and ignore any microversion headers for claims.","commit_id":"5d46a996fe5d18f996eb466b275a3c9c22049a11"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"790426db262f3b0c193ee93f1d7a13cceae7d16b","unresolved":false,"context_lines":[{"line_number":106,"context_line":"There isn\u0027t a good field type for the allocation, as it is a complex nested"},{"line_number":107,"context_line":"structure, so instead we\u0027ll store it as its JSON respresentation in a"},{"line_number":108,"context_line":"StringField. The structure of an allocation, as described in this spec[2],"},{"line_number":109,"context_line":"looks like::"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    \"allocations\": ["},{"line_number":112,"context_line":"        {"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_5a7de5e5","line":109,"in_reply_to":"9f5c4f37_5bf94c7e","updated":"2017-09-21 21:25:11.000000000","message":"What do you mean by an \"our microversion\"? The report client chooses a microversion per the type of call it makes.","commit_id":"5d46a996fe5d18f996eb466b275a3c9c22049a11"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"cba8fd5260edc6f370d0b59724be61ccf9e888c9","unresolved":false,"context_lines":[{"line_number":21,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Before Queens, the scheduler\u0027s select_destinations() method returned a list,"},{"line_number":24,"context_line":"containing a dictionary representing the selected host for each requested"},{"line_number":25,"context_line":"instance. In Queens, however, this will be expanded to return much more"},{"line_number":26,"context_line":"information. At the request of operators, we will now be returning a list of"},{"line_number":27,"context_line":"HostDicts, which represents the selected host as in the past, along with zero"}],"source_content_type":"text/x-rst","patch_set":8,"id":"7f515b1d_83c70a46","line":24,"range":{"start_line":24,"start_character":36,"end_line":24,"end_character":54},"updated":"2017-09-26 16:18:17.000000000","message":"you should probably mention it returns both the target *and* the limits, which are basically oversubscription cappings given by filters to the compute nodes so that when it claims, it just verifies that.","commit_id":"ebcd0acdc0df7dae58578e58e1cc1a953c1cf5cd"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"cba8fd5260edc6f370d0b59724be61ccf9e888c9","unresolved":false,"context_lines":[{"line_number":27,"context_line":"HostDicts, which represents the selected host as in the past, along with zero"},{"line_number":28,"context_line":"or more \u0027alternate\u0027 hosts that are in the same cell and also meet the requested"},{"line_number":29,"context_line":"resources. Additionally, each of these will also be accompanied by a dictionary"},{"line_number":30,"context_line":"for the allocation_request required to claim that host. The end result will be"},{"line_number":31,"context_line":"a list, with one item per requested instance. Each item in that list will be a"},{"line_number":32,"context_line":"list of 2-tuples of (HostState, allocation_request). The HostState is a simple"},{"line_number":33,"context_line":"dict, but the allocation_request is itself a complex nested dict."}],"source_content_type":"text/x-rst","patch_set":8,"id":"7f515b1d_0318bad0","line":30,"range":{"start_line":30,"start_character":71,"end_line":30,"end_character":75},"updated":"2017-09-26 16:18:17.000000000","message":"could, right ?","commit_id":"ebcd0acdc0df7dae58578e58e1cc1a953c1cf5cd"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"cba8fd5260edc6f370d0b59724be61ccf9e888c9","unresolved":false,"context_lines":[{"line_number":28,"context_line":"or more \u0027alternate\u0027 hosts that are in the same cell and also meet the requested"},{"line_number":29,"context_line":"resources. Additionally, each of these will also be accompanied by a dictionary"},{"line_number":30,"context_line":"for the allocation_request required to claim that host. The end result will be"},{"line_number":31,"context_line":"a list, with one item per requested instance. Each item in that list will be a"},{"line_number":32,"context_line":"list of 2-tuples of (HostState, allocation_request). The HostState is a simple"},{"line_number":33,"context_line":"dict, but the allocation_request is itself a complex nested dict."},{"line_number":34,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"7f515b1d_c338623e","line":31,"range":{"start_line":31,"start_character":69,"end_line":31,"end_character":73},"updated":"2017-09-26 16:18:17.000000000","message":"would, right?","commit_id":"ebcd0acdc0df7dae58578e58e1cc1a953c1cf5cd"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"cba8fd5260edc6f370d0b59724be61ccf9e888c9","unresolved":false,"context_lines":[{"line_number":29,"context_line":"resources. Additionally, each of these will also be accompanied by a dictionary"},{"line_number":30,"context_line":"for the allocation_request required to claim that host. The end result will be"},{"line_number":31,"context_line":"a list, with one item per requested instance. Each item in that list will be a"},{"line_number":32,"context_line":"list of 2-tuples of (HostState, allocation_request). The HostState is a simple"},{"line_number":33,"context_line":"dict, but the allocation_request is itself a complex nested dict."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"The result of these changes would mean that the data returned would be a"}],"source_content_type":"text/x-rst","patch_set":8,"id":"7f515b1d_63dbee1a","line":32,"range":{"start_line":32,"start_character":8,"end_line":32,"end_character":16},"updated":"2017-09-26 16:18:17.000000000","message":"we could nitpick on the implementation, but I\u0027m not in favor of unexpressive tuples. Let\u0027s not block that spec tho just because of that.","commit_id":"ebcd0acdc0df7dae58578e58e1cc1a953c1cf5cd"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"cba8fd5260edc6f370d0b59724be61ccf9e888c9","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":"As a newcomer to the Nova codebase, I would like to be able to read code that"},{"line_number":50,"context_line":"is clear so that I can work with it quicker and with more confidence that my"},{"line_number":51,"context_line":"changes won\u0027t break something."},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"Proposed change"},{"line_number":54,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":8,"id":"7f515b1d_03667a52","line":51,"updated":"2017-09-26 16:18:17.000000000","message":"Those aren\u0027t customer use cases, those are just technical motivations. I don\u0027t feel we should really care of that section. Just get rid of it and put N/A instead.","commit_id":"ebcd0acdc0df7dae58578e58e1cc1a953c1cf5cd"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"cba8fd5260edc6f370d0b59724be61ccf9e888c9","unresolved":false,"context_lines":[{"line_number":101,"context_line":" * compute_node_uuid: fields.UUIDField"},{"line_number":102,"context_line":" * service_host: fields.StringField"},{"line_number":103,"context_line":" * nodename: fields.StringField"},{"line_number":104,"context_line":" * limits: fields.StringField"},{"line_number":105,"context_line":" * allocation_request: fields.StringField"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"There isn\u0027t a good field type for either the limits or allocation_request"}],"source_content_type":"text/x-rst","patch_set":8,"id":"7f515b1d_43f9124b","line":104,"updated":"2017-09-26 16:18:17.000000000","message":"I\u0027d prefer limits being a DictOfStringsField, which is more accurate.","commit_id":"ebcd0acdc0df7dae58578e58e1cc1a953c1cf5cd"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"cba8fd5260edc6f370d0b59724be61ccf9e888c9","unresolved":false,"context_lines":[{"line_number":107,"context_line":"There isn\u0027t a good field type for either the limits or allocation_request"},{"line_number":108,"context_line":"values, as they can be a complex nested structure, so instead we\u0027ll store them"},{"line_number":109,"context_line":"as their JSON respresentations in a StringField. \u0027limits\u0027 values will typically"},{"line_number":110,"context_line":"be integers, but in cases involving NUMA, where it will be a dict-ified"},{"line_number":111,"context_line":"NUMATopologyLimits object, it will be more complex. The structure of an"},{"line_number":112,"context_line":"allocation_request, as described in this spec[2], looks like::"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    \"allocations\": ["}],"source_content_type":"text/x-rst","patch_set":8,"id":"7f515b1d_2364d621","line":111,"range":{"start_line":110,"start_character":56,"end_line":111,"end_character":51},"updated":"2017-09-26 16:18:17.000000000","message":"limits will still be a dictionary of (key, value) where both are strings since we serialize the NUMATopologyLimits object before sending it over the wire, that\u0027s it.","commit_id":"ebcd0acdc0df7dae58578e58e1cc1a953c1cf5cd"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"48c74358657768ae780f2b35c2bfa74bea6b873b","unresolved":false,"context_lines":[{"line_number":191,"context_line":"* Modify the conductor to accept these objects from select_destinations(), and"},{"line_number":192,"context_line":"  then send these objects to the cell conductors."},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"* Modify the conductor code towork with these objects for building instances"},{"line_number":195,"context_line":"  and claiming resources during retries."},{"line_number":196,"context_line":""},{"line_number":197,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"7f515b1d_1e7db6e6","line":194,"range":{"start_line":194,"start_character":28,"end_line":194,"end_character":34},"updated":"2017-09-26 15:36:15.000000000","message":"to work","commit_id":"ebcd0acdc0df7dae58578e58e1cc1a953c1cf5cd"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"cba8fd5260edc6f370d0b59724be61ccf9e888c9","unresolved":false,"context_lines":[{"line_number":192,"context_line":"  then send these objects to the cell conductors."},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"* Modify the conductor code towork with these objects for building instances"},{"line_number":195,"context_line":"  and claiming resources during retries."},{"line_number":196,"context_line":""},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"Dependencies"}],"source_content_type":"text/x-rst","patch_set":8,"id":"7f515b1d_83202ab2","line":195,"updated":"2017-09-26 16:18:17.000000000","message":"I\u0027d love to see how you consider the reschedule loop.\nSince there can be multiple conductors, since super-conductor is given that Selection object, how would it pass it to one specific local conductor, and how when the reschedule happens, another local conductor would get it ?\n\nHonestly, I was thinking we were passing the Selection object down to computes but I could be wrong. In that case, is it the purpose of that spec to do the work ?","commit_id":"ebcd0acdc0df7dae58578e58e1cc1a953c1cf5cd"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"1fb8d3c0574171fbc7b0373f3fb130a5ca7e1e10","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Before Queens, the scheduler\u0027s select_destinations() method returned a list,"},{"line_number":24,"context_line":"containing a dictionary representing the selected host for each requested"},{"line_number":25,"context_line":"instance. In Queens, however, this will be expanded to return much more"},{"line_number":26,"context_line":"information. At the request of operators, we will now be returning a list of"},{"line_number":27,"context_line":"HostDicts, which represents the selected host as in the past, along with zero"},{"line_number":28,"context_line":"or more \u0027alternate\u0027 hosts that are in the same cell and also meet the requested"},{"line_number":29,"context_line":"resources. Additionally, each of these will also be accompanied by a dictionary"}],"source_content_type":"text/x-rst","patch_set":9,"id":"7f515b1d_99eedd1f","line":26,"range":{"start_line":25,"start_character":10,"end_line":26,"end_character":12},"updated":"2017-10-02 20:44:09.000000000","message":"This reads like what you are describing in *this* paragraph is what is being proposed, but what you\u0027re describing in *this* paragraph is actually *not* what you\u0027re proposing. As such, this is very confusing to the reader.\n\nPerhaps just reword this to something like \"In Queens, we need to return much more information to the caller of select_destinations(). We could attempt to return a list of HostDicts...\"","commit_id":"cfbc7dd34a62c4dd96e523b342c938b5ab327baf"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"9d94c6f76dd8acc7d4a0382e76d88ae2daa3dc00","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Before Queens, the scheduler\u0027s select_destinations() method returned a list,"},{"line_number":24,"context_line":"containing a dictionary representing the selected host for each requested"},{"line_number":25,"context_line":"instance. In Queens, however, this will be expanded to return much more"},{"line_number":26,"context_line":"information. At the request of operators, we will now be returning a list of"},{"line_number":27,"context_line":"HostDicts, which represents the selected host as in the past, along with zero"},{"line_number":28,"context_line":"or more \u0027alternate\u0027 hosts that are in the same cell and also meet the requested"},{"line_number":29,"context_line":"resources. Additionally, each of these will also be accompanied by a dictionary"}],"source_content_type":"text/x-rst","patch_set":9,"id":"7f515b1d_30425310","line":26,"range":{"start_line":25,"start_character":10,"end_line":26,"end_character":12},"in_reply_to":"7f515b1d_99eedd1f","updated":"2017-10-03 08:13:26.000000000","message":"+1","commit_id":"cfbc7dd34a62c4dd96e523b342c938b5ab327baf"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"8b99a3a1c4a515e88ba9932bf4537f7abdf9e0af","unresolved":false,"context_lines":[{"line_number":60,"context_line":"keys, will now be stored as simple object fields along with the"},{"line_number":61,"context_line":"allocation_request. Additionally, the compute_node_uuid field will be added, as"},{"line_number":62,"context_line":"it would be useful to have this available in some of our allocation cleanup"},{"line_number":63,"context_line":"tasks."},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"There is no need for a corresponding SelectionList object, as there is no need"},{"line_number":66,"context_line":"for DB creation or retrieval. The select_destinations() method will return"}],"source_content_type":"text/x-rst","patch_set":9,"id":"7f515b1d_626ecf00","line":63,"updated":"2017-10-02 14:21:24.000000000","message":"maybe mentioning also the usefulness of having the cell_uuid field could be nice","commit_id":"cfbc7dd34a62c4dd96e523b342c938b5ab327baf"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"7d83c52f1e614ce6dafc532383706461db3e6992","unresolved":false,"context_lines":[{"line_number":60,"context_line":"keys, will now be stored as simple object fields along with the"},{"line_number":61,"context_line":"allocation_request. Additionally, the compute_node_uuid field will be added, as"},{"line_number":62,"context_line":"it would be useful to have this available in some of our allocation cleanup"},{"line_number":63,"context_line":"tasks."},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"There is no need for a corresponding SelectionList object, as there is no need"},{"line_number":66,"context_line":"for DB creation or retrieval. The select_destinations() method will return"}],"source_content_type":"text/x-rst","patch_set":9,"id":"7f515b1d_cc3b63c6","line":63,"in_reply_to":"7f515b1d_305b73f6","updated":"2017-10-03 14:25:29.000000000","message":"This wouldn\u0027t be for anything in the cell; it would be useful for the superconductor, which has to do the cell lookup for the hosts after calling _schedule_instances(). Looking at code like https://github.com/openstack/nova/blob/master/nova/conductor/manager.py#L1041-L1060, it seems like that could be greatly simplified if we knew the cell for the host. Since that code would have Selection objects returned from _schedule_instances(), it seemed smart to not have to go through all that cell lookup stuff.","commit_id":"cfbc7dd34a62c4dd96e523b342c938b5ab327baf"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"1fb8d3c0574171fbc7b0373f3fb130a5ca7e1e10","unresolved":false,"context_lines":[{"line_number":60,"context_line":"keys, will now be stored as simple object fields along with the"},{"line_number":61,"context_line":"allocation_request. Additionally, the compute_node_uuid field will be added, as"},{"line_number":62,"context_line":"it would be useful to have this available in some of our allocation cleanup"},{"line_number":63,"context_line":"tasks."},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"There is no need for a corresponding SelectionList object, as there is no need"},{"line_number":66,"context_line":"for DB creation or retrieval. The select_destinations() method will return"}],"source_content_type":"text/x-rst","patch_set":9,"id":"7f515b1d_b93999a4","line":63,"in_reply_to":"7f515b1d_626ecf00","updated":"2017-10-02 20:44:09.000000000","message":"Why is that useful considering it\u0027s only ever sent to a single cell?","commit_id":"cfbc7dd34a62c4dd96e523b342c938b5ab327baf"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"b0b5b4152c7df05ef1e51e2cb03f85364616a904","unresolved":false,"context_lines":[{"line_number":60,"context_line":"keys, will now be stored as simple object fields along with the"},{"line_number":61,"context_line":"allocation_request. Additionally, the compute_node_uuid field will be added, as"},{"line_number":62,"context_line":"it would be useful to have this available in some of our allocation cleanup"},{"line_number":63,"context_line":"tasks."},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"There is no need for a corresponding SelectionList object, as there is no need"},{"line_number":66,"context_line":"for DB creation or retrieval. The select_destinations() method will return"}],"source_content_type":"text/x-rst","patch_set":9,"id":"7f515b1d_df743500","line":63,"in_reply_to":"7f515b1d_b93999a4","updated":"2017-10-02 23:48:59.000000000","message":"That, and anything in the cell can\u0027t actually look up by the cell_uuid anyway. So yeah, I\u0027m not sure what the importance of that would be. Maybe just for the result filtering in the superconductor?","commit_id":"cfbc7dd34a62c4dd96e523b342c938b5ab327baf"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"9f9490b4fa6fa4bbca5c69d56cadd3a7eae2de96","unresolved":false,"context_lines":[{"line_number":60,"context_line":"keys, will now be stored as simple object fields along with the"},{"line_number":61,"context_line":"allocation_request. Additionally, the compute_node_uuid field will be added, as"},{"line_number":62,"context_line":"it would be useful to have this available in some of our allocation cleanup"},{"line_number":63,"context_line":"tasks."},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"There is no need for a corresponding SelectionList object, as there is no need"},{"line_number":66,"context_line":"for DB creation or retrieval. The select_destinations() method will return"}],"source_content_type":"text/x-rst","patch_set":9,"id":"7f515b1d_9af8fd49","line":63,"in_reply_to":"7f515b1d_cc3b63c6","updated":"2017-10-03 16:16:15.000000000","message":"Well, okay.","commit_id":"cfbc7dd34a62c4dd96e523b342c938b5ab327baf"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"9d94c6f76dd8acc7d4a0382e76d88ae2daa3dc00","unresolved":false,"context_lines":[{"line_number":60,"context_line":"keys, will now be stored as simple object fields along with the"},{"line_number":61,"context_line":"allocation_request. Additionally, the compute_node_uuid field will be added, as"},{"line_number":62,"context_line":"it would be useful to have this available in some of our allocation cleanup"},{"line_number":63,"context_line":"tasks."},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"There is no need for a corresponding SelectionList object, as there is no need"},{"line_number":66,"context_line":"for DB creation or retrieval. The select_destinations() method will return"}],"source_content_type":"text/x-rst","patch_set":9,"id":"7f515b1d_305b73f6","line":63,"in_reply_to":"7f515b1d_df743500","updated":"2017-10-03 08:13:26.000000000","message":"Yeah, that was my point why I asked for explaining that. For Queens, we won\u0027t support rescheduling between cells, so I don\u0027t understand why we need it. Possibly a later object version if needed ?","commit_id":"cfbc7dd34a62c4dd96e523b342c938b5ab327baf"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"1fb8d3c0574171fbc7b0373f3fb130a5ca7e1e10","unresolved":false,"context_lines":[{"line_number":62,"context_line":"it would be useful to have this available in some of our allocation cleanup"},{"line_number":63,"context_line":"tasks."},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"There is no need for a corresponding SelectionList object, as there is no need"},{"line_number":66,"context_line":"for DB creation or retrieval. The select_destinations() method will return"},{"line_number":67,"context_line":"simple Python lists of Selection objects. The Scheduler will return one list"},{"line_number":68,"context_line":"of Selection objects for each requested instance, representing the selected"},{"line_number":69,"context_line":"host as well as any alternates."}],"source_content_type":"text/x-rst","patch_set":9,"id":"7f515b1d_f95271dd","line":66,"range":{"start_line":65,"start_character":0,"end_line":66,"end_character":29},"updated":"2017-10-02 20:44:09.000000000","message":"This isn\u0027t really why a SelectionList object would be needed. The XXXList objects make serialization/deserialization more consistent because they\u0027re just ovo objects.","commit_id":"cfbc7dd34a62c4dd96e523b342c938b5ab327baf"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"0e456478b72d03ac7c974eb41df5a8912c97ad74","unresolved":false,"context_lines":[{"line_number":62,"context_line":"it would be useful to have this available in some of our allocation cleanup"},{"line_number":63,"context_line":"tasks."},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"There is no need for a corresponding SelectionList object, as there is no need"},{"line_number":66,"context_line":"for DB creation or retrieval. The select_destinations() method will return"},{"line_number":67,"context_line":"simple Python lists of Selection objects. The Scheduler will return one list"},{"line_number":68,"context_line":"of Selection objects for each requested instance, representing the selected"},{"line_number":69,"context_line":"host as well as any alternates."}],"source_content_type":"text/x-rst","patch_set":9,"id":"7f515b1d_8fb31d4e","line":66,"range":{"start_line":65,"start_character":0,"end_line":66,"end_character":29},"in_reply_to":"7f515b1d_0c705bdc","updated":"2017-10-03 14:50:58.000000000","message":"@Dan - sorry, should have been \u0027dandysmith\u0027\n\n:)","commit_id":"cfbc7dd34a62c4dd96e523b342c938b5ab327baf"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"1259bd39c787c9250f4c3dc21c1a37a4210704a4","unresolved":false,"context_lines":[{"line_number":62,"context_line":"it would be useful to have this available in some of our allocation cleanup"},{"line_number":63,"context_line":"tasks."},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"There is no need for a corresponding SelectionList object, as there is no need"},{"line_number":66,"context_line":"for DB creation or retrieval. The select_destinations() method will return"},{"line_number":67,"context_line":"simple Python lists of Selection objects. The Scheduler will return one list"},{"line_number":68,"context_line":"of Selection objects for each requested instance, representing the selected"},{"line_number":69,"context_line":"host as well as any alternates."}],"source_content_type":"text/x-rst","patch_set":9,"id":"7f515b1d_0c705bdc","line":66,"range":{"start_line":65,"start_character":0,"end_line":66,"end_character":29},"in_reply_to":"7f515b1d_2c6e77c9","updated":"2017-10-03 14:36:42.000000000","message":"Is dandsmith my new thursday nick?\n\nBut yes, I said that thing, and I don\u0027t think we should have a list object here. It\u0027s just overhead and complexity that we don\u0027t have any use for given the goal of this object.\n\n+1 for jaypipes for trying to enforce consistency, but for newer objects we have that don\u0027t have list db query methods, we\u0027ve been not having corresponding list objects.","commit_id":"cfbc7dd34a62c4dd96e523b342c938b5ab327baf"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"27f749823319d82de31af2957b7d427514f6bb73","unresolved":false,"context_lines":[{"line_number":62,"context_line":"it would be useful to have this available in some of our allocation cleanup"},{"line_number":63,"context_line":"tasks."},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"There is no need for a corresponding SelectionList object, as there is no need"},{"line_number":66,"context_line":"for DB creation or retrieval. The select_destinations() method will return"},{"line_number":67,"context_line":"simple Python lists of Selection objects. The Scheduler will return one list"},{"line_number":68,"context_line":"of Selection objects for each requested instance, representing the selected"},{"line_number":69,"context_line":"host as well as any alternates."}],"source_content_type":"text/x-rst","patch_set":9,"id":"7f515b1d_0f816d4b","line":66,"range":{"start_line":65,"start_character":0,"end_line":66,"end_character":29},"in_reply_to":"7f515b1d_8fb31d4e","updated":"2017-10-03 14:52:10.000000000","message":"Oooh, now you\u0027re cruisin\u0027 for a -1 just for spite..","commit_id":"cfbc7dd34a62c4dd96e523b342c938b5ab327baf"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"7d83c52f1e614ce6dafc532383706461db3e6992","unresolved":false,"context_lines":[{"line_number":62,"context_line":"it would be useful to have this available in some of our allocation cleanup"},{"line_number":63,"context_line":"tasks."},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"There is no need for a corresponding SelectionList object, as there is no need"},{"line_number":66,"context_line":"for DB creation or retrieval. The select_destinations() method will return"},{"line_number":67,"context_line":"simple Python lists of Selection objects. The Scheduler will return one list"},{"line_number":68,"context_line":"of Selection objects for each requested instance, representing the selected"},{"line_number":69,"context_line":"host as well as any alternates."}],"source_content_type":"text/x-rst","patch_set":9,"id":"7f515b1d_2c6e77c9","line":66,"range":{"start_line":65,"start_character":0,"end_line":66,"end_character":29},"in_reply_to":"7f515b1d_f95271dd","updated":"2017-10-03 14:25:29.000000000","message":"This is the summary of the discussion with dandsmith in an earlier review, as well as on IRC.\n\nhttps://review.openstack.org/#/c/498830/3/specs/queens/approved/return-destination-objects.rst@60","commit_id":"cfbc7dd34a62c4dd96e523b342c938b5ab327baf"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"8b99a3a1c4a515e88ba9932bf4537f7abdf9e0af","unresolved":false,"context_lines":[{"line_number":95,"context_line":"-----------------"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"There will be no changes to any database schemas, but this will introduce a new"},{"line_number":98,"context_line":"versioned object. This object will contain the following fields, along with"},{"line_number":99,"context_line":"their types::"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":" * compute_node_uuid: fields.UUIDField"}],"source_content_type":"text/x-rst","patch_set":9,"id":"7f515b1d_227457ce","line":98,"range":{"start_line":98,"start_character":0,"end_line":98,"end_character":17},"updated":"2017-10-02 14:21:24.000000000","message":"nit: versioned but unregistered object, right?","commit_id":"cfbc7dd34a62c4dd96e523b342c938b5ab327baf"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"1fb8d3c0574171fbc7b0373f3fb130a5ca7e1e10","unresolved":false,"context_lines":[{"line_number":95,"context_line":"-----------------"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"There will be no changes to any database schemas, but this will introduce a new"},{"line_number":98,"context_line":"versioned object. This object will contain the following fields, along with"},{"line_number":99,"context_line":"their types::"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":" * compute_node_uuid: fields.UUIDField"}],"source_content_type":"text/x-rst","patch_set":9,"id":"7f515b1d_7958c1f8","line":98,"range":{"start_line":98,"start_character":0,"end_line":98,"end_character":17},"in_reply_to":"7f515b1d_227457ce","updated":"2017-10-02 20:44:09.000000000","message":"No, it will definitely be registered. It\u0027s passed over RPC, and therefore must be registered.","commit_id":"cfbc7dd34a62c4dd96e523b342c938b5ab327baf"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"9d94c6f76dd8acc7d4a0382e76d88ae2daa3dc00","unresolved":false,"context_lines":[{"line_number":95,"context_line":"-----------------"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"There will be no changes to any database schemas, but this will introduce a new"},{"line_number":98,"context_line":"versioned object. This object will contain the following fields, along with"},{"line_number":99,"context_line":"their types::"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":" * compute_node_uuid: fields.UUIDField"}],"source_content_type":"text/x-rst","patch_set":9,"id":"7f515b1d_10763771","line":98,"range":{"start_line":98,"start_character":0,"end_line":98,"end_character":17},"in_reply_to":"7f515b1d_7958c1f8","updated":"2017-10-03 08:13:26.000000000","message":"Oh right, sorry.","commit_id":"cfbc7dd34a62c4dd96e523b342c938b5ab327baf"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"8b99a3a1c4a515e88ba9932bf4537f7abdf9e0af","unresolved":false,"context_lines":[{"line_number":102,"context_line":" * service_host: fields.StringField"},{"line_number":103,"context_line":" * nodename: fields.StringField"},{"line_number":104,"context_line":" * cell_uuid: fields.UUIDField"},{"line_number":105,"context_line":" * limits: fields.StringField"},{"line_number":106,"context_line":" * allocation_request: fields.StringField"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"There isn\u0027t a good field type for either the limits or allocation_request"}],"source_content_type":"text/x-rst","patch_set":9,"id":"7f515b1d_623c8fe0","line":105,"range":{"start_line":105,"start_character":11,"end_line":105,"end_character":29},"updated":"2017-10-02 14:21:24.000000000","message":"like I said in PS8, I\u0027d prefer a DictOfStringsField type.","commit_id":"cfbc7dd34a62c4dd96e523b342c938b5ab327baf"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"1fb8d3c0574171fbc7b0373f3fb130a5ca7e1e10","unresolved":false,"context_lines":[{"line_number":102,"context_line":" * service_host: fields.StringField"},{"line_number":103,"context_line":" * nodename: fields.StringField"},{"line_number":104,"context_line":" * cell_uuid: fields.UUIDField"},{"line_number":105,"context_line":" * limits: fields.StringField"},{"line_number":106,"context_line":" * allocation_request: fields.StringField"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"There isn\u0027t a good field type for either the limits or allocation_request"}],"source_content_type":"text/x-rst","patch_set":9,"id":"7f515b1d_790d61e6","line":105,"range":{"start_line":105,"start_character":11,"end_line":105,"end_character":29},"in_reply_to":"7f515b1d_623c8fe0","updated":"2017-10-02 20:44:09.000000000","message":"And as I have said in a number of the patchsets, neither StringField nor DictOfIntegersField will work :)\n\nWe no longer need to pass limits information for any \"normal\" resource classes, because this information is already on the compute hosts themselves in the form of the min_unit, max_unit, and step_size fields of the inventory records for the resource classes.\n\nThe only (I think!) type of limit that we will need to pass is the numa_limits information which is of type ObjectField(\u0027NUMATopologyLimits\u0027) and is, obviously, very specific to NUMA mess.","commit_id":"cfbc7dd34a62c4dd96e523b342c938b5ab327baf"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"9d94c6f76dd8acc7d4a0382e76d88ae2daa3dc00","unresolved":false,"context_lines":[{"line_number":102,"context_line":" * service_host: fields.StringField"},{"line_number":103,"context_line":" * nodename: fields.StringField"},{"line_number":104,"context_line":" * cell_uuid: fields.UUIDField"},{"line_number":105,"context_line":" * limits: fields.StringField"},{"line_number":106,"context_line":" * allocation_request: fields.StringField"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"There isn\u0027t a good field type for either the limits or allocation_request"}],"source_content_type":"text/x-rst","patch_set":9,"id":"7f515b1d_104197a9","line":105,"range":{"start_line":105,"start_character":11,"end_line":105,"end_character":29},"in_reply_to":"7f515b1d_790d61e6","updated":"2017-10-03 08:13:26.000000000","message":"That\u0027s an excellent point. Since legacy filters (RAM, disk and Corefilter) are deprecated, we no longer pass limits anyway for those \"normal\" resource classes.","commit_id":"cfbc7dd34a62c4dd96e523b342c938b5ab327baf"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"1fb8d3c0574171fbc7b0373f3fb130a5ca7e1e10","unresolved":false,"context_lines":[{"line_number":108,"context_line":"There isn\u0027t a good field type for either the limits or allocation_request"},{"line_number":109,"context_line":"values, as they can be a complex nested structure, so instead we\u0027ll store them"},{"line_number":110,"context_line":"as their JSON respresentations in a StringField. \u0027limits\u0027 values will typically"},{"line_number":111,"context_line":"be integers, but in cases involving NUMA, where it will be a dict-ified"},{"line_number":112,"context_line":"NUMATopologyLimits object, it will be more complex. The structure of an"},{"line_number":113,"context_line":"allocation_request, as described in this spec[2], looks like::"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    \"allocations\": ["}],"source_content_type":"text/x-rst","patch_set":9,"id":"7f515b1d_19f66dd8","line":112,"range":{"start_line":111,"start_character":13,"end_line":112,"end_character":26},"updated":"2017-10-02 20:44:09.000000000","message":"Don\u0027t dictify it. :) Just have a numa_limits field of type ObjectField(\u0027NUMATopologyLimits\u0027) and then we can deprecate this specific field if/when we are able to remove the NUMA filter and model NUMA resources in placement.","commit_id":"cfbc7dd34a62c4dd96e523b342c938b5ab327baf"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"1fb8d3c0574171fbc7b0373f3fb130a5ca7e1e10","unresolved":false,"context_lines":[{"line_number":130,"context_line":"                \"DISK_GB\": $AMOUNT_REQUESTED_DISK_GB"},{"line_number":131,"context_line":"            }"},{"line_number":132,"context_line":"        },"},{"line_number":133,"context_line":"    ]"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"REST API impact"},{"line_number":136,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":9,"id":"7f515b1d_7926816a","line":133,"updated":"2017-10-02 20:44:09.000000000","message":"I would actually remove the above and just say \"allocation_request field is a StringField containing the JSON-ified BLOB of data that can be used by the cell conductor to attempt a claim of resources for the instance during a retry. It is intended to be an opaque BLOB of data that is passed along and not inspected by the caller.\"","commit_id":"cfbc7dd34a62c4dd96e523b342c938b5ab327baf"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"9d94c6f76dd8acc7d4a0382e76d88ae2daa3dc00","unresolved":false,"context_lines":[{"line_number":130,"context_line":"                \"DISK_GB\": $AMOUNT_REQUESTED_DISK_GB"},{"line_number":131,"context_line":"            }"},{"line_number":132,"context_line":"        },"},{"line_number":133,"context_line":"    ]"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"REST API impact"},{"line_number":136,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":9,"id":"7f515b1d_b0d3e300","line":133,"in_reply_to":"7f515b1d_7926816a","updated":"2017-10-03 08:13:26.000000000","message":"I\u0027d say \"serialized primitive\" in the sense of o.vo, as it would include the object version and the namespace","commit_id":"cfbc7dd34a62c4dd96e523b342c938b5ab327baf"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"7d83c52f1e614ce6dafc532383706461db3e6992","unresolved":false,"context_lines":[{"line_number":130,"context_line":"                \"DISK_GB\": $AMOUNT_REQUESTED_DISK_GB"},{"line_number":131,"context_line":"            }"},{"line_number":132,"context_line":"        },"},{"line_number":133,"context_line":"    ]"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"REST API impact"},{"line_number":136,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":9,"id":"7f515b1d_6cdb4f21","line":133,"in_reply_to":"7f515b1d_7926816a","updated":"2017-10-03 14:25:29.000000000","message":"The reason for including it here was because there was resistance to adding this object in the first place, and that JSON-ifying the allocation_request data was not necessary. I agree that now that it\u0027s generally accepted that adding this object is a good thing, and that the allocation_request should be JSONified, perhaps we don\u0027t need the justification. But for historical purposes, I think it\u0027s better to leave this here.","commit_id":"cfbc7dd34a62c4dd96e523b342c938b5ab327baf"}]}
