)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"d9a0441c2d9ff683f5313d8250339103398da72e","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Sometimes when a request to build a VM is attempted, the build can fail for a"},{"line_number":10,"context_line":"variety of different reasons. At the Atlanta PTG we discussed a request from"},{"line_number":11,"context_line":"operators have the scheduler return some alternate hosts along with the"},{"line_number":12,"context_line":"selected host. This was desired because in the event of a failed build, another"},{"line_number":13,"context_line":"host could be tried without having to go through the entire scheduling process"},{"line_number":14,"context_line":"again."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"7f515b1d_a455a152","line":11,"range":{"start_line":11,"start_character":10,"end_line":11,"end_character":14},"updated":"2017-09-25 12:17:02.000000000","message":"to have","commit_id":"c6bb87a5a2742586bcc98ad60e115118f55d314e"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"810d2140ef0974501cee8aaf245188e26e9cb90b","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Sometimes when a request to build a VM is attempted, the build can fail for a"},{"line_number":10,"context_line":"variety of different reasons. At the Atlanta PTG we discussed a request from"},{"line_number":11,"context_line":"operators have the scheduler return some alternate hosts along with the"},{"line_number":12,"context_line":"selected host. This was desired because in the event of a failed build, another"},{"line_number":13,"context_line":"host could be tried without having to go through the entire scheduling process"},{"line_number":14,"context_line":"again."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"7f515b1d_f407c81b","line":11,"range":{"start_line":11,"start_character":10,"end_line":11,"end_character":14},"in_reply_to":"7f515b1d_a455a152","updated":"2017-09-25 13:57:29.000000000","message":"Done","commit_id":"c6bb87a5a2742586bcc98ad60e115118f55d314e"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"bd2acac9e13ecc1ce2a7ff2cb12173d0818de913","unresolved":false,"context_lines":[{"line_number":13,"context_line":"cell conductor to start the retry process will no longer be possible, as"},{"line_number":14,"context_line":"cells cannot call up to the API level. We propose to have the scheduler"},{"line_number":15,"context_line":"return some alternate hosts along with the selected host. This was"},{"line_number":16,"context_line":"desired because in the event of a failed buildi or resize, another host"},{"line_number":17,"context_line":"could be tried without having to go through the entire scheduling"},{"line_number":18,"context_line":"process again."},{"line_number":19,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"7f515b1d_afc2a457","line":16,"range":{"start_line":16,"start_character":41,"end_line":16,"end_character":47},"updated":"2017-09-28 16:33:39.000000000","message":"LOL, vim fail.","commit_id":"d1a78ecab979f576462b9383d4d891f338bc893b"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"eccef3e625d45a8a40f5f8236db3da3b28105d6e","unresolved":false,"context_lines":[{"line_number":13,"context_line":"cell conductor to start the retry process will no longer be possible, as"},{"line_number":14,"context_line":"cells cannot call up to the API level. We propose to have the scheduler"},{"line_number":15,"context_line":"return some alternate hosts along with the selected host. This was"},{"line_number":16,"context_line":"desired because in the event of a failed buildi or resize, another host"},{"line_number":17,"context_line":"could be tried without having to go through the entire scheduling"},{"line_number":18,"context_line":"process again."},{"line_number":19,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"7f515b1d_d215879d","line":16,"range":{"start_line":16,"start_character":41,"end_line":16,"end_character":47},"in_reply_to":"7f515b1d_afc2a457","updated":"2017-09-28 17:27:00.000000000","message":"/me is embarrassed","commit_id":"d1a78ecab979f576462b9383d4d891f338bc893b"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"41059df9d39490bed93eca5de3e274793aad0ad5","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Return Alternate Hosts"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Sometimes when a request to build or resize a VM is attempted, the build"},{"line_number":10,"context_line":"can fail for a variety of different reasons. At the Atlanta PTG we"},{"line_number":11,"context_line":"discussed a request from operators to still be able to retry failed"},{"line_number":12,"context_line":"builds. With the cells V2 design, though, the communication from the"},{"line_number":13,"context_line":"cell conductor to start the retry process will no longer be possible, as"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"7f515b1d_b50f7c86","line":10,"range":{"start_line":10,"start_character":52,"end_line":10,"end_character":63},"updated":"2017-09-29 20:59:27.000000000","message":"I think it was actually the Boston Forum, but whatever.","commit_id":"c58665bdf6e58997508a41a3051cc9ad283ebe0f"}],"specs/queens/approved/return-alternate-hosts.rst":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"d9a0441c2d9ff683f5313d8250339103398da72e","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Sometimes when a request to build a VM is attempted, the build can fail for a"},{"line_number":14,"context_line":"variety of different reasons. At the Atlanta PTG we discussed a request from"},{"line_number":15,"context_line":"operators have the scheduler return some alternate hosts along with the"},{"line_number":16,"context_line":"selected host. This was desired because in the event of a failed build, another"},{"line_number":17,"context_line":"host could be tried without having to go through the entire scheduling process"},{"line_number":18,"context_line":"again."}],"source_content_type":"text/x-rst","patch_set":1,"id":"7f515b1d_24c77115","line":15,"range":{"start_line":15,"start_character":10,"end_line":15,"end_character":14},"updated":"2017-09-25 12:17:02.000000000","message":"to have","commit_id":"c6bb87a5a2742586bcc98ad60e115118f55d314e"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"810d2140ef0974501cee8aaf245188e26e9cb90b","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Sometimes when a request to build a VM is attempted, the build can fail for a"},{"line_number":14,"context_line":"variety of different reasons. At the Atlanta PTG we discussed a request from"},{"line_number":15,"context_line":"operators have the scheduler return some alternate hosts along with the"},{"line_number":16,"context_line":"selected host. This was desired because in the event of a failed build, another"},{"line_number":17,"context_line":"host could be tried without having to go through the entire scheduling process"},{"line_number":18,"context_line":"again."}],"source_content_type":"text/x-rst","patch_set":1,"id":"7f515b1d_b7ff1200","line":15,"range":{"start_line":15,"start_character":10,"end_line":15,"end_character":14},"in_reply_to":"7f515b1d_24c77115","updated":"2017-09-25 13:57:29.000000000","message":"Done","commit_id":"c6bb87a5a2742586bcc98ad60e115118f55d314e"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"d9a0441c2d9ff683f5313d8250339103398da72e","unresolved":false,"context_lines":[{"line_number":21,"context_line":"Problem description"},{"line_number":22,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"Building a VM is a lengthy process, with the bulk of time spent selecting a"},{"line_number":25,"context_line":"target host by the scheduler. Occasionally the build of an instance on a host"},{"line_number":26,"context_line":"fails, for any of a number of reasons. When that happens, the process has to"},{"line_number":27,"context_line":"start all over again, since this happens in the cell, and cells cannot call"},{"line_number":28,"context_line":"back up to the api layer where the scheduler lives. Operators requested that"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7f515b1d_04f59557","line":25,"range":{"start_line":24,"start_character":35,"end_line":25,"end_character":29},"updated":"2017-09-25 12:17:02.000000000","message":"pretty sure the bulk of the time to build a VM is actually spawning the VM on the target host :)","commit_id":"c6bb87a5a2742586bcc98ad60e115118f55d314e"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"810d2140ef0974501cee8aaf245188e26e9cb90b","unresolved":false,"context_lines":[{"line_number":21,"context_line":"Problem description"},{"line_number":22,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"Building a VM is a lengthy process, with the bulk of time spent selecting a"},{"line_number":25,"context_line":"target host by the scheduler. Occasionally the build of an instance on a host"},{"line_number":26,"context_line":"fails, for any of a number of reasons. When that happens, the process has to"},{"line_number":27,"context_line":"start all over again, since this happens in the cell, and cells cannot call"},{"line_number":28,"context_line":"back up to the api layer where the scheduler lives. Operators requested that"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7f515b1d_170ee631","line":25,"range":{"start_line":24,"start_character":35,"end_line":25,"end_character":29},"in_reply_to":"7f515b1d_04f59557","updated":"2017-09-25 13:57:29.000000000","message":"Point taken. Reworded.","commit_id":"c6bb87a5a2742586bcc98ad60e115118f55d314e"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"d9a0441c2d9ff683f5313d8250339103398da72e","unresolved":false,"context_lines":[{"line_number":24,"context_line":"Building a VM is a lengthy process, with the bulk of time spent selecting a"},{"line_number":25,"context_line":"target host by the scheduler. Occasionally the build of an instance on a host"},{"line_number":26,"context_line":"fails, for any of a number of reasons. When that happens, the process has to"},{"line_number":27,"context_line":"start all over again, since this happens in the cell, and cells cannot call"},{"line_number":28,"context_line":"back up to the api layer where the scheduler lives. Operators requested that"},{"line_number":29,"context_line":"instead of selecting a single host for an instance, we return several hosts per"},{"line_number":30,"context_line":"instance, all of which would be able to satisfy the requested resources. This"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7f515b1d_a4036142","line":27,"range":{"start_line":27,"start_character":22,"end_line":27,"end_character":27},"updated":"2017-09-25 12:17:02.000000000","message":"s/since/and because this/","commit_id":"c6bb87a5a2742586bcc98ad60e115118f55d314e"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"d9a0441c2d9ff683f5313d8250339103398da72e","unresolved":false,"context_lines":[{"line_number":25,"context_line":"target host by the scheduler. Occasionally the build of an instance on a host"},{"line_number":26,"context_line":"fails, for any of a number of reasons. When that happens, the process has to"},{"line_number":27,"context_line":"start all over again, since this happens in the cell, and cells cannot call"},{"line_number":28,"context_line":"back up to the api layer where the scheduler lives. Operators requested that"},{"line_number":29,"context_line":"instead of selecting a single host for an instance, we return several hosts per"},{"line_number":30,"context_line":"instance, all of which would be able to satisfy the requested resources. This"},{"line_number":31,"context_line":"would enable retries within the cell."}],"source_content_type":"text/x-rst","patch_set":1,"id":"7f515b1d_44fa6d42","line":28,"range":{"start_line":28,"start_character":45,"end_line":28,"end_character":50},"updated":"2017-09-25 12:17:02.000000000","message":"lives, we run into a problem.","commit_id":"c6bb87a5a2742586bcc98ad60e115118f55d314e"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"810d2140ef0974501cee8aaf245188e26e9cb90b","unresolved":false,"context_lines":[{"line_number":25,"context_line":"target host by the scheduler. Occasionally the build of an instance on a host"},{"line_number":26,"context_line":"fails, for any of a number of reasons. When that happens, the process has to"},{"line_number":27,"context_line":"start all over again, since this happens in the cell, and cells cannot call"},{"line_number":28,"context_line":"back up to the api layer where the scheduler lives. Operators requested that"},{"line_number":29,"context_line":"instead of selecting a single host for an instance, we return several hosts per"},{"line_number":30,"context_line":"instance, all of which would be able to satisfy the requested resources. This"},{"line_number":31,"context_line":"would enable retries within the cell."}],"source_content_type":"text/x-rst","patch_set":1,"id":"7f515b1d_b7283286","line":28,"range":{"start_line":28,"start_character":45,"end_line":28,"end_character":50},"in_reply_to":"7f515b1d_44fa6d42","updated":"2017-09-25 13:57:29.000000000","message":"That\u0027s a pretty long run-on sentence, but ok.","commit_id":"c6bb87a5a2742586bcc98ad60e115118f55d314e"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"d9a0441c2d9ff683f5313d8250339103398da72e","unresolved":false,"context_lines":[{"line_number":135,"context_line":"Developer impact"},{"line_number":136,"context_line":"----------------"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"This change will make not make the workflow for the whole scheduling/building"},{"line_number":139,"context_line":"process any more complex, but it will make the data being sent among the"},{"line_number":140,"context_line":"services a little more complex."},{"line_number":141,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"7f515b1d_04511537","line":138,"range":{"start_line":138,"start_character":12,"end_line":138,"end_character":30},"updated":"2017-09-25 12:17:02.000000000","message":"will not make","commit_id":"c6bb87a5a2742586bcc98ad60e115118f55d314e"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"7c6e1043663240881f6b2cbb9ea0274751bf4bb9","unresolved":false,"context_lines":[{"line_number":29,"context_line":"lives, we run into a problem. Operators requested that instead of selecting a"},{"line_number":30,"context_line":"single host for an instance, we return several hosts per instance, all of which"},{"line_number":31,"context_line":"would be able to satisfy the requested resources. This would enable retries"},{"line_number":32,"context_line":"within the cell."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"Use Cases"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f515b1d_55386fec","line":32,"updated":"2017-09-28 09:01:17.000000000","message":"I am fairly sure operators really just requested that we still retry builds in a multi cells v2 world? Its just this is what we offered them, and they said yes to it.\n\nBut that is probably just splitting hairs.","commit_id":"07e469ae1239137ba42355adfcbf6ec70a29ad33"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"b30af15d486c35845c6ee8ebe15baf2dc5ff5aad","unresolved":false,"context_lines":[{"line_number":29,"context_line":"lives, we run into a problem. Operators requested that instead of selecting a"},{"line_number":30,"context_line":"single host for an instance, we return several hosts per instance, all of which"},{"line_number":31,"context_line":"would be able to satisfy the requested resources. This would enable retries"},{"line_number":32,"context_line":"within the cell."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"Use Cases"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f515b1d_31bd0002","line":32,"in_reply_to":"7f515b1d_55386fec","updated":"2017-09-28 13:39:37.000000000","message":"It\u0027s not splitting hairs. Operators wanted retries, and we wanted to not support up calls from the cells back to the superconductor. This approach satisfies both, and is even a bit more efficient as we don\u0027t have to re-run the scheduler to do a retry.","commit_id":"07e469ae1239137ba42355adfcbf6ec70a29ad33"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"c2bae59260dcfed6fc8de39089359725111df04e","unresolved":false,"context_lines":[{"line_number":78,"context_line":"      unclaim(host)"},{"line_number":79,"context_line":"      continue"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"Alternatives"},{"line_number":83,"context_line":"------------"},{"line_number":84,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f515b1d_4deb5f12","line":81,"updated":"2017-09-27 14:20:18.000000000","message":"Do we retry scheduling during resize, migrate, live migrate, evacuate, usnhelve (after shelve_offload)? If we do then will the above described behavior be applied to those places as well?","commit_id":"07e469ae1239137ba42355adfcbf6ec70a29ad33"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"7c6e1043663240881f6b2cbb9ea0274751bf4bb9","unresolved":false,"context_lines":[{"line_number":78,"context_line":"      unclaim(host)"},{"line_number":79,"context_line":"      continue"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"Alternatives"},{"line_number":83,"context_line":"------------"},{"line_number":84,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f515b1d_75200bad","line":81,"in_reply_to":"7f515b1d_4deb5f12","updated":"2017-09-28 09:01:17.000000000","message":"+1 to that question. Not sure all of those do a retry, but live-migration does try.","commit_id":"07e469ae1239137ba42355adfcbf6ec70a29ad33"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"b30af15d486c35845c6ee8ebe15baf2dc5ff5aad","unresolved":false,"context_lines":[{"line_number":78,"context_line":"      unclaim(host)"},{"line_number":79,"context_line":"      continue"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"Alternatives"},{"line_number":83,"context_line":"------------"},{"line_number":84,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f515b1d_d10b4cd3","line":81,"in_reply_to":"7f515b1d_75200bad","updated":"2017-09-28 13:39:37.000000000","message":"It would depend on the flow of logic. If the process first calls the scheduler to get its target, then yes, it would receive alternates that could be used for retries. If it uses some other method of determining its target, such as specifying a forced host, then no, retries would not be possible, as there is only one choice available.","commit_id":"07e469ae1239137ba42355adfcbf6ec70a29ad33"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"7c6e1043663240881f6b2cbb9ea0274751bf4bb9","unresolved":false,"context_lines":[{"line_number":127,"context_line":"super conductor, and cell conductor, but not to any degree that should be"},{"line_number":128,"context_line":"impactful. It will have a positive performance impact when an instance build"},{"line_number":129,"context_line":"fails, as the cell conductor can retry on a different host right away."},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"Other deployer impact"},{"line_number":132,"context_line":"---------------------"},{"line_number":133,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f515b1d_700b79d5","line":130,"updated":"2017-09-28 09:01:17.000000000","message":"There is a scale issue I think is worth mentioning here.\n\nWhen you have a burst of builds, they tend to all try and pick the same host. Now getting allocations helps to ensure the first host pick is a good one, and if someone else already got in there we will retry for another candidate host. All is well.\n\nBut in this retry case, its very likely all the other top candidates have already been stolen by other build requests.\n\nOne option is make extra allocations in the first loop for the retry hosts, and drop them if they are not used once the build has succeeded. But that is fairly terrible as it stops you using all your capacity when these large bursts occur, and a fill first approach gets totally screwed over.\n\nThe other alternative you mention in the alternatives already, we just do the up call.\n\n\n... so a long story, but I think you strike the correct balance here, but I think we need to state something about this problem. When there is a large burst of builds, the retry candidates are likely to be rubbish. Seems an OK trade off, but I think we should be explicit about that.","commit_id":"07e469ae1239137ba42355adfcbf6ec70a29ad33"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"fe8f6449477a510506059e55fc31998cbf1a27b1","unresolved":false,"context_lines":[{"line_number":127,"context_line":"super conductor, and cell conductor, but not to any degree that should be"},{"line_number":128,"context_line":"impactful. It will have a positive performance impact when an instance build"},{"line_number":129,"context_line":"fails, as the cell conductor can retry on a different host right away."},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"Other deployer impact"},{"line_number":132,"context_line":"---------------------"},{"line_number":133,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f515b1d_a51ab513","line":130,"in_reply_to":"7f515b1d_0fb6583f","updated":"2017-09-29 08:55:53.000000000","message":"Agreed with what you are saying.\n\nIt is just with a build burst, when you hit the unexpected failures, the hosts are likely to be useless when you get around to trying them. I don\u0027t really have a big problem with that either, just seems worth noting.","commit_id":"07e469ae1239137ba42355adfcbf6ec70a29ad33"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"4b8e2551e391e311294380e11e0e0f0ba03fdcc8","unresolved":false,"context_lines":[{"line_number":127,"context_line":"super conductor, and cell conductor, but not to any degree that should be"},{"line_number":128,"context_line":"impactful. It will have a positive performance impact when an instance build"},{"line_number":129,"context_line":"fails, as the cell conductor can retry on a different host right away."},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"Other deployer impact"},{"line_number":132,"context_line":"---------------------"},{"line_number":133,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f515b1d_0fb6583f","line":130,"in_reply_to":"7f515b1d_700b79d5","updated":"2017-09-28 16:14:47.000000000","message":"John, claims in the scheduler solves the build burst problem. The retry loop that we now do in claiming resources in the scheduler is very tight and means we no longer have the issue of a stampeding herd of instances all competing for the same target host trying to claim resources on it.\n\nThere\u0027s still potential problems when CPU pinning or NUMA topologies are needed, but that\u0027s ... well, that\u0027s a known issue.\n\nThe *only* thing that this alternate hosts spec solves is unexpected failures to build on the compute host. Compute hosts running out of resources is not an unexpected failure -- it\u0027s now handled in the scheduler during the tight claim-and-retry-if-out-of-resources process.","commit_id":"07e469ae1239137ba42355adfcbf6ec70a29ad33"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"b30af15d486c35845c6ee8ebe15baf2dc5ff5aad","unresolved":false,"context_lines":[{"line_number":127,"context_line":"super conductor, and cell conductor, but not to any degree that should be"},{"line_number":128,"context_line":"impactful. It will have a positive performance impact when an instance build"},{"line_number":129,"context_line":"fails, as the cell conductor can retry on a different host right away."},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"Other deployer impact"},{"line_number":132,"context_line":"---------------------"},{"line_number":133,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f515b1d_d1310c5c","line":130,"in_reply_to":"7f515b1d_700b79d5","updated":"2017-09-28 13:39:37.000000000","message":"The code will not add a claimed host when selecting multiple instances in a single request. See https://review.openstack.org/#/c/486215/12/nova/scheduler/filter_scheduler.py@275\n\nIf you get a flurry of similar requests, each will get a selected host that is guaranteed to have sufficient resources to build that request. The alternates will probably overlap, so yes, there is a chance that an alternate will not have sufficient resources. Keep in mind, though, that most build failures we see are due to the race for resources that claiming in the scheduler will eliminate. So retries should be much, much less frequent. If an operator finds that they are failing because the alternate no longer had sufficient resources, they can increase CONF.scheduler.max_attempts to provide more alternates.","commit_id":"07e469ae1239137ba42355adfcbf6ec70a29ad33"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"faf7a4906fa518c4a598db07f140bbc735c2e7fd","unresolved":false,"context_lines":[{"line_number":127,"context_line":"super conductor, and cell conductor, but not to any degree that should be"},{"line_number":128,"context_line":"impactful. It will have a positive performance impact when an instance build"},{"line_number":129,"context_line":"fails, as the cell conductor can retry on a different host right away."},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"Other deployer impact"},{"line_number":132,"context_line":"---------------------"},{"line_number":133,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f515b1d_f76758b6","line":130,"in_reply_to":"7f515b1d_d1310c5c","updated":"2017-09-28 14:20:36.000000000","message":"Yes, +1 all that. Its why I think you have made the correct call here.","commit_id":"07e469ae1239137ba42355adfcbf6ec70a29ad33"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"c2bae59260dcfed6fc8de39089359725111df04e","unresolved":false,"context_lines":[{"line_number":136,"context_line":"Developer impact"},{"line_number":137,"context_line":"----------------"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"This change will not make make the workflow for the whole scheduling/building"},{"line_number":140,"context_line":"process any more complex, but it will make the data being sent among the"},{"line_number":141,"context_line":"services a little more complex."},{"line_number":142,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f515b1d_2d3ee38b","line":139,"range":{"start_line":139,"start_character":21,"end_line":139,"end_character":30},"updated":"2017-09-27 14:20:18.000000000","message":"nit","commit_id":"07e469ae1239137ba42355adfcbf6ec70a29ad33"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"1beea22623849793ab6b84ef192a0531fe33036e","unresolved":false,"context_lines":[{"line_number":87,"context_line":"for the later requests. Operators will need to increase"},{"line_number":88,"context_line":"CONF.scheduler.max_attempts if they find that exhausting the pool of alternates"},{"line_number":89,"context_line":"is happening in their deployment."},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"Alternatives"},{"line_number":92,"context_line":"------------"},{"line_number":93,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_9759448f","line":90,"updated":"2017-09-28 14:35:21.000000000","message":"What about gibi\u0027s point about the operations other than build that retry select_destinations today, I think we need some assessment on those included here.\n\nlive-migration is probably OK as it is I suspect:\nhttps://github.com/openstack/nova/blob/master/nova/conductor/tasks/live_migrate.py#L285\n\nunshelve / evacuate (rebuild) probably need updating for their retry systems, not sure:\nhttps://github.com/openstack/nova/blob/8a386b055c82df67092a1abc683e7225ef80671e/nova/conductor/manager.py#L708\n\nmigration might be OK as I don\u0027t think it does retries:\nhttps://github.com/openstack/nova/blob/7cd9e3b8bb7fc0601786847f19cdf3f706ec079f/nova/conductor/tasks/migrate.py#L67","commit_id":"a09f8a593afcf9507ef3f84886f101491e63cedb"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"1beea22623849793ab6b84ef192a0531fe33036e","unresolved":false,"context_lines":[{"line_number":210,"context_line":"History"},{"line_number":211,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"Optional section intended to be used each time the spec is updated to describe"},{"line_number":214,"context_line":"new design, API or any database schema updated. Useful to let reader understand"},{"line_number":215,"context_line":"what\u0027s happened along the time."},{"line_number":216,"context_line":""},{"line_number":217,"context_line":".. list-table:: Revisions"},{"line_number":218,"context_line":"   :header-rows: 1"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_37ce1082","line":215,"range":{"start_line":213,"start_character":0,"end_line":215,"end_character":31},"updated":"2017-09-28 14:35:21.000000000","message":"Nit: I think you should drop this text from the template.","commit_id":"a09f8a593afcf9507ef3f84886f101491e63cedb"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"bd2acac9e13ecc1ce2a7ff2cb12173d0818de913","unresolved":false,"context_lines":[{"line_number":84,"context_line":"The logic flow for resize operations can be similarly modified to allow for"},{"line_number":85,"context_line":"retries within the cell, too. Live migrations, in contrast, have a retry"},{"line_number":86,"context_line":"process that is handled in the superconductor, so it will only need to be"},{"line_number":87,"context_line":"modified to work with the new values returned from select_destinations()."},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"Note that in the event of a burst of requests for similarly-sized instances,"},{"line_number":90,"context_line":"the list of alternates returned for each request will likely have some overlap."}],"source_content_type":"text/x-rst","patch_set":4,"id":"7f515b1d_4fa450a6","line":87,"updated":"2017-09-28 16:33:39.000000000","message":"ack.","commit_id":"d1a78ecab979f576462b9383d4d891f338bc893b"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"bd2acac9e13ecc1ce2a7ff2cb12173d0818de913","unresolved":false,"context_lines":[{"line_number":88,"context_line":""},{"line_number":89,"context_line":"Note that in the event of a burst of requests for similarly-sized instances,"},{"line_number":90,"context_line":"the list of alternates returned for each request will likely have some overlap."},{"line_number":91,"context_line":"If retries become necessary, the earlier retry make allocate resources that"},{"line_number":92,"context_line":"would make that host unsuitable for a slightly later retry. This claiming code"},{"line_number":93,"context_line":"will ensure that we don\u0027t attempt to build on a host that doesn\u0027t have"},{"line_number":94,"context_line":"sufficient resources, but that also means that we might run out of alternates"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7f515b1d_efa65cab","line":91,"range":{"start_line":91,"start_character":47,"end_line":91,"end_character":51},"updated":"2017-09-28 16:33:39.000000000","message":"may","commit_id":"d1a78ecab979f576462b9383d4d891f338bc893b"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"eccef3e625d45a8a40f5f8236db3da3b28105d6e","unresolved":false,"context_lines":[{"line_number":88,"context_line":""},{"line_number":89,"context_line":"Note that in the event of a burst of requests for similarly-sized instances,"},{"line_number":90,"context_line":"the list of alternates returned for each request will likely have some overlap."},{"line_number":91,"context_line":"If retries become necessary, the earlier retry make allocate resources that"},{"line_number":92,"context_line":"would make that host unsuitable for a slightly later retry. This claiming code"},{"line_number":93,"context_line":"will ensure that we don\u0027t attempt to build on a host that doesn\u0027t have"},{"line_number":94,"context_line":"sufficient resources, but that also means that we might run out of alternates"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7f515b1d_7237f34e","line":91,"range":{"start_line":91,"start_character":47,"end_line":91,"end_character":51},"in_reply_to":"7f515b1d_efa65cab","updated":"2017-09-28 17:27:00.000000000","message":"Done","commit_id":"d1a78ecab979f576462b9383d4d891f338bc893b"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"bd2acac9e13ecc1ce2a7ff2cb12173d0818de913","unresolved":false,"context_lines":[{"line_number":89,"context_line":"Note that in the event of a burst of requests for similarly-sized instances,"},{"line_number":90,"context_line":"the list of alternates returned for each request will likely have some overlap."},{"line_number":91,"context_line":"If retries become necessary, the earlier retry make allocate resources that"},{"line_number":92,"context_line":"would make that host unsuitable for a slightly later retry. This claiming code"},{"line_number":93,"context_line":"will ensure that we don\u0027t attempt to build on a host that doesn\u0027t have"},{"line_number":94,"context_line":"sufficient resources, but that also means that we might run out of alternates"},{"line_number":95,"context_line":"for the later requests. Operators will need to increase"},{"line_number":96,"context_line":"CONF.scheduler.max_attempts if they find that exhausting the pool of alternates"},{"line_number":97,"context_line":"is happening in their deployment."}],"source_content_type":"text/x-rst","patch_set":4,"id":"7f515b1d_8fe488e1","line":94,"range":{"start_line":92,"start_character":60,"end_line":94,"end_character":20},"updated":"2017-09-28 16:33:39.000000000","message":"The claiming code already ensures that concurrent updates will automatically retry against a set of providers:\n\nhttps://github.com/openstack/nova/blob/master/nova/scheduler/client/report.py#L1007\n\nAnd of course, the placement API already ensures that resource over-allocation cannot happen and returns a 409 when that occurs:\n\nhttps://github.com/openstack/nova/blob/master/nova/api/openstack/placement/handlers/allocation.py#L263","commit_id":"d1a78ecab979f576462b9383d4d891f338bc893b"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"bd5703a3e34bedce02ef06a3c33434d74de5344f","unresolved":false,"context_lines":[{"line_number":89,"context_line":"Note that in the event of a burst of requests for similarly-sized instances,"},{"line_number":90,"context_line":"the list of alternates returned for each request will likely have some overlap."},{"line_number":91,"context_line":"If retries become necessary, the earlier retry make allocate resources that"},{"line_number":92,"context_line":"would make that host unsuitable for a slightly later retry. This claiming code"},{"line_number":93,"context_line":"will ensure that we don\u0027t attempt to build on a host that doesn\u0027t have"},{"line_number":94,"context_line":"sufficient resources, but that also means that we might run out of alternates"},{"line_number":95,"context_line":"for the later requests. Operators will need to increase"},{"line_number":96,"context_line":"CONF.scheduler.max_attempts if they find that exhausting the pool of alternates"},{"line_number":97,"context_line":"is happening in their deployment."}],"source_content_type":"text/x-rst","patch_set":4,"id":"7f515b1d_23024b3e","line":94,"range":{"start_line":92,"start_character":60,"end_line":94,"end_character":20},"in_reply_to":"7f515b1d_723db3db","updated":"2017-09-28 20:15:11.000000000","message":"Well, sure, but I\u0027m referring to the pseudo-code above that illustrates the claim-succeeds-before-trying-to-build that will be added to the retry logic in the conductor to ensure that any alternate is still valid. So yeah, claim_resources() will be called, but that wasn\u0027t the point.","commit_id":"d1a78ecab979f576462b9383d4d891f338bc893b"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"eccef3e625d45a8a40f5f8236db3da3b28105d6e","unresolved":false,"context_lines":[{"line_number":89,"context_line":"Note that in the event of a burst of requests for similarly-sized instances,"},{"line_number":90,"context_line":"the list of alternates returned for each request will likely have some overlap."},{"line_number":91,"context_line":"If retries become necessary, the earlier retry make allocate resources that"},{"line_number":92,"context_line":"would make that host unsuitable for a slightly later retry. This claiming code"},{"line_number":93,"context_line":"will ensure that we don\u0027t attempt to build on a host that doesn\u0027t have"},{"line_number":94,"context_line":"sufficient resources, but that also means that we might run out of alternates"},{"line_number":95,"context_line":"for the later requests. Operators will need to increase"},{"line_number":96,"context_line":"CONF.scheduler.max_attempts if they find that exhausting the pool of alternates"},{"line_number":97,"context_line":"is happening in their deployment."}],"source_content_type":"text/x-rst","patch_set":4,"id":"7f515b1d_b231eb5c","line":94,"range":{"start_line":92,"start_character":60,"end_line":94,"end_character":20},"in_reply_to":"7f515b1d_8fe488e1","updated":"2017-09-28 17:27:00.000000000","message":"I was referring to the claiming code that will be added to the conductor during a retry to ensure that an alternate still has sufficient resources. That code does not yet exist, but yes, it will be just like that in the scheduler.","commit_id":"d1a78ecab979f576462b9383d4d891f338bc893b"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"ecd020e016164d0aa4a2f9b041421d5b3ccccba6","unresolved":false,"context_lines":[{"line_number":89,"context_line":"Note that in the event of a burst of requests for similarly-sized instances,"},{"line_number":90,"context_line":"the list of alternates returned for each request will likely have some overlap."},{"line_number":91,"context_line":"If retries become necessary, the earlier retry make allocate resources that"},{"line_number":92,"context_line":"would make that host unsuitable for a slightly later retry. This claiming code"},{"line_number":93,"context_line":"will ensure that we don\u0027t attempt to build on a host that doesn\u0027t have"},{"line_number":94,"context_line":"sufficient resources, but that also means that we might run out of alternates"},{"line_number":95,"context_line":"for the later requests. Operators will need to increase"},{"line_number":96,"context_line":"CONF.scheduler.max_attempts if they find that exhausting the pool of alternates"},{"line_number":97,"context_line":"is happening in their deployment."}],"source_content_type":"text/x-rst","patch_set":4,"id":"7f515b1d_723db3db","line":94,"range":{"start_line":92,"start_character":60,"end_line":94,"end_character":20},"in_reply_to":"7f515b1d_b231eb5c","updated":"2017-09-28 17:38:43.000000000","message":"Hmm, ok. I was presuming that the conductor would just be calling that report client\u0027s claim_resources() method.","commit_id":"d1a78ecab979f576462b9383d4d891f338bc893b"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"aec2a82bebe3be0175945d03ba93000a932cf7bb","unresolved":false,"context_lines":[{"line_number":31,"context_line":"doesn\u0027t work in a cells V2 world, as it would require an up call from the cell"},{"line_number":32,"context_line":"conductor to the super conductor to request a retry."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"Similarly, resize operations also need to call up to the superconductor in"},{"line_number":35,"context_line":"order to retry a failed resize."},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"7f515b1d_25dc8544","line":34,"range":{"start_line":34,"start_character":33,"end_line":34,"end_character":41},"updated":"2017-09-29 09:07:25.000000000","message":"micro nit: currently.","commit_id":"dd220e3d8f58928d7c22ebb30d5f461cb9414351"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"aec2a82bebe3be0175945d03ba93000a932cf7bb","unresolved":false,"context_lines":[{"line_number":97,"context_line":"is happening in their deployment."},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"As this proposal will change the structure of what is returned from the call to"},{"line_number":100,"context_line":"select_destinations(), any method, such as evacuate, unshelve, or a migration,"},{"line_number":101,"context_line":"will have to be modified to accept the new data structure. They will not be"},{"line_number":102,"context_line":"required to change how they work with this information. In other words, while"},{"line_number":103,"context_line":"the build and resize processes in a cell will be changed as noted above to"}],"source_content_type":"text/x-rst","patch_set":5,"id":"7f515b1d_e5978d47","line":100,"updated":"2017-09-29 09:07:25.000000000","message":"I didn\u0027t spot this before, this doesn\u0027t really cover the upgrade case. The new service needs to request the alternate structure, once the min_service version is high enough... for the nova-scheduler process.\n\nIts more an implementation detail, but would like at least a nod to that problem here. I really only say that because we usually enforce that for other specs.\n\nI assume a new optional param of something like alternate_host_count\u003dNone is how we deal with all this?","commit_id":"dd220e3d8f58928d7c22ebb30d5f461cb9414351"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"b94bf0b389ae20ccbe605ad4f78b4431d9b8f8ee","unresolved":false,"context_lines":[{"line_number":97,"context_line":"is happening in their deployment."},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"As this proposal will change the structure of what is returned from the call to"},{"line_number":100,"context_line":"select_destinations(), any method, such as evacuate, unshelve, or a migration,"},{"line_number":101,"context_line":"will have to be modified to accept the new data structure. They will not be"},{"line_number":102,"context_line":"required to change how they work with this information. In other words, while"},{"line_number":103,"context_line":"the build and resize processes in a cell will be changed as noted above to"}],"source_content_type":"text/x-rst","patch_set":5,"id":"7f515b1d_7ec32e58","line":100,"in_reply_to":"7f515b1d_e5978d47","updated":"2017-09-29 12:49:17.000000000","message":"Heh, that was my original approach way back in https://review.openstack.org/#/c/465767/ - in IRC discussions it was rejected over just using the CONF setting, as the latter would be simpler. \n\nSince we aren\u0027t going to *ask* for the new data, there will be code added to the RPC caller to convert the new data into the older structure when the requested version is not new enough. As the new return value is a superset of the information of the old, that is not difficult to do. I will add wording to that effect.","commit_id":"dd220e3d8f58928d7c22ebb30d5f461cb9414351"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"aec2a82bebe3be0175945d03ba93000a932cf7bb","unresolved":false,"context_lines":[{"line_number":103,"context_line":"the build and resize processes in a cell will be changed as noted above to"},{"line_number":104,"context_line":"retry failed builds using these alternates, these other consumers of"},{"line_number":105,"context_line":"select_destinations() will not change how they use the result. We may decide to"},{"line_number":106,"context_line":"change them at a later date, but that is not in the scope of this spec."},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"Alternatives"},{"line_number":109,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":5,"id":"7f515b1d_e580adf7","line":106,"updated":"2017-09-29 09:07:25.000000000","message":"Nit: The key bit is none of the other uses of the method require computes to trigger a flow that then calls the scheduler. Only the two flows mentioned do that.","commit_id":"dd220e3d8f58928d7c22ebb30d5f461cb9414351"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"aec2a82bebe3be0175945d03ba93000a932cf7bb","unresolved":false,"context_lines":[{"line_number":230,"context_line":"History"},{"line_number":231,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"Optional section intended to be used each time the spec is updated to describe"},{"line_number":234,"context_line":"new design, API or any database schema updated. Useful to let reader understand"},{"line_number":235,"context_line":"what\u0027s happened along the time."},{"line_number":236,"context_line":""},{"line_number":237,"context_line":".. list-table:: Revisions"},{"line_number":238,"context_line":"   :header-rows: 1"}],"source_content_type":"text/x-rst","patch_set":5,"id":"7f515b1d_a576353d","line":235,"range":{"start_line":233,"start_character":0,"end_line":235,"end_character":31},"updated":"2017-09-29 09:07:25.000000000","message":"Nit: this can be removed.","commit_id":"dd220e3d8f58928d7c22ebb30d5f461cb9414351"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"06e04f0e3a993dac9c5aa541d8e23bda69e76488","unresolved":false,"context_lines":[{"line_number":107,"context_line":"decide to change them at a later date, but that is not in the scope of this"},{"line_number":108,"context_line":"spec."},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"In the case of an older service calling select_destinations() with an RPC"},{"line_number":111,"context_line":"version older than the version that introduces this change, the result will be"},{"line_number":112,"context_line":"converted back to the previous data structure. Since the new result contains"},{"line_number":113,"context_line":"all of the original values that would have been returned (plus a lot more),"},{"line_number":114,"context_line":"this will not be a problem. "},{"line_number":115,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"7f515b1d_ca7498d1","line":112,"range":{"start_line":110,"start_character":0,"end_line":112,"end_character":46},"updated":"2017-09-29 16:22:11.000000000","message":"I am missing the how here I think. I suspect I am being a bit dumb.","commit_id":"c58665bdf6e58997508a41a3051cc9ad283ebe0f"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"924a3fff76046eb790930c107224c63f11dbb8e9","unresolved":false,"context_lines":[{"line_number":107,"context_line":"decide to change them at a later date, but that is not in the scope of this"},{"line_number":108,"context_line":"spec."},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"In the case of an older service calling select_destinations() with an RPC"},{"line_number":111,"context_line":"version older than the version that introduces this change, the result will be"},{"line_number":112,"context_line":"converted back to the previous data structure. Since the new result contains"},{"line_number":113,"context_line":"all of the original values that would have been returned (plus a lot more),"},{"line_number":114,"context_line":"this will not be a problem. "},{"line_number":115,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"7f515b1d_40ef64e8","line":112,"range":{"start_line":110,"start_character":0,"end_line":112,"end_character":46},"in_reply_to":"7f515b1d_ca7498d1","updated":"2017-09-29 20:39:22.000000000","message":"This is just describing the existing behaviour of RPC backversioning, really. We will strip out the new alternate hosts stuff when backversioning the RPC response for select_destinations() from an older compute or conductor.","commit_id":"c58665bdf6e58997508a41a3051cc9ad283ebe0f"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"06e04f0e3a993dac9c5aa541d8e23bda69e76488","unresolved":false,"context_lines":[{"line_number":111,"context_line":"version older than the version that introduces this change, the result will be"},{"line_number":112,"context_line":"converted back to the previous data structure. Since the new result contains"},{"line_number":113,"context_line":"all of the original values that would have been returned (plus a lot more),"},{"line_number":114,"context_line":"this will not be a problem. "},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"Alternatives"},{"line_number":117,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":6,"id":"7f515b1d_4a52e83c","line":114,"updated":"2017-09-29 16:22:11.000000000","message":"Nit: mr whitespace snook in :(","commit_id":"c58665bdf6e58997508a41a3051cc9ad283ebe0f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"525c99a16cc792da2e9c1fe303ba9761296548af","unresolved":false,"context_lines":[{"line_number":11,"context_line":"https://blueprints.launchpad.net/nova/+spec/return-alternate-hosts"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Sometimes when a request to build a VM is attempted, the build can fail for a"},{"line_number":14,"context_line":"variety of different reasons. At the Atlanta PTG we discussed a request from"},{"line_number":15,"context_line":"operators to have the scheduler return some alternate hosts along with the"},{"line_number":16,"context_line":"selected host. This was desired because in the event of a failed build, another"},{"line_number":17,"context_line":"host could be tried without having to go through the entire scheduling process"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_6025c008","line":14,"range":{"start_line":14,"start_character":37,"end_line":14,"end_character":48},"updated":"2017-09-29 21:23:54.000000000","message":"Boston Forum","commit_id":"63cf072c176e887a4ec396e144e9e33d61dbb94a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"525c99a16cc792da2e9c1fe303ba9761296548af","unresolved":false,"context_lines":[{"line_number":35,"context_line":"superconductor in order to retry a failed resize."},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"Use Cases"},{"line_number":39,"context_line":"---------"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"As an operator of an OpenStack deployment, I want to ensure that instance"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_a084d8d3","line":38,"updated":"2017-09-29 21:23:54.000000000","message":"I think the other big use case is Ironic, they really rely on reschedules right now. I\u0027m not totally sure why, maybe failed baremetal builds or something to do with multiple nodes? But it was definitely something that came up in Boston when talking about this, and Ironic multinode CI is running in singleconductor more right now because of the inability to reschedule in superconductor mode.","commit_id":"63cf072c176e887a4ec396e144e9e33d61dbb94a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"525c99a16cc792da2e9c1fe303ba9761296548af","unresolved":false,"context_lines":[{"line_number":63,"context_line":"have to be changed to reflect this modification."},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"In the cell, the conductor will attempt to build the first host in the list."},{"line_number":66,"context_line":"Its resources have already been claimed, so normally there should be no reason"},{"line_number":67,"context_line":"for it to fail. If it succeeds, we\u0027re done, and the additional host information"},{"line_number":68,"context_line":"is discarded. If, however, there is some reason, such as a network failure,"},{"line_number":69,"context_line":"that causes the build to fail, the conductor will iterate through the list"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_e067704c","line":66,"range":{"start_line":66,"start_character":32,"end_line":66,"end_character":39},"updated":"2017-09-29 21:23:54.000000000","message":"(by the scheduler)","commit_id":"63cf072c176e887a4ec396e144e9e33d61dbb94a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"525c99a16cc792da2e9c1fe303ba9761296548af","unresolved":false,"context_lines":[{"line_number":65,"context_line":"In the cell, the conductor will attempt to build the first host in the list."},{"line_number":66,"context_line":"Its resources have already been claimed, so normally there should be no reason"},{"line_number":67,"context_line":"for it to fail. If it succeeds, we\u0027re done, and the additional host information"},{"line_number":68,"context_line":"is discarded. If, however, there is some reason, such as a network failure,"},{"line_number":69,"context_line":"that causes the build to fail, the conductor will iterate through the list"},{"line_number":70,"context_line":"until it succeeds. In pseudo-code, the process would look like::"},{"line_number":71,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_6053806c","line":68,"range":{"start_line":68,"start_character":48,"end_line":68,"end_character":74},"updated":"2017-09-29 21:23:54.000000000","message":"or resource claims that we do not yet account for in the scheduler, like numa_topology_limits,","commit_id":"63cf072c176e887a4ec396e144e9e33d61dbb94a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"dc6ab2b43e823a5d9c54415b792b2d539303b354","unresolved":false,"context_lines":[{"line_number":65,"context_line":"In the cell, the conductor will attempt to build the first host in the list."},{"line_number":66,"context_line":"Its resources have already been claimed, so normally there should be no reason"},{"line_number":67,"context_line":"for it to fail. If it succeeds, we\u0027re done, and the additional host information"},{"line_number":68,"context_line":"is discarded. If, however, there is some reason, such as a network failure,"},{"line_number":69,"context_line":"that causes the build to fail, the conductor will iterate through the list"},{"line_number":70,"context_line":"until it succeeds. In pseudo-code, the process would look like::"},{"line_number":71,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_8c1fd206","line":68,"range":{"start_line":68,"start_character":48,"end_line":68,"end_character":74},"in_reply_to":"7f515b1d_5bcd1983","updated":"2017-09-30 15:34:01.000000000","message":"We don\u0027t actually attempt to reschedule if we have a cinder failure, at least during boot from volume where nova creates the volume - basically if _prep_block_devices fails we don\u0027t attempt a reschedule, for whatever reason. It\u0027s great.","commit_id":"63cf072c176e887a4ec396e144e9e33d61dbb94a"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"147a847e09b712446ba3250bb7173621a4b11965","unresolved":false,"context_lines":[{"line_number":65,"context_line":"In the cell, the conductor will attempt to build the first host in the list."},{"line_number":66,"context_line":"Its resources have already been claimed, so normally there should be no reason"},{"line_number":67,"context_line":"for it to fail. If it succeeds, we\u0027re done, and the additional host information"},{"line_number":68,"context_line":"is discarded. If, however, there is some reason, such as a network failure,"},{"line_number":69,"context_line":"that causes the build to fail, the conductor will iterate through the list"},{"line_number":70,"context_line":"until it succeeds. In pseudo-code, the process would look like::"},{"line_number":71,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_5bcd1983","line":68,"range":{"start_line":68,"start_character":48,"end_line":68,"end_character":74},"in_reply_to":"7f515b1d_6053806c","updated":"2017-09-29 21:56:35.000000000","message":"Sure, or a cinder failure, or any one of a bunch of other things. I don\u0027t think we need an exhaustive list here.","commit_id":"63cf072c176e887a4ec396e144e9e33d61dbb94a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"525c99a16cc792da2e9c1fe303ba9761296548af","unresolved":false,"context_lines":[{"line_number":70,"context_line":"until it succeeds. In pseudo-code, the process would look like::"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"  for host in returned_hosts:"},{"line_number":73,"context_line":"    if not_first_host_in_list:"},{"line_number":74,"context_line":"      # First host is already claimed. For others, make sure they are still"},{"line_number":75,"context_line":"      # available."},{"line_number":76,"context_line":"      if not claim(host):"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_e0cc1036","line":73,"range":{"start_line":73,"start_character":7,"end_line":73,"end_character":29},"updated":"2017-09-29 21:23:54.000000000","message":"not_first_host_in_list(host)\n\nc\u0027mon!","commit_id":"63cf072c176e887a4ec396e144e9e33d61dbb94a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"525c99a16cc792da2e9c1fe303ba9761296548af","unresolved":false,"context_lines":[{"line_number":78,"context_line":"    try:"},{"line_number":79,"context_line":"      build(host)"},{"line_number":80,"context_line":"    except BuildFailure:"},{"line_number":81,"context_line":"      unclaim(host)"},{"line_number":82,"context_line":"      continue"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"The logic flow for resize operations can be similarly modified to allow for"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_00c16ce5","line":81,"range":{"start_line":81,"start_character":6,"end_line":81,"end_character":19},"updated":"2017-09-29 21:23:54.000000000","message":"This is an implementation detail, but looking at PTG notes, there was a comment, \"May not need to unclaim a failed build in the cell conductor, as claiming for the next alternate will replace the existing allocations for the failed host.\"\n\nWe would have to \"unclaim\" on the final failed build though in the cell conductor if we exhausted our retries.","commit_id":"63cf072c176e887a4ec396e144e9e33d61dbb94a"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"147a847e09b712446ba3250bb7173621a4b11965","unresolved":false,"context_lines":[{"line_number":78,"context_line":"    try:"},{"line_number":79,"context_line":"      build(host)"},{"line_number":80,"context_line":"    except BuildFailure:"},{"line_number":81,"context_line":"      unclaim(host)"},{"line_number":82,"context_line":"      continue"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"The logic flow for resize operations can be similarly modified to allow for"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_bbdbed4c","line":81,"range":{"start_line":81,"start_character":6,"end_line":81,"end_character":19},"in_reply_to":"7f515b1d_00c16ce5","updated":"2017-09-29 21:56:35.000000000","message":"There is already a test for first in the list; it seemed less elegant to then add another test for last in the list. Also, explicit is better than implicit. :)","commit_id":"63cf072c176e887a4ec396e144e9e33d61dbb94a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"525c99a16cc792da2e9c1fe303ba9761296548af","unresolved":false,"context_lines":[{"line_number":83,"context_line":""},{"line_number":84,"context_line":"The logic flow for resize operations can be similarly modified to allow for"},{"line_number":85,"context_line":"retries within the cell, too. Live migrations, in contrast, have a retry"},{"line_number":86,"context_line":"process that is handled in the superconductor, so it will only need to be"},{"line_number":87,"context_line":"modified to work with the new values returned from select_destinations()."},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"Note that in the event of a burst of requests for similarly-sized instances,"},{"line_number":90,"context_line":"the list of alternates returned for each request will likely have some overlap."}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_80dd5ce1","line":87,"range":{"start_line":86,"start_character":47,"end_line":87,"end_character":73},"updated":"2017-09-29 21:23:54.000000000","message":"You don\u0027t have to change anything here, but this is an implementation detail which I\u0027m not sure if we\u0027ll need to handle it with the new thing or not. Live migration in conductor is weird in that it has it\u0027s own configurable retry limit (migrate_max_retries) so I\u0027m not sure if we\u0027ll discard what\u0027s returned or not - we might as well use it, but let\u0027s see what it looks like.","commit_id":"63cf072c176e887a4ec396e144e9e33d61dbb94a"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"147a847e09b712446ba3250bb7173621a4b11965","unresolved":false,"context_lines":[{"line_number":83,"context_line":""},{"line_number":84,"context_line":"The logic flow for resize operations can be similarly modified to allow for"},{"line_number":85,"context_line":"retries within the cell, too. Live migrations, in contrast, have a retry"},{"line_number":86,"context_line":"process that is handled in the superconductor, so it will only need to be"},{"line_number":87,"context_line":"modified to work with the new values returned from select_destinations()."},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"Note that in the event of a burst of requests for similarly-sized instances,"},{"line_number":90,"context_line":"the list of alternates returned for each request will likely have some overlap."}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_7bce9563","line":87,"range":{"start_line":86,"start_character":47,"end_line":87,"end_character":73},"in_reply_to":"7f515b1d_80dd5ce1","updated":"2017-09-29 21:56:35.000000000","message":"I only added that at johnthetubaguy\u0027s request. I agree that it is an implementation detail.","commit_id":"63cf072c176e887a4ec396e144e9e33d61dbb94a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"525c99a16cc792da2e9c1fe303ba9761296548af","unresolved":false,"context_lines":[{"line_number":98,"context_line":""},{"line_number":99,"context_line":"As this proposal will change the structure of what is returned from the call to"},{"line_number":100,"context_line":"select_destinations(), any method, such as evacuate, unshelve, or a migration,"},{"line_number":101,"context_line":"will have to be modified to accept the new data structure. They will not be"},{"line_number":102,"context_line":"required to change how they work with this information. In other words, while"},{"line_number":103,"context_line":"the build and resize processes in a cell will be changed as noted above to"},{"line_number":104,"context_line":"retry failed builds using these alternates, these other consumers of"},{"line_number":105,"context_line":"select_destinations() will not change how they use the result, because they do"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_60d820ee","line":102,"range":{"start_line":101,"start_character":59,"end_line":102,"end_character":55},"updated":"2017-09-29 21:23:54.000000000","message":"agree, per my comment above","commit_id":"63cf072c176e887a4ec396e144e9e33d61dbb94a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"525c99a16cc792da2e9c1fe303ba9761296548af","unresolved":false,"context_lines":[{"line_number":102,"context_line":"required to change how they work with this information. In other words, while"},{"line_number":103,"context_line":"the build and resize processes in a cell will be changed as noted above to"},{"line_number":104,"context_line":"retry failed builds using these alternates, these other consumers of"},{"line_number":105,"context_line":"select_destinations() will not change how they use the result, because they do"},{"line_number":106,"context_line":"not call select_destinations() as part of their existing workflow. We may"},{"line_number":107,"context_line":"decide to change them at a later date, but that is not in the scope of this"},{"line_number":108,"context_line":"spec."},{"line_number":109,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_40e3e4a4","line":106,"range":{"start_line":105,"start_character":63,"end_line":106,"end_character":65},"updated":"2017-09-29 21:23:54.000000000","message":"this is confusing, since you just said they call select_destinations - I think what you mean is that (1) live migration handles retries in superconductor on it\u0027s own, and (2) evacuate and unshelve don\u0027t have a reschedule loop so they don\u0027t care about alternate hosts.","commit_id":"63cf072c176e887a4ec396e144e9e33d61dbb94a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"dc6ab2b43e823a5d9c54415b792b2d539303b354","unresolved":false,"context_lines":[{"line_number":102,"context_line":"required to change how they work with this information. In other words, while"},{"line_number":103,"context_line":"the build and resize processes in a cell will be changed as noted above to"},{"line_number":104,"context_line":"retry failed builds using these alternates, these other consumers of"},{"line_number":105,"context_line":"select_destinations() will not change how they use the result, because they do"},{"line_number":106,"context_line":"not call select_destinations() as part of their existing workflow. We may"},{"line_number":107,"context_line":"decide to change them at a later date, but that is not in the scope of this"},{"line_number":108,"context_line":"spec."},{"line_number":109,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_ccdeea3c","line":106,"range":{"start_line":105,"start_character":63,"end_line":106,"end_character":65},"in_reply_to":"7f515b1d_3bd93d21","updated":"2017-09-30 15:34:01.000000000","message":"sure","commit_id":"63cf072c176e887a4ec396e144e9e33d61dbb94a"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"147a847e09b712446ba3250bb7173621a4b11965","unresolved":false,"context_lines":[{"line_number":102,"context_line":"required to change how they work with this information. In other words, while"},{"line_number":103,"context_line":"the build and resize processes in a cell will be changed as noted above to"},{"line_number":104,"context_line":"retry failed builds using these alternates, these other consumers of"},{"line_number":105,"context_line":"select_destinations() will not change how they use the result, because they do"},{"line_number":106,"context_line":"not call select_destinations() as part of their existing workflow. We may"},{"line_number":107,"context_line":"decide to change them at a later date, but that is not in the scope of this"},{"line_number":108,"context_line":"spec."},{"line_number":109,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_3bd93d21","line":106,"range":{"start_line":105,"start_character":63,"end_line":106,"end_character":65},"in_reply_to":"7f515b1d_40e3e4a4","updated":"2017-09-29 21:56:35.000000000","message":"How about: the do not handle retries from within the cell conductor?","commit_id":"63cf072c176e887a4ec396e144e9e33d61dbb94a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"525c99a16cc792da2e9c1fe303ba9761296548af","unresolved":false,"context_lines":[{"line_number":125,"context_line":"Data model impact"},{"line_number":126,"context_line":"-----------------"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"None"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"REST API impact"},{"line_number":131,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_c0447476","line":128,"range":{"start_line":128,"start_character":0,"end_line":128,"end_character":4},"updated":"2017-09-29 21:23:54.000000000","message":"nit: we did agree at the PTG that we wouldn\u0027t persist the alternate hosts in the database and just pass them over rpc, we don\u0027t need them persisted because they are only used for a one-time operation","commit_id":"63cf072c176e887a4ec396e144e9e33d61dbb94a"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"147a847e09b712446ba3250bb7173621a4b11965","unresolved":false,"context_lines":[{"line_number":125,"context_line":"Data model impact"},{"line_number":126,"context_line":"-----------------"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"None"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"REST API impact"},{"line_number":131,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_fb084592","line":128,"range":{"start_line":128,"start_character":0,"end_line":128,"end_character":4},"in_reply_to":"7f515b1d_c0447476","updated":"2017-09-29 21:56:35.000000000","message":"So... are you saying that there *is* a data model impact?","commit_id":"63cf072c176e887a4ec396e144e9e33d61dbb94a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"dc6ab2b43e823a5d9c54415b792b2d539303b354","unresolved":false,"context_lines":[{"line_number":125,"context_line":"Data model impact"},{"line_number":126,"context_line":"-----------------"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"None"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"REST API impact"},{"line_number":131,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_acd28e26","line":128,"range":{"start_line":128,"start_character":0,"end_line":128,"end_character":4},"in_reply_to":"7f515b1d_fb084592","updated":"2017-09-30 15:34:01.000000000","message":"No, just that it might be good to explicitly state that we\u0027re not going to persist the alternate hosts anywhere - just to be clear that we thought about it.","commit_id":"63cf072c176e887a4ec396e144e9e33d61dbb94a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"525c99a16cc792da2e9c1fe303ba9761296548af","unresolved":false,"context_lines":[{"line_number":140,"context_line":"Notifications impact"},{"line_number":141,"context_line":"--------------------"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"There are exisitng notifications for build start/finish/failure; these will"},{"line_number":144,"context_line":"have to be added to the cell conductor\u0027s build retry loop."},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"Other end user impact"},{"line_number":147,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_6074a0cf","line":144,"range":{"start_line":143,"start_character":0,"end_line":144,"end_character":58},"updated":"2017-09-29 21:23:54.000000000","message":"Maybe, but I\u0027m not sure. The method in the cell conductor that will be doing this is build_instances, but that eventually calls back through to the compute method _build_and_run_instance which does create.start/end/error notifications, so sending notifications out of the cell conductor are probably redundant.","commit_id":"63cf072c176e887a4ec396e144e9e33d61dbb94a"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"147a847e09b712446ba3250bb7173621a4b11965","unresolved":false,"context_lines":[{"line_number":140,"context_line":"Notifications impact"},{"line_number":141,"context_line":"--------------------"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"There are exisitng notifications for build start/finish/failure; these will"},{"line_number":144,"context_line":"have to be added to the cell conductor\u0027s build retry loop."},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"Other end user impact"},{"line_number":147,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_bbfe4d68","line":144,"range":{"start_line":143,"start_character":0,"end_line":144,"end_character":58},"in_reply_to":"7f515b1d_6074a0cf","updated":"2017-09-29 21:56:35.000000000","message":"The flow of events in retries is changing, so the notifications for these events will change accordingly.","commit_id":"63cf072c176e887a4ec396e144e9e33d61dbb94a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"dc6ab2b43e823a5d9c54415b792b2d539303b354","unresolved":false,"context_lines":[{"line_number":140,"context_line":"Notifications impact"},{"line_number":141,"context_line":"--------------------"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"There are exisitng notifications for build start/finish/failure; these will"},{"line_number":144,"context_line":"have to be added to the cell conductor\u0027s build retry loop."},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"Other end user impact"},{"line_number":147,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_eca9a68f","line":144,"range":{"start_line":143,"start_character":0,"end_line":144,"end_character":58},"in_reply_to":"7f515b1d_bbfe4d68","updated":"2017-09-30 15:34:01.000000000","message":"I don\u0027t really see how the notifications are going to change here - the build_and_run_instances method calls in the compute are still going to be sending the create.start/error/end notifications, there isn\u0027t a point in moving those to conductor. But we can talk about that in the implementation review.","commit_id":"63cf072c176e887a4ec396e144e9e33d61dbb94a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"525c99a16cc792da2e9c1fe303ba9761296548af","unresolved":false,"context_lines":[{"line_number":151,"context_line":"Performance Impact"},{"line_number":152,"context_line":"------------------"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"This will slightly increase the amount of data sent between the scheduler,"},{"line_number":155,"context_line":"super conductor, and cell conductor, but not to any degree that should be"},{"line_number":156,"context_line":"impactful. It will have a positive performance impact when an instance build"},{"line_number":157,"context_line":"fails, as the cell conductor can retry on a different host right away."},{"line_number":158,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_207a28b9","line":155,"range":{"start_line":154,"start_character":64,"end_line":155,"end_character":36},"updated":"2017-09-29 21:23:54.000000000","message":"and compute","commit_id":"63cf072c176e887a4ec396e144e9e33d61dbb94a"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"147a847e09b712446ba3250bb7173621a4b11965","unresolved":false,"context_lines":[{"line_number":151,"context_line":"Performance Impact"},{"line_number":152,"context_line":"------------------"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"This will slightly increase the amount of data sent between the scheduler,"},{"line_number":155,"context_line":"super conductor, and cell conductor, but not to any degree that should be"},{"line_number":156,"context_line":"impactful. It will have a positive performance impact when an instance build"},{"line_number":157,"context_line":"fails, as the cell conductor can retry on a different host right away."},{"line_number":158,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_7bfc556f","line":155,"range":{"start_line":154,"start_character":64,"end_line":155,"end_character":36},"in_reply_to":"7f515b1d_207a28b9","updated":"2017-09-29 21:56:35.000000000","message":"I believe that compute will get the same information as it does now.","commit_id":"63cf072c176e887a4ec396e144e9e33d61dbb94a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"dc6ab2b43e823a5d9c54415b792b2d539303b354","unresolved":false,"context_lines":[{"line_number":151,"context_line":"Performance Impact"},{"line_number":152,"context_line":"------------------"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"This will slightly increase the amount of data sent between the scheduler,"},{"line_number":155,"context_line":"super conductor, and cell conductor, but not to any degree that should be"},{"line_number":156,"context_line":"impactful. It will have a positive performance impact when an instance build"},{"line_number":157,"context_line":"fails, as the cell conductor can retry on a different host right away."},{"line_number":158,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_6c9db664","line":155,"range":{"start_line":154,"start_character":64,"end_line":155,"end_character":36},"in_reply_to":"7f515b1d_7bfc556f","updated":"2017-09-30 15:34:01.000000000","message":"How is the alternate hosts list going to go from superconductor -\u003e compute -\u003e cell conductor -\u003e compute then if you\u0027re not passing it through the compute somehow and we\u0027re not persisting it?","commit_id":"63cf072c176e887a4ec396e144e9e33d61dbb94a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"525c99a16cc792da2e9c1fe303ba9761296548af","unresolved":false,"context_lines":[{"line_number":186,"context_line":""},{"line_number":187,"context_line":"* Modify the scheduler\u0027s select_destinations() method to find additional hosts"},{"line_number":188,"context_line":"  in the same cell as the selected host, and return these as a list to the"},{"line_number":189,"context_line":"  conductor."},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"* Modify the conductor to pass this new data to the cell."},{"line_number":192,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_8062fc08","line":189,"range":{"start_line":189,"start_character":2,"end_line":189,"end_character":11},"updated":"2017-09-29 21:23:54.000000000","message":"superconductor","commit_id":"63cf072c176e887a4ec396e144e9e33d61dbb94a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"525c99a16cc792da2e9c1fe303ba9761296548af","unresolved":false,"context_lines":[{"line_number":188,"context_line":"  in the same cell as the selected host, and return these as a list to the"},{"line_number":189,"context_line":"  conductor."},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"* Modify the conductor to pass this new data to the cell."},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"* Modify the cell conductor to implement the retry loop described above to"},{"line_number":194,"context_line":"  retry when a build attempt fails during both build and resize operations."}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_40588454","line":191,"range":{"start_line":191,"start_character":52,"end_line":191,"end_character":56},"updated":"2017-09-29 21:23:54.000000000","message":"cell compute?","commit_id":"63cf072c176e887a4ec396e144e9e33d61dbb94a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"525c99a16cc792da2e9c1fe303ba9761296548af","unresolved":false,"context_lines":[{"line_number":188,"context_line":"  in the same cell as the selected host, and return these as a list to the"},{"line_number":189,"context_line":"  conductor."},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"* Modify the conductor to pass this new data to the cell."},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"* Modify the cell conductor to implement the retry loop described above to"},{"line_number":194,"context_line":"  retry when a build attempt fails during both build and resize operations."}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_605dc045","line":191,"range":{"start_line":191,"start_character":13,"end_line":191,"end_character":22},"updated":"2017-09-29 21:23:54.000000000","message":"superconductor","commit_id":"63cf072c176e887a4ec396e144e9e33d61dbb94a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"525c99a16cc792da2e9c1fe303ba9761296548af","unresolved":false,"context_lines":[{"line_number":190,"context_line":""},{"line_number":191,"context_line":"* Modify the conductor to pass this new data to the cell."},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"* Modify the cell conductor to implement the retry loop described above to"},{"line_number":194,"context_line":"  retry when a build attempt fails during both build and resize operations."},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"* Modify all other methods that call select_destinations() to properly handle"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_0034ccfa","line":193,"range":{"start_line":193,"start_character":18,"end_line":193,"end_character":27},"updated":"2017-09-29 21:23:54.000000000","message":"and compute? or does it just get hidden in the request spec and get passed through?","commit_id":"63cf072c176e887a4ec396e144e9e33d61dbb94a"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"147a847e09b712446ba3250bb7173621a4b11965","unresolved":false,"context_lines":[{"line_number":190,"context_line":""},{"line_number":191,"context_line":"* Modify the conductor to pass this new data to the cell."},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"* Modify the cell conductor to implement the retry loop described above to"},{"line_number":194,"context_line":"  retry when a build attempt fails during both build and resize operations."},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"* Modify all other methods that call select_destinations() to properly handle"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_5b3cf92d","line":193,"range":{"start_line":193,"start_character":18,"end_line":193,"end_character":27},"in_reply_to":"7f515b1d_0034ccfa","updated":"2017-09-29 21:56:35.000000000","message":"Nothing different gets sent to compute: they will get the build information exactly as they do now.","commit_id":"63cf072c176e887a4ec396e144e9e33d61dbb94a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"dc6ab2b43e823a5d9c54415b792b2d539303b354","unresolved":false,"context_lines":[{"line_number":190,"context_line":""},{"line_number":191,"context_line":"* Modify the conductor to pass this new data to the cell."},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"* Modify the cell conductor to implement the retry loop described above to"},{"line_number":194,"context_line":"  retry when a build attempt fails during both build and resize operations."},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"* Modify all other methods that call select_destinations() to properly handle"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_2c8d7e31","line":193,"range":{"start_line":193,"start_character":18,"end_line":193,"end_character":27},"in_reply_to":"7f515b1d_5b3cf92d","updated":"2017-09-30 15:34:01.000000000","message":"See above - I don\u0027t see how you\u0027re not going to be changing the compute RPC interface *and* not persist the alternate hosts, one of those has to happen.","commit_id":"63cf072c176e887a4ec396e144e9e33d61dbb94a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"525c99a16cc792da2e9c1fe303ba9761296548af","unresolved":false,"context_lines":[{"line_number":232,"context_line":"History"},{"line_number":233,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"Optional section intended to be used each time the spec is updated to describe"},{"line_number":236,"context_line":"new design, API or any database schema updated. Useful to let reader understand"},{"line_number":237,"context_line":"what\u0027s happened along the time."},{"line_number":238,"context_line":""},{"line_number":239,"context_line":".. list-table:: Revisions"},{"line_number":240,"context_line":"   :header-rows: 1"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_c03914f2","line":237,"range":{"start_line":235,"start_character":0,"end_line":237,"end_character":31},"updated":"2017-09-29 21:23:54.000000000","message":"remove the template text","commit_id":"63cf072c176e887a4ec396e144e9e33d61dbb94a"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"34d2d8015062d075ca6481e2d63e37dc39e99327","unresolved":false,"context_lines":[{"line_number":49,"context_line":"We propose to have the scheduler\u0027s select_destinations() return N hosts per"},{"line_number":50,"context_line":"requested instance, where N is the value in CONF.scheduler.max_attempts."},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"This will be done by the scheduler requesting resource providers, followed by"},{"line_number":53,"context_line":"filtering and weighing, as it currently does. It will then select a host by"},{"line_number":54,"context_line":"claiming its resources; again, as currently done. Once all the hosts for a"},{"line_number":55,"context_line":"request are successfully claimed, the scheduler will scan the remaining sorted"},{"line_number":56,"context_line":"list of hosts to find additional hosts in the same cell as each of the selected"},{"line_number":57,"context_line":"hosts, until the total number of hosts for each requested instance equals the"}],"source_content_type":"text/x-rst","patch_set":8,"id":"7f515b1d_42dd13de","line":54,"range":{"start_line":52,"start_character":0,"end_line":54,"end_character":49},"updated":"2017-10-02 14:12:33.000000000","message":"don\u0027t use the future term, it\u0027s already there. Or, just remove that honestly.","commit_id":"047504855e83a93cd77321a2d148734ada182ae4"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"34d2d8015062d075ca6481e2d63e37dc39e99327","unresolved":false,"context_lines":[{"line_number":60,"context_line":"that may be returned if there are not a sufficient number of qualified hosts."},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"The RPC interfaces between conductor, scheduler, and the cell computes will"},{"line_number":63,"context_line":"have to be changed to reflect this modification."},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"In the cell, the conductor will attempt to build the first host in the list."},{"line_number":66,"context_line":"Its resources have already been claimed during the scheduling process that selected it, so normally there should be no reason"}],"source_content_type":"text/x-rst","patch_set":8,"id":"7f515b1d_e2dd1fdd","line":63,"updated":"2017-10-02 14:12:33.000000000","message":"what are you thinking you should add ?","commit_id":"047504855e83a93cd77321a2d148734ada182ae4"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3832b8bfb03bb3c1e112a864f9e6bddd7413d06c","unresolved":false,"context_lines":[{"line_number":63,"context_line":"have to be changed to reflect this modification."},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"In the cell, the conductor will attempt to build the first host in the list."},{"line_number":66,"context_line":"Its resources have already been claimed during the scheduling process that selected it, so normally there should be no reason"},{"line_number":67,"context_line":"for it to fail. If it succeeds, we\u0027re done, and the additional host information"},{"line_number":68,"context_line":"is discarded. If, however, there is some reason, such as a network failure, or any of a number of other potential issues,"},{"line_number":69,"context_line":"that causes the build to fail, the conductor will iterate through the list"},{"line_number":70,"context_line":"until it succeeds. In pseudo-code, the process would look like::"},{"line_number":71,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"7f515b1d_ac804ef6","line":68,"range":{"start_line":66,"start_character":0,"end_line":68,"end_character":121},"updated":"2017-09-30 15:37:07.000000000","message":"Please wrap this at 80 characters.","commit_id":"047504855e83a93cd77321a2d148734ada182ae4"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"34d2d8015062d075ca6481e2d63e37dc39e99327","unresolved":false,"context_lines":[{"line_number":147,"context_line":""},{"line_number":148,"context_line":"There are exisitng notifications for build start/finish/failure; since the flow"},{"line_number":149,"context_line":"of events during retries will be changing, the notification emitted will change"},{"line_number":150,"context_line":"to match."},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"Other end user impact"},{"line_number":153,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":8,"id":"7f515b1d_82e8ab7b","line":150,"updated":"2017-10-02 14:12:33.000000000","message":"why ? I\u0027m not sure of that.","commit_id":"047504855e83a93cd77321a2d148734ada182ae4"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"34d2d8015062d075ca6481e2d63e37dc39e99327","unresolved":false,"context_lines":[{"line_number":192,"context_line":""},{"line_number":193,"context_line":"* Modify the scheduler\u0027s select_destinations() method to find additional hosts"},{"line_number":194,"context_line":"  in the same cell as the selected host, and return these as a list to the"},{"line_number":195,"context_line":"  superconductor."},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"* Modify the superconductor to pass this new data to the cell conductor."},{"line_number":198,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"7f515b1d_825aeb7f","line":195,"updated":"2017-10-02 14:12:33.000000000","message":"return them as a list of Selection objects right ? ;)","commit_id":"047504855e83a93cd77321a2d148734ada182ae4"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"34d2d8015062d075ca6481e2d63e37dc39e99327","unresolved":false,"context_lines":[{"line_number":194,"context_line":"  in the same cell as the selected host, and return these as a list to the"},{"line_number":195,"context_line":"  superconductor."},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"* Modify the superconductor to pass this new data to the cell conductor."},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"* Modify the cell conductor to implement the retry loop described above to"},{"line_number":200,"context_line":"  retry when a build attempt fails during both build and resize operations."}],"source_content_type":"text/x-rst","patch_set":8,"id":"7f515b1d_625daf77","line":197,"updated":"2017-10-02 14:12:33.000000000","message":"how ?","commit_id":"047504855e83a93cd77321a2d148734ada182ae4"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"34d2d8015062d075ca6481e2d63e37dc39e99327","unresolved":false,"context_lines":[{"line_number":197,"context_line":"* Modify the superconductor to pass this new data to the cell conductor."},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"* Modify the cell conductor to implement the retry loop described above to"},{"line_number":200,"context_line":"  retry when a build attempt fails during both build and resize operations."},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"* Modify all other methods that call select_destinations() to properly handle"},{"line_number":203,"context_line":"  the new return value."}],"source_content_type":"text/x-rst","patch_set":8,"id":"7f515b1d_42587386","line":200,"updated":"2017-10-02 14:12:33.000000000","message":"how ?","commit_id":"047504855e83a93cd77321a2d148734ada182ae4"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"3671cdf19306754d976bf0dc4804199c70f38731","unresolved":false,"context_lines":[{"line_number":205,"context_line":"Dependencies"},{"line_number":206,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"None"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"Testing"}],"source_content_type":"text/x-rst","patch_set":8,"id":"7f515b1d_42b4f37f","line":208,"updated":"2017-10-02 14:14:30.000000000","message":"https://review.openstack.org/#/c/498830/ no ?","commit_id":"047504855e83a93cd77321a2d148734ada182ae4"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"95cbf65cc5dc25f39fe26a2beaf03f9c1739f61e","unresolved":false,"context_lines":[{"line_number":70,"context_line":""},{"line_number":71,"context_line":"The compute will not use the list of Selection objects in any way; all the"},{"line_number":72,"context_line":"information it needs to build the instance is contained in the current"},{"line_number":73,"context_line":"paramters. If the build succeeds, the process ends. If, however, the build"},{"line_number":74,"context_line":"fails, compute will call its delete_allocation_for_instance() as it currently"},{"line_number":75,"context_line":"does, and then call the ComputeTaskAPI\u0027s build_instances() to perform the"},{"line_number":76,"context_line":"retry. This call will be modified to pass the Selection object list back to"}],"source_content_type":"text/x-rst","patch_set":9,"id":"7f515b1d_9fbebdd2","line":73,"range":{"start_line":73,"start_character":0,"end_line":73,"end_character":9},"updated":"2017-10-02 23:11:04.000000000","message":"parameters","commit_id":"eabda27a6d649807b39e3bcc14e06c31055883a9"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"8e9feb13d9a3816110c2c0fbbd2c28fa3424df54","unresolved":false,"context_lines":[{"line_number":75,"context_line":"does, and then call the ComputeTaskAPI\u0027s build_instances() to perform the"},{"line_number":76,"context_line":"retry. This call will be modified to pass the Selection object list back to"},{"line_number":77,"context_line":"the conductor. The conductor will then inspect the list of Selection objects:"},{"line_number":78,"context_line":"if it is empty, then all possible retries have been exhausted, and the process"},{"line_number":79,"context_line":"stops. Otherwise, the conductor pops the first Selection object, and the"},{"line_number":80,"context_line":"process repeats until either the build is successful, or all hosts have failed."},{"line_number":81,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"7f515b1d_abec94ba","line":78,"range":{"start_line":78,"start_character":0,"end_line":78,"end_character":15},"updated":"2017-10-03 08:58:22.000000000","message":"just an implementation detail but we need to have a signal (or a flag) for knowing the difference between not passing the parameter because the RPC caller (the compute service) is not Queens, vs. having a None value because we have no longer Selection objects to look at.","commit_id":"eabda27a6d649807b39e3bcc14e06c31055883a9"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"f8e709a073b9d10f1a97dce893be565cea66bc1c","unresolved":false,"context_lines":[{"line_number":75,"context_line":"does, and then call the ComputeTaskAPI\u0027s build_instances() to perform the"},{"line_number":76,"context_line":"retry. This call will be modified to pass the Selection object list back to"},{"line_number":77,"context_line":"the conductor. The conductor will then inspect the list of Selection objects:"},{"line_number":78,"context_line":"if it is empty, then all possible retries have been exhausted, and the process"},{"line_number":79,"context_line":"stops. Otherwise, the conductor pops the first Selection object, and the"},{"line_number":80,"context_line":"process repeats until either the build is successful, or all hosts have failed."},{"line_number":81,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"7f515b1d_4c653345","line":78,"range":{"start_line":78,"start_character":0,"end_line":78,"end_character":15},"in_reply_to":"7f515b1d_abec94ba","updated":"2017-10-03 14:29:48.000000000","message":"In the former, there will be no parameter. In the latter, there will be a parameter with an empty list. Seems like that should be enough to distinguish the two.","commit_id":"eabda27a6d649807b39e3bcc14e06c31055883a9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"95cbf65cc5dc25f39fe26a2beaf03f9c1739f61e","unresolved":false,"context_lines":[{"line_number":82,"context_line":"The only difference during the retries is that the conductor will first have to"},{"line_number":83,"context_line":"verify that the host a Selection object represents still has sufficient"},{"line_number":84,"context_line":"resources for the instance by calling Placement to attempt to claim them, using"},{"line_number":85,"context_line":"the value in the Selection object\u0027s `allocation` field. If that field is empty,"},{"line_number":86,"context_line":"that represents the initial selected host, whose resources have already been"},{"line_number":87,"context_line":"claimed. If there is a value there, that means that we are in a retry, so the"},{"line_number":88,"context_line":"conductor will first attempt to claim the resources using that value. If that"},{"line_number":89,"context_line":"fails, that Selection object is discarded, and the next is popped from the"},{"line_number":90,"context_line":"list."}],"source_content_type":"text/x-rst","patch_set":9,"id":"7f515b1d_bfc29951","line":87,"range":{"start_line":85,"start_character":56,"end_line":87,"end_character":8},"updated":"2017-10-02 23:11:04.000000000","message":"I thought superconductor was going to pop this one off the list before casting to compute per \"The difference is that\nfor each instance, it will pop the first Selection object from the list\" above?\n\nIt\u0027s an implementation detail so whatever, but it\u0027s a bit confusing.","commit_id":"eabda27a6d649807b39e3bcc14e06c31055883a9"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"8e9feb13d9a3816110c2c0fbbd2c28fa3424df54","unresolved":false,"context_lines":[{"line_number":82,"context_line":"The only difference during the retries is that the conductor will first have to"},{"line_number":83,"context_line":"verify that the host a Selection object represents still has sufficient"},{"line_number":84,"context_line":"resources for the instance by calling Placement to attempt to claim them, using"},{"line_number":85,"context_line":"the value in the Selection object\u0027s `allocation` field. If that field is empty,"},{"line_number":86,"context_line":"that represents the initial selected host, whose resources have already been"},{"line_number":87,"context_line":"claimed. If there is a value there, that means that we are in a retry, so the"},{"line_number":88,"context_line":"conductor will first attempt to claim the resources using that value. If that"},{"line_number":89,"context_line":"fails, that Selection object is discarded, and the next is popped from the"},{"line_number":90,"context_line":"list."}],"source_content_type":"text/x-rst","patch_set":9,"id":"7f515b1d_2b366452","line":87,"range":{"start_line":85,"start_character":56,"end_line":87,"end_character":8},"in_reply_to":"7f515b1d_bfc29951","updated":"2017-10-03 08:58:22.000000000","message":"+1","commit_id":"eabda27a6d649807b39e3bcc14e06c31055883a9"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"f8e709a073b9d10f1a97dce893be565cea66bc1c","unresolved":false,"context_lines":[{"line_number":82,"context_line":"The only difference during the retries is that the conductor will first have to"},{"line_number":83,"context_line":"verify that the host a Selection object represents still has sufficient"},{"line_number":84,"context_line":"resources for the instance by calling Placement to attempt to claim them, using"},{"line_number":85,"context_line":"the value in the Selection object\u0027s `allocation` field. If that field is empty,"},{"line_number":86,"context_line":"that represents the initial selected host, whose resources have already been"},{"line_number":87,"context_line":"claimed. If there is a value there, that means that we are in a retry, so the"},{"line_number":88,"context_line":"conductor will first attempt to claim the resources using that value. If that"},{"line_number":89,"context_line":"fails, that Selection object is discarded, and the next is popped from the"},{"line_number":90,"context_line":"list."}],"source_content_type":"text/x-rst","patch_set":9,"id":"7f515b1d_0c117bad","line":87,"range":{"start_line":85,"start_character":56,"end_line":87,"end_character":8},"in_reply_to":"7f515b1d_bfc29951","updated":"2017-10-03 14:29:48.000000000","message":"This will happen in the same code in two contexts: the initial cast by superconductor to the compute, and as part of a retry for a failed build in the cell conductor. Since it is the same code running in different situations, it needs to have a way to distinguish them.","commit_id":"eabda27a6d649807b39e3bcc14e06c31055883a9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"95cbf65cc5dc25f39fe26a2beaf03f9c1739f61e","unresolved":false,"context_lines":[{"line_number":85,"context_line":"the value in the Selection object\u0027s `allocation` field. If that field is empty,"},{"line_number":86,"context_line":"that represents the initial selected host, whose resources have already been"},{"line_number":87,"context_line":"claimed. If there is a value there, that means that we are in a retry, so the"},{"line_number":88,"context_line":"conductor will first attempt to claim the resources using that value. If that"},{"line_number":89,"context_line":"fails, that Selection object is discarded, and the next is popped from the"},{"line_number":90,"context_line":"list."},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"The logic flow for resize operations can be similarly modified to allow for"}],"source_content_type":"text/x-rst","patch_set":9,"id":"7f515b1d_3fac699d","line":89,"range":{"start_line":88,"start_character":70,"end_line":89,"end_character":41},"updated":"2017-10-02 23:11:04.000000000","message":"Are we going to retry the claim if there is a 409 from placement like during the initial claim in the scheduler? It\u0027s an implementation detail but something to think about.","commit_id":"eabda27a6d649807b39e3bcc14e06c31055883a9"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"f8e709a073b9d10f1a97dce893be565cea66bc1c","unresolved":false,"context_lines":[{"line_number":85,"context_line":"the value in the Selection object\u0027s `allocation` field. If that field is empty,"},{"line_number":86,"context_line":"that represents the initial selected host, whose resources have already been"},{"line_number":87,"context_line":"claimed. If there is a value there, that means that we are in a retry, so the"},{"line_number":88,"context_line":"conductor will first attempt to claim the resources using that value. If that"},{"line_number":89,"context_line":"fails, that Selection object is discarded, and the next is popped from the"},{"line_number":90,"context_line":"list."},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"The logic flow for resize operations can be similarly modified to allow for"}],"source_content_type":"text/x-rst","patch_set":9,"id":"7f515b1d_4c7c13eb","line":89,"range":{"start_line":88,"start_character":70,"end_line":89,"end_character":41},"in_reply_to":"7f515b1d_3fac699d","updated":"2017-10-03 14:29:48.000000000","message":"Sure, but I felt that was something that would be handled in review, not in the spec.","commit_id":"eabda27a6d649807b39e3bcc14e06c31055883a9"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"f22d0084370ffa4b60570b78f8614283ade18722","unresolved":false,"context_lines":[{"line_number":206,"context_line":"  to properly handle the list of Selection objects."},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"* Modify all other methods that call select_destinations() to properly handle"},{"line_number":209,"context_line":"  the lsit of Selection objects."},{"line_number":210,"context_line":""},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"Dependencies"}],"source_content_type":"text/x-rst","patch_set":9,"id":"7f515b1d_8601cd07","line":209,"range":{"start_line":209,"start_character":6,"end_line":209,"end_character":10},"updated":"2017-10-03 09:20:35.000000000","message":"list","commit_id":"eabda27a6d649807b39e3bcc14e06c31055883a9"}]}
