)]}'
{"specs/rocky/approved/handling-down-cell.rst":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"00a42513d891211baad72b1dcbd81782dcd9df84","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":"The specific use cases that are being addressed in the spec include:"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"#. ``nova list`` should work even if a cell goes down."},{"line_number":37,"context_line":"#. ``nova service-list`` should work even if a cell goes down."},{"line_number":38,"context_line":"#. ``nova boot`` should not succeed if that project has any living VMs in the"},{"line_number":39,"context_line":"   down cell until an all-cell-iteration independent solution for quota"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_5c4a75ac","line":36,"updated":"2018-06-05 08:43:43.000000000","message":"I think we should cover two cases here:\n\n* user has no instances in the given cell that is down, hopefully everything should work as normal.\n\n* user has instances in a cell that isn\u0027t responding, we need graceful degradation in this case. There may be performance degradation of a timeout, but that seems fine.","commit_id":"2fdcbcd040092824d70e19e7a49fe37e7715c283"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"36e3d81cd3726ae5ce777f83103b9abfb816bc4c","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":"The specific use cases that are being addressed in the spec include:"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"#. ``nova list`` should work even if a cell goes down."},{"line_number":37,"context_line":"#. ``nova service-list`` should work even if a cell goes down."},{"line_number":38,"context_line":"#. ``nova boot`` should not succeed if that project has any living VMs in the"},{"line_number":39,"context_line":"   down cell until an all-cell-iteration independent solution for quota"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_dff517ef","line":36,"in_reply_to":"5f7c97a3_5c4a75ac","updated":"2018-06-05 10:13:54.000000000","message":"\u003e I think we should cover two cases here:\n \u003e \n \u003e * user has no instances in the given cell that is down, hopefully\n \u003e everything should work as normal.\n\nyes, we fixed this as a bug https://review.openstack.org/#/c/509003/, I will link this as a related change.\n\n \u003e \n \u003e * user has instances in a cell that isn\u0027t responding, we need\n \u003e graceful degradation in this case. There may be performance\n \u003e degradation of a timeout, but that seems fine.\n\nI will separate these as two cases.","commit_id":"2fdcbcd040092824d70e19e7a49fe37e7715c283"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"43f4b158e849f2cd8d1b423256001e2efd1d8512","unresolved":false,"context_lines":[{"line_number":34,"context_line":"The specific use cases that are being addressed in the spec include:"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"#. ``nova list`` should work even if a cell goes down."},{"line_number":37,"context_line":"#. ``nova service-list`` should work even if a cell goes down."},{"line_number":38,"context_line":"#. ``nova boot`` should not succeed if that project has any living VMs in the"},{"line_number":39,"context_line":"   down cell until an all-cell-iteration independent solution for quota"},{"line_number":40,"context_line":"   calculation is implemented[1]."}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_f03c26e2","line":37,"updated":"2018-05-14 12:57:51.000000000","message":"I think this should suffice : https://review.openstack.org/#/c/568271/ , this point could be removed from this spec as its not related to queued_for_delete.","commit_id":"2fdcbcd040092824d70e19e7a49fe37e7715c283"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"dcf720166571cdd9c37525581d059ecdbc81e841","unresolved":false,"context_lines":[{"line_number":34,"context_line":"The specific use cases that are being addressed in the spec include:"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"#. ``nova list`` should work even if a cell goes down."},{"line_number":37,"context_line":"#. ``nova service-list`` should work even if a cell goes down."},{"line_number":38,"context_line":"#. ``nova boot`` should not succeed if that project has any living VMs in the"},{"line_number":39,"context_line":"   down cell until an all-cell-iteration independent solution for quota"},{"line_number":40,"context_line":"   calculation is implemented[1]."}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_8fa8d68c","line":37,"in_reply_to":"5f7c97a3_4fde836d","updated":"2018-06-04 23:33:54.000000000","message":"https://review.openstack.org/#/c/568271/ is merged and could be considered backport-worthy since it also fixes a bug (and is a performance optimization otherwise). So yeah, let\u0027s remove that from the spec. If you want, you could refer to related changes in the References section below, like for this, and https://review.openstack.org/#/c/509003/.","commit_id":"2fdcbcd040092824d70e19e7a49fe37e7715c283"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"36e3d81cd3726ae5ce777f83103b9abfb816bc4c","unresolved":false,"context_lines":[{"line_number":34,"context_line":"The specific use cases that are being addressed in the spec include:"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"#. ``nova list`` should work even if a cell goes down."},{"line_number":37,"context_line":"#. ``nova service-list`` should work even if a cell goes down."},{"line_number":38,"context_line":"#. ``nova boot`` should not succeed if that project has any living VMs in the"},{"line_number":39,"context_line":"   down cell until an all-cell-iteration independent solution for quota"},{"line_number":40,"context_line":"   calculation is implemented[1]."}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_5c459542","line":37,"in_reply_to":"5f7c97a3_8fa8d68c","updated":"2018-06-05 10:13:54.000000000","message":"yes, so what I meant by saying \"skipping the cell is just a start\" is what we did in the bug fix was just avoid the problem, and now what we could do is use the host_mappings table from the API and try to do a minimal construct with the host and binary information. However I will attach this review to related changes like you have mentioned in the references section.","commit_id":"2fdcbcd040092824d70e19e7a49fe37e7715c283"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"85784f3e59f76141acba3317c528aae4d07d376d","unresolved":false,"context_lines":[{"line_number":34,"context_line":"The specific use cases that are being addressed in the spec include:"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"#. ``nova list`` should work even if a cell goes down."},{"line_number":37,"context_line":"#. ``nova service-list`` should work even if a cell goes down."},{"line_number":38,"context_line":"#. ``nova boot`` should not succeed if that project has any living VMs in the"},{"line_number":39,"context_line":"   down cell until an all-cell-iteration independent solution for quota"},{"line_number":40,"context_line":"   calculation is implemented[1]."}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_4fde836d","line":37,"in_reply_to":"5f7c97a3_f03c26e2","updated":"2018-05-31 09:52:37.000000000","message":"or maybe not.. skipping the down cell is just a start.","commit_id":"2fdcbcd040092824d70e19e7a49fe37e7715c283"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"dcf720166571cdd9c37525581d059ecdbc81e841","unresolved":false,"context_lines":[{"line_number":37,"context_line":"#. ``nova service-list`` should work even if a cell goes down."},{"line_number":38,"context_line":"#. ``nova boot`` should not succeed if that project has any living VMs in the"},{"line_number":39,"context_line":"   down cell until an all-cell-iteration independent solution for quota"},{"line_number":40,"context_line":"   calculation is implemented[1]."},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"Proposed change"},{"line_number":43,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_6f8f7a2e","line":40,"range":{"start_line":40,"start_character":29,"end_line":40,"end_character":32},"updated":"2018-06-04 23:33:54.000000000","message":"nit: [1]_ to link this as a proper footnote:\n\nhttp://docutils.sourceforge.net/docs/user/rst/quickref.html#footnotes","commit_id":"2fdcbcd040092824d70e19e7a49fe37e7715c283"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"36e3d81cd3726ae5ce777f83103b9abfb816bc4c","unresolved":false,"context_lines":[{"line_number":37,"context_line":"#. ``nova service-list`` should work even if a cell goes down."},{"line_number":38,"context_line":"#. ``nova boot`` should not succeed if that project has any living VMs in the"},{"line_number":39,"context_line":"   down cell until an all-cell-iteration independent solution for quota"},{"line_number":40,"context_line":"   calculation is implemented[1]."},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"Proposed change"},{"line_number":43,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_1c795d92","line":40,"range":{"start_line":40,"start_character":29,"end_line":40,"end_character":32},"in_reply_to":"5f7c97a3_6f8f7a2e","updated":"2018-06-05 10:13:54.000000000","message":"Done","commit_id":"2fdcbcd040092824d70e19e7a49fe37e7715c283"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"dcf720166571cdd9c37525581d059ecdbc81e841","unresolved":false,"context_lines":[{"line_number":39,"context_line":"   down cell until an all-cell-iteration independent solution for quota"},{"line_number":40,"context_line":"   calculation is implemented[1]."},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"Proposed change"},{"line_number":43,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"Listing of instances and services from the down cell will return a"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_2fdf42d7","line":42,"updated":"2018-06-04 23:33:54.000000000","message":"GET /os-migrations is also a cross-cell operation:\n\nhttps://developer.openstack.org/api-ref/compute/#migrations-os-migrations\n\nIs there anything we should do about that as part of this change? I think at a minimum we could just do the same kind of scatter/gather thing and not puke on did_not_respond_sentinel.","commit_id":"2fdcbcd040092824d70e19e7a49fe37e7715c283"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"36e3d81cd3726ae5ce777f83103b9abfb816bc4c","unresolved":false,"context_lines":[{"line_number":39,"context_line":"   down cell until an all-cell-iteration independent solution for quota"},{"line_number":40,"context_line":"   calculation is implemented[1]."},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"Proposed change"},{"line_number":43,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"Listing of instances and services from the down cell will return a"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_bf805bc1","line":42,"in_reply_to":"5f7c97a3_2fdf42d7","updated":"2018-06-05 10:13:54.000000000","message":"sounds fair, I have not dealt with migrations that much, will have a look into this part.","commit_id":"2fdcbcd040092824d70e19e7a49fe37e7715c283"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"dcf720166571cdd9c37525581d059ecdbc81e841","unresolved":false,"context_lines":[{"line_number":42,"context_line":"Proposed change"},{"line_number":43,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"Listing of instances and services from the down cell will return a"},{"line_number":46,"context_line":"``did_not_respond_sentinel`` object from the scatter-gather utility. Using this"},{"line_number":47,"context_line":"response we can know if a cell is down or not and accordingly modify the"},{"line_number":48,"context_line":"listing commands to work in the following manner for those records which are"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_4f7b9e28","line":45,"range":{"start_line":45,"start_character":25,"end_line":45,"end_character":33},"updated":"2018-06-04 23:33:54.000000000","message":"As noted above, you\u0027ve already implemented this as a bug fix so not sure it needs to be mentioned here. If the instance list implementation will be similar, you could just say, \u0027similar to how we handle listing services\u0027.","commit_id":"2fdcbcd040092824d70e19e7a49fe37e7715c283"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"36e3d81cd3726ae5ce777f83103b9abfb816bc4c","unresolved":false,"context_lines":[{"line_number":42,"context_line":"Proposed change"},{"line_number":43,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"Listing of instances and services from the down cell will return a"},{"line_number":46,"context_line":"``did_not_respond_sentinel`` object from the scatter-gather utility. Using this"},{"line_number":47,"context_line":"response we can know if a cell is down or not and accordingly modify the"},{"line_number":48,"context_line":"listing commands to work in the following manner for those records which are"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_5c291599","line":45,"range":{"start_line":45,"start_character":25,"end_line":45,"end_character":33},"in_reply_to":"5f7c97a3_4f7b9e28","updated":"2018-06-05 10:13:54.000000000","message":"right, so listing services is not related to \"queued_for_delete\" however its the same logic of taking info from the host_mappings table and providing a construct, so I will mention that in more detail.","commit_id":"2fdcbcd040092824d70e19e7a49fe37e7715c283"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"37867ddc25c0f277a88fa2c9e364fc732a4926d9","unresolved":false,"context_lines":[{"line_number":43,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"Listing of instances and services from the down cell will return a"},{"line_number":46,"context_line":"``did_not_respond_sentinel`` object from the scatter-gather utility. Using this"},{"line_number":47,"context_line":"response we can know if a cell is down or not and accordingly modify the"},{"line_number":48,"context_line":"listing commands to work in the following manner for those records which are"},{"line_number":49,"context_line":"from the down cell:"}],"source_content_type":"text/x-rst","patch_set":1,"id":"bf659307_aa45ffb5","line":46,"updated":"2018-03-29 22:24:03.000000000","message":"How is the detection of up/down done, just via some timeout?","commit_id":"2fdcbcd040092824d70e19e7a49fe37e7715c283"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"36e3d81cd3726ae5ce777f83103b9abfb816bc4c","unresolved":false,"context_lines":[{"line_number":43,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"Listing of instances and services from the down cell will return a"},{"line_number":46,"context_line":"``did_not_respond_sentinel`` object from the scatter-gather utility. Using this"},{"line_number":47,"context_line":"response we can know if a cell is down or not and accordingly modify the"},{"line_number":48,"context_line":"listing commands to work in the following manner for those records which are"},{"line_number":49,"context_line":"from the down cell:"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_bc114960","line":46,"in_reply_to":"5f7c97a3_6f9d3a56","updated":"2018-06-05 10:13:54.000000000","message":"Done","commit_id":"2fdcbcd040092824d70e19e7a49fe37e7715c283"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"dcf720166571cdd9c37525581d059ecdbc81e841","unresolved":false,"context_lines":[{"line_number":43,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"Listing of instances and services from the down cell will return a"},{"line_number":46,"context_line":"``did_not_respond_sentinel`` object from the scatter-gather utility. Using this"},{"line_number":47,"context_line":"response we can know if a cell is down or not and accordingly modify the"},{"line_number":48,"context_line":"listing commands to work in the following manner for those records which are"},{"line_number":49,"context_line":"from the down cell:"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_6f9d3a56","line":46,"in_reply_to":"bf659307_180be8d5","updated":"2018-06-04 23:33:54.000000000","message":"If you want, you could refer to https://github.com/openstack/nova/blob/f902e0d/nova/context.py#L464 as a footnote.","commit_id":"2fdcbcd040092824d70e19e7a49fe37e7715c283"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"612cb0ae05e37beec57aa302602989a231cbe5d2","unresolved":false,"context_lines":[{"line_number":43,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"Listing of instances and services from the down cell will return a"},{"line_number":46,"context_line":"``did_not_respond_sentinel`` object from the scatter-gather utility. Using this"},{"line_number":47,"context_line":"response we can know if a cell is down or not and accordingly modify the"},{"line_number":48,"context_line":"listing commands to work in the following manner for those records which are"},{"line_number":49,"context_line":"from the down cell:"}],"source_content_type":"text/x-rst","patch_set":1,"id":"bf659307_180be8d5","line":46,"in_reply_to":"bf659307_aa45ffb5","updated":"2018-04-03 11:31:22.000000000","message":"Yes.","commit_id":"2fdcbcd040092824d70e19e7a49fe37e7715c283"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"dcf720166571cdd9c37525581d059ecdbc81e841","unresolved":false,"context_lines":[{"line_number":49,"context_line":"from the down cell:"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"#. ``nova list`` should return a minimalistic construct from the available"},{"line_number":52,"context_line":"   information in the API DB which would include the instance_uuid and UNKNOWN"},{"line_number":53,"context_line":"   values for the rest of the fields in that instance record."},{"line_number":54,"context_line":"#. ``nova service-list`` should return a minimalistic construct for the down"},{"line_number":55,"context_line":"   cell, however since we do not have any information about the per cell"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_4fc95e58","line":52,"range":{"start_line":52,"start_character":71,"end_line":52,"end_character":78},"updated":"2018-06-04 23:33:54.000000000","message":"What about fields that aren\u0027t a string, like things that are a boolean, or list, or dict. Just glancing at:\n\nhttps://developer.openstack.org/api-ref/compute/#show-server-details\n\nThings like \u0027addresses\u0027 is required, but a dict, so UNKNOWN won\u0027t work there, Tempest response schema validation would fail that in the response, same with \u0027flavor\u0027.\n\nOS-EXT-STS:power_state is another weird one, it\u0027s an int enum. I suppose we could use the NOSTATE enum in that case.\n\n\u0027locked\u0027 is a boolean field, so I\u0027m not sure what we\u0027d use for that. I guess we\u0027d just default to False (which is the default in the Instance object).\n\nFor list/dict fields, I expect we\u0027d just default to [] and {} to indicate we don\u0027t know.\n\n- OR -\n\nBy \"minimalistic construct from the available information in the API DB\" would that also include looking up the request spec to get information about things like flavor and image? I know we talked about that at one point, but the spec isn\u0027t very clear about this point. Doing a 1:1 instance/request_spec lookup for every instance in a down cell is going to make the list operation pretty slow, but maybe we\u0027d lookup the RequestSpec when doing a \u0027nova show\u0027 on an instance in a down cell to get more information? Or do we just punt and not trust the request spec (dansmith and I don\u0027t trust that we keep the request spec up to date very well).","commit_id":"2fdcbcd040092824d70e19e7a49fe37e7715c283"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"c6e69d34f91fa2c27f0cb8c7159773b96ddc54f2","unresolved":false,"context_lines":[{"line_number":49,"context_line":"from the down cell:"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"#. ``nova list`` should return a minimalistic construct from the available"},{"line_number":52,"context_line":"   information in the API DB which would include the instance_uuid and UNKNOWN"},{"line_number":53,"context_line":"   values for the rest of the fields in that instance record."},{"line_number":54,"context_line":"#. ``nova service-list`` should return a minimalistic construct for the down"},{"line_number":55,"context_line":"   cell, however since we do not have any information about the per cell"}],"source_content_type":"text/x-rst","patch_set":1,"id":"bf659307_2b491ccf","line":52,"range":{"start_line":52,"start_character":71,"end_line":52,"end_character":78},"updated":"2018-03-28 15:29:11.000000000","message":"up for discussion","commit_id":"2fdcbcd040092824d70e19e7a49fe37e7715c283"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"c8b1fe1e7be4a2529b2da051acf233e7e8a7e1b2","unresolved":false,"context_lines":[{"line_number":49,"context_line":"from the down cell:"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"#. ``nova list`` should return a minimalistic construct from the available"},{"line_number":52,"context_line":"   information in the API DB which would include the instance_uuid and UNKNOWN"},{"line_number":53,"context_line":"   values for the rest of the fields in that instance record."},{"line_number":54,"context_line":"#. ``nova service-list`` should return a minimalistic construct for the down"},{"line_number":55,"context_line":"   cell, however since we do not have any information about the per cell"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_dc9c1cc1","line":52,"range":{"start_line":52,"start_character":71,"end_line":52,"end_character":78},"in_reply_to":"5f7c97a3_0c4267ac","updated":"2018-06-07 10:30:16.000000000","message":"right, thanks for clarifying.!","commit_id":"2fdcbcd040092824d70e19e7a49fe37e7715c283"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"0fc2d0522a7042217f63e6664f2012191b41a0ef","unresolved":false,"context_lines":[{"line_number":49,"context_line":"from the down cell:"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"#. ``nova list`` should return a minimalistic construct from the available"},{"line_number":52,"context_line":"   information in the API DB which would include the instance_uuid and UNKNOWN"},{"line_number":53,"context_line":"   values for the rest of the fields in that instance record."},{"line_number":54,"context_line":"#. ``nova service-list`` should return a minimalistic construct for the down"},{"line_number":55,"context_line":"   cell, however since we do not have any information about the per cell"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_5848382d","line":52,"range":{"start_line":52,"start_character":71,"end_line":52,"end_character":78},"in_reply_to":"5f7c97a3_22d8ab1c","updated":"2018-06-05 14:41:13.000000000","message":"\u003e \u003e I used the _UNUSED state at position 2 (https://github.com/openstack/nova/blob/0f6a01de4ff8112a938484a11642ab796ddab8f7/nova/objects/fields.py#L897),\n \u003e but I guess this is a placeholder and could be different in\n \u003e different deployments. So NOSTATE would be better ?\n \u003e \n \u003e I don\u0027t think we should use the _UNUSED enum in the response, it\u0027s\n \u003e not documented in the API reference for one.\n \u003e \n \u003e \u003e So I will be taking the flavor and image info from the req_spec.\n \u003e \n \u003e You\u0027re going to lookup the request spec for every instance listed\n \u003e that\u0027s in a down cell? That will get slow. I guess we can add a\n \u003e query to help optimize that by getting all request specs from a\n \u003e list of instance uuids, but still it will be slow.\n \u003e \n \u003e \u003e Fair points, I have not explained this very well. So this is what\n \u003e I propose, only the name and status of the server will be\n \u003e \"UNKNOWN\", rest of them will be default values from the fake\n \u003e instance object.\n \u003e \n \u003e By \"fake instance object\" you literally mean nova.tests.unit.fake_instance?\n \u003e I don\u0027t think think we should do that. I would rather just return\n \u003e UNKNOWN for most of the fields than return fake / misleading\n \u003e information.\n\nalright.\n\n \u003e \n \u003e Another thing that I\u0027ve been thinking about is, if we can\u0027t get to\n \u003e the cell, we might not even be returning the correct list of\n \u003e instances if the list is being filtered. For example, let\u0027s say I\u0027m\n \u003e listing instances with the availability_zone\u003d\u0027london\u0027 filter - if\n \u003e we can\u0027t get into a cell to actually do that filtering, we could be\n \u003e returning instances from the instance_mappings table for that cell\n \u003e which aren\u0027t actually in that AZ, which is going to be misleading.\n \u003e I\u0027m not sure what to do about that. Some random thoughts on\n \u003e different options:\n \u003e \n \u003e 1. We just don\u0027t list instances in down cells since we can\u0027t be\n \u003e sure we\u0027re returning accurate results.\n\n\nI wish (sigh)!\n\n \u003e \n \u003e 2. We don\u0027t include instances from down cells if the user is\n \u003e filtering the list with query parameters.\n \u003e \n \u003e 3. If the user is not filtering instances, then include the\n \u003e instance uuids from down cells in a top-level key like gibi\n \u003e suggested in the response body - but this would likely need to be a\n \u003e new microversion since it changes the response body format.\n \u003e \n \u003e 4. Add a new API for admins to list instances per cell with a\n \u003e status indicator on the cell (if it\u0027s down or not) - but this would\n \u003e overlap with \u0027nova-manage cell_v2 list_cells\u0027. We haven\u0027t exposed\n \u003e cells v2 cells out of the REST API though and this might not be\n \u003e very useful - depends on the use case and what information we need\n \u003e (and who needs it).\n \u003e \n \u003e 5. Use searchlight to backfill when there are down cells. We had\n \u003e this older spec about using searchlight to list instances from the\n \u003e nova API rather than iterate the cells:\n \u003e \n \u003e https://specs.openstack.org/openstack/nova-specs/specs/pike/approved/list-instances-using-searchlight.html\n \u003e \n \u003e I doubt that would happen here, but it should be listed as an\n \u003e alternative since it would likely have muck more recent and\n \u003e accurate information about the instances than what we\u0027d be\n \u003e returning with a bunch of UNKNOWN sentinels.","commit_id":"2fdcbcd040092824d70e19e7a49fe37e7715c283"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"36e3d81cd3726ae5ce777f83103b9abfb816bc4c","unresolved":false,"context_lines":[{"line_number":49,"context_line":"from the down cell:"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"#. ``nova list`` should return a minimalistic construct from the available"},{"line_number":52,"context_line":"   information in the API DB which would include the instance_uuid and UNKNOWN"},{"line_number":53,"context_line":"   values for the rest of the fields in that instance record."},{"line_number":54,"context_line":"#. ``nova service-list`` should return a minimalistic construct for the down"},{"line_number":55,"context_line":"   cell, however since we do not have any information about the per cell"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_9fa9dfde","line":52,"range":{"start_line":52,"start_character":71,"end_line":52,"end_character":78},"in_reply_to":"5f7c97a3_4fc95e58","updated":"2018-06-05 10:13:54.000000000","message":"\u003e What about fields that aren\u0027t a string, like things that are a\n \u003e boolean, or list, or dict. Just glancing at:\n \u003e \n \u003e https://developer.openstack.org/api-ref/compute/#show-server-details\n \u003e \n \u003e Things like \u0027addresses\u0027 is required, but a dict, so UNKNOWN won\u0027t\n \u003e work there, Tempest response schema validation would fail that in\n \u003e the response, same with \u0027flavor\u0027.\n \u003e \n \u003e OS-EXT-STS:power_state is another weird one, it\u0027s an int enum. I\n \u003e suppose we could use the NOSTATE enum in that case.\n\nI used the _UNUSED state at position 2 (https://github.com/openstack/nova/blob/0f6a01de4ff8112a938484a11642ab796ddab8f7/nova/objects/fields.py#L897), but I guess this is a placeholder and could be different in different deployments. So NOSTATE would be better ?\n\n \u003e \n \u003e \u0027locked\u0027 is a boolean field, so I\u0027m not sure what we\u0027d use for\n \u003e that. I guess we\u0027d just default to False (which is the default in\n \u003e the Instance object).\n \u003e \n \u003e For list/dict fields, I expect we\u0027d just default to [] and {} to\n \u003e indicate we don\u0027t know.\n \u003e \n \u003e - OR -\n \u003e \n \u003e By \"minimalistic construct from the available information in the\n \u003e API DB\" would that also include looking up the request spec to get\n \u003e information about things like flavor and image? \n\nSo I will be taking the flavor and image info from the req_spec.\n\n \u003e I know we talked\n \u003e about that at one point, but the spec isn\u0027t very clear about this\n \u003e point. Doing a 1:1 instance/request_spec lookup for every instance\n \u003e in a down cell is going to make the list operation pretty slow, but\n \u003e maybe we\u0027d lookup the RequestSpec when doing a \u0027nova show\u0027 on an\n \u003e instance in a down cell to get more information? Or do we just punt\n \u003e and not trust the request spec (dansmith and I don\u0027t trust that we\n \u003e keep the request spec up to date very well).\n\n\nFair points, I have not explained this very well. So this is what I propose, only the name and status of the server will be \"UNKNOWN\", rest of them will be default values from the fake instance object. See https://review.openstack.org/#/c/567785/1/nova/compute/multi_cell_list.py for a POC. I will update the spec to explicitly state the valid info versus what needs to left empty.","commit_id":"2fdcbcd040092824d70e19e7a49fe37e7715c283"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2577ea895182d9f05b031d626ec02b5fec2771e2","unresolved":false,"context_lines":[{"line_number":49,"context_line":"from the down cell:"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"#. ``nova list`` should return a minimalistic construct from the available"},{"line_number":52,"context_line":"   information in the API DB which would include the instance_uuid and UNKNOWN"},{"line_number":53,"context_line":"   values for the rest of the fields in that instance record."},{"line_number":54,"context_line":"#. ``nova service-list`` should return a minimalistic construct for the down"},{"line_number":55,"context_line":"   cell, however since we do not have any information about the per cell"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_ff2ed3a9","line":52,"range":{"start_line":52,"start_character":71,"end_line":52,"end_character":78},"in_reply_to":"5f7c97a3_4fc95e58","updated":"2018-06-05 09:31:27.000000000","message":"Could we default fields to json null or it would also break the validation in tempest? When we return [] and {} that does not signal \u0027I don\u0027t know\u0027 that signals we know that there is no items in that list or key in the dict.","commit_id":"2fdcbcd040092824d70e19e7a49fe37e7715c283"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"dadd56ef8dc059b731babcf88bfb6f9c39ad0c57","unresolved":false,"context_lines":[{"line_number":49,"context_line":"from the down cell:"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"#. ``nova list`` should return a minimalistic construct from the available"},{"line_number":52,"context_line":"   information in the API DB which would include the instance_uuid and UNKNOWN"},{"line_number":53,"context_line":"   values for the rest of the fields in that instance record."},{"line_number":54,"context_line":"#. ``nova service-list`` should return a minimalistic construct for the down"},{"line_number":55,"context_line":"   cell, however since we do not have any information about the per cell"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_ce6d63cd","line":52,"range":{"start_line":52,"start_character":71,"end_line":52,"end_character":78},"in_reply_to":"5f7c97a3_883c4331","updated":"2018-06-05 12:14:58.000000000","message":"\u003e Another alternative:\n \u003e Both the GET /servers and /servers/details API response has a\n \u003e servers top level key. rsp \u003d {\"servers\": [...]}. So we could add\n \u003e another top level key to list the instances that are in a cell that\n \u003e is down at the moment. Something like rsp \u003d {\"servers\": [...],\n \u003e \"servers_in_down_cells\": [\u003cuuid1\u003e, \u003cuuid2\u003e...]} This way we don\u0027t\n \u003e have to fake the instance field values and we clearly signal that\n \u003e some of the instances are in an unavailable cell.\n\nHowever on second thoughts, how would we get the \"servers_in_down_cells\" ? do you mean if compute API cannot connect to the cell, pull this from instance_mappings ? Also to clarify, you mean changing API version for all requests where \"servers_in_down_cells\" is empty ? or special API response change for handling down cells ?","commit_id":"2fdcbcd040092824d70e19e7a49fe37e7715c283"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"b919c523889b64fe02a00fee137dbbdf0f0865b5","unresolved":false,"context_lines":[{"line_number":49,"context_line":"from the down cell:"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"#. ``nova list`` should return a minimalistic construct from the available"},{"line_number":52,"context_line":"   information in the API DB which would include the instance_uuid and UNKNOWN"},{"line_number":53,"context_line":"   values for the rest of the fields in that instance record."},{"line_number":54,"context_line":"#. ``nova service-list`` should return a minimalistic construct for the down"},{"line_number":55,"context_line":"   cell, however since we do not have any information about the per cell"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_936a3819","line":52,"range":{"start_line":52,"start_character":71,"end_line":52,"end_character":78},"in_reply_to":"5f7c97a3_883c4331","updated":"2018-06-05 11:56:17.000000000","message":"@Balazs: thanks! seems doable and works for me, I will put this in the alternatives and see what the others think of this.","commit_id":"2fdcbcd040092824d70e19e7a49fe37e7715c283"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"4172e46e4ba5c9bcefc7223d2715ff99a260c7d2","unresolved":false,"context_lines":[{"line_number":49,"context_line":"from the down cell:"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"#. ``nova list`` should return a minimalistic construct from the available"},{"line_number":52,"context_line":"   information in the API DB which would include the instance_uuid and UNKNOWN"},{"line_number":53,"context_line":"   values for the rest of the fields in that instance record."},{"line_number":54,"context_line":"#. ``nova service-list`` should return a minimalistic construct for the down"},{"line_number":55,"context_line":"   cell, however since we do not have any information about the per cell"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_22d8ab1c","line":52,"range":{"start_line":52,"start_character":71,"end_line":52,"end_character":78},"in_reply_to":"5f7c97a3_9fa9dfde","updated":"2018-06-05 13:39:23.000000000","message":"\u003e I used the _UNUSED state at position 2 (https://github.com/openstack/nova/blob/0f6a01de4ff8112a938484a11642ab796ddab8f7/nova/objects/fields.py#L897), but I guess this is a placeholder and could be different in different deployments. So NOSTATE would be better ?\n\nI don\u0027t think we should use the _UNUSED enum in the response, it\u0027s not documented in the API reference for one.\n\n\u003e So I will be taking the flavor and image info from the req_spec.\n\nYou\u0027re going to lookup the request spec for every instance listed that\u0027s in a down cell? That will get slow. I guess we can add a query to help optimize that by getting all request specs from a list of instance uuids, but still it will be slow.\n\n\u003e Fair points, I have not explained this very well. So this is what I propose, only the name and status of the server will be \"UNKNOWN\", rest of them will be default values from the fake instance object.\n\nBy \"fake instance object\" you literally mean nova.tests.unit.fake_instance? I don\u0027t think think we should do that. I would rather just return UNKNOWN for most of the fields than return fake / misleading information.\n\nAnother thing that I\u0027ve been thinking about is, if we can\u0027t get to the cell, we might not even be returning the correct list of instances if the list is being filtered. For example, let\u0027s say I\u0027m listing instances with the availability_zone\u003d\u0027london\u0027 filter - if we can\u0027t get into a cell to actually do that filtering, we could be returning instances from the instance_mappings table for that cell which aren\u0027t actually in that AZ, which is going to be misleading. I\u0027m not sure what to do about that. Some random thoughts on different options:\n\n1. We just don\u0027t list instances in down cells since we can\u0027t be sure we\u0027re returning accurate results.\n\n2. We don\u0027t include instances from down cells if the user is filtering the list with query parameters.\n\n3. If the user is not filtering instances, then include the instance uuids from down cells in a top-level key like gibi suggested in the response body - but this would likely need to be a new microversion since it changes the response body format.\n\n4. Add a new API for admins to list instances per cell with a status indicator on the cell (if it\u0027s down or not) - but this would overlap with \u0027nova-manage cell_v2 list_cells\u0027. We haven\u0027t exposed cells v2 cells out of the REST API though and this might not be very useful - depends on the use case and what information we need (and who needs it).\n\n5. Use searchlight to backfill when there are down cells. We had this older spec about using searchlight to list instances from the nova API rather than iterate the cells:\n\nhttps://specs.openstack.org/openstack/nova-specs/specs/pike/approved/list-instances-using-searchlight.html\n\nI doubt that would happen here, but it should be listed as an alternative since it would likely have muck more recent and accurate information about the instances than what we\u0027d be returning with a bunch of UNKNOWN sentinels.","commit_id":"2fdcbcd040092824d70e19e7a49fe37e7715c283"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"92cfbbfe99e54a309776b34b3a81d5ab14bac978","unresolved":false,"context_lines":[{"line_number":49,"context_line":"from the down cell:"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"#. ``nova list`` should return a minimalistic construct from the available"},{"line_number":52,"context_line":"   information in the API DB which would include the instance_uuid and UNKNOWN"},{"line_number":53,"context_line":"   values for the rest of the fields in that instance record."},{"line_number":54,"context_line":"#. ``nova service-list`` should return a minimalistic construct for the down"},{"line_number":55,"context_line":"   cell, however since we do not have any information about the per cell"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_883c4331","line":52,"range":{"start_line":52,"start_character":71,"end_line":52,"end_character":78},"in_reply_to":"5f7c97a3_9fa9dfde","updated":"2018-06-05 11:12:12.000000000","message":"Another alternative:\nBoth the GET /servers and /servers/details API response has a servers top level key. rsp \u003d {\"servers\": [...]}. So we could add another top level key to list the instances that are in a cell that is down at the moment. Something like rsp \u003d {\"servers\": [...],\n \"servers_in_down_cells\": [\u003cuuid1\u003e, \u003cuuid2\u003e...]} This way we don\u0027t have to fake the instance field values and we clearly signal that some of the instances are in an unavailable cell.","commit_id":"2fdcbcd040092824d70e19e7a49fe37e7715c283"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"4d0629d40da4cb3dd36c4d3eff7c0ebaa4bd3424","unresolved":false,"context_lines":[{"line_number":49,"context_line":"from the down cell:"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"#. ``nova list`` should return a minimalistic construct from the available"},{"line_number":52,"context_line":"   information in the API DB which would include the instance_uuid and UNKNOWN"},{"line_number":53,"context_line":"   values for the rest of the fields in that instance record."},{"line_number":54,"context_line":"#. ``nova service-list`` should return a minimalistic construct for the down"},{"line_number":55,"context_line":"   cell, however since we do not have any information about the per cell"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_0c4267ac","line":52,"range":{"start_line":52,"start_character":71,"end_line":52,"end_character":78},"in_reply_to":"5f7c97a3_ce6d63cd","updated":"2018-06-06 13:05:44.000000000","message":"\u003e \u003e Another alternative:\n \u003e \u003e Both the GET /servers and /servers/details API response has a\n \u003e \u003e servers top level key. rsp \u003d {\"servers\": [...]}. So we could add\n \u003e \u003e another top level key to list the instances that are in a cell\n \u003e that\n \u003e \u003e is down at the moment. Something like rsp \u003d {\"servers\": [...],\n \u003e \u003e \"servers_in_down_cells\": [\u003cuuid1\u003e, \u003cuuid2\u003e...]} This way we don\u0027t\n \u003e \u003e have to fake the instance field values and we clearly signal that\n \u003e \u003e some of the instances are in an unavailable cell.\n \u003e \n \u003e However on second thoughts, how would we get the \"servers_in_down_cells\"\n \u003e ? do you mean if compute API cannot connect to the cell, pull this\n \u003e from instance_mappings ? Also to clarify, you mean changing API\n \u003e version for all requests where \"servers_in_down_cells\" is empty ?\n \u003e or special API response change for handling down cells ?\n\nThe server_in_down_cells would contain only instance.uuids that can be pulled from the instance_mappings. \n\nIf we add a new field to the response then we need to bump the api version anyhow. I don\u0027t see the reason returning different api responses for the case when there is a down cell from where there isn\u0027t.","commit_id":"2fdcbcd040092824d70e19e7a49fe37e7715c283"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"dcf720166571cdd9c37525581d059ecdbc81e841","unresolved":false,"context_lines":[{"line_number":51,"context_line":"#. ``nova list`` should return a minimalistic construct from the available"},{"line_number":52,"context_line":"   information in the API DB which would include the instance_uuid and UNKNOWN"},{"line_number":53,"context_line":"   values for the rest of the fields in that instance record."},{"line_number":54,"context_line":"#. ``nova service-list`` should return a minimalistic construct for the down"},{"line_number":55,"context_line":"   cell, however since we do not have any information about the per cell"},{"line_number":56,"context_line":"   services outside the down cell DB, the minimalistic construct will be"},{"line_number":57,"context_line":"   a record per down cell, having UNKNOWN value filled in each of its fields."}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_ef086a92","line":54,"updated":"2018-06-04 23:33:54.000000000","message":"So are you thinking about doing more than just what\u0027s in https://review.openstack.org/#/c/568271/ ? This gets weird because things like nova-osapi_compute, nova-scheduler and nova-conductor (at the top level) are probably recorded in the nova_cell0 database, which hopefully people make sure is resilient. But if cell0 is down, we can\u0027t assume what\u0027s in it for controller services.\n\nFor a down compute cell, we have the host_mappings records in the nova_api database so we could minimally construct something from that, which would just be the \"binary\" and \"host\" fields, everything else would be UNKNOWN.\n\nIf we hit a down cell, we could lookup the host mappings for that cell and then just populate what we can for nova-compute services.","commit_id":"2fdcbcd040092824d70e19e7a49fe37e7715c283"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"36e3d81cd3726ae5ce777f83103b9abfb816bc4c","unresolved":false,"context_lines":[{"line_number":51,"context_line":"#. ``nova list`` should return a minimalistic construct from the available"},{"line_number":52,"context_line":"   information in the API DB which would include the instance_uuid and UNKNOWN"},{"line_number":53,"context_line":"   values for the rest of the fields in that instance record."},{"line_number":54,"context_line":"#. ``nova service-list`` should return a minimalistic construct for the down"},{"line_number":55,"context_line":"   cell, however since we do not have any information about the per cell"},{"line_number":56,"context_line":"   services outside the down cell DB, the minimalistic construct will be"},{"line_number":57,"context_line":"   a record per down cell, having UNKNOWN value filled in each of its fields."}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_222bd082","line":54,"in_reply_to":"5f7c97a3_ef086a92","updated":"2018-06-05 10:13:54.000000000","message":"\u003e So are you thinking about doing more than just what\u0027s in\n \u003e https://review.openstack.org/#/c/568271/ ?\n\nyes, because that is merely ignoring the problem.\n\n \u003e This gets weird because\n \u003e things like nova-osapi_compute, nova-scheduler and nova-conductor\n \u003e (at the top level) are probably recorded in the nova_cell0\n \u003e database, which hopefully people make sure is resilient.\n\nyes we cannot do anything for the level0 services.\n\n \u003e But if\n \u003e cell0 is down, we can\u0027t assume what\u0027s in it for controller\n \u003e services.\n \u003e \n \u003e For a down compute cell, we have the host_mappings records in the\n \u003e nova_api database so we could minimally construct something from\n \u003e that, which would just be the \"binary\" and \"host\" fields,\n \u003e everything else would be UNKNOWN.\n\nthis is what I had in mind as well, I will make this more explicit.\n\n \u003e \n \u003e If we hit a down cell, we could lookup the host mappings for that\n \u003e cell and then just populate what we can for nova-compute services.","commit_id":"2fdcbcd040092824d70e19e7a49fe37e7715c283"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"dcf720166571cdd9c37525581d059ecdbc81e841","unresolved":false,"context_lines":[{"line_number":61,"context_line":"   if this project has living instances in the down cell from the"},{"line_number":62,"context_line":"   instance_mapping table and prevent the boot request if it has."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"For the above three operations to work when a cell is down, we need to have the"},{"line_number":65,"context_line":"information regarding if an instance is soft deleted/queued_for_delete in the"},{"line_number":66,"context_line":"API DB so that the living instances can be distinguished from the deleted ones."},{"line_number":67,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_af02726e","line":64,"range":{"start_line":64,"start_character":14,"end_line":64,"end_character":19},"updated":"2018-06-04 23:33:54.000000000","message":"nit: well, for the 1st and 3rd, not the service list one.","commit_id":"2fdcbcd040092824d70e19e7a49fe37e7715c283"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"36e3d81cd3726ae5ce777f83103b9abfb816bc4c","unresolved":false,"context_lines":[{"line_number":61,"context_line":"   if this project has living instances in the down cell from the"},{"line_number":62,"context_line":"   instance_mapping table and prevent the boot request if it has."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"For the above three operations to work when a cell is down, we need to have the"},{"line_number":65,"context_line":"information regarding if an instance is soft deleted/queued_for_delete in the"},{"line_number":66,"context_line":"API DB so that the living instances can be distinguished from the deleted ones."},{"line_number":67,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_e224f8b1","line":64,"range":{"start_line":64,"start_character":14,"end_line":64,"end_character":19},"in_reply_to":"5f7c97a3_af02726e","updated":"2018-06-05 10:13:54.000000000","message":"Done","commit_id":"2fdcbcd040092824d70e19e7a49fe37e7715c283"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"dcf720166571cdd9c37525581d059ecdbc81e841","unresolved":false,"context_lines":[{"line_number":62,"context_line":"   instance_mapping table and prevent the boot request if it has."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"For the above three operations to work when a cell is down, we need to have the"},{"line_number":65,"context_line":"information regarding if an instance is soft deleted/queued_for_delete in the"},{"line_number":66,"context_line":"API DB so that the living instances can be distinguished from the deleted ones."},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"This spec proposes to add a new ``queued_for_delete`` column in the"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_af37d24d","line":65,"range":{"start_line":65,"start_character":40,"end_line":65,"end_character":52},"updated":"2018-06-04 23:33:54.000000000","message":"You might want to be explicit about what you mean about soft delete here, since there are two different things when talking about soft delete in nova - there is the literal vm state SOFT_DELETED when the API is configured to delete the guest on the hypervisor after some configurable amount of time (based on the reclaim_instance_interval config option). Then there is the pack-rat nature of the DB API where we don\u0027t actually delete records, we update their deleted column to each resource.id, and then those aren\u0027t hard deleted until you purge them via nova-manage db archive_deleted_rows (--purge). I think you mean the latter, but you should be explicit because people can get confused.","commit_id":"2fdcbcd040092824d70e19e7a49fe37e7715c283"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"4172e46e4ba5c9bcefc7223d2715ff99a260c7d2","unresolved":false,"context_lines":[{"line_number":62,"context_line":"   instance_mapping table and prevent the boot request if it has."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"For the above three operations to work when a cell is down, we need to have the"},{"line_number":65,"context_line":"information regarding if an instance is soft deleted/queued_for_delete in the"},{"line_number":66,"context_line":"API DB so that the living instances can be distinguished from the deleted ones."},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"This spec proposes to add a new ``queued_for_delete`` column in the"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_82f41f89","line":65,"range":{"start_line":65,"start_character":40,"end_line":65,"end_character":52},"in_reply_to":"5f7c97a3_823e64b7","updated":"2018-06-05 13:39:23.000000000","message":"So SOFT_DELETED instances and the \"deleted\" or \"changes-since\" filter parameters?","commit_id":"2fdcbcd040092824d70e19e7a49fe37e7715c283"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"36e3d81cd3726ae5ce777f83103b9abfb816bc4c","unresolved":false,"context_lines":[{"line_number":62,"context_line":"   instance_mapping table and prevent the boot request if it has."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"For the above three operations to work when a cell is down, we need to have the"},{"line_number":65,"context_line":"information regarding if an instance is soft deleted/queued_for_delete in the"},{"line_number":66,"context_line":"API DB so that the living instances can be distinguished from the deleted ones."},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"This spec proposes to add a new ``queued_for_delete`` column in the"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_823e64b7","line":65,"range":{"start_line":65,"start_character":40,"end_line":65,"end_character":52},"in_reply_to":"5f7c97a3_af37d24d","updated":"2018-06-05 10:13:54.000000000","message":"Sorry for not being clear, I meant the latter however like mentioned in below comments we would have to do the same for the former as well since it is also a type of delete.","commit_id":"2fdcbcd040092824d70e19e7a49fe37e7715c283"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2577ea895182d9f05b031d626ec02b5fec2771e2","unresolved":false,"context_lines":[{"line_number":63,"context_line":""},{"line_number":64,"context_line":"For the above three operations to work when a cell is down, we need to have the"},{"line_number":65,"context_line":"information regarding if an instance is soft deleted/queued_for_delete in the"},{"line_number":66,"context_line":"API DB so that the living instances can be distinguished from the deleted ones."},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"This spec proposes to add a new ``queued_for_delete`` column in the"},{"line_number":69,"context_line":"``nova_api.instance_mappings`` table schema as discussed in the Dublin PTG[2]."}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_02fd7407","line":66,"updated":"2018-06-05 09:31:27.000000000","message":"Does soft deleted / queued_for_delete means we release the quote for the instance?","commit_id":"2fdcbcd040092824d70e19e7a49fe37e7715c283"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"36e3d81cd3726ae5ce777f83103b9abfb816bc4c","unresolved":false,"context_lines":[{"line_number":63,"context_line":""},{"line_number":64,"context_line":"For the above three operations to work when a cell is down, we need to have the"},{"line_number":65,"context_line":"information regarding if an instance is soft deleted/queued_for_delete in the"},{"line_number":66,"context_line":"API DB so that the living instances can be distinguished from the deleted ones."},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"This spec proposes to add a new ``queued_for_delete`` column in the"},{"line_number":69,"context_line":"``nova_api.instance_mappings`` table schema as discussed in the Dublin PTG[2]."}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_6d68d986","line":66,"in_reply_to":"5f7c97a3_02fd7407","updated":"2018-06-05 10:13:54.000000000","message":"so deleting an instance would release allocations from placement, and since nova quota is calculated on the fly currently, it does not take deleted instances into consideration to the best of my knowledge.","commit_id":"2fdcbcd040092824d70e19e7a49fe37e7715c283"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"0fc2d0522a7042217f63e6664f2012191b41a0ef","unresolved":false,"context_lines":[{"line_number":63,"context_line":""},{"line_number":64,"context_line":"For the above three operations to work when a cell is down, we need to have the"},{"line_number":65,"context_line":"information regarding if an instance is soft deleted/queued_for_delete in the"},{"line_number":66,"context_line":"API DB so that the living instances can be distinguished from the deleted ones."},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"This spec proposes to add a new ``queued_for_delete`` column in the"},{"line_number":69,"context_line":"``nova_api.instance_mappings`` table schema as discussed in the Dublin PTG[2]."}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_1b339af8","line":66,"in_reply_to":"5f7c97a3_623c6330","updated":"2018-06-05 14:41:13.000000000","message":"\u003e Allocations don\u0027t have anything to do with quota calculation today.\n \u003e Quota is counted on the fly, but it\u0027s counted while there is an\n \u003e instance record in the database, including a SOFT_DELETED record,\n \u003e so the quota usage doesn\u0027t change (currently) until the instance\n \u003e record is literally deleted from the database, which either happens\n \u003e in the compute service or in the API if the compute service (or\n \u003e cell I guess?) is down.\n\nI am confused with the usage of \"literally deleted\", I hope you mean quota calculation is done on fly and considers only living instances ? (filtering out instances in DELETED and SOFT_DELETED state right?) -\u003e https://github.com/openstack/nova/blob/f902e0d/nova/objects/instance.py#L1502","commit_id":"2fdcbcd040092824d70e19e7a49fe37e7715c283"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"92cfbbfe99e54a309776b34b3a81d5ab14bac978","unresolved":false,"context_lines":[{"line_number":63,"context_line":""},{"line_number":64,"context_line":"For the above three operations to work when a cell is down, we need to have the"},{"line_number":65,"context_line":"information regarding if an instance is soft deleted/queued_for_delete in the"},{"line_number":66,"context_line":"API DB so that the living instances can be distinguished from the deleted ones."},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"This spec proposes to add a new ``queued_for_delete`` column in the"},{"line_number":69,"context_line":"``nova_api.instance_mappings`` table schema as discussed in the Dublin PTG[2]."}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_e8861714","line":66,"in_reply_to":"5f7c97a3_6d68d986","updated":"2018-06-05 11:12:12.000000000","message":"thanks.","commit_id":"2fdcbcd040092824d70e19e7a49fe37e7715c283"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"4172e46e4ba5c9bcefc7223d2715ff99a260c7d2","unresolved":false,"context_lines":[{"line_number":63,"context_line":""},{"line_number":64,"context_line":"For the above three operations to work when a cell is down, we need to have the"},{"line_number":65,"context_line":"information regarding if an instance is soft deleted/queued_for_delete in the"},{"line_number":66,"context_line":"API DB so that the living instances can be distinguished from the deleted ones."},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"This spec proposes to add a new ``queued_for_delete`` column in the"},{"line_number":69,"context_line":"``nova_api.instance_mappings`` table schema as discussed in the Dublin PTG[2]."}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_623c6330","line":66,"in_reply_to":"5f7c97a3_e8861714","updated":"2018-06-05 13:39:23.000000000","message":"Allocations don\u0027t have anything to do with quota calculation today. Quota is counted on the fly, but it\u0027s counted while there is an instance record in the database, including a SOFT_DELETED record, so the quota usage doesn\u0027t change (currently) until the instance record is literally deleted from the database, which either happens in the compute service or in the API if the compute service (or cell I guess?) is down.","commit_id":"2fdcbcd040092824d70e19e7a49fe37e7715c283"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"dcf720166571cdd9c37525581d059ecdbc81e841","unresolved":false,"context_lines":[{"line_number":66,"context_line":"API DB so that the living instances can be distinguished from the deleted ones."},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"This spec proposes to add a new ``queued_for_delete`` column in the"},{"line_number":69,"context_line":"``nova_api.instance_mappings`` table schema as discussed in the Dublin PTG[2]."},{"line_number":70,"context_line":"This column would by of type Boolean which by default will be False and upon"},{"line_number":71,"context_line":"the deletion (soft) of the respective instance, will be set to True. The"},{"line_number":72,"context_line":"corresponding ``queued_for_delete`` field will be added in the InstanceMapping"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_4f3cfe2f","line":69,"range":{"start_line":69,"start_character":74,"end_line":69,"end_character":77},"updated":"2018-06-04 23:33:54.000000000","message":"[2]_","commit_id":"2fdcbcd040092824d70e19e7a49fe37e7715c283"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"36e3d81cd3726ae5ce777f83103b9abfb816bc4c","unresolved":false,"context_lines":[{"line_number":66,"context_line":"API DB so that the living instances can be distinguished from the deleted ones."},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"This spec proposes to add a new ``queued_for_delete`` column in the"},{"line_number":69,"context_line":"``nova_api.instance_mappings`` table schema as discussed in the Dublin PTG[2]."},{"line_number":70,"context_line":"This column would by of type Boolean which by default will be False and upon"},{"line_number":71,"context_line":"the deletion (soft) of the respective instance, will be set to True. The"},{"line_number":72,"context_line":"corresponding ``queued_for_delete`` field will be added in the InstanceMapping"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_a23b60c6","line":69,"range":{"start_line":69,"start_character":74,"end_line":69,"end_character":77},"in_reply_to":"5f7c97a3_4f3cfe2f","updated":"2018-06-05 10:13:54.000000000","message":"Done","commit_id":"2fdcbcd040092824d70e19e7a49fe37e7715c283"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"dcf720166571cdd9c37525581d059ecdbc81e841","unresolved":false,"context_lines":[{"line_number":67,"context_line":""},{"line_number":68,"context_line":"This spec proposes to add a new ``queued_for_delete`` column in the"},{"line_number":69,"context_line":"``nova_api.instance_mappings`` table schema as discussed in the Dublin PTG[2]."},{"line_number":70,"context_line":"This column would by of type Boolean which by default will be False and upon"},{"line_number":71,"context_line":"the deletion (soft) of the respective instance, will be set to True. The"},{"line_number":72,"context_line":"corresponding ``queued_for_delete`` field will be added in the InstanceMapping"},{"line_number":73,"context_line":"object."}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_2f43c2b1","line":70,"range":{"start_line":70,"start_character":37,"end_line":70,"end_character":67},"updated":"2018-06-04 23:33:54.000000000","message":"Would we add an online data migration to figure out which not-yet-purged instances are soft deleted (instance.deleted \u003d instance.id) and update their instance_mappings records accordingly? If so, we should mention that in \u0027other deployer impact\u0027 or \u0027upgrade impact\u0027.","commit_id":"2fdcbcd040092824d70e19e7a49fe37e7715c283"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"4172e46e4ba5c9bcefc7223d2715ff99a260c7d2","unresolved":false,"context_lines":[{"line_number":67,"context_line":""},{"line_number":68,"context_line":"This spec proposes to add a new ``queued_for_delete`` column in the"},{"line_number":69,"context_line":"``nova_api.instance_mappings`` table schema as discussed in the Dublin PTG[2]."},{"line_number":70,"context_line":"This column would by of type Boolean which by default will be False and upon"},{"line_number":71,"context_line":"the deletion (soft) of the respective instance, will be set to True. The"},{"line_number":72,"context_line":"corresponding ``queued_for_delete`` field will be added in the InstanceMapping"},{"line_number":73,"context_line":"object."}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_e276330d","line":70,"range":{"start_line":70,"start_character":37,"end_line":70,"end_character":67},"in_reply_to":"5f7c97a3_0299f4ce","updated":"2018-06-05 13:39:23.000000000","message":"Hmm, good point. I was thinking the online data migration would be like this:\n\n* iterate over cells looking for deleted instances\n* for each deleted instance, update it\u0027s instance mapping record to set queued_for_delete\u003dTrue\n\nIf a cell is down while iterating the cells in the online data migration, we won\u0027t know which instances in that cell are deleted, so we can\u0027t really do anything about the queued_for_delete in that case.\n\nBut I think in the scenario that the cells are not down, we should still make sure the instance mappings have the correct queued_for_delete if we can determine that.","commit_id":"2fdcbcd040092824d70e19e7a49fe37e7715c283"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"36e3d81cd3726ae5ce777f83103b9abfb816bc4c","unresolved":false,"context_lines":[{"line_number":67,"context_line":""},{"line_number":68,"context_line":"This spec proposes to add a new ``queued_for_delete`` column in the"},{"line_number":69,"context_line":"``nova_api.instance_mappings`` table schema as discussed in the Dublin PTG[2]."},{"line_number":70,"context_line":"This column would by of type Boolean which by default will be False and upon"},{"line_number":71,"context_line":"the deletion (soft) of the respective instance, will be set to True. The"},{"line_number":72,"context_line":"corresponding ``queued_for_delete`` field will be added in the InstanceMapping"},{"line_number":73,"context_line":"object."}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_0299f4ce","line":70,"range":{"start_line":70,"start_character":37,"end_line":70,"end_character":67},"in_reply_to":"5f7c97a3_2f43c2b1","updated":"2018-06-05 10:13:54.000000000","message":"I would also prefer an online migration, as opposed to updating this info in the instance_mapping object (this is what Dan suggested) like we did for service UUIDs because it gets ironical in the sense of if a cell is down, I cannot reach it from inside the instance_mapping object. I will put it as a migration tool and see what Dan says.","commit_id":"2fdcbcd040092824d70e19e7a49fe37e7715c283"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"c20f0f5e977d9bcdd469fd0534528de2323bc3ff","unresolved":false,"context_lines":[{"line_number":68,"context_line":"This spec proposes to add a new ``queued_for_delete`` column in the"},{"line_number":69,"context_line":"``nova_api.instance_mappings`` table schema as discussed in the Dublin PTG[2]."},{"line_number":70,"context_line":"This column would by of type Boolean which by default will be False and upon"},{"line_number":71,"context_line":"the deletion (soft) of the respective instance, will be set to True. The"},{"line_number":72,"context_line":"corresponding ``queued_for_delete`` field will be added in the InstanceMapping"},{"line_number":73,"context_line":"object."},{"line_number":74,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_950e778b","line":71,"range":{"start_line":71,"start_character":4,"end_line":71,"end_character":19},"updated":"2018-05-08 08:34:28.000000000","message":"also need to think of the scenario when reclaim_instance_interval is set, and to update the flag in the restore path of the instance.","commit_id":"2fdcbcd040092824d70e19e7a49fe37e7715c283"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"36e3d81cd3726ae5ce777f83103b9abfb816bc4c","unresolved":false,"context_lines":[{"line_number":68,"context_line":"This spec proposes to add a new ``queued_for_delete`` column in the"},{"line_number":69,"context_line":"``nova_api.instance_mappings`` table schema as discussed in the Dublin PTG[2]."},{"line_number":70,"context_line":"This column would by of type Boolean which by default will be False and upon"},{"line_number":71,"context_line":"the deletion (soft) of the respective instance, will be set to True. The"},{"line_number":72,"context_line":"corresponding ``queued_for_delete`` field will be added in the InstanceMapping"},{"line_number":73,"context_line":"object."},{"line_number":74,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_4257ec27","line":71,"range":{"start_line":71,"start_character":4,"end_line":71,"end_character":19},"in_reply_to":"5f7c97a3_0f74c6fd","updated":"2018-06-05 10:13:54.000000000","message":"\u003e Well, depends. Today we still list SOFT_DELETED instances as normal\n \u003e instances, they aren\u0027t gone from the normal nova list output until\n \u003e the instances are actually (hard) deleted in the nova-compute\n \u003e service once the reclaim interval expires.\n\nUmm, I think its the other way around. SOFT_DELETED instances are treated as deleted instances until they are restored and if they are not restored before reclaim_instance_interval they are deleted.\n\n \u003e \n \u003e So I\u0027d think we\u0027d continue to list queued_for_delete SOFT_DELETED\n \u003e instances.\n\nno, we don\u0027t, we treat them like deleted instances so we will have to set queued_for_delete to False during SOFT_DELETE.\n\n \u003e \n \u003e We could, on the restore action:\n \u003e \n \u003e https://developer.openstack.org/api-ref/compute/#restore-soft-deleted-instance-restore-action\n \u003e \n \u003e Simply change the instance mapping queued_for_delete value to\n \u003e False.\n\nyes, makes sense.\n\n \u003e \n \u003e I\u0027m wondering, are the semantics of queued_for_delete really\n \u003e queued_for_purge? The problem I\u0027m wondering about is, if the API is\n \u003e configured for soft deletes, if we don\u0027t set queued_for_delete in\n \u003e the instance mappings record, we can\u0027t do it later in the compute\n \u003e service because the compute service can\u0027t reach the API DB to make\n \u003e that change. So I guess we have to *always* set queued_for_delete\n \u003e regardless of how the API is configured to do a delete (immediate\n \u003e or soft + reclaim), and then we might need to take SOFT_DELETED /\n \u003e queued_for_delete\u003dTrue instances into account when listing\n \u003e instances if a cell is down? \n\nexactly!\n\n \u003e But we won\u0027t know the VM status since\n \u003e the cell is down...\n \u003e \n \u003e We could just punt and say, if it was queued for delete, regardless\n \u003e of soft, we just won\u0027t list those\n\nthis is not a problem since by default SOFT_DELETED instances are not listed.\n\n \u003e - the user can\u0027t restore it in\n \u003e that case, but they likely can\u0027t restore the instance anyway since\n \u003e the cell is down.\n\nright, but if we do nova list --deleted the SOFT_DELETED instance will appear.\n\n \u003e \n \u003e Another idea is queued_for_delete could be an enum, where 0 means\n \u003e it\u0027s not queued for delete, 1 means it\u0027s queued for hard\n \u003e (immediate) delete, and 2 means it\u0027s queued for soft (reclaim)\n \u003e delete. That might be overly complicated for what we need though -\n \u003e punting might just be easiest. I don\u0027t really know how much the\n \u003e SOFT_DELETED stuff is used in the wild.\n\nyea, as far as I know, currently in nova from listing instances point of view SOFT_DELETED and DELETED states are treated in the same manner, so it should be fine.","commit_id":"2fdcbcd040092824d70e19e7a49fe37e7715c283"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"4172e46e4ba5c9bcefc7223d2715ff99a260c7d2","unresolved":false,"context_lines":[{"line_number":68,"context_line":"This spec proposes to add a new ``queued_for_delete`` column in the"},{"line_number":69,"context_line":"``nova_api.instance_mappings`` table schema as discussed in the Dublin PTG[2]."},{"line_number":70,"context_line":"This column would by of type Boolean which by default will be False and upon"},{"line_number":71,"context_line":"the deletion (soft) of the respective instance, will be set to True. The"},{"line_number":72,"context_line":"corresponding ``queued_for_delete`` field will be added in the InstanceMapping"},{"line_number":73,"context_line":"object."},{"line_number":74,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_e2edd38e","line":71,"range":{"start_line":71,"start_character":4,"end_line":71,"end_character":19},"in_reply_to":"5f7c97a3_4257ec27","updated":"2018-06-05 13:39:23.000000000","message":"\u003e yea, as far as I know, currently in nova from listing instances point of view SOFT_DELETED and DELETED states are treated in the same manner, so it should be fine.\n\nI\u0027m not sure about that - instance_get_all_by_filters_sort in the DB API code handles deleted and soft_deleted filters separately. I\u0027d need to audit the API code to see what it\u0027s doing, or just get a devstack setup that does the SOFT_DELETED scenario and see what happens.","commit_id":"2fdcbcd040092824d70e19e7a49fe37e7715c283"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"dcf720166571cdd9c37525581d059ecdbc81e841","unresolved":false,"context_lines":[{"line_number":68,"context_line":"This spec proposes to add a new ``queued_for_delete`` column in the"},{"line_number":69,"context_line":"``nova_api.instance_mappings`` table schema as discussed in the Dublin PTG[2]."},{"line_number":70,"context_line":"This column would by of type Boolean which by default will be False and upon"},{"line_number":71,"context_line":"the deletion (soft) of the respective instance, will be set to True. The"},{"line_number":72,"context_line":"corresponding ``queued_for_delete`` field will be added in the InstanceMapping"},{"line_number":73,"context_line":"object."},{"line_number":74,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_0f74c6fd","line":71,"range":{"start_line":71,"start_character":4,"end_line":71,"end_character":19},"in_reply_to":"5f7c97a3_950e778b","updated":"2018-06-04 23:33:54.000000000","message":"Well, depends. Today we still list SOFT_DELETED instances as normal instances, they aren\u0027t gone from the normal nova list output until the instances are actually (hard) deleted in the nova-compute service once the reclaim interval expires.\n\nSo I\u0027d think we\u0027d continue to list queued_for_delete SOFT_DELETED instances.\n\nWe could, on the restore action:\n\nhttps://developer.openstack.org/api-ref/compute/#restore-soft-deleted-instance-restore-action\n\nSimply change the instance mapping queued_for_delete value to False.\n\nI\u0027m wondering, are the semantics of queued_for_delete really queued_for_purge? The problem I\u0027m wondering about is, if the API is configured for soft deletes, if we don\u0027t set queued_for_delete in the instance mappings record, we can\u0027t do it later in the compute service because the compute service can\u0027t reach the API DB to make that change. So I guess we have to *always* set queued_for_delete regardless of how the API is configured to do a delete (immediate or soft + reclaim), and then we might need to take SOFT_DELETED / queued_for_delete\u003dTrue instances into account when listing instances if a cell is down? But we won\u0027t know the VM status since the cell is down...\n\nWe could just punt and say, if it was queued for delete, regardless of soft, we just won\u0027t list those - the user can\u0027t restore it in that case, but they likely can\u0027t restore the instance anyway since the cell is down.\n\nAnother idea is queued_for_delete could be an enum, where 0 means it\u0027s not queued for delete, 1 means it\u0027s queued for hard (immediate) delete, and 2 means it\u0027s queued for soft (reclaim) delete. That might be overly complicated for what we need though - punting might just be easiest. I don\u0027t really know how much the SOFT_DELETED stuff is used in the wild.","commit_id":"2fdcbcd040092824d70e19e7a49fe37e7715c283"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"0fc2d0522a7042217f63e6664f2012191b41a0ef","unresolved":false,"context_lines":[{"line_number":68,"context_line":"This spec proposes to add a new ``queued_for_delete`` column in the"},{"line_number":69,"context_line":"``nova_api.instance_mappings`` table schema as discussed in the Dublin PTG[2]."},{"line_number":70,"context_line":"This column would by of type Boolean which by default will be False and upon"},{"line_number":71,"context_line":"the deletion (soft) of the respective instance, will be set to True. The"},{"line_number":72,"context_line":"corresponding ``queued_for_delete`` field will be added in the InstanceMapping"},{"line_number":73,"context_line":"object."},{"line_number":74,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_8508a92d","line":71,"range":{"start_line":71,"start_character":4,"end_line":71,"end_character":19},"in_reply_to":"5f7c97a3_e2edd38e","updated":"2018-06-05 14:41:13.000000000","message":"I did the SOFT_DELETED setup in my devstack and they do not get listed with normal instances. They get listed when doing nova list --deleted.","commit_id":"2fdcbcd040092824d70e19e7a49fe37e7715c283"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"dcf720166571cdd9c37525581d059ecdbc81e841","unresolved":false,"context_lines":[{"line_number":87,"context_line":""},{"line_number":88,"context_line":"A nova_api DB schema change will be required for adding the"},{"line_number":89,"context_line":"``queued_for_delete`` column of type Boolean to the"},{"line_number":90,"context_line":"``nova_api.instance_mappings`` table. An api_migration will be required. This"},{"line_number":91,"context_line":"column will be set to False by default."},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"Also, the ``InstanceMapping`` object will have a new field called"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_0f4da6c3","line":90,"range":{"start_line":90,"start_character":41,"end_line":90,"end_character":54},"updated":"2018-06-04 23:33:54.000000000","message":"nit: this makes \"api_migration\" sound like a codified thing, which it\u0027s not. I think you can just drop this sentence. What you mean is operators will have to run \"nova-manage api_db sync\" which is implied with any data model schema change to the API DB.","commit_id":"2fdcbcd040092824d70e19e7a49fe37e7715c283"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"36e3d81cd3726ae5ce777f83103b9abfb816bc4c","unresolved":false,"context_lines":[{"line_number":87,"context_line":""},{"line_number":88,"context_line":"A nova_api DB schema change will be required for adding the"},{"line_number":89,"context_line":"``queued_for_delete`` column of type Boolean to the"},{"line_number":90,"context_line":"``nova_api.instance_mappings`` table. An api_migration will be required. This"},{"line_number":91,"context_line":"column will be set to False by default."},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"Also, the ``InstanceMapping`` object will have a new field called"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_8222e4b9","line":90,"range":{"start_line":90,"start_character":41,"end_line":90,"end_character":54},"in_reply_to":"5f7c97a3_0f4da6c3","updated":"2018-06-05 10:13:54.000000000","message":"Done","commit_id":"2fdcbcd040092824d70e19e7a49fe37e7715c283"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"dcf720166571cdd9c37525581d059ecdbc81e841","unresolved":false,"context_lines":[{"line_number":96,"context_line":"REST API impact"},{"line_number":97,"context_line":"---------------"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"None."},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"Security impact"},{"line_number":102,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_efc94a25","line":99,"updated":"2018-06-04 23:33:54.000000000","message":"Well, clearly there is, this is kind of all about the REST API. I guess the point is there are no schema changes or new APIs, just how we continue to try and serve requests on those existing APIs when a cell is down. There are no new microversions in other words. You could mention something like that here, but it\u0027s not a huge deal.","commit_id":"2fdcbcd040092824d70e19e7a49fe37e7715c283"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"4172e46e4ba5c9bcefc7223d2715ff99a260c7d2","unresolved":false,"context_lines":[{"line_number":96,"context_line":"REST API impact"},{"line_number":97,"context_line":"---------------"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"None."},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"Security impact"},{"line_number":102,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_a29cbb0e","line":99,"in_reply_to":"5f7c97a3_bc0b897b","updated":"2018-06-05 13:39:23.000000000","message":"\u003e I am honestly tempted to have a new microversion where we change the API so we have a specific \"partial\" response format added for newer API version.\n\nI\u0027m leaning toward this as well to not try and muddy the waters with the \u0027normal\u0027 instance list scenario.","commit_id":"2fdcbcd040092824d70e19e7a49fe37e7715c283"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"36e3d81cd3726ae5ce777f83103b9abfb816bc4c","unresolved":false,"context_lines":[{"line_number":96,"context_line":"REST API impact"},{"line_number":97,"context_line":"---------------"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"None."},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"Security impact"},{"line_number":102,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_9f6ebf94","line":99,"in_reply_to":"5f7c97a3_bc0b897b","updated":"2018-06-05 10:13:54.000000000","message":"yep, I will try to write something here, what it would look like as of now is something like this for nova list:\n\n +--------------------------------------+---------+---------+------------+-------------+----------------------------------+\n| ID                                   | Name    | Status  | Task State | Power State | Networks                         |\n+--------------------------------------+---------+---------+------------+-------------+----------------------------------+\n| 6297837b-a380-40e8-9605-3117959b7d42 | UNKNOWN | UNKNOWN | -          |             |                                  |\n| 65ab89fa-34c9-4a47-8dca-daeda32d3f20 | UNKNOWN | UNKNOWN | -          |             |                                  |\n| 678e1517-0cce-4cfe-a2f7-d0fe040be22d | UNKNOWN | UNKNOWN | -          |             |                                  |\n| 788dae50-72eb-42fc-817c-975f09312b76 | UNKNOWN | UNKNOWN | -          |             |                                  |\n| de6be9f4-60c2-498c-8396-95dd2272c492 | test10  | ACTIVE  | -          | Running     | public\u003d2001:db8::17, 172.24.4.10 |\n| 47690281-e31f-4367-ac3f-5182dbe667b0 | test11  | ACTIVE  | -          | Running     | public\u003d2001:db8::12, 172.24.4.23 |\n| e66f625d-7e10-43dd-a346-4ac3c75ad1a3 | test5   | ACTIVE  | -          | Running     | public\u003d2001:db8::13, 172.24.4.18 |\n| d1b9ddf3-da0f-468b-bb86-6a9dfdfaee14 | test8   | ACTIVE  | -          | Running     | public\u003d2001:db8::3, 172.24.4.14  |\n+--------------------------------------+---------+---------+------------+-------------+----------------------------------+","commit_id":"2fdcbcd040092824d70e19e7a49fe37e7715c283"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"00a42513d891211baad72b1dcbd81782dcd9df84","unresolved":false,"context_lines":[{"line_number":96,"context_line":"REST API impact"},{"line_number":97,"context_line":"---------------"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"None."},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"Security impact"},{"line_number":102,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_bc0b897b","line":99,"in_reply_to":"5f7c97a3_efc94a25","updated":"2018-06-05 08:43:43.000000000","message":"I would love to see an example of a server response when a cell is down.\n\nI am honestly tempted to have a new microversion where we change the API so we have a specific \"partial\" response format added for newer API version.\n\nEither way, we still need to define what happens with existing API code (rather than 500).","commit_id":"2fdcbcd040092824d70e19e7a49fe37e7715c283"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"dcf720166571cdd9c37525581d059ecdbc81e841","unresolved":false,"context_lines":[{"line_number":106,"context_line":"Notifications impact"},{"line_number":107,"context_line":"--------------------"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"None."},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"Other end user impact"},{"line_number":112,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_afd352d5","line":109,"updated":"2018-06-04 23:33:54.000000000","message":"You could ask gibi but I don\u0027t think we have any kind of periodic notifications that depend on listing instances in the controller services. We have the instance.exists notification but that exists only in the compute service, which is in a cell, so shouldn\u0027t have any issues here.","commit_id":"2fdcbcd040092824d70e19e7a49fe37e7715c283"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"36e3d81cd3726ae5ce777f83103b9abfb816bc4c","unresolved":false,"context_lines":[{"line_number":106,"context_line":"Notifications impact"},{"line_number":107,"context_line":"--------------------"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"None."},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"Other end user impact"},{"line_number":112,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_221d1073","line":109,"in_reply_to":"5f7c97a3_02e7b448","updated":"2018-06-05 10:13:54.000000000","message":"Thanks for confirming this.","commit_id":"2fdcbcd040092824d70e19e7a49fe37e7715c283"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2577ea895182d9f05b031d626ec02b5fec2771e2","unresolved":false,"context_lines":[{"line_number":106,"context_line":"Notifications impact"},{"line_number":107,"context_line":"--------------------"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"None."},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"Other end user impact"},{"line_number":112,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_02e7b448","line":109,"in_reply_to":"5f7c97a3_afd352d5","updated":"2018-06-05 09:31:27.000000000","message":"@Matt: I agree with your observation. The only periodic notification is instance.exists but that is emitted from the compute/manager. So I don\u0027t foresee any notification impact.","commit_id":"2fdcbcd040092824d70e19e7a49fe37e7715c283"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"dcf720166571cdd9c37525581d059ecdbc81e841","unresolved":false,"context_lines":[{"line_number":111,"context_line":"Other end user impact"},{"line_number":112,"context_line":"---------------------"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"When a cell DB cannot be connected, ``nova list`` and ``nova service-list``"},{"line_number":115,"context_line":"will work with the records from the down cell not having all the information."},{"line_number":116,"context_line":"``nova boot`` will work if that project does not have any instances in the"},{"line_number":117,"context_line":"down cell."}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_cfed6e8f","line":114,"updated":"2018-06-04 23:33:54.000000000","message":"What about \u0027nova show\u0027? See questions above about filling out that response with the request spec as an option. Maybe that\u0027s not very useful, and/or is something we could do in a later iteration (stein?) if the need arises.","commit_id":"2fdcbcd040092824d70e19e7a49fe37e7715c283"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"4172e46e4ba5c9bcefc7223d2715ff99a260c7d2","unresolved":false,"context_lines":[{"line_number":111,"context_line":"Other end user impact"},{"line_number":112,"context_line":"---------------------"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"When a cell DB cannot be connected, ``nova list`` and ``nova service-list``"},{"line_number":115,"context_line":"will work with the records from the down cell not having all the information."},{"line_number":116,"context_line":"``nova boot`` will work if that project does not have any instances in the"},{"line_number":117,"context_line":"down cell."}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_856e6994","line":114,"in_reply_to":"5f7c97a3_2d798192","updated":"2018-06-05 13:39:23.000000000","message":"I\u0027m not sure why nova show would be any different than nova list and what you\u0027re talking about doing above wrt the request spec to fill in the information about the instance. I\u0027d argue that list should be as minimal as possible and then if the user wants details about a specific instance, they do a nova show on it and we use the request spec to get the details for that instance if the cell it\u0027s in is down.","commit_id":"2fdcbcd040092824d70e19e7a49fe37e7715c283"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"36e3d81cd3726ae5ce777f83103b9abfb816bc4c","unresolved":false,"context_lines":[{"line_number":111,"context_line":"Other end user impact"},{"line_number":112,"context_line":"---------------------"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"When a cell DB cannot be connected, ``nova list`` and ``nova service-list``"},{"line_number":115,"context_line":"will work with the records from the down cell not having all the information."},{"line_number":116,"context_line":"``nova boot`` will work if that project does not have any instances in the"},{"line_number":117,"context_line":"down cell."}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_2d798192","line":114,"in_reply_to":"5f7c97a3_cfed6e8f","updated":"2018-06-05 10:13:54.000000000","message":"the problem with nova show is it fails right at the point of instance query using the UUID since the cell is down. So yea since nova show uses a lot of info from the nova.instances tables object, it probably needs more thought. Meaning nova show would work for instances in the cells that are up and when doing nova list, for those records that have UNKNOWN/incomplete values I guess its safe to put an API error for nova show ? Needs more analysis.","commit_id":"2fdcbcd040092824d70e19e7a49fe37e7715c283"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"dcf720166571cdd9c37525581d059ecdbc81e841","unresolved":false,"context_lines":[{"line_number":158,"context_line":""},{"line_number":159,"context_line":"#. Add a new column ``queued_for_delete`` to nova_api.instance_mappings table."},{"line_number":160,"context_line":"#. Add a new field ``queued_for_delete`` to InstanceMapping object."},{"line_number":161,"context_line":"#. Handle ``nova list`` gracefully upon receiving a timeout from a cell in [3]."},{"line_number":162,"context_line":"#. Handle ``nova service-list`` gracefully on receiving a timeout from a cell."},{"line_number":163,"context_line":"#. Handle ``nova boot`` during quota calculation in [4] when the result is a"},{"line_number":164,"context_line":"   did_not_respond_sentinel or raised_exception_sentinel. Implement the extra"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_eff2aa6f","line":161,"range":{"start_line":161,"start_character":75,"end_line":161,"end_character":78},"updated":"2018-06-04 23:33:54.000000000","message":"[3]_","commit_id":"2fdcbcd040092824d70e19e7a49fe37e7715c283"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"36e3d81cd3726ae5ce777f83103b9abfb816bc4c","unresolved":false,"context_lines":[{"line_number":158,"context_line":""},{"line_number":159,"context_line":"#. Add a new column ``queued_for_delete`` to nova_api.instance_mappings table."},{"line_number":160,"context_line":"#. Add a new field ``queued_for_delete`` to InstanceMapping object."},{"line_number":161,"context_line":"#. Handle ``nova list`` gracefully upon receiving a timeout from a cell in [3]."},{"line_number":162,"context_line":"#. Handle ``nova service-list`` gracefully on receiving a timeout from a cell."},{"line_number":163,"context_line":"#. Handle ``nova boot`` during quota calculation in [4] when the result is a"},{"line_number":164,"context_line":"   did_not_respond_sentinel or raised_exception_sentinel. Implement the extra"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_8dac55ef","line":161,"range":{"start_line":161,"start_character":75,"end_line":161,"end_character":78},"in_reply_to":"5f7c97a3_eff2aa6f","updated":"2018-06-05 10:13:54.000000000","message":"Done","commit_id":"2fdcbcd040092824d70e19e7a49fe37e7715c283"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"dcf720166571cdd9c37525581d059ecdbc81e841","unresolved":false,"context_lines":[{"line_number":160,"context_line":"#. Add a new field ``queued_for_delete`` to InstanceMapping object."},{"line_number":161,"context_line":"#. Handle ``nova list`` gracefully upon receiving a timeout from a cell in [3]."},{"line_number":162,"context_line":"#. Handle ``nova service-list`` gracefully on receiving a timeout from a cell."},{"line_number":163,"context_line":"#. Handle ``nova boot`` during quota calculation in [4] when the result is a"},{"line_number":164,"context_line":"   did_not_respond_sentinel or raised_exception_sentinel. Implement the extra"},{"line_number":165,"context_line":"   check into the instance_mapping table to see if the requesting project has"},{"line_number":166,"context_line":"   any living instances in the down cell and block the request accordingly."}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_afecb28f","line":163,"range":{"start_line":163,"start_character":52,"end_line":163,"end_character":55},"updated":"2018-06-04 23:33:54.000000000","message":"[4]_","commit_id":"2fdcbcd040092824d70e19e7a49fe37e7715c283"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"36e3d81cd3726ae5ce777f83103b9abfb816bc4c","unresolved":false,"context_lines":[{"line_number":160,"context_line":"#. Add a new field ``queued_for_delete`` to InstanceMapping object."},{"line_number":161,"context_line":"#. Handle ``nova list`` gracefully upon receiving a timeout from a cell in [3]."},{"line_number":162,"context_line":"#. Handle ``nova service-list`` gracefully on receiving a timeout from a cell."},{"line_number":163,"context_line":"#. Handle ``nova boot`` during quota calculation in [4] when the result is a"},{"line_number":164,"context_line":"   did_not_respond_sentinel or raised_exception_sentinel. Implement the extra"},{"line_number":165,"context_line":"   check into the instance_mapping table to see if the requesting project has"},{"line_number":166,"context_line":"   any living instances in the down cell and block the request accordingly."}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_0d9925cf","line":163,"range":{"start_line":163,"start_character":52,"end_line":163,"end_character":55},"in_reply_to":"5f7c97a3_afecb28f","updated":"2018-06-05 10:13:54.000000000","message":"Done","commit_id":"2fdcbcd040092824d70e19e7a49fe37e7715c283"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"dcf720166571cdd9c37525581d059ecdbc81e841","unresolved":false,"context_lines":[{"line_number":180,"context_line":"Documentation Impact"},{"line_number":181,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"Update description of ``nova list`` and ``nova service-list`` in nova.rst to"},{"line_number":184,"context_line":"include the meaning of UNKNOWN records."},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"References"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_8f9c560f","line":183,"range":{"start_line":183,"start_character":65,"end_line":183,"end_character":73},"updated":"2018-06-04 23:33:54.000000000","message":"I\u0027m not sure what this is. I think you can just generically say the \"Compute API reference\" which is this:\n\nhttps://developer.openstack.org/api-ref/compute/\n\nGoing into more detail about responses when a cell is down would better fit into the compute API server concepts guide:\n\nhttps://developer.openstack.org/api-guide/compute/server_concepts.html","commit_id":"2fdcbcd040092824d70e19e7a49fe37e7715c283"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"36e3d81cd3726ae5ce777f83103b9abfb816bc4c","unresolved":false,"context_lines":[{"line_number":180,"context_line":"Documentation Impact"},{"line_number":181,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"Update description of ``nova list`` and ``nova service-list`` in nova.rst to"},{"line_number":184,"context_line":"include the meaning of UNKNOWN records."},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"References"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_2d874164","line":183,"range":{"start_line":183,"start_character":65,"end_line":183,"end_character":73},"in_reply_to":"5f7c97a3_8f9c560f","updated":"2018-06-05 10:13:54.000000000","message":"Done","commit_id":"2fdcbcd040092824d70e19e7a49fe37e7715c283"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"dcf720166571cdd9c37525581d059ecdbc81e841","unresolved":false,"context_lines":[{"line_number":186,"context_line":"References"},{"line_number":187,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"#. Propose counting quota usage from placement: https://review.openstack.org/#/c/509042/"},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"#. Cells summary in the Dublin PTG discussion: http://lists.openstack.org/pipermail/openstack-dev/2018-March/128304.html"},{"line_number":192,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_2f998278","line":189,"range":{"start_line":189,"start_character":0,"end_line":189,"end_character":2},"updated":"2018-06-04 23:33:54.000000000","message":"See: http://docutils.sourceforge.net/docs/user/rst/quickref.html#footnotes\n\nThis would just be:\n\n.. [1] Propose counting....\n\nAnd so on.","commit_id":"2fdcbcd040092824d70e19e7a49fe37e7715c283"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"36e3d81cd3726ae5ce777f83103b9abfb816bc4c","unresolved":false,"context_lines":[{"line_number":186,"context_line":"References"},{"line_number":187,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"#. Propose counting quota usage from placement: https://review.openstack.org/#/c/509042/"},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"#. Cells summary in the Dublin PTG discussion: http://lists.openstack.org/pipermail/openstack-dev/2018-March/128304.html"},{"line_number":192,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_8d95358b","line":189,"range":{"start_line":189,"start_character":0,"end_line":189,"end_character":2},"in_reply_to":"5f7c97a3_2f998278","updated":"2018-06-05 10:13:54.000000000","message":"Done","commit_id":"2fdcbcd040092824d70e19e7a49fe37e7715c283"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"dcf720166571cdd9c37525581d059ecdbc81e841","unresolved":false,"context_lines":[{"line_number":190,"context_line":""},{"line_number":191,"context_line":"#. Cells summary in the Dublin PTG discussion: http://lists.openstack.org/pipermail/openstack-dev/2018-March/128304.html"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"#. FIXME portion in nova list code: https://github.com/openstack/nova/blob/master/nova/compute/multi_cell_list.py#L244"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"#. Quota calculation code: https://github.com/openstack/nova/blob/master/nova/quota.py#L1331"},{"line_number":196,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_6ffe9a39","line":193,"range":{"start_line":193,"start_character":75,"end_line":193,"end_character":81},"updated":"2018-06-04 23:33:54.000000000","message":"here and below, use a git hash or tag, otherwise these links will get outdated really fast","commit_id":"2fdcbcd040092824d70e19e7a49fe37e7715c283"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"36e3d81cd3726ae5ce777f83103b9abfb816bc4c","unresolved":false,"context_lines":[{"line_number":190,"context_line":""},{"line_number":191,"context_line":"#. Cells summary in the Dublin PTG discussion: http://lists.openstack.org/pipermail/openstack-dev/2018-March/128304.html"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"#. FIXME portion in nova list code: https://github.com/openstack/nova/blob/master/nova/compute/multi_cell_list.py#L244"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"#. Quota calculation code: https://github.com/openstack/nova/blob/master/nova/quota.py#L1331"},{"line_number":196,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_2dec2128","line":193,"range":{"start_line":193,"start_character":75,"end_line":193,"end_character":81},"in_reply_to":"5f7c97a3_6ffe9a39","updated":"2018-06-05 10:13:54.000000000","message":"ack, sorry for giving a hard time with the references syntax.","commit_id":"2fdcbcd040092824d70e19e7a49fe37e7715c283"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9e2e54c4b3de8b7cf0ff23f09998285620a2919c","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"   #. The user has no instances in the down cell: Expected behaviour would be"},{"line_number":40,"context_line":"      for everything to work as normal. This has been fixed through [#]_."},{"line_number":41,"context_line":"   #. The user has instances in the down cell: This needs to be gracefully"},{"line_number":42,"context_line":"      handled. This will be fixed through this spec by creating a minimalistic"},{"line_number":43,"context_line":"      construct."},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"#. ``nova service-list`` should work even if a cell goes down. The solution can"},{"line_number":46,"context_line":"   be split into two stages:"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f7c97a3_ca48e52f","line":43,"range":{"start_line":41,"start_character":6,"end_line":43,"end_character":16},"updated":"2018-06-05 19:17:07.000000000","message":"There are two parts to this that we need to handle:\n\n1. Fix the 500 so that we return what we can, but you don\u0027t get results from the down cell. That\u0027s a bug fix which can be backported.\n\n2. #1, but build on that such that if we can return a minimal construct of the instances in the down cell, do that, which is what this spec is mostly talking about.","commit_id":"18a4944becb0b738896559fe07f9738ef5b14d9a"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"c8b1fe1e7be4a2529b2da051acf233e7e8a7e1b2","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"   #. The user has no instances in the down cell: Expected behaviour would be"},{"line_number":40,"context_line":"      for everything to work as normal. This has been fixed through [#]_."},{"line_number":41,"context_line":"   #. The user has instances in the down cell: This needs to be gracefully"},{"line_number":42,"context_line":"      handled. This will be fixed through this spec by creating a minimalistic"},{"line_number":43,"context_line":"      construct."},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"#. ``nova service-list`` should work even if a cell goes down. The solution can"},{"line_number":46,"context_line":"   be split into two stages:"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f7c97a3_49936c5d","line":43,"range":{"start_line":41,"start_character":6,"end_line":43,"end_character":16},"in_reply_to":"5f7c97a3_ca48e52f","updated":"2018-06-07 10:30:16.000000000","message":"Done","commit_id":"18a4944becb0b738896559fe07f9738ef5b14d9a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1b7d3d25eed86f8855383bcdbe9abed9284a6b31","unresolved":false,"context_lines":[{"line_number":54,"context_line":"   down cell until an all-cell-iteration independent solution for quota"},{"line_number":55,"context_line":"   calculation is implemented [#]_."},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"Proposed change"},{"line_number":58,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"Listing of instances and services from the down cell will return a"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f7c97a3_87050817","line":57,"updated":"2018-06-05 18:55:20.000000000","message":"If we can do nova list with instances from a down cell, I think we can also do GET /servers/{id} (nova show) given we just lookup the instance from the mappings table and fill in the details using the request spec, like we would for list.","commit_id":"18a4944becb0b738896559fe07f9738ef5b14d9a"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"c8b1fe1e7be4a2529b2da051acf233e7e8a7e1b2","unresolved":false,"context_lines":[{"line_number":54,"context_line":"   down cell until an all-cell-iteration independent solution for quota"},{"line_number":55,"context_line":"   calculation is implemented [#]_."},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"Proposed change"},{"line_number":58,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"Listing of instances and services from the down cell will return a"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f7c97a3_e996f8ef","line":57,"in_reply_to":"5f7c97a3_87050817","updated":"2018-06-07 10:30:16.000000000","message":"agreed, Done","commit_id":"18a4944becb0b738896559fe07f9738ef5b14d9a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1b7d3d25eed86f8855383bcdbe9abed9284a6b31","unresolved":false,"context_lines":[{"line_number":63,"context_line":"listing commands to work in the following manner for those records which are"},{"line_number":64,"context_line":"from the down cell:"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"#. ``nova list`` should return a minimalistic construct from the available"},{"line_number":67,"context_line":"   information in the API DB which would include:"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"   #. instance_uuid and created_at from the instance_mapping table."}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f7c97a3_474a9083","line":66,"updated":"2018-06-05 18:55:20.000000000","message":"This doesn\u0027t mention anything about filtering as I mentioned before - if I\u0027m filtering instances, then we don\u0027t know what which of the minimalist instances from the API DB in the response are valid for the given filters. I tend to think that if we\u0027re applying filters, we simply have to ignore anything in a down cell since we don\u0027t know.","commit_id":"18a4944becb0b738896559fe07f9738ef5b14d9a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9e2e54c4b3de8b7cf0ff23f09998285620a2919c","unresolved":false,"context_lines":[{"line_number":63,"context_line":"listing commands to work in the following manner for those records which are"},{"line_number":64,"context_line":"from the down cell:"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"#. ``nova list`` should return a minimalistic construct from the available"},{"line_number":67,"context_line":"   information in the API DB which would include:"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"   #. instance_uuid and created_at from the instance_mapping table."}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f7c97a3_4ad1352f","line":66,"in_reply_to":"5f7c97a3_474a9083","updated":"2018-06-05 19:17:07.000000000","message":"Maybe you want to start a section called \"Edge cases\" where you can list some things we\u0027ve talked about in IRC, like:\n\n1. If the user is doing filtering, we don\u0027t include results from down cells because we don\u0027t know they\u0027d fit the filter. For example, if I\u0027m filtering by host, availability_zone or status, I won\u0027t actually know that information.\n\n2. If the user specifies a marker and we know that marker instance is in a down cell, we need to return a 503 since we know the instance exists, but we can\u0027t get to it.\n\n3. Paging: let\u0027s say I have three cells:\n\nA - up, marker is in this cell to start my paging\nB - down\nC - up\n\nWould I get some results from A, then page to C and return with a new marker from C?\n\nIf I\u0027m paging w/o filtering/sorting, then I think we skip B (per above) but if I\u0027m not filtering/sorting, then we can have the minimal instances from B in the page.","commit_id":"18a4944becb0b738896559fe07f9738ef5b14d9a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1b7d3d25eed86f8855383bcdbe9abed9284a6b31","unresolved":false,"context_lines":[{"line_number":69,"context_line":"   #. instance_uuid and created_at from the instance_mapping table."},{"line_number":70,"context_line":"   #. flavor and image from the request_spec table."},{"line_number":71,"context_line":"   #. power_state is set to NOSTATE."},{"line_number":72,"context_line":"   #. rest of the fields would be UNKNOWN."},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"   Another alternative would be to have a new API response change for"},{"line_number":75,"context_line":"   ``GET /servers`` to include the set of server uuids in the down cell."}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f7c97a3_076b38f1","line":72,"range":{"start_line":72,"start_character":34,"end_line":72,"end_character":41},"updated":"2018-06-05 18:55:20.000000000","message":"Again about the type on the other fields this doesn\u0027t necessarily map for things like integer, boolean, list and dict. Tempest response schema wouldn\u0027t allow it, but then again we won\u0027t be using Tempest for testing a down cell most likely.","commit_id":"18a4944becb0b738896559fe07f9738ef5b14d9a"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"c8b1fe1e7be4a2529b2da051acf233e7e8a7e1b2","unresolved":false,"context_lines":[{"line_number":69,"context_line":"   #. instance_uuid and created_at from the instance_mapping table."},{"line_number":70,"context_line":"   #. flavor and image from the request_spec table."},{"line_number":71,"context_line":"   #. power_state is set to NOSTATE."},{"line_number":72,"context_line":"   #. rest of the fields would be UNKNOWN."},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"   Another alternative would be to have a new API response change for"},{"line_number":75,"context_line":"   ``GET /servers`` to include the set of server uuids in the down cell."}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f7c97a3_7c5aa883","line":72,"range":{"start_line":72,"start_character":34,"end_line":72,"end_character":41},"in_reply_to":"5f7c97a3_076b38f1","updated":"2018-06-07 10:30:16.000000000","message":"\u003e Again about the type on the other fields this doesn\u0027t necessarily\n \u003e map for things like integer, boolean, list and dict. Tempest\n\ndone.\n\n \u003e response schema wouldn\u0027t allow it, but then again we won\u0027t be using\n \u003e Tempest for testing a down cell most likely.","commit_id":"18a4944becb0b738896559fe07f9738ef5b14d9a"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"121eef3406682a076a28cc4464659ef9cf3f6dc3","unresolved":false,"context_lines":[{"line_number":71,"context_line":"   #. power_state is set to NOSTATE."},{"line_number":72,"context_line":"   #. rest of the fields would be UNKNOWN."},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"   Another alternative would be to have a new API response change for"},{"line_number":75,"context_line":"   ``GET /servers`` to include the set of server uuids in the down cell."},{"line_number":76,"context_line":"   We could do a new microversion returning a specific partial construct"},{"line_number":77,"context_line":"   to handle a down cell."},{"line_number":78,"context_line":"#. ``nova service-list`` should return a minimalistic construct construct"},{"line_number":79,"context_line":"   from the available information in the API DB which would include:"},{"line_number":80,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f7c97a3_5b0b522a","line":77,"range":{"start_line":74,"start_character":3,"end_line":77,"end_character":25},"updated":"2018-06-05 15:10:04.000000000","message":"TODO: elaborate.","commit_id":"18a4944becb0b738896559fe07f9738ef5b14d9a"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"c8b1fe1e7be4a2529b2da051acf233e7e8a7e1b2","unresolved":false,"context_lines":[{"line_number":71,"context_line":"   #. power_state is set to NOSTATE."},{"line_number":72,"context_line":"   #. rest of the fields would be UNKNOWN."},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"   Another alternative would be to have a new API response change for"},{"line_number":75,"context_line":"   ``GET /servers`` to include the set of server uuids in the down cell."},{"line_number":76,"context_line":"   We could do a new microversion returning a specific partial construct"},{"line_number":77,"context_line":"   to handle a down cell."},{"line_number":78,"context_line":"#. ``nova service-list`` should return a minimalistic construct construct"},{"line_number":79,"context_line":"   from the available information in the API DB which would include:"},{"line_number":80,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f7c97a3_9c5d447b","line":77,"range":{"start_line":74,"start_character":3,"end_line":77,"end_character":25},"in_reply_to":"5f7c97a3_47613011","updated":"2018-06-07 10:30:16.000000000","message":"Done","commit_id":"18a4944becb0b738896559fe07f9738ef5b14d9a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1b7d3d25eed86f8855383bcdbe9abed9284a6b31","unresolved":false,"context_lines":[{"line_number":71,"context_line":"   #. power_state is set to NOSTATE."},{"line_number":72,"context_line":"   #. rest of the fields would be UNKNOWN."},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"   Another alternative would be to have a new API response change for"},{"line_number":75,"context_line":"   ``GET /servers`` to include the set of server uuids in the down cell."},{"line_number":76,"context_line":"   We could do a new microversion returning a specific partial construct"},{"line_number":77,"context_line":"   to handle a down cell."},{"line_number":78,"context_line":"#. ``nova service-list`` should return a minimalistic construct construct"},{"line_number":79,"context_line":"   from the available information in the API DB which would include:"},{"line_number":80,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f7c97a3_47613011","line":77,"range":{"start_line":74,"start_character":3,"end_line":77,"end_character":25},"in_reply_to":"5f7c97a3_5b0b522a","updated":"2018-06-05 18:55:20.000000000","message":"Put this into the alternatives section below.","commit_id":"18a4944becb0b738896559fe07f9738ef5b14d9a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1b7d3d25eed86f8855383bcdbe9abed9284a6b31","unresolved":false,"context_lines":[{"line_number":75,"context_line":"   ``GET /servers`` to include the set of server uuids in the down cell."},{"line_number":76,"context_line":"   We could do a new microversion returning a specific partial construct"},{"line_number":77,"context_line":"   to handle a down cell."},{"line_number":78,"context_line":"#. ``nova service-list`` should return a minimalistic construct construct"},{"line_number":79,"context_line":"   from the available information in the API DB which would include:"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"   #. host and binary from the host_mapping table for the compute services"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f7c97a3_674f8c92","line":78,"range":{"start_line":78,"start_character":54,"end_line":78,"end_character":73},"updated":"2018-06-05 18:55:20.000000000","message":"construct","commit_id":"18a4944becb0b738896559fe07f9738ef5b14d9a"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"c8b1fe1e7be4a2529b2da051acf233e7e8a7e1b2","unresolved":false,"context_lines":[{"line_number":75,"context_line":"   ``GET /servers`` to include the set of server uuids in the down cell."},{"line_number":76,"context_line":"   We could do a new microversion returning a specific partial construct"},{"line_number":77,"context_line":"   to handle a down cell."},{"line_number":78,"context_line":"#. ``nova service-list`` should return a minimalistic construct construct"},{"line_number":79,"context_line":"   from the available information in the API DB which would include:"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"   #. host and binary from the host_mapping table for the compute services"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f7c97a3_5c4facbd","line":78,"range":{"start_line":78,"start_character":54,"end_line":78,"end_character":73},"in_reply_to":"5f7c97a3_674f8c92","updated":"2018-06-07 10:30:16.000000000","message":"Done","commit_id":"18a4944becb0b738896559fe07f9738ef5b14d9a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1b7d3d25eed86f8855383bcdbe9abed9284a6b31","unresolved":false,"context_lines":[{"line_number":81,"context_line":"   #. host and binary from the host_mapping table for the compute services"},{"line_number":82,"context_line":"   #. rest of the fields would be UNKNOWN."},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"   Note that if cell0 goes down none of the level0 services would be listed."},{"line_number":85,"context_line":"#. ``nova boot`` should not succeed if the requesting project has living VMs in"},{"line_number":86,"context_line":"   the down cell. So if the scatter-gather utility returns a"},{"line_number":87,"context_line":"   did_not_respond_sentinel while calculating quotas, we have to go and check"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f7c97a3_c75d4049","line":84,"range":{"start_line":84,"start_character":44,"end_line":84,"end_character":50},"updated":"2018-06-05 18:55:20.000000000","message":"nit: let\u0027s say \u0027controller\u0027 services","commit_id":"18a4944becb0b738896559fe07f9738ef5b14d9a"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"c8b1fe1e7be4a2529b2da051acf233e7e8a7e1b2","unresolved":false,"context_lines":[{"line_number":81,"context_line":"   #. host and binary from the host_mapping table for the compute services"},{"line_number":82,"context_line":"   #. rest of the fields would be UNKNOWN."},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"   Note that if cell0 goes down none of the level0 services would be listed."},{"line_number":85,"context_line":"#. ``nova boot`` should not succeed if the requesting project has living VMs in"},{"line_number":86,"context_line":"   the down cell. So if the scatter-gather utility returns a"},{"line_number":87,"context_line":"   did_not_respond_sentinel while calculating quotas, we have to go and check"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f7c97a3_fc4d58c4","line":84,"range":{"start_line":84,"start_character":44,"end_line":84,"end_character":50},"in_reply_to":"5f7c97a3_c75d4049","updated":"2018-06-07 10:30:16.000000000","message":"Done","commit_id":"18a4944becb0b738896559fe07f9738ef5b14d9a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1b7d3d25eed86f8855383bcdbe9abed9284a6b31","unresolved":false,"context_lines":[{"line_number":98,"context_line":"the deletion of the respective instance, will be set to True. The corresponding"},{"line_number":99,"context_line":"``queued_for_delete`` field will be added in the InstanceMapping object."},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"Alternatives"},{"line_number":102,"context_line":"------------"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"An alternative to adding the new column in the instance_mappings table is to"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f7c97a3_4afdb506","line":101,"updated":"2018-06-05 18:55:20.000000000","message":"I guess you didn\u0027t like my Searchlight alternative for filling in missing instance details. :)","commit_id":"18a4944becb0b738896559fe07f9738ef5b14d9a"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"c8b1fe1e7be4a2529b2da051acf233e7e8a7e1b2","unresolved":false,"context_lines":[{"line_number":98,"context_line":"the deletion of the respective instance, will be set to True. The corresponding"},{"line_number":99,"context_line":"``queued_for_delete`` field will be added in the InstanceMapping object."},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"Alternatives"},{"line_number":102,"context_line":"------------"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"An alternative to adding the new column in the instance_mappings table is to"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f7c97a3_ff522ade","line":101,"in_reply_to":"5f7c97a3_4afdb506","updated":"2018-06-07 10:30:16.000000000","message":"oops, sorry I forgot to add it, tbh I never knew such a project existed until now, pretty cool though.","commit_id":"18a4944becb0b738896559fe07f9738ef5b14d9a"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"121eef3406682a076a28cc4464659ef9cf3f6dc3","unresolved":false,"context_lines":[{"line_number":120,"context_line":"``queued_for_delete``. An online data migration tool will be added to populate"},{"line_number":121,"context_line":"this field for existing instance_mappings."},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"REST API impact"},{"line_number":124,"context_line":"---------------"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"When a cell is down, we currently get a 500 and this spec aims at returning a"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f7c97a3_1b05da14","line":123,"updated":"2018-06-05 15:10:04.000000000","message":"TODO: update this in case we finalize on a new microversion.","commit_id":"18a4944becb0b738896559fe07f9738ef5b14d9a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1b7d3d25eed86f8855383bcdbe9abed9284a6b31","unresolved":false,"context_lines":[{"line_number":137,"context_line":""},{"line_number":138,"context_line":"None."},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"Other end user impact"},{"line_number":141,"context_line":"---------------------"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"When a cell DB cannot be connected, ``nova list`` and ``nova service-list``"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f7c97a3_0a201d9b","line":140,"updated":"2018-06-05 18:55:20.000000000","message":"What happens with paging - I\u0027m assuming paging is just out the window if you\u0027re listing across cells and at least one is down. Or, like I\u0027ve proposed with filters, would we ignore downed cells if we\u0027re paging?","commit_id":"18a4944becb0b738896559fe07f9738ef5b14d9a"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"c8b1fe1e7be4a2529b2da051acf233e7e8a7e1b2","unresolved":false,"context_lines":[{"line_number":137,"context_line":""},{"line_number":138,"context_line":"None."},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"Other end user impact"},{"line_number":141,"context_line":"---------------------"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"When a cell DB cannot be connected, ``nova list`` and ``nova service-list``"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f7c97a3_3fd982f3","line":140,"in_reply_to":"5f7c97a3_0a201d9b","updated":"2018-06-07 10:30:16.000000000","message":"I would vote for ignore down cell.","commit_id":"18a4944becb0b738896559fe07f9738ef5b14d9a"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"58f18ebf3538c505e7d6836035051274b0f8e0cb","unresolved":false,"context_lines":[{"line_number":25,"context_line":"of the down cell are not taken into account and the ``nova boot`` operation is"},{"line_number":26,"context_line":"permitted into the cells which are up. This may result in incorrect quota"},{"line_number":27,"context_line":"reporting for a particular project during boot time which may have implications"},{"line_number":28,"context_line":"when the down cell comes back. A plausible solution for this is to block VM"},{"line_number":29,"context_line":"creations in case that (requesting) project has VMs in the down cell."},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"Use Cases"},{"line_number":32,"context_line":"---------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_bb0c9894","line":29,"range":{"start_line":28,"start_character":30,"end_line":29,"end_character":69},"updated":"2018-06-08 09:09:10.000000000","message":"Well, if we begin counting quota usage using Placement, then down cells would be taken in account, right? So, don\u0027t discuss about the solutions in the problem description, just state the concerns. Anyway, I see you commenting on that later.","commit_id":"91d52016e4d57b104adc1155c7ed641e8213e6f1"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"872d25b221cb917c596405bd4b4cad564e286d47","unresolved":false,"context_lines":[{"line_number":25,"context_line":"of the down cell are not taken into account and the ``nova boot`` operation is"},{"line_number":26,"context_line":"permitted into the cells which are up. This may result in incorrect quota"},{"line_number":27,"context_line":"reporting for a particular project during boot time which may have implications"},{"line_number":28,"context_line":"when the down cell comes back. A plausible solution for this is to block VM"},{"line_number":29,"context_line":"creations in case that (requesting) project has VMs in the down cell."},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"Use Cases"},{"line_number":32,"context_line":"---------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_b1ff74ff","line":29,"range":{"start_line":28,"start_character":30,"end_line":29,"end_character":69},"in_reply_to":"5f7c97a3_bb0c9894","updated":"2018-06-15 19:11:39.000000000","message":"\u003e Well, if we begin counting quota usage using Placement, then down\n \u003e cells would be taken in account, right? So, don\u0027t discuss about the\n \u003e solutions in the problem description, \n\nack! I will remove this.\n\n \u003e just state the concerns.\n \u003e Anyway, I see you commenting on that later.\n\nyes","commit_id":"91d52016e4d57b104adc1155c7ed641e8213e6f1"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"58f18ebf3538c505e7d6836035051274b0f8e0cb","unresolved":false,"context_lines":[{"line_number":60,"context_line":""},{"line_number":61,"context_line":"#. ``nova boot`` should not succeed if that project has any living VMs in the"},{"line_number":62,"context_line":"   down cell until an all-cell-iteration independent solution for quota"},{"line_number":63,"context_line":"   calculation is implemented [#]_."},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"Proposed change"},{"line_number":66,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_fbc5300b","line":63,"range":{"start_line":63,"start_character":30,"end_line":63,"end_character":34},"updated":"2018-06-08 09:09:10.000000000","message":"nit: I\u0027d prefer some explicit markups for external links http://www.sphinx-doc.org/en/stable/rest.html#external-links","commit_id":"91d52016e4d57b104adc1155c7ed641e8213e6f1"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"872d25b221cb917c596405bd4b4cad564e286d47","unresolved":false,"context_lines":[{"line_number":60,"context_line":""},{"line_number":61,"context_line":"#. ``nova boot`` should not succeed if that project has any living VMs in the"},{"line_number":62,"context_line":"   down cell until an all-cell-iteration independent solution for quota"},{"line_number":63,"context_line":"   calculation is implemented [#]_."},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"Proposed change"},{"line_number":66,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_b17694a3","line":63,"range":{"start_line":63,"start_character":30,"end_line":63,"end_character":34},"in_reply_to":"5f7c97a3_fbc5300b","updated":"2018-06-15 19:11:39.000000000","message":"Done","commit_id":"91d52016e4d57b104adc1155c7ed641e8213e6f1"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"95d8e0cf7407c7555c8addee2d37bb1d27434a9b","unresolved":false,"context_lines":[{"line_number":75,"context_line":"   information in the API DB which would include:"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"   #. instance_uuid and created_at from the instance_mapping table."},{"line_number":78,"context_line":"   #. flavor and image from the request_spec table."},{"line_number":79,"context_line":"   #. deleted is set to 0/1 depending on the new column proposed further down"},{"line_number":80,"context_line":"      in the spec."},{"line_number":81,"context_line":"   #. power_state is set to NOSTATE."}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_7578648e","line":78,"range":{"start_line":78,"start_character":3,"end_line":78,"end_character":51},"updated":"2018-06-07 13:55:28.000000000","message":"nit: we can also get user_id and availability_zone from the request spec","commit_id":"91d52016e4d57b104adc1155c7ed641e8213e6f1"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"872d25b221cb917c596405bd4b4cad564e286d47","unresolved":false,"context_lines":[{"line_number":75,"context_line":"   information in the API DB which would include:"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"   #. instance_uuid and created_at from the instance_mapping table."},{"line_number":78,"context_line":"   #. flavor and image from the request_spec table."},{"line_number":79,"context_line":"   #. deleted is set to 0/1 depending on the new column proposed further down"},{"line_number":80,"context_line":"      in the spec."},{"line_number":81,"context_line":"   #. power_state is set to NOSTATE."}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_8f053613","line":78,"range":{"start_line":78,"start_character":3,"end_line":78,"end_character":51},"in_reply_to":"5f7c97a3_7578648e","updated":"2018-06-15 19:11:39.000000000","message":"\u003e nit: we can also get user_id \n\nwe don\u0027t have the user_id (also the reason why melwitt wants this info to be added for quotas_from_placement spec), but we have the project_id\n\n\u003e and availability_zone from the request\n \u003e spec\n\nif specified, yes.","commit_id":"91d52016e4d57b104adc1155c7ed641e8213e6f1"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"95d8e0cf7407c7555c8addee2d37bb1d27434a9b","unresolved":false,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":"   #. instance_uuid and created_at from the instance_mapping table."},{"line_number":78,"context_line":"   #. flavor and image from the request_spec table."},{"line_number":79,"context_line":"   #. deleted is set to 0/1 depending on the new column proposed further down"},{"line_number":80,"context_line":"      in the spec."},{"line_number":81,"context_line":"   #. power_state is set to NOSTATE."},{"line_number":82,"context_line":"   #. rest of the fields will be NULL if they are nullable and if not, then"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_95be60fd","line":79,"range":{"start_line":79,"start_character":6,"end_line":79,"end_character":27},"updated":"2018-06-07 13:55:28.000000000","message":"There is no \u0027deleted\u0027 field in the server response, there is OS-EXT-STS:vm_state and OS-SRV-USG:terminated_at. We wouldn\u0027t know the latter, but we could likely set the former to vm_states.DELETED (or SOFT_DELETED if reclaim is set?) based on the queued_for_delete value.","commit_id":"91d52016e4d57b104adc1155c7ed641e8213e6f1"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"872d25b221cb917c596405bd4b4cad564e286d47","unresolved":false,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":"   #. instance_uuid and created_at from the instance_mapping table."},{"line_number":78,"context_line":"   #. flavor and image from the request_spec table."},{"line_number":79,"context_line":"   #. deleted is set to 0/1 depending on the new column proposed further down"},{"line_number":80,"context_line":"      in the spec."},{"line_number":81,"context_line":"   #. power_state is set to NOSTATE."},{"line_number":82,"context_line":"   #. rest of the fields will be NULL if they are nullable and if not, then"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_2f6742ba","line":79,"range":{"start_line":79,"start_character":6,"end_line":79,"end_character":27},"in_reply_to":"5f7c97a3_6e939c5d","updated":"2018-06-15 19:11:39.000000000","message":"valid points!","commit_id":"91d52016e4d57b104adc1155c7ed641e8213e6f1"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"58f18ebf3538c505e7d6836035051274b0f8e0cb","unresolved":false,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":"   #. instance_uuid and created_at from the instance_mapping table."},{"line_number":78,"context_line":"   #. flavor and image from the request_spec table."},{"line_number":79,"context_line":"   #. deleted is set to 0/1 depending on the new column proposed further down"},{"line_number":80,"context_line":"      in the spec."},{"line_number":81,"context_line":"   #. power_state is set to NOSTATE."},{"line_number":82,"context_line":"   #. rest of the fields will be NULL if they are nullable and if not, then"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_6e939c5d","line":79,"range":{"start_line":79,"start_character":6,"end_line":79,"end_character":27},"in_reply_to":"5f7c97a3_95be60fd","updated":"2018-06-08 09:09:10.000000000","message":"That\u0027s pretty hard to guess whether the instance in just in soft delete state or has been deleted forever, because we don\u0027t know the termination date issued so we can\u0027t recalculate the soft deletion window if reclaim is set.\n\nI\u0027d be in favor of considering the instance as DELETED since a restore wouldn\u0027t work anyway. Once the cell is up, the right state will appear anyway.","commit_id":"91d52016e4d57b104adc1155c7ed641e8213e6f1"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"58f18ebf3538c505e7d6836035051274b0f8e0cb","unresolved":false,"context_lines":[{"line_number":81,"context_line":"   #. power_state is set to NOSTATE."},{"line_number":82,"context_line":"   #. rest of the fields will be NULL if they are nullable and if not, then"},{"line_number":83,"context_line":"      they will be set to UNKNOWN (string), empty (list, dict), 0 (int), False"},{"line_number":84,"context_line":"      (Boolean)."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"   See the Edge Cases section for more info on running this command with"},{"line_number":87,"context_line":"   filters."}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_4e1b40c9","line":84,"updated":"2018-06-08 09:09:10.000000000","message":"There is at least one important field we can set: host_status.\n\nIt\u0027s optional, but here I see it very important to have it returning UNKNOWN\nhttps://developer.openstack.org/api-ref/compute/#id20","commit_id":"91d52016e4d57b104adc1155c7ed641e8213e6f1"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"872d25b221cb917c596405bd4b4cad564e286d47","unresolved":false,"context_lines":[{"line_number":81,"context_line":"   #. power_state is set to NOSTATE."},{"line_number":82,"context_line":"   #. rest of the fields will be NULL if they are nullable and if not, then"},{"line_number":83,"context_line":"      they will be set to UNKNOWN (string), empty (list, dict), 0 (int), False"},{"line_number":84,"context_line":"      (Boolean)."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"   See the Edge Cases section for more info on running this command with"},{"line_number":87,"context_line":"   filters."}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_42005536","line":84,"in_reply_to":"5f7c97a3_4e1b40c9","updated":"2018-06-15 19:11:39.000000000","message":"host_status ? you mean GET/os-hosts/{host_name} ? It looks like its deprecated. Not sure what it has to do with server list.","commit_id":"91d52016e4d57b104adc1155c7ed641e8213e6f1"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"4b75a7f3b4d0e5d1e3700fe23a3ce6a44b4980af","unresolved":false,"context_lines":[{"line_number":82,"context_line":"   #. rest of the fields will be NULL if they are nullable and if not, then"},{"line_number":83,"context_line":"      they will be set to UNKNOWN (string), empty (list, dict), 0 (int), False"},{"line_number":84,"context_line":"      (Boolean)."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"   See the Edge Cases section for more info on running this command with"},{"line_number":87,"context_line":"   filters."},{"line_number":88,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_4d0cc693","line":85,"updated":"2018-06-07 08:32:33.000000000","message":"* Setting config_driver to UNKNOWN string will break the API consumer if she took the documentation of that field strictly\n\"Indicates whether or not a config drive was used for this server. The value is True or an empty string. An empty string stands for False.\"\n\n* Setting hostId to UNKNOWN means, based on the current API doc that every instance in every down cell is on the same host based.\n\n* Will nova populate the links field properly for shell instances or that will an empty list?\n\n* empty list and dict does not signal properly that we don\u0027t know the value but instead it signals that we know that the value is an empty collections. E.g. os-extended-volumes:volumes_attached \u003d [] means there is no volumes are attached to the instance.\n\n* setting the updated field to UNKNOWN will break a response parse that follows the documentation of these fields and tries to parse the value as ISO8601 datetime.","commit_id":"91d52016e4d57b104adc1155c7ed641e8213e6f1"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"c8b1fe1e7be4a2529b2da051acf233e7e8a7e1b2","unresolved":false,"context_lines":[{"line_number":82,"context_line":"   #. rest of the fields will be NULL if they are nullable and if not, then"},{"line_number":83,"context_line":"      they will be set to UNKNOWN (string), empty (list, dict), 0 (int), False"},{"line_number":84,"context_line":"      (Boolean)."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"   See the Edge Cases section for more info on running this command with"},{"line_number":87,"context_line":"   filters."},{"line_number":88,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_e3c28353","line":85,"in_reply_to":"5f7c97a3_4d0cc693","updated":"2018-06-07 10:30:16.000000000","message":"Overall I agree that giving empty/UNKNOWN field-valued shells is in one way giving wrong info, but the aim is to let the user know that the info for these records are not fully correct so that they are aware.","commit_id":"91d52016e4d57b104adc1155c7ed641e8213e6f1"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"dcacb2e14f7ab36f0e67029ec0f0f0119a25c057","unresolved":false,"context_lines":[{"line_number":82,"context_line":"   #. rest of the fields will be NULL if they are nullable and if not, then"},{"line_number":83,"context_line":"      they will be set to UNKNOWN (string), empty (list, dict), 0 (int), False"},{"line_number":84,"context_line":"      (Boolean)."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"   See the Edge Cases section for more info on running this command with"},{"line_number":87,"context_line":"   filters."},{"line_number":88,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_9b344fe0","line":85,"in_reply_to":"5f7c97a3_55d20836","updated":"2018-06-07 14:19:37.000000000","message":"\u003e If we return the status as UNKNOWN, then I think it basically means\n \u003e everything but a select few fields can be trusted, which we\u0027ll have\n \u003e to document in the compute API admin guide:\n \u003e \n \u003e https://developer.openstack.org/api-guide/compute/server_concepts.html#server-status\n \u003e \n \u003e So if you get a server in UNKNOWN status, you can\u0027t do things on it\n \u003e like parse the updated field as a datetime object. This obviously\n \u003e breaks backward compatibility but I\u0027m not sure what else we can do.\n \u003e \n\nI think we need to bump the microversion to signal the API behavior change and document the status \u003d UNKNOWN case in that new microversion. And in the old microversions keep the old http 500 behavior.\n\n \u003e We could omit all of the fields from the server details that we\n \u003e just can\u0027t determine like this, but that could result in KeyErrors\n \u003e on the client side as well.","commit_id":"91d52016e4d57b104adc1155c7ed641e8213e6f1"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"872d25b221cb917c596405bd4b4cad564e286d47","unresolved":false,"context_lines":[{"line_number":82,"context_line":"   #. rest of the fields will be NULL if they are nullable and if not, then"},{"line_number":83,"context_line":"      they will be set to UNKNOWN (string), empty (list, dict), 0 (int), False"},{"line_number":84,"context_line":"      (Boolean)."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"   See the Edge Cases section for more info on running this command with"},{"line_number":87,"context_line":"   filters."},{"line_number":88,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_02fa5d42","line":85,"in_reply_to":"5f7c97a3_8dd410eb","updated":"2018-06-15 19:11:39.000000000","message":"\u003e \n \u003e I don\u0027t agree with maintaining the current 500 behavior if a single\n \u003e cell out of 70 are down - we shouldn\u0027t do that.\n\n++, we have the bug fixes ignoring the down cell instead of 500s happening for nova list and happened for service-list.","commit_id":"91d52016e4d57b104adc1155c7ed641e8213e6f1"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"17bd7c6becd383972d762e84893873359ff52975","unresolved":false,"context_lines":[{"line_number":82,"context_line":"   #. rest of the fields will be NULL if they are nullable and if not, then"},{"line_number":83,"context_line":"      they will be set to UNKNOWN (string), empty (list, dict), 0 (int), False"},{"line_number":84,"context_line":"      (Boolean)."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"   See the Edge Cases section for more info on running this command with"},{"line_number":87,"context_line":"   filters."},{"line_number":88,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_8dd410eb","line":85,"in_reply_to":"5f7c97a3_9b344fe0","updated":"2018-06-07 16:15:47.000000000","message":"\u003e I think we need to bump the microversion to signal the API behavior change and document the status \u003d UNKNOWN case in that new microversion. And in the old microversions keep the old http 500 behavior.\n\nI don\u0027t agree with maintaining the current 500 behavior if a single cell out of 70 are down - we shouldn\u0027t do that.","commit_id":"91d52016e4d57b104adc1155c7ed641e8213e6f1"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"95d8e0cf7407c7555c8addee2d37bb1d27434a9b","unresolved":false,"context_lines":[{"line_number":82,"context_line":"   #. rest of the fields will be NULL if they are nullable and if not, then"},{"line_number":83,"context_line":"      they will be set to UNKNOWN (string), empty (list, dict), 0 (int), False"},{"line_number":84,"context_line":"      (Boolean)."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"   See the Edge Cases section for more info on running this command with"},{"line_number":87,"context_line":"   filters."},{"line_number":88,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_55d20836","line":85,"in_reply_to":"5f7c97a3_e3c28353","updated":"2018-06-07 13:55:28.000000000","message":"If we return the status as UNKNOWN, then I think it basically means everything but a select few fields can be trusted, which we\u0027ll have to document in the compute API admin guide:\n\nhttps://developer.openstack.org/api-guide/compute/server_concepts.html#server-status\n\nSo if you get a server in UNKNOWN status, you can\u0027t do things on it like parse the updated field as a datetime object. This obviously breaks backward compatibility but I\u0027m not sure what else we can do.\n\nWe could omit all of the fields from the server details that we just can\u0027t determine like this, but that could result in KeyErrors on the client side as well.","commit_id":"91d52016e4d57b104adc1155c7ed641e8213e6f1"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"95d8e0cf7407c7555c8addee2d37bb1d27434a9b","unresolved":false,"context_lines":[{"line_number":83,"context_line":"      they will be set to UNKNOWN (string), empty (list, dict), 0 (int), False"},{"line_number":84,"context_line":"      (Boolean)."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"   See the Edge Cases section for more info on running this command with"},{"line_number":87,"context_line":"   filters."},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"#. ``nova show`` should return a minimalistic construct from the available"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_f5e0f4fa","line":86,"range":{"start_line":86,"start_character":11,"end_line":86,"end_character":21},"updated":"2018-06-07 13:55:28.000000000","message":"nit: turn this into a link:\n\n`Edge Cases`_\n\nSection titles are implicit links.","commit_id":"91d52016e4d57b104adc1155c7ed641e8213e6f1"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"872d25b221cb917c596405bd4b4cad564e286d47","unresolved":false,"context_lines":[{"line_number":83,"context_line":"      they will be set to UNKNOWN (string), empty (list, dict), 0 (int), False"},{"line_number":84,"context_line":"      (Boolean)."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"   See the Edge Cases section for more info on running this command with"},{"line_number":87,"context_line":"   filters."},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"#. ``nova show`` should return a minimalistic construct from the available"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_cf27ae1e","line":86,"range":{"start_line":86,"start_character":11,"end_line":86,"end_character":21},"in_reply_to":"5f7c97a3_f5e0f4fa","updated":"2018-06-15 19:11:39.000000000","message":"Done","commit_id":"91d52016e4d57b104adc1155c7ed641e8213e6f1"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"95d8e0cf7407c7555c8addee2d37bb1d27434a9b","unresolved":false,"context_lines":[{"line_number":95,"context_line":"   available information in the API DB which would include:"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"   #. host and binary from the host_mapping table for the compute services."},{"line_number":98,"context_line":"   #. only the binary for the cell-condutor service."},{"line_number":99,"context_line":"   #. rest of the fields will be NULL if they are nullable and if not, then"},{"line_number":100,"context_line":"      they will be set to UNKNOWN (string), empty (list, dict), 0 (int), False"},{"line_number":101,"context_line":"      (Boolean)."}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_55a0c8a5","line":98,"range":{"start_line":98,"start_character":6,"end_line":98,"end_character":52},"updated":"2018-06-07 13:55:28.000000000","message":"You can\u0027t determine if it\u0027s a nova-conductor service or not - if the cell is down we can\u0027t get the service records, and we can only determine compute services via the host mappings; nova-conductor services in cells don\u0027t have host mappings.","commit_id":"91d52016e4d57b104adc1155c7ed641e8213e6f1"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"58f18ebf3538c505e7d6836035051274b0f8e0cb","unresolved":false,"context_lines":[{"line_number":95,"context_line":"   available information in the API DB which would include:"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"   #. host and binary from the host_mapping table for the compute services."},{"line_number":98,"context_line":"   #. only the binary for the cell-condutor service."},{"line_number":99,"context_line":"   #. rest of the fields will be NULL if they are nullable and if not, then"},{"line_number":100,"context_line":"      they will be set to UNKNOWN (string), empty (list, dict), 0 (int), False"},{"line_number":101,"context_line":"      (Boolean)."}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_8e663855","line":98,"range":{"start_line":98,"start_character":6,"end_line":98,"end_character":52},"in_reply_to":"5f7c97a3_55a0c8a5","updated":"2018-06-08 09:09:10.000000000","message":"What Matt said.","commit_id":"91d52016e4d57b104adc1155c7ed641e8213e6f1"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"872d25b221cb917c596405bd4b4cad564e286d47","unresolved":false,"context_lines":[{"line_number":95,"context_line":"   available information in the API DB which would include:"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"   #. host and binary from the host_mapping table for the compute services."},{"line_number":98,"context_line":"   #. only the binary for the cell-condutor service."},{"line_number":99,"context_line":"   #. rest of the fields will be NULL if they are nullable and if not, then"},{"line_number":100,"context_line":"      they will be set to UNKNOWN (string), empty (list, dict), 0 (int), False"},{"line_number":101,"context_line":"      (Boolean)."}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_2fbf42ab","line":98,"range":{"start_line":98,"start_character":6,"end_line":98,"end_character":52},"in_reply_to":"5f7c97a3_8e663855","updated":"2018-06-15 19:11:39.000000000","message":"right, dunno what I was thinking when I added this.","commit_id":"91d52016e4d57b104adc1155c7ed641e8213e6f1"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"58f18ebf3538c505e7d6836035051274b0f8e0cb","unresolved":false,"context_lines":[{"line_number":100,"context_line":"      they will be set to UNKNOWN (string), empty (list, dict), 0 (int), False"},{"line_number":101,"context_line":"      (Boolean)."},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"   Note that if cell0 goes down the controller services will not be listed."},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"#. ``nova boot`` should not succeed if the requesting project has living VMs in"},{"line_number":106,"context_line":"   the down cell. So if the scatter-gather utility returns a"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_4e4900b5","line":103,"updated":"2018-06-08 09:09:10.000000000","message":"Well, cell0 is just an abstract construct, right? Do operators really provide its own MQ and separate DB for it, or do they just share the API MQ and API DB connectionstring ? I think we can reasonably make this assumption.","commit_id":"91d52016e4d57b104adc1155c7ed641e8213e6f1"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"872d25b221cb917c596405bd4b4cad564e286d47","unresolved":false,"context_lines":[{"line_number":100,"context_line":"      they will be set to UNKNOWN (string), empty (list, dict), 0 (int), False"},{"line_number":101,"context_line":"      (Boolean)."},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"   Note that if cell0 goes down the controller services will not be listed."},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"#. ``nova boot`` should not succeed if the requesting project has living VMs in"},{"line_number":106,"context_line":"   the down cell. So if the scatter-gather utility returns a"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_4f52be6a","line":103,"in_reply_to":"5f7c97a3_4e4900b5","updated":"2018-06-15 19:11:39.000000000","message":"\u003e Well, cell0 is just an abstract construct, right?\n\nyes\n\n\u003e Do operators\n \u003e really provide its own MQ and separate DB for it, or do they just\n \u003e share the API MQ and API DB connectionstring ? I think we can\n \u003e reasonably make this assumption.\n\nI see your point but the DB string could be different, I just wanted to explicitly state this so that we remember about the top level services not being accessible in case cell0 DB goes down.","commit_id":"91d52016e4d57b104adc1155c7ed641e8213e6f1"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"58f18ebf3538c505e7d6836035051274b0f8e0cb","unresolved":false,"context_lines":[{"line_number":117,"context_line":"``nova_api.instance_mappings`` table as discussed in the Dublin PTG [#]_."},{"line_number":118,"context_line":"This column would be of type Boolean which by default will be False and upon"},{"line_number":119,"context_line":"the deletion of the respective instance, will be set to True. The corresponding"},{"line_number":120,"context_line":"``queued_for_delete`` field will be added in the InstanceMapping object."},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"Edge Cases"},{"line_number":123,"context_line":"----------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_eebc8c6d","line":120,"updated":"2018-06-08 09:09:10.000000000","message":"nit: this paragraph could be move above before discussing about nova list and show, as it would help people understand how you can guess whether an instance is deleted or not at the API level.","commit_id":"91d52016e4d57b104adc1155c7ed641e8213e6f1"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"872d25b221cb917c596405bd4b4cad564e286d47","unresolved":false,"context_lines":[{"line_number":117,"context_line":"``nova_api.instance_mappings`` table as discussed in the Dublin PTG [#]_."},{"line_number":118,"context_line":"This column would be of type Boolean which by default will be False and upon"},{"line_number":119,"context_line":"the deletion of the respective instance, will be set to True. The corresponding"},{"line_number":120,"context_line":"``queued_for_delete`` field will be added in the InstanceMapping object."},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"Edge Cases"},{"line_number":123,"context_line":"----------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_0f56062c","line":120,"in_reply_to":"5f7c97a3_eebc8c6d","updated":"2018-06-15 19:11:39.000000000","message":"okay, I will move this up. My reason behind putting this here was to first present why this was needed.","commit_id":"91d52016e4d57b104adc1155c7ed641e8213e6f1"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"872d25b221cb917c596405bd4b4cad564e286d47","unresolved":false,"context_lines":[{"line_number":121,"context_line":""},{"line_number":122,"context_line":"Edge Cases"},{"line_number":123,"context_line":"----------"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"* If the user is listing servers using filtering like through host or"},{"line_number":126,"context_line":"  availability_zone this can be handled in two incremental ways (based on what"},{"line_number":127,"context_line":"  is the appropriate behaviour for each filter):"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_cf480e8c","line":124,"updated":"2018-06-15 19:11:39.000000000","message":"Based on the comments in this section, I will go ahead with ignoring the down cell when we use filters/paging.","commit_id":"91d52016e4d57b104adc1155c7ed641e8213e6f1"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"58f18ebf3538c505e7d6836035051274b0f8e0cb","unresolved":false,"context_lines":[{"line_number":123,"context_line":"----------"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"* If the user is listing servers using filtering like through host or"},{"line_number":126,"context_line":"  availability_zone this can be handled in two incremental ways (based on what"},{"line_number":127,"context_line":"  is the appropriate behaviour for each filter):"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"   #. We completely ignore the down cell instances."}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_ee4a4c81","line":126,"range":{"start_line":126,"start_character":2,"end_line":126,"end_character":19},"updated":"2018-06-08 09:09:10.000000000","message":"since availability_zone is stored in the ReqSpec, we can theorically filter the instances based on this.\nThat said, it totally flips the logic where the AZ filter works on the host AZ, and not the user-requested AZ, which can be different.\n\nFor example, req_spec.az can be None but the instance can land on a host that\u0027s part of \u0027foo\u0027 AZ. Later, the instance could be moved to a second host that\u0027s in \u0027bar\u0027 AZ (given the user didn\u0027t asked for a specific AZ).","commit_id":"91d52016e4d57b104adc1155c7ed641e8213e6f1"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"872d25b221cb917c596405bd4b4cad564e286d47","unresolved":false,"context_lines":[{"line_number":123,"context_line":"----------"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"* If the user is listing servers using filtering like through host or"},{"line_number":126,"context_line":"  availability_zone this can be handled in two incremental ways (based on what"},{"line_number":127,"context_line":"  is the appropriate behaviour for each filter):"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"   #. We completely ignore the down cell instances."}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_6f59ba59","line":126,"range":{"start_line":126,"start_character":2,"end_line":126,"end_character":19},"in_reply_to":"5f7c97a3_ee4a4c81","updated":"2018-06-15 19:11:39.000000000","message":"actually we could do this: avz-\u003eaggregates table-\u003ehost_mapping-\u003ecell_mapping-\u003einstance_mapping, but yea its too far-fetched.\n\nWe will now consider only live cells like you have said below.","commit_id":"91d52016e4d57b104adc1155c7ed641e8213e6f1"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"95d8e0cf7407c7555c8addee2d37bb1d27434a9b","unresolved":false,"context_lines":[{"line_number":127,"context_line":"  is the appropriate behaviour for each filter):"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"   #. We completely ignore the down cell instances."},{"line_number":130,"context_line":"   #. We just return shells for instances in the down cell since we do not"},{"line_number":131,"context_line":"      know if they fall under the filter or not but at least returning shells"},{"line_number":132,"context_line":"      will make the user be aware of the fact the list obtained is not fully"},{"line_number":133,"context_line":"      accurate."}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_558e8827","line":130,"updated":"2018-06-07 13:55:28.000000000","message":"We agreed in IRC to not try and include minimal instances from down cells when filtering, so I would just like to go with that - we already have enough problems above with trying to fill in minimal fields with non-filtered instances.","commit_id":"91d52016e4d57b104adc1155c7ed641e8213e6f1"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"872d25b221cb917c596405bd4b4cad564e286d47","unresolved":false,"context_lines":[{"line_number":127,"context_line":"  is the appropriate behaviour for each filter):"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"   #. We completely ignore the down cell instances."},{"line_number":130,"context_line":"   #. We just return shells for instances in the down cell since we do not"},{"line_number":131,"context_line":"      know if they fall under the filter or not but at least returning shells"},{"line_number":132,"context_line":"      will make the user be aware of the fact the list obtained is not fully"},{"line_number":133,"context_line":"      accurate."}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_8f421668","line":130,"in_reply_to":"5f7c97a3_2e2da4a7","updated":"2018-06-15 19:11:39.000000000","message":"ack, you and Matt are saying the same thing. I will go ahead with this approach.\n\nJust stating here that I will go ahead with ignoring a down cell if *any* filter is mentioned even if its nova list --deleted which can give the right results just so that we have a common ground solution for all the filters.","commit_id":"91d52016e4d57b104adc1155c7ed641e8213e6f1"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"58f18ebf3538c505e7d6836035051274b0f8e0cb","unresolved":false,"context_lines":[{"line_number":127,"context_line":"  is the appropriate behaviour for each filter):"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"   #. We completely ignore the down cell instances."},{"line_number":130,"context_line":"   #. We just return shells for instances in the down cell since we do not"},{"line_number":131,"context_line":"      know if they fall under the filter or not but at least returning shells"},{"line_number":132,"context_line":"      will make the user be aware of the fact the list obtained is not fully"},{"line_number":133,"context_line":"      accurate."}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_2e2da4a7","line":130,"in_reply_to":"5f7c97a3_558e8827","updated":"2018-06-08 09:09:10.000000000","message":"I\u0027m not sure I\u0027m getting Matt\u0027s point (is the negative also for \u0027include\u0027 - meaning \"we should not try to include\" ?), so here\u0027s my take : we should just return instances from live cells.","commit_id":"91d52016e4d57b104adc1155c7ed641e8213e6f1"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"4b75a7f3b4d0e5d1e3700fe23a3ce6a44b4980af","unresolved":false,"context_lines":[{"line_number":128,"context_line":""},{"line_number":129,"context_line":"   #. We completely ignore the down cell instances."},{"line_number":130,"context_line":"   #. We just return shells for instances in the down cell since we do not"},{"line_number":131,"context_line":"      know if they fall under the filter or not but at least returning shells"},{"line_number":132,"context_line":"      will make the user be aware of the fact the list obtained is not fully"},{"line_number":133,"context_line":"      accurate."},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"* If the user does ``nova list --marker`` it will fail with a 500 if the marker"},{"line_number":136,"context_line":"  is in the down cell."}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_6d42e211","line":133,"range":{"start_line":131,"start_character":48,"end_line":133,"end_character":15},"updated":"2018-06-07 08:32:33.000000000","message":"Is it really the case that the returned shell instance is distinguishable from a non-shell instance easily? I think it would be better to explicitly state on the API that this instance is incomplete.","commit_id":"91d52016e4d57b104adc1155c7ed641e8213e6f1"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"c8b1fe1e7be4a2529b2da051acf233e7e8a7e1b2","unresolved":false,"context_lines":[{"line_number":128,"context_line":""},{"line_number":129,"context_line":"   #. We completely ignore the down cell instances."},{"line_number":130,"context_line":"   #. We just return shells for instances in the down cell since we do not"},{"line_number":131,"context_line":"      know if they fall under the filter or not but at least returning shells"},{"line_number":132,"context_line":"      will make the user be aware of the fact the list obtained is not fully"},{"line_number":133,"context_line":"      accurate."},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"* If the user does ``nova list --marker`` it will fail with a 500 if the marker"},{"line_number":136,"context_line":"  is in the down cell."}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_637f5366","line":133,"range":{"start_line":131,"start_character":48,"end_line":133,"end_character":15},"in_reply_to":"5f7c97a3_6d42e211","updated":"2018-06-07 10:30:16.000000000","message":"\u003e Is it really the case that the returned shell instance is\n \u003e distinguishable from a non-shell instance easily?\n\nI was thinking if except ID, the rest of the fields are empty/blank it would be distinguishable ? Or we could think of a unique \"Name\" for those instances and document it which would convey the info.\n\n \u003e I think it would\n \u003e be better to explicitly state on the API that this instance is\n \u003e incomplete.\n\nI would also be up for displaying a better message at the end of the list which states \"missing info on some instances due to an internal error, try again later\".","commit_id":"91d52016e4d57b104adc1155c7ed641e8213e6f1"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"95d8e0cf7407c7555c8addee2d37bb1d27434a9b","unresolved":false,"context_lines":[{"line_number":135,"context_line":"* If the user does ``nova list --marker`` it will fail with a 500 if the marker"},{"line_number":136,"context_line":"  is in the down cell."},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"* Paging without filtering/sorting or paging with only default sorting"},{"line_number":139,"context_line":"  (using created_at): works like normal except we would have the shells from"},{"line_number":140,"context_line":"  the down cell."},{"line_number":141,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_b5d4bcea","line":138,"updated":"2018-06-07 13:55:28.000000000","message":"I tend to think we should ignore instances from down cells when paging, especially if our marker lands on an instance in a down cell, then we\u0027d run into the 500 in the previous item.","commit_id":"91d52016e4d57b104adc1155c7ed641e8213e6f1"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"58f18ebf3538c505e7d6836035051274b0f8e0cb","unresolved":false,"context_lines":[{"line_number":135,"context_line":"* If the user does ``nova list --marker`` it will fail with a 500 if the marker"},{"line_number":136,"context_line":"  is in the down cell."},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"* Paging without filtering/sorting or paging with only default sorting"},{"line_number":139,"context_line":"  (using created_at): works like normal except we would have the shells from"},{"line_number":140,"context_line":"  the down cell."},{"line_number":141,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_ae121461","line":138,"in_reply_to":"5f7c97a3_b5d4bcea","updated":"2018-06-08 09:09:10.000000000","message":"++","commit_id":"91d52016e4d57b104adc1155c7ed641e8213e6f1"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"872d25b221cb917c596405bd4b4cad564e286d47","unresolved":false,"context_lines":[{"line_number":135,"context_line":"* If the user does ``nova list --marker`` it will fail with a 500 if the marker"},{"line_number":136,"context_line":"  is in the down cell."},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"* Paging without filtering/sorting or paging with only default sorting"},{"line_number":139,"context_line":"  (using created_at): works like normal except we would have the shells from"},{"line_number":140,"context_line":"  the down cell."},{"line_number":141,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_42c29588","line":138,"in_reply_to":"5f7c97a3_b5d4bcea","updated":"2018-06-15 19:11:39.000000000","message":"ok.","commit_id":"91d52016e4d57b104adc1155c7ed641e8213e6f1"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"4b75a7f3b4d0e5d1e3700fe23a3ce6a44b4980af","unresolved":false,"context_lines":[{"line_number":139,"context_line":"  (using created_at): works like normal except we would have the shells from"},{"line_number":140,"context_line":"  the down cell."},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"* Paging with filtering/sorting: We ignore the down cell. For instance if we"},{"line_number":143,"context_line":"  have three cells A (up), B (down) and C (up) and if the marker is half way"},{"line_number":144,"context_line":"  in A, we would get the rest half of the results from A, all the results"},{"line_number":145,"context_line":"  from C and ignore cell B."}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_2d6dca98","line":142,"range":{"start_line":142,"start_character":33,"end_line":142,"end_character":57},"updated":"2018-06-07 08:32:33.000000000","message":"Does it mean that _in the first iteration_ we ignore the down cells but we can incrementally add the behavior stated in L130?","commit_id":"91d52016e4d57b104adc1155c7ed641e8213e6f1"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"95d8e0cf7407c7555c8addee2d37bb1d27434a9b","unresolved":false,"context_lines":[{"line_number":139,"context_line":"  (using created_at): works like normal except we would have the shells from"},{"line_number":140,"context_line":"  the down cell."},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"* Paging with filtering/sorting: We ignore the down cell. For instance if we"},{"line_number":143,"context_line":"  have three cells A (up), B (down) and C (up) and if the marker is half way"},{"line_number":144,"context_line":"  in A, we would get the rest half of the results from A, all the results"},{"line_number":145,"context_line":"  from C and ignore cell B."}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_f5f3149e","line":142,"range":{"start_line":142,"start_character":33,"end_line":142,"end_character":57},"in_reply_to":"5f7c97a3_03d9bff2","updated":"2018-06-07 13:55:28.000000000","message":"\u003e however this raises the question of what happens when a cell comes back up, because the marker must have gone to cell C.\n\nThat\u0027s fine. If the user wants, they can reset the marker and start the page over.","commit_id":"91d52016e4d57b104adc1155c7ed641e8213e6f1"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"c8b1fe1e7be4a2529b2da051acf233e7e8a7e1b2","unresolved":false,"context_lines":[{"line_number":139,"context_line":"  (using created_at): works like normal except we would have the shells from"},{"line_number":140,"context_line":"  the down cell."},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"* Paging with filtering/sorting: We ignore the down cell. For instance if we"},{"line_number":143,"context_line":"  have three cells A (up), B (down) and C (up) and if the marker is half way"},{"line_number":144,"context_line":"  in A, we would get the rest half of the results from A, all the results"},{"line_number":145,"context_line":"  from C and ignore cell B."}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_03d9bff2","line":142,"range":{"start_line":142,"start_character":33,"end_line":142,"end_character":57},"in_reply_to":"5f7c97a3_2d6dca98","updated":"2018-06-07 10:30:16.000000000","message":"For paging with filtering/sorting there is not an accurate way we can apply it to a down cell (http://eavesdrop.openstack.org/irclogs/%23openstack-nova/%23openstack-nova.2018-06-05.log.html#t2018-06-05T18:55:50) so we will ignore it, however this raises the question of what happens when a cell comes back up, because the marker must have gone to cell C.","commit_id":"91d52016e4d57b104adc1155c7ed641e8213e6f1"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"872d25b221cb917c596405bd4b4cad564e286d47","unresolved":false,"context_lines":[{"line_number":139,"context_line":"  (using created_at): works like normal except we would have the shells from"},{"line_number":140,"context_line":"  the down cell."},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"* Paging with filtering/sorting: We ignore the down cell. For instance if we"},{"line_number":143,"context_line":"  have three cells A (up), B (down) and C (up) and if the marker is half way"},{"line_number":144,"context_line":"  in A, we would get the rest half of the results from A, all the results"},{"line_number":145,"context_line":"  from C and ignore cell B."}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_2253d93b","line":142,"range":{"start_line":142,"start_character":33,"end_line":142,"end_character":57},"in_reply_to":"5f7c97a3_f5f3149e","updated":"2018-06-15 19:11:39.000000000","message":"\u003e That\u0027s fine. If the user wants, they can reset the marker and start\n \u003e the page over.\n\nack","commit_id":"91d52016e4d57b104adc1155c7ed641e8213e6f1"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"95d8e0cf7407c7555c8addee2d37bb1d27434a9b","unresolved":false,"context_lines":[{"line_number":144,"context_line":"  in A, we would get the rest half of the results from A, all the results"},{"line_number":145,"context_line":"  from C and ignore cell B."},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"Alternatives"},{"line_number":148,"context_line":"------------"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"* An alternative to adding the new column in the instance_mappings table is to"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_704f126a","line":147,"updated":"2018-06-07 13:55:28.000000000","message":"I thought of another alternative which has come up before from Dan, which is adding optional db connections for read-only copies of the cell DBs in case the primary is down, we could read from a backup which might be stale but is at least better than the shell instances.","commit_id":"91d52016e4d57b104adc1155c7ed641e8213e6f1"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"58f18ebf3538c505e7d6836035051274b0f8e0cb","unresolved":false,"context_lines":[{"line_number":144,"context_line":"  in A, we would get the rest half of the results from A, all the results"},{"line_number":145,"context_line":"  from C and ignore cell B."},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"Alternatives"},{"line_number":148,"context_line":"------------"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"* An alternative to adding the new column in the instance_mappings table is to"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_d10a951e","line":147,"in_reply_to":"5f7c97a3_704f126a","updated":"2018-06-08 09:09:10.000000000","message":"Yeah, we could imagine that operators would make the cell DBs pretty HA, so they would at least master-slave it.\nWe introduced the notion of \u0027slave connections\u0027 in the past, would it be worth it for a cell mapping information ?","commit_id":"91d52016e4d57b104adc1155c7ed641e8213e6f1"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"872d25b221cb917c596405bd4b4cad564e286d47","unresolved":false,"context_lines":[{"line_number":144,"context_line":"  in A, we would get the rest half of the results from A, all the results"},{"line_number":145,"context_line":"  from C and ignore cell B."},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"Alternatives"},{"line_number":148,"context_line":"------------"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"* An alternative to adding the new column in the instance_mappings table is to"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_02181d1c","line":147,"in_reply_to":"5f7c97a3_d10a951e","updated":"2018-06-15 19:11:39.000000000","message":"I will add this as an alternate option, and will call Belmiro in here to explain why he wasn\u0027t willing to go ahead with this solution.","commit_id":"91d52016e4d57b104adc1155c7ed641e8213e6f1"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"4b75a7f3b4d0e5d1e3700fe23a3ce6a44b4980af","unresolved":false,"context_lines":[{"line_number":155,"context_line":"  if the listing operations have to work when a cell goes down."},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"* Another alternative to creating dummy partial shells for instances in the"},{"line_number":158,"context_line":"  down cell would be to have a new API response change for ``GET /servers`` to"},{"line_number":159,"context_line":"  include the set of server uuids in the down cells. We could do basically do a"},{"line_number":160,"context_line":"  new microversion returning a specific partial construct to handle a down"},{"line_number":161,"context_line":"  cell."},{"line_number":162,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_ed27d2c6","line":159,"range":{"start_line":158,"start_character":21,"end_line":159,"end_character":52},"updated":"2018-06-07 08:32:33.000000000","message":"I would go with this as this would made the partial response explicitly instead of implicitly suggesting partial response through shell instances with strange field values. Also I think we cannot avoid bumping the microversion of the API even if we go with the current proposal as some of the field values in a shell instance would break a strict an API consumers anyhow. See my comment at L85 and L183","commit_id":"91d52016e4d57b104adc1155c7ed641e8213e6f1"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"872d25b221cb917c596405bd4b4cad564e286d47","unresolved":false,"context_lines":[{"line_number":155,"context_line":"  if the listing operations have to work when a cell goes down."},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"* Another alternative to creating dummy partial shells for instances in the"},{"line_number":158,"context_line":"  down cell would be to have a new API response change for ``GET /servers`` to"},{"line_number":159,"context_line":"  include the set of server uuids in the down cells. We could do basically do a"},{"line_number":160,"context_line":"  new microversion returning a specific partial construct to handle a down"},{"line_number":161,"context_line":"  cell."},{"line_number":162,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_31e32509","line":159,"range":{"start_line":158,"start_character":21,"end_line":159,"end_character":52},"in_reply_to":"5f7c97a3_1baa7f84","updated":"2018-06-15 19:11:39.000000000","message":"I will first put up the POCs for this alternative and then update this spec based on if we accept it.","commit_id":"91d52016e4d57b104adc1155c7ed641e8213e6f1"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"1fdb3d33170649240a9df4308bd459b16eef9159","unresolved":false,"context_lines":[{"line_number":155,"context_line":"  if the listing operations have to work when a cell goes down."},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"* Another alternative to creating dummy partial shells for instances in the"},{"line_number":158,"context_line":"  down cell would be to have a new API response change for ``GET /servers`` to"},{"line_number":159,"context_line":"  include the set of server uuids in the down cells. We could do basically do a"},{"line_number":160,"context_line":"  new microversion returning a specific partial construct to handle a down"},{"line_number":161,"context_line":"  cell."},{"line_number":162,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_8cca0e44","line":159,"range":{"start_line":158,"start_character":21,"end_line":159,"end_character":52},"in_reply_to":"5f7c97a3_31e32509","updated":"2018-06-17 19:52:15.000000000","message":"A very ugly start for GET /servers : https://review.openstack.org/#/c/575996/ . Based on the comments and approach I get in that review, I will change this spec.","commit_id":"91d52016e4d57b104adc1155c7ed641e8213e6f1"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"95d8e0cf7407c7555c8addee2d37bb1d27434a9b","unresolved":false,"context_lines":[{"line_number":155,"context_line":"  if the listing operations have to work when a cell goes down."},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"* Another alternative to creating dummy partial shells for instances in the"},{"line_number":158,"context_line":"  down cell would be to have a new API response change for ``GET /servers`` to"},{"line_number":159,"context_line":"  include the set of server uuids in the down cells. We could do basically do a"},{"line_number":160,"context_line":"  new microversion returning a specific partial construct to handle a down"},{"line_number":161,"context_line":"  cell."},{"line_number":162,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_700712cb","line":159,"range":{"start_line":158,"start_character":21,"end_line":159,"end_character":52},"in_reply_to":"5f7c97a3_5936c853","updated":"2018-06-07 13:55:28.000000000","message":"I\u0027m pretty uncomfortable with the client-side implications of an unversioned API change where you start getting back instances with fake values in them, especially when those don\u0027t match the existing types and values we\u0027ve documented in the API reference - we\u0027d have to have a big asterisk in the docs.\n\nSo if we did this, I think we\u0027re talking about something like:\n\n1. Fix the 500 we have today with a bug fix such that you can list instances and filter out down cells (L44).\n\n2. With a new microversion, if there are down cells, return a new top-level field in the GET /servers response that lists the uuids of the instances from the down cells?\n\n- What would we do about filtering - still ignore instances from down cells?\n\n- Would the new top-level field only be shown to admins by default? Maybe this would depend on what we call the field - could just call it \"unavailable_servers\" or something. It doesn\u0027t have to be cells specific.\n\n3. GET /servers/{id} (nova show) on an instance in a down cell results in what? A 503? I think I prefer that to returning a shell.","commit_id":"91d52016e4d57b104adc1155c7ed641e8213e6f1"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"57f41c7c4648fb08e97169fb161d2fb336f58a39","unresolved":false,"context_lines":[{"line_number":155,"context_line":"  if the listing operations have to work when a cell goes down."},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"* Another alternative to creating dummy partial shells for instances in the"},{"line_number":158,"context_line":"  down cell would be to have a new API response change for ``GET /servers`` to"},{"line_number":159,"context_line":"  include the set of server uuids in the down cells. We could do basically do a"},{"line_number":160,"context_line":"  new microversion returning a specific partial construct to handle a down"},{"line_number":161,"context_line":"  cell."},{"line_number":162,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_10133e68","line":159,"range":{"start_line":158,"start_character":21,"end_line":159,"end_character":52},"in_reply_to":"5f7c97a3_700712cb","updated":"2018-06-07 14:06:56.000000000","message":"\u003e 3. GET /servers/{id} (nova show) on an instance in a down cell results in what? A 503? I think I prefer that to returning a shell.\n\nThis is likely already a 500 today, and if the server doesn\u0027t provide a Retry-After header in a 503, the client is supposed to consider the 503 the same as a 500 anyway, so likely nothing needs to change here.","commit_id":"91d52016e4d57b104adc1155c7ed641e8213e6f1"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"dcacb2e14f7ab36f0e67029ec0f0f0119a25c057","unresolved":false,"context_lines":[{"line_number":155,"context_line":"  if the listing operations have to work when a cell goes down."},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"* Another alternative to creating dummy partial shells for instances in the"},{"line_number":158,"context_line":"  down cell would be to have a new API response change for ``GET /servers`` to"},{"line_number":159,"context_line":"  include the set of server uuids in the down cells. We could do basically do a"},{"line_number":160,"context_line":"  new microversion returning a specific partial construct to handle a down"},{"line_number":161,"context_line":"  cell."},{"line_number":162,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_1baa7f84","line":159,"range":{"start_line":158,"start_character":21,"end_line":159,"end_character":52},"in_reply_to":"5f7c97a3_700712cb","updated":"2018-06-07 14:19:37.000000000","message":"\u003e I\u0027m pretty uncomfortable with the client-side implications of an\n \u003e unversioned API change where you start getting back instances with\n \u003e fake values in them, especially when those don\u0027t match the existing\n \u003e types and values we\u0027ve documented in the API reference - we\u0027d have\n \u003e to have a big asterisk in the docs.\n \u003e \n \u003e So if we did this, I think we\u0027re talking about something like:\n \u003e \n \u003e 1. Fix the 500 we have today with a bug fix such that you can list\n \u003e instances and filter out down cells (L44).\n \u003e \n \u003e 2. With a new microversion, if there are down cells, return a new\n \u003e top-level field in the GET /servers response that lists the uuids\n \u003e of the instances from the down cells?\n\nYes. If the value of that new key is not [] then it is an explicit signal that the response in incomplete.\n\n \u003e \n \u003e - What would we do about filtering - still ignore instances from\n \u003e down cells?\n\nIgnore the down cells, report the unavailable instance in a new top level key so the API user will know that the listing is possibly incomplete.\n\n \u003e \n \u003e - Would the new top-level field only be shown to admins by default?\n \u003e Maybe this would depend on what we call the field - could just call\n \u003e it \"unavailable_servers\" or something. It doesn\u0027t have to be cells\n \u003e specific.\n \u003e \n\nI think we have to show it the the end user to communicate explicitly that the returned listing is incomplete. I\u0027m OK with the cell agnostic name of the new key.\n\n \u003e 3. GET /servers/{id} (nova show) on an instance in a down cell\n \u003e results in what? A 503? I think I prefer that to returning a shell.\n\nI feel in this case 503 is appropriate as the cell where the instance resides is down and it is an error in our service. \nIf we return a shell then I suggest to document the meaning of that shell (like status \u003d UNKNOWN) in the new microversion.","commit_id":"91d52016e4d57b104adc1155c7ed641e8213e6f1"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"c8b1fe1e7be4a2529b2da051acf233e7e8a7e1b2","unresolved":false,"context_lines":[{"line_number":155,"context_line":"  if the listing operations have to work when a cell goes down."},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"* Another alternative to creating dummy partial shells for instances in the"},{"line_number":158,"context_line":"  down cell would be to have a new API response change for ``GET /servers`` to"},{"line_number":159,"context_line":"  include the set of server uuids in the down cells. We could do basically do a"},{"line_number":160,"context_line":"  new microversion returning a specific partial construct to handle a down"},{"line_number":161,"context_line":"  cell."},{"line_number":162,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_5936c853","line":159,"range":{"start_line":158,"start_character":21,"end_line":159,"end_character":52},"in_reply_to":"5f7c97a3_ed27d2c6","updated":"2018-06-07 10:30:16.000000000","message":"maybe new API is cleaner, will think about the details of this as well.","commit_id":"91d52016e4d57b104adc1155c7ed641e8213e6f1"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"95d8e0cf7407c7555c8addee2d37bb1d27434a9b","unresolved":false,"context_lines":[{"line_number":179,"context_line":"---------------"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"When a cell is down, we currently get a 500 and this spec aims at returning a"},{"line_number":182,"context_line":"200 with partial info for ``GET /servers`` and ``GET /os-services`` REST APIs."},{"line_number":183,"context_line":"Other than this there is no new change in the existing microversions."},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"Security impact"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_302afa2b","line":182,"updated":"2018-06-07 13:55:28.000000000","message":"nit: and ``GET /servers/detail`` and ``GET /servers/{server_id}``.","commit_id":"91d52016e4d57b104adc1155c7ed641e8213e6f1"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"872d25b221cb917c596405bd4b4cad564e286d47","unresolved":false,"context_lines":[{"line_number":179,"context_line":"---------------"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"When a cell is down, we currently get a 500 and this spec aims at returning a"},{"line_number":182,"context_line":"200 with partial info for ``GET /servers`` and ``GET /os-services`` REST APIs."},{"line_number":183,"context_line":"Other than this there is no new change in the existing microversions."},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"Security impact"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_db7a10ef","line":182,"in_reply_to":"5f7c97a3_302afa2b","updated":"2018-06-15 19:11:39.000000000","message":"Done","commit_id":"91d52016e4d57b104adc1155c7ed641e8213e6f1"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"4b75a7f3b4d0e5d1e3700fe23a3ce6a44b4980af","unresolved":false,"context_lines":[{"line_number":180,"context_line":""},{"line_number":181,"context_line":"When a cell is down, we currently get a 500 and this spec aims at returning a"},{"line_number":182,"context_line":"200 with partial info for ``GET /servers`` and ``GET /os-services`` REST APIs."},{"line_number":183,"context_line":"Other than this there is no new change in the existing microversions."},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"Security impact"},{"line_number":186,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_ed4112a8","line":183,"updated":"2018-06-07 08:32:33.000000000","message":"I\u0027m afraid that returning shell instances from down cells will be confusing to the API user. I as an API user how can I distinguish between a real instance and a shell instance in the returned list? Do I have to look for strange values in the response like config_drive \u003d UNKNOWN or hostId \u003d UNKNOWN ? By forcing the consumer to look for those values first before she consumes the whole API response you basically break the consumer backward compatibility.","commit_id":"91d52016e4d57b104adc1155c7ed641e8213e6f1"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"58f18ebf3538c505e7d6836035051274b0f8e0cb","unresolved":false,"context_lines":[{"line_number":180,"context_line":""},{"line_number":181,"context_line":"When a cell is down, we currently get a 500 and this spec aims at returning a"},{"line_number":182,"context_line":"200 with partial info for ``GET /servers`` and ``GET /os-services`` REST APIs."},{"line_number":183,"context_line":"Other than this there is no new change in the existing microversions."},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"Security impact"},{"line_number":186,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_913addc1","line":183,"in_reply_to":"5f7c97a3_b0ea8ad5","updated":"2018-06-08 09:09:10.000000000","message":"I think we need a proper microversion to signal that from this point, Nova could potentially return partial information from a nova list or a nova show. Before this microversio, Nova always give you a full description from the DB, or fails miserably, but that\u0027s a one-off.","commit_id":"91d52016e4d57b104adc1155c7ed641e8213e6f1"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"95d8e0cf7407c7555c8addee2d37bb1d27434a9b","unresolved":false,"context_lines":[{"line_number":180,"context_line":""},{"line_number":181,"context_line":"When a cell is down, we currently get a 500 and this spec aims at returning a"},{"line_number":182,"context_line":"200 with partial info for ``GET /servers`` and ``GET /os-services`` REST APIs."},{"line_number":183,"context_line":"Other than this there is no new change in the existing microversions."},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"Security impact"},{"line_number":186,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_b0ea8ad5","line":183,"in_reply_to":"5f7c97a3_ed4112a8","updated":"2018-06-07 13:55:28.000000000","message":"The status field would have to be UNKNOWN as mentioned above, and then we\u0027d have to have a whole new document entry about that in the server status concepts guide - but agree that it\u0027s unsettling to make this unversioned change on users, I think all sorts of client code could break in this case.","commit_id":"91d52016e4d57b104adc1155c7ed641e8213e6f1"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"95d8e0cf7407c7555c8addee2d37bb1d27434a9b","unresolved":false,"context_lines":[{"line_number":197,"context_line":""},{"line_number":198,"context_line":"When a cell DB cannot be connected, ``nova list`` and ``nova service-list``"},{"line_number":199,"context_line":"will work with the records from the down cell not having all the information."},{"line_number":200,"context_line":"When these commands are used with filters/sorting, the output might depend on"},{"line_number":201,"context_line":"the filter used with the command for the down cell. See the section on Edge"},{"line_number":202,"context_line":"Cases for more info. When these commands are used with paging, the down cells"},{"line_number":203,"context_line":"will be ignored. ``nova boot`` will work if that project does not have any"},{"line_number":204,"context_line":"instances in the down cell."}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_f0c9e278","line":201,"range":{"start_line":200,"start_character":51,"end_line":201,"end_character":52},"updated":"2018-06-07 13:55:28.000000000","message":"Same as above, I don\u0027t agree with picking and choosing filters - if there are filters, we ignore instances from down cells since we can\u0027t tell if the filters would apply.","commit_id":"91d52016e4d57b104adc1155c7ed641e8213e6f1"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"872d25b221cb917c596405bd4b4cad564e286d47","unresolved":false,"context_lines":[{"line_number":197,"context_line":""},{"line_number":198,"context_line":"When a cell DB cannot be connected, ``nova list`` and ``nova service-list``"},{"line_number":199,"context_line":"will work with the records from the down cell not having all the information."},{"line_number":200,"context_line":"When these commands are used with filters/sorting, the output might depend on"},{"line_number":201,"context_line":"the filter used with the command for the down cell. See the section on Edge"},{"line_number":202,"context_line":"Cases for more info. When these commands are used with paging, the down cells"},{"line_number":203,"context_line":"will be ignored. ``nova boot`` will work if that project does not have any"},{"line_number":204,"context_line":"instances in the down cell."}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_8f3776ff","line":201,"range":{"start_line":200,"start_character":51,"end_line":201,"end_character":52},"in_reply_to":"5f7c97a3_51444547","updated":"2018-06-15 19:11:39.000000000","message":"agreed that picking and choosing filters is not smart/bug resilient.","commit_id":"91d52016e4d57b104adc1155c7ed641e8213e6f1"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"58f18ebf3538c505e7d6836035051274b0f8e0cb","unresolved":false,"context_lines":[{"line_number":197,"context_line":""},{"line_number":198,"context_line":"When a cell DB cannot be connected, ``nova list`` and ``nova service-list``"},{"line_number":199,"context_line":"will work with the records from the down cell not having all the information."},{"line_number":200,"context_line":"When these commands are used with filters/sorting, the output might depend on"},{"line_number":201,"context_line":"the filter used with the command for the down cell. See the section on Edge"},{"line_number":202,"context_line":"Cases for more info. When these commands are used with paging, the down cells"},{"line_number":203,"context_line":"will be ignored. ``nova boot`` will work if that project does not have any"},{"line_number":204,"context_line":"instances in the down cell."}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_51444547","line":201,"range":{"start_line":200,"start_character":51,"end_line":201,"end_character":52},"in_reply_to":"5f7c97a3_f0c9e278","updated":"2018-06-08 09:09:10.000000000","message":"Hell yeah ++\n\nWhat\u0027s the purpose for filtering ? You wanna do things with the results you get. What if Nova gives you instances that you can\u0027t play with ? Frustrating, isn\u0027t it ?","commit_id":"91d52016e4d57b104adc1155c7ed641e8213e6f1"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"95d8e0cf7407c7555c8addee2d37bb1d27434a9b","unresolved":false,"context_lines":[{"line_number":208,"context_line":""},{"line_number":209,"context_line":"There will not be any major impact on performance in normal situations. However"},{"line_number":210,"context_line":"when a cell is down, during list/boot time there will be a slight performance"},{"line_number":211,"context_line":"impact because of the extra check into the instance_mapping table and the time"},{"line_number":212,"context_line":"required for the construction of a minimalistic record in case a"},{"line_number":213,"context_line":"did_not_respond_sentinel is received from the scatter-gather utility."},{"line_number":214,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_50a0d6a5","line":211,"range":{"start_line":211,"start_character":43,"end_line":211,"end_character":59},"updated":"2018-06-07 13:55:28.000000000","message":"and request_specs","commit_id":"91d52016e4d57b104adc1155c7ed641e8213e6f1"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"872d25b221cb917c596405bd4b4cad564e286d47","unresolved":false,"context_lines":[{"line_number":208,"context_line":""},{"line_number":209,"context_line":"There will not be any major impact on performance in normal situations. However"},{"line_number":210,"context_line":"when a cell is down, during list/boot time there will be a slight performance"},{"line_number":211,"context_line":"impact because of the extra check into the instance_mapping table and the time"},{"line_number":212,"context_line":"required for the construction of a minimalistic record in case a"},{"line_number":213,"context_line":"did_not_respond_sentinel is received from the scatter-gather utility."},{"line_number":214,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_2ff7425c","line":211,"range":{"start_line":211,"start_character":43,"end_line":211,"end_character":59},"in_reply_to":"5f7c97a3_50a0d6a5","updated":"2018-06-15 19:11:39.000000000","message":"Done","commit_id":"91d52016e4d57b104adc1155c7ed641e8213e6f1"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"457b83c6de138d5d6807e041fedda2adba7cd8c3","unresolved":false,"context_lines":[{"line_number":35,"context_line":"#. ``nova list`` should work even if a cell goes down. This can be partitioned"},{"line_number":36,"context_line":"   into two use cases:"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"   #. The user has no instances in the down cell: Expected behaviour would be"},{"line_number":39,"context_line":"      for everything to work as normal. This has been fixed through"},{"line_number":40,"context_line":"      `smart server listing`_."},{"line_number":41,"context_line":"   #. The user has instances in the down cell: This needs to be gracefully"},{"line_number":42,"context_line":"      handled which can be split into two stages:"},{"line_number":43,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_4fe731e5","line":40,"range":{"start_line":38,"start_character":50,"end_line":40,"end_character":30},"updated":"2018-06-27 18:35:10.000000000","message":"Well, this is totally dependent on config and how the cloud assigns tenants to cells, so there is a solution, but it\u0027s not universal (not on by default) that everyone might use.","commit_id":"389e4851a8c6818e9744df4bae690304df6a0642"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"30f2575bc4035c1405a4df05d682183b2b7f47cd","unresolved":false,"context_lines":[{"line_number":35,"context_line":"#. ``nova list`` should work even if a cell goes down. This can be partitioned"},{"line_number":36,"context_line":"   into two use cases:"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"   #. The user has no instances in the down cell: Expected behaviour would be"},{"line_number":39,"context_line":"      for everything to work as normal. This has been fixed through"},{"line_number":40,"context_line":"      `smart server listing`_."},{"line_number":41,"context_line":"   #. The user has instances in the down cell: This needs to be gracefully"},{"line_number":42,"context_line":"      handled which can be split into two stages:"},{"line_number":43,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_9cd31702","line":40,"range":{"start_line":38,"start_character":50,"end_line":40,"end_character":30},"in_reply_to":"5f7c97a3_4fe731e5","updated":"2018-06-29 12:18:03.000000000","message":"I agree, I will mention \"depending on the config part\" as well to make it more explicit.","commit_id":"389e4851a8c6818e9744df4bae690304df6a0642"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"457b83c6de138d5d6807e041fedda2adba7cd8c3","unresolved":false,"context_lines":[{"line_number":70,"context_line":"This spec proposes to add a new ``queued_for_delete`` column in the"},{"line_number":71,"context_line":"``nova_api.instance_mappings`` table as discussed in the"},{"line_number":72,"context_line":"`cells summary in Dublin PTG`_. This column would be of type Boolean which by"},{"line_number":73,"context_line":"default will be False and upon the deletion of the respective instance, will be"},{"line_number":74,"context_line":"set to True. The corresponding ``queued_for_delete`` field will be added in the"},{"line_number":75,"context_line":"InstanceMapping object."},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"Listing of instances, migration records and services from the down cell will"}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_6a48db61","line":74,"range":{"start_line":73,"start_character":22,"end_line":74,"end_character":11},"updated":"2018-06-27 18:35:10.000000000","message":"How are we going to trigger setting queued_for_delete?\n\nDuring a normal delete, we lookup the instance from the cell here:\n\nhttps://github.com/openstack/nova/blob/c8b93fa2493dce82ef4c0b1e7a503ba9b81c2e86/nova/compute/api.py#L2324\n\nThat\u0027s going to fail with a DB connection error if the DB is down. Are we then going to handle that higher up in the DELETE /servers API controller code to find the instance mapping and update it for queued_for_delete\u003dTrue?","commit_id":"389e4851a8c6818e9744df4bae690304df6a0642"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"69ff2df19987880fa0bac62d2a7a14403966a388","unresolved":false,"context_lines":[{"line_number":70,"context_line":"This spec proposes to add a new ``queued_for_delete`` column in the"},{"line_number":71,"context_line":"``nova_api.instance_mappings`` table as discussed in the"},{"line_number":72,"context_line":"`cells summary in Dublin PTG`_. This column would be of type Boolean which by"},{"line_number":73,"context_line":"default will be False and upon the deletion of the respective instance, will be"},{"line_number":74,"context_line":"set to True. The corresponding ``queued_for_delete`` field will be added in the"},{"line_number":75,"context_line":"InstanceMapping object."},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"Listing of instances, migration records and services from the down cell will"}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_13b375eb","line":74,"range":{"start_line":73,"start_character":22,"end_line":74,"end_character":11},"in_reply_to":"5f7c97a3_5c2c9f00","updated":"2018-06-29 13:21:49.000000000","message":"\u003e 1) if a cell is down, nova deleted --server-uuid will fail.\n\nYes agree.\n\n\u003e 2) if a cell is up, then deleted would work and the moment we set instance.deleted \u003d instance.id, we also set queued_for_delete to true\n\nThis is a bit tricky. For a normal delete where the instance is deleted on the compute, you can\u0027t up-call to update the instance mapping, same for soft delete. So you have update the instance mapping from the API *before* casting to nova-compute (if it\u0027s up). There is also the \u0027local delete\u0027 case in the API where the compute service is down so the API deletes the instance.\n\nSo there are 3 places in the API that we\u0027d have to update the instance mapping to set queued_for_delete:\n\n1. normal delete in compute: https://github.com/openstack/nova/blob/d68b9113a5c64d1d698203d4f847d2477f1064ae/nova/compute/api.py#L2146\n\n2. local delete (compute is down): https://github.com/openstack/nova/blob/d68b9113a5c64d1d698203d4f847d2477f1064ae/nova/compute/api.py#L2137\n\n3. soft delete: https://github.com/openstack/nova/blob/d68b9113a5c64d1d698203d4f847d2477f1064ae/nova/compute/api.py#L2166\n\nWe could also maybe just do it in both callbacks for delete and soft delete, would have to inspect the code. The thing about that is the _do_delete callback is called before instance.destroy() in the local case and I\u0027d think we want to make sure we destroyed the instance in the cell before marking the instance mapping.","commit_id":"389e4851a8c6818e9744df4bae690304df6a0642"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"30f2575bc4035c1405a4df05d682183b2b7f47cd","unresolved":false,"context_lines":[{"line_number":70,"context_line":"This spec proposes to add a new ``queued_for_delete`` column in the"},{"line_number":71,"context_line":"``nova_api.instance_mappings`` table as discussed in the"},{"line_number":72,"context_line":"`cells summary in Dublin PTG`_. This column would be of type Boolean which by"},{"line_number":73,"context_line":"default will be False and upon the deletion of the respective instance, will be"},{"line_number":74,"context_line":"set to True. The corresponding ``queued_for_delete`` field will be added in the"},{"line_number":75,"context_line":"InstanceMapping object."},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"Listing of instances, migration records and services from the down cell will"}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_5c2c9f00","line":74,"range":{"start_line":73,"start_character":22,"end_line":74,"end_character":11},"in_reply_to":"5f7c97a3_6a48db61","updated":"2018-06-29 12:18:03.000000000","message":"So here is what I thought,\n\n1) if a cell is down, nova deleted --server-uuid will fail.\n2) if a cell is up, then deleted would work and the moment we set instance.deleted \u003d instance.id, we also set queued_for_delete to true (in case of other types of delete like \"local_delete\" likewise, at an appropriate point of destroying the db record, we update the queued_for_delete), and when we do SOFT_DELETE, the moment we shutdown the instance and set its state to \"SOFT_DELETE\" we set the queued_for_delete to True. When we reclaim the instance, the queued_for_delete will go back to False.\n\nHope this makes sense?","commit_id":"389e4851a8c6818e9744df4bae690304df6a0642"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"457b83c6de138d5d6807e041fedda2adba7cd8c3","unresolved":false,"context_lines":[{"line_number":74,"context_line":"set to True. The corresponding ``queued_for_delete`` field will be added in the"},{"line_number":75,"context_line":"InstanceMapping object."},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"Listing of instances, migration records and services from the down cell will"},{"line_number":78,"context_line":"return a `did_not_respond_sentinel`_ object from the scatter-gather utility."},{"line_number":79,"context_line":"Using this response we can know if a cell is down or not and accordingly modify"},{"line_number":80,"context_line":"the listing commands to work in the following manner for those records which"}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_cf47c1a3","line":77,"range":{"start_line":77,"start_character":22,"end_line":77,"end_character":39},"updated":"2018-06-27 18:35:10.000000000","message":"I\u0027m not sure it\u0027s worth mentioning this in this spec since we\u0027re not proposing to try and return any kind of minimalist migration record structure since we don\u0027t have anything in the API DB to do that like we have for instances (InstanceMapping) or services (HostMapping).","commit_id":"389e4851a8c6818e9744df4bae690304df6a0642"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"30f2575bc4035c1405a4df05d682183b2b7f47cd","unresolved":false,"context_lines":[{"line_number":74,"context_line":"set to True. The corresponding ``queued_for_delete`` field will be added in the"},{"line_number":75,"context_line":"InstanceMapping object."},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"Listing of instances, migration records and services from the down cell will"},{"line_number":78,"context_line":"return a `did_not_respond_sentinel`_ object from the scatter-gather utility."},{"line_number":79,"context_line":"Using this response we can know if a cell is down or not and accordingly modify"},{"line_number":80,"context_line":"the listing commands to work in the following manner for those records which"}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_1c362753","line":77,"range":{"start_line":77,"start_character":22,"end_line":77,"end_character":39},"in_reply_to":"5f7c97a3_cf47c1a3","updated":"2018-06-29 12:18:03.000000000","message":"ack, will remove this.","commit_id":"389e4851a8c6818e9744df4bae690304df6a0642"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"457b83c6de138d5d6807e041fedda2adba7cd8c3","unresolved":false,"context_lines":[{"line_number":83,"context_line":"#. ``nova list`` should return a minimalistic construct from the available"},{"line_number":84,"context_line":"   information in the API DB which would include:"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"   #. instance_uuid and created_at from the instance_mapping table."},{"line_number":87,"context_line":"   #. status of the instance would be \"UNKNOWN\" which would be the major"},{"line_number":88,"context_line":"      indication that the record for this instance is partial."},{"line_number":89,"context_line":"   #. rest of the field keys will be missing or their values will be NULL."}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_effe3d38","line":86,"updated":"2018-06-27 18:35:10.000000000","message":"Do you want to include project_id? We might as well since it\u0027s available in the instance_mappings table. That might be useful for an admin that\u0027s listing instances using --all-tenants.","commit_id":"389e4851a8c6818e9744df4bae690304df6a0642"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"30f2575bc4035c1405a4df05d682183b2b7f47cd","unresolved":false,"context_lines":[{"line_number":83,"context_line":"#. ``nova list`` should return a minimalistic construct from the available"},{"line_number":84,"context_line":"   information in the API DB which would include:"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"   #. instance_uuid and created_at from the instance_mapping table."},{"line_number":87,"context_line":"   #. status of the instance would be \"UNKNOWN\" which would be the major"},{"line_number":88,"context_line":"      indication that the record for this instance is partial."},{"line_number":89,"context_line":"   #. rest of the field keys will be missing or their values will be NULL."}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_fc09eb83","line":86,"in_reply_to":"5f7c97a3_effe3d38","updated":"2018-06-29 12:18:03.000000000","message":"makes sense, I will include whatever I can from instance_mappings, and leave the req_spec info for performace reasons during listing.","commit_id":"389e4851a8c6818e9744df4bae690304df6a0642"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"3d28792f0d5f18c03438e1ac4290f903b57f5bd3","unresolved":false,"context_lines":[{"line_number":86,"context_line":"   #. instance_uuid and created_at from the instance_mapping table."},{"line_number":87,"context_line":"   #. status of the instance would be \"UNKNOWN\" which would be the major"},{"line_number":88,"context_line":"      indication that the record for this instance is partial."},{"line_number":89,"context_line":"   #. rest of the field keys will be missing or their values will be NULL."},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"   See the `Edge Cases`_ section for more info on running this command with"},{"line_number":92,"context_line":"   filters, marker, sorting and paging."}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_38502ad5","line":89,"range":{"start_line":89,"start_character":6,"end_line":89,"end_character":74},"updated":"2018-06-26 09:01:57.000000000","message":"working on a POC right now, to see which is more neater.","commit_id":"389e4851a8c6818e9744df4bae690304df6a0642"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"457b83c6de138d5d6807e041fedda2adba7cd8c3","unresolved":false,"context_lines":[{"line_number":98,"context_line":"   include:"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"   #. instance_uuid, created_at and project_id from the instance_mapping table."},{"line_number":101,"context_line":"   #. flavor, image and availability_zone from the request_spec table."},{"line_number":102,"context_line":"   #. power_state is set to NOSTATE."},{"line_number":103,"context_line":"   #. vm_state can be set to NULL or DELETED based on ``queued_for_delete``."},{"line_number":104,"context_line":"   #. rest of the field keys will be missing or their values will be NULL."}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_ef715de1","line":101,"updated":"2018-06-27 18:35:10.000000000","message":"For flavor and image, I was hesitant to include that information from the request spec, because the flavor changes on resize and the image can change on rebuild, but fortunately we update the request spec in both cases:\n\nresize:\n\na) https://github.com/openstack/nova/blob/c8b93fa2493dce82ef4c0b1e7a503ba9b81c2e86/nova/conductor/manager.py#L311\n\nb) https://github.com/openstack/nova/blob/c8b93fa2493dce82ef4c0b1e7a503ba9b81c2e86/nova/conductor/manager.py#L351\n\nrebuild:\n\nhttps://github.com/openstack/nova/blob/c8b93fa2493dce82ef4c0b1e7a503ba9b81c2e86/nova/compute/api.py#L3220\n\n--\n\nWe also have the user_id in the RequestSpec now:\n\nI3e174ae76931f8279540e92328c7c36a7bcaabc0\n\nAnd we have RequestSpec.security_groups for the requested security groups on server create, however, I\u0027d not rely on that since (1) that would be stale for any ports attached after the server was created if those ports are in other security groups and (2) you can get the security groups from neutron for the instance by linking the instance id to the port to the security group.","commit_id":"389e4851a8c6818e9744df4bae690304df6a0642"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"30f2575bc4035c1405a4df05d682183b2b7f47cd","unresolved":false,"context_lines":[{"line_number":98,"context_line":"   include:"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"   #. instance_uuid, created_at and project_id from the instance_mapping table."},{"line_number":101,"context_line":"   #. flavor, image and availability_zone from the request_spec table."},{"line_number":102,"context_line":"   #. power_state is set to NOSTATE."},{"line_number":103,"context_line":"   #. vm_state can be set to NULL or DELETED based on ``queued_for_delete``."},{"line_number":104,"context_line":"   #. rest of the field keys will be missing or their values will be NULL."}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_7c72bb14","line":101,"in_reply_to":"5f7c97a3_ef715de1","updated":"2018-06-29 12:18:03.000000000","message":"\u003e For flavor and image, I was hesitant to include that information\n \u003e from the request spec, because the flavor changes on resize and the\n \u003e image can change on rebuild, but fortunately we update the request\n \u003e spec in both cases:\n \u003e \n \u003e resize:\n \u003e \n \u003e a) https://github.com/openstack/nova/blob/c8b93fa2493dce82ef4c0b1e7a503ba9b81c2e86/nova/conductor/manager.py#L311\n \u003e \n \u003e b) https://github.com/openstack/nova/blob/c8b93fa2493dce82ef4c0b1e7a503ba9b81c2e86/nova/conductor/manager.py#L351\n \u003e \n \u003e rebuild:\n \u003e \n \u003e https://github.com/openstack/nova/blob/c8b93fa2493dce82ef4c0b1e7a503ba9b81c2e86/nova/compute/api.py#L3220\n \u003e \n \u003e --\n\nthanks for confirming this.\n\n \u003e \n \u003e We also have the user_id in the RequestSpec now:\n \u003e \n \u003e I3e174ae76931f8279540e92328c7c36a7bcaabc0\n\nThis is cool, I did not know we had user_id in RequestSpec.\n\n \u003e \n \u003e And we have RequestSpec.security_groups for the requested security\n \u003e groups on server create, however, I\u0027d not rely on that since (1)\n \u003e that would be stale for any ports attached after the server was\n \u003e created if those ports are in other security groups and (2) you can\n \u003e get the security groups from neutron for the instance by linking\n \u003e the instance id to the port to the security group.\n\ncool, I will leave it out then.","commit_id":"389e4851a8c6818e9744df4bae690304df6a0642"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"457b83c6de138d5d6807e041fedda2adba7cd8c3","unresolved":false,"context_lines":[{"line_number":100,"context_line":"   #. instance_uuid, created_at and project_id from the instance_mapping table."},{"line_number":101,"context_line":"   #. flavor, image and availability_zone from the request_spec table."},{"line_number":102,"context_line":"   #. power_state is set to NOSTATE."},{"line_number":103,"context_line":"   #. vm_state can be set to NULL or DELETED based on ``queued_for_delete``."},{"line_number":104,"context_line":"   #. rest of the field keys will be missing or their values will be NULL."},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"#. ``nova service-list`` should return a minimalistic construct from the"}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_cf510133","line":103,"range":{"start_line":103,"start_character":29,"end_line":103,"end_character":33},"updated":"2018-06-27 18:35:10.000000000","message":"The status of the instance should be ``UNKNOWN`` in nova show to mirror the status of the instance from nova list right?\n\nI don\u0027t think we can say it\u0027s DELETED because if the cell is down, you can\u0027t even look up the instance to delete it, this will fail with a 500 DB connection error:\n\nhttps://github.com/openstack/nova/blob/c8b93fa2493dce82ef4c0b1e7a503ba9b81c2e86/nova/compute/api.py#L2324\n\nMaybe I\u0027m not clear on how queued_for_delete is going to work. See above.\n\nLet\u0027s consider what happens during a \"local delete\" scenario today in the API - that\u0027s when deleting an instance where the compute host it\u0027s running on is down, or it\u0027s shelved offloaded and doesn\u0027t have a host. In that case the API code looks up the instance from the cell, detaches volumes and ports and then deletes the instance (along with allocations in placement now I guess). We also delete the instance from the cell database in that case:\n\nhttps://github.com/openstack/nova/blob/c8b93fa2493dce82ef4c0b1e7a503ba9b81c2e86/nova/compute/api.py#L2137\n\nIn the case that the cell is down, we\u0027re queuing the instance for delete in the API DB but we haven\u0027t actually deleted the instance because we can\u0027t delete it while the cell DB connection is down.\n\nRegarding the status of these types of instances, we could add a new status value, something like \"DELETING\" or \"QUEUED_FOR_DELETE\"? Or just UNKNOWN if GET /servers (listing) isn\u0027t going to make a distinction.\n\nWhat do we do about these types of instances once the cell comes back up? We have a periodic that deletes queued SOFT_DELETED instances, but are we going to have a periodic somewhere that deletes queued_for_delete instances as well? Note the nova-api service doesn\u0027t run periodics today - super-conductor maybe could though (nova-scheduler does). Or would we just leave it up to the user/admin to delete those queued_for_delete instances once the cell is back and we have a real status on the instance? If the latter, we\u0027d have an instance status going from QUEUED_FOR_DELETE to ACTIVE or SHUTDOWN or ERROR, something like that, which could be weird. Maybe it\u0027s best to just stick with UNKNOWN status while the cell is unavailable regardless of queued_for_delete?","commit_id":"389e4851a8c6818e9744df4bae690304df6a0642"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"30f2575bc4035c1405a4df05d682183b2b7f47cd","unresolved":false,"context_lines":[{"line_number":100,"context_line":"   #. instance_uuid, created_at and project_id from the instance_mapping table."},{"line_number":101,"context_line":"   #. flavor, image and availability_zone from the request_spec table."},{"line_number":102,"context_line":"   #. power_state is set to NOSTATE."},{"line_number":103,"context_line":"   #. vm_state can be set to NULL or DELETED based on ``queued_for_delete``."},{"line_number":104,"context_line":"   #. rest of the field keys will be missing or their values will be NULL."},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"#. ``nova service-list`` should return a minimalistic construct from the"}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_bcfff333","line":103,"range":{"start_line":103,"start_character":29,"end_line":103,"end_character":33},"in_reply_to":"5f7c97a3_6d99d06b","updated":"2018-06-29 12:18:03.000000000","message":"I up also against allowing delete when a cell is down. However in the case of reclaiming an instance back, we should be setting the \"queued_for_delete\" back to False.\n\nand @mriedem: yes the \"status\" will be \"UNKNOWN\" and this depends on \"vm_state\" and \"task_state\" being None. So yea I will avoid confusions and just always have status as \"UNKNOWN\", meaning \"vm_state\" and \"task_state\" will be NULL.\n\nbtw, the situation of local delete, just leaves orphaned RS and IM I guess..","commit_id":"389e4851a8c6818e9744df4bae690304df6a0642"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"cc87c6e6b26da936bb62c728af6fbc445f4ae68b","unresolved":false,"context_lines":[{"line_number":100,"context_line":"   #. instance_uuid, created_at and project_id from the instance_mapping table."},{"line_number":101,"context_line":"   #. flavor, image and availability_zone from the request_spec table."},{"line_number":102,"context_line":"   #. power_state is set to NOSTATE."},{"line_number":103,"context_line":"   #. vm_state can be set to NULL or DELETED based on ``queued_for_delete``."},{"line_number":104,"context_line":"   #. rest of the field keys will be missing or their values will be NULL."},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"#. ``nova service-list`` should return a minimalistic construct from the"}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_6d99d06b","line":103,"range":{"start_line":103,"start_character":29,"end_line":103,"end_character":33},"in_reply_to":"5f7c97a3_8a1a177a","updated":"2018-06-27 23:20:20.000000000","message":"On IRC chatting with mriedem I wondered, is returning a 500 upon a delete request a change in behavior? It\u0027s not, if your entire database is down, as I confirmed with devstack:\n\n $ sudo systemctl stop mysql\n $ nova list\n ERROR (InternalServerError): An unexpected error prevented the server from fulfilling your request. (HTTP 500) (Request-ID: req-60bb1074-64a9-4ebf-a372-c3d985e8eb75)\n $ nova delete test\n $ ERROR (InternalServerError): An unexpected error prevented the server from fulfilling your request. (HTTP 500) (Request-ID: req-1e97227a-2e2d-46a6-939d-70bd38d4cb3c)\n\nThe not great thing about disallowing (via 500) delete when a cell is down is that cells are supposed to be transparent to the user. That said, as Matt pointed out, we have no periodic queuing system for deletes so we don\u0027t seem to have any choice here.\n\nAs summarized in the IRC conversation linked by Matt in the non-inline comments, it seems like we have to disallow delete when a cell is down, only set \u0027queued_for_delete\u0027 once we have successfully initiated a delete in an up cell, and never set queued_for_delete back to False. Once it\u0027s set to True, that\u0027s it. And this is all from the perspective that the main purpose of \u0027queued_for_delete\u0027 is to avoid a situation where instances that were deleted and absent in a \u0027nova list\u0027 reappea,r back from the dead, in \u0027nova list\u0027 when cells go down.","commit_id":"389e4851a8c6818e9744df4bae690304df6a0642"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"69ff2df19987880fa0bac62d2a7a14403966a388","unresolved":false,"context_lines":[{"line_number":100,"context_line":"   #. instance_uuid, created_at and project_id from the instance_mapping table."},{"line_number":101,"context_line":"   #. flavor, image and availability_zone from the request_spec table."},{"line_number":102,"context_line":"   #. power_state is set to NOSTATE."},{"line_number":103,"context_line":"   #. vm_state can be set to NULL or DELETED based on ``queued_for_delete``."},{"line_number":104,"context_line":"   #. rest of the field keys will be missing or their values will be NULL."},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"#. ``nova service-list`` should return a minimalistic construct from the"}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_532c8d00","line":103,"range":{"start_line":103,"start_character":29,"end_line":103,"end_character":33},"in_reply_to":"5f7c97a3_bcfff333","updated":"2018-06-29 13:21:49.000000000","message":"\u003e However in the case of reclaiming an instance back, we should be setting the \"queued_for_delete\" back to False.\n\nWe\u0027d have to think about this. If the cell is down, trying to restore a soft deleted instance will fail during the instance lookup from the database. If the cell is up and we can get the instance from the cell, then yes I agree we need to change queud_for_delete\u003dFalse for that instance here:\n\nhttps://github.com/openstack/nova/blob/d68b9113a5c64d1d698203d4f847d2477f1064ae/nova/compute/api.py#L2221\n\n\u003e btw, the situation of local delete, just leaves orphaned RS and IM I guess..\n\nThat\u0027s true regardless of this spec or the down cell - we clean those up during archive if the instances are purged.","commit_id":"389e4851a8c6818e9744df4bae690304df6a0642"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1a1540038a6af3683db368839d0f179b3f46f189","unresolved":false,"context_lines":[{"line_number":100,"context_line":"   #. instance_uuid, created_at and project_id from the instance_mapping table."},{"line_number":101,"context_line":"   #. flavor, image and availability_zone from the request_spec table."},{"line_number":102,"context_line":"   #. power_state is set to NOSTATE."},{"line_number":103,"context_line":"   #. vm_state can be set to NULL or DELETED based on ``queued_for_delete``."},{"line_number":104,"context_line":"   #. rest of the field keys will be missing or their values will be NULL."},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"#. ``nova service-list`` should return a minimalistic construct from the"}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_8a1a177a","line":103,"range":{"start_line":103,"start_character":29,"end_line":103,"end_character":33},"in_reply_to":"5f7c97a3_cf510133","updated":"2018-06-27 18:42:00.000000000","message":"Here is another question: will we ever clear the queued_for_delete flag (set from True to False) once the cell comes back up? Or does it not need to be cleared if it\u0027s only read in the cases that the cell is down? But then it\u0027s weird if I issue DELETE /servers/{id}, get a 202, and then my server status is always UNKNOWN and eventually goes to ACTIVE once the cell is back up - we aren\u0027t really doing any queuing in that case. idk, maybe we shouldn\u0027t even allow deleting servers in down cells since (1) we can\u0027t do it and (2) we have no mechanism proposed to actually delete those instances once the cell is back up.","commit_id":"389e4851a8c6818e9744df4bae690304df6a0642"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"85e003a83592ca160398cd3583f7f601cd4189e5","unresolved":false,"context_lines":[{"line_number":136,"context_line":"Edge Cases"},{"line_number":137,"context_line":"----------"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"* Filters: If the user is listing servers using filters the results from the"},{"line_number":140,"context_line":"  down cell will be skipped and no minimalistic construct will be provided"},{"line_number":141,"context_line":"  since there is no way of validating the filtered results from the down cell"},{"line_number":142,"context_line":"  if the value of the filter key itself is missing. Note that by default"}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_6a9e4807","line":139,"updated":"2018-07-02 12:19:06.000000000","message":"add a note regarding \"--minimal\" being the only filter that would work.","commit_id":"389e4851a8c6818e9744df4bae690304df6a0642"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5cc4b3915879f2987025ee4cd64010af81876376","unresolved":false,"context_lines":[{"line_number":140,"context_line":"  down cell will be skipped and no minimalistic construct will be provided"},{"line_number":141,"context_line":"  since there is no way of validating the filtered results from the down cell"},{"line_number":142,"context_line":"  if the value of the filter key itself is missing. Note that by default"},{"line_number":143,"context_line":"  ``nova list`` uses the ``deleted\u003dFalse`` and   ``project_id\u003dtenant_id``"},{"line_number":144,"context_line":"  filters and since we know both of these values from the instance_mapping"},{"line_number":145,"context_line":"  table, they will be the only allowed filters."},{"line_number":146,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_de96944a","line":143,"range":{"start_line":143,"start_character":25,"end_line":143,"end_character":42},"updated":"2018-06-27 19:05:21.000000000","message":"See related questions on L270. If I\u0027m running \"nova list --deleted\" to list deleted instances, what\u0027s going to happen for instances in down cells? Or should we just skip those if the deleted filter parameter is True to show deleted instances? Otherwise InstanceMapping.queued_for_delete has to always be set to True when a delete request is issued, regardless of the cell being down.","commit_id":"389e4851a8c6818e9744df4bae690304df6a0642"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"69ff2df19987880fa0bac62d2a7a14403966a388","unresolved":false,"context_lines":[{"line_number":140,"context_line":"  down cell will be skipped and no minimalistic construct will be provided"},{"line_number":141,"context_line":"  since there is no way of validating the filtered results from the down cell"},{"line_number":142,"context_line":"  if the value of the filter key itself is missing. Note that by default"},{"line_number":143,"context_line":"  ``nova list`` uses the ``deleted\u003dFalse`` and   ``project_id\u003dtenant_id``"},{"line_number":144,"context_line":"  filters and since we know both of these values from the instance_mapping"},{"line_number":145,"context_line":"  table, they will be the only allowed filters."},{"line_number":146,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_d3209dfb","line":143,"range":{"start_line":143,"start_character":25,"end_line":143,"end_character":42},"in_reply_to":"5f7c97a3_1c15c749","updated":"2018-06-29 13:21:49.000000000","message":"OK let\u0027s call that out in the spec for clarity.","commit_id":"389e4851a8c6818e9744df4bae690304df6a0642"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"30f2575bc4035c1405a4df05d682183b2b7f47cd","unresolved":false,"context_lines":[{"line_number":140,"context_line":"  down cell will be skipped and no minimalistic construct will be provided"},{"line_number":141,"context_line":"  since there is no way of validating the filtered results from the down cell"},{"line_number":142,"context_line":"  if the value of the filter key itself is missing. Note that by default"},{"line_number":143,"context_line":"  ``nova list`` uses the ``deleted\u003dFalse`` and   ``project_id\u003dtenant_id``"},{"line_number":144,"context_line":"  filters and since we know both of these values from the instance_mapping"},{"line_number":145,"context_line":"  table, they will be the only allowed filters."},{"line_number":146,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_1c15c749","line":143,"range":{"start_line":143,"start_character":25,"end_line":143,"end_character":42},"in_reply_to":"5f7c97a3_de96944a","updated":"2018-06-29 12:18:03.000000000","message":"\u003e See related questions on L270. If I\u0027m running \"nova list --deleted\"\n \u003e to list deleted instances, what\u0027s going to happen for instances in\n \u003e down cells?\n\n\"--deleted\" is a filter, hence this operation will skip down cells (according to our united agreement that on using filters, we skip down cells). Meaning only if my request has deleted\u003dFalse, which is the default \"nova list\" it will work.\n\n \u003e Or should we just skip those if the deleted filter\n \u003e parameter is True to show deleted instances? \n\nexactly!\n\n \u003e Otherwise\n \u003e InstanceMapping.queued_for_delete has to always be set to True when\n \u003e a delete request is issued, regardless of the cell being down.","commit_id":"389e4851a8c6818e9744df4bae690304df6a0642"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"457b83c6de138d5d6807e041fedda2adba7cd8c3","unresolved":false,"context_lines":[{"line_number":203,"context_line":"``GET /servers/detail`` and ``GET /servers/{server_id}`` REST APIs."},{"line_number":204,"context_line":"There will be a new microversion for the client to recognise missing keys and"},{"line_number":205,"context_line":"NULL values for certain keys in the response."},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"Security impact"},{"line_number":208,"context_line":"---------------"},{"line_number":209,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_caeb2fa2","line":206,"updated":"2018-06-27 18:35:10.000000000","message":"It would be nice to have a sample response here where we have an instance from an up cell and one from a down cell, something like::\n\n{\n    \"servers\": [\n        {\n            \"OS-DCF:diskConfig\": \"AUTO\",\n            \"OS-EXT-AZ:availability_zone\": \"nova\",\n            \"OS-EXT-SRV-ATTR:host\": \"compute\",\n            \"OS-EXT-SRV-ATTR:hostname\": \"new-server-test\",\n            \"OS-EXT-SRV-ATTR:hypervisor_hostname\": \"fake-mini\",\n            \"OS-EXT-SRV-ATTR:instance_name\": \"instance-00000001\",\n            \"OS-EXT-SRV-ATTR:kernel_id\": \"\",\n            \"OS-EXT-SRV-ATTR:launch_index\": 0,\n            \"OS-EXT-SRV-ATTR:ramdisk_id\": \"\",\n            \"OS-EXT-SRV-ATTR:reservation_id\": \"r-y0w4v32k\",\n            \"OS-EXT-SRV-ATTR:root_device_name\": \"/dev/sda\",\n            \"OS-EXT-SRV-ATTR:user_data\": \"IyEvYmluL2Jhc2gKL2Jpbi9zdQplY2hvICJJIGFtIGluIHlvdSEiCg\u003d\u003d\",\n            \"OS-EXT-STS:power_state\": 1,\n            \"OS-EXT-STS:task_state\": null,\n            \"OS-EXT-STS:vm_state\": \"active\",\n            \"OS-SRV-USG:launched_at\": \"2017-10-10T15:49:09.516729\",\n            \"OS-SRV-USG:terminated_at\": null,\n            \"accessIPv4\": \"1.2.3.4\",\n            \"accessIPv6\": \"80fe::\",\n            \"addresses\": {\n                \"private\": [\n                    {\n                        \"OS-EXT-IPS-MAC:mac_addr\": \"aa:bb:cc:dd:ee:ff\",\n                        \"OS-EXT-IPS:type\": \"fixed\",\n                        \"addr\": \"192.168.0.3\",\n                        \"version\": 4\n                    }\n                ]\n            },\n            \"config_drive\": \"\",\n            \"created\": \"2017-10-10T15:49:08Z\",\n            \"description\": null,\n            \"flavor\": {\n                \"disk\": 1,\n                \"ephemeral\": 0,\n                \"extra_specs\": {\n                    \"hw:cpu_model\": \"SandyBridge\",\n                    \"hw:cpu_policy\": \"dedicated\",\n                    \"hw:mem_page_size\": \"2048\"\n                },\n                \"original_name\": \"m1.tiny.specs\",\n                \"ram\": 512,\n                \"swap\": 0,\n                \"vcpus\": 1\n            },\n            \"hostId\": \"2091634baaccdc4c5a1d57069c833e402921df696b7f970791b12ec6\",\n            \"host_status\": \"UP\",\n            \"id\": \"569f39f9-7c76-42a1-9c2d-8394e2638a6d\",\n            \"image\": {\n                \"id\": \"70a599e0-31e7-49b7-b260-868f441e862b\",\n                \"links\": [\n                    {\n                        \"href\": \"http://openstack.example.com/6f70656e737461636b20342065766572/images/70a599e0-31e7-49b7-b260-868f441e862b\",\n                        \"rel\": \"bookmark\"\n                    }\n                ]\n            },\n            \"key_name\": null,\n            \"links\": [\n                {\n                    \"href\": \"http://openstack.example.com/v2.1/6f70656e737461636b20342065766572/servers/569f39f9-7c76-42a1-9c2d-8394e2638a6d\",\n                    \"rel\": \"self\"\n                },\n                {\n                    \"href\": \"http://openstack.example.com/6f70656e737461636b20342065766572/servers/569f39f9-7c76-42a1-9c2d-8394e2638a6d\",\n                    \"rel\": \"bookmark\"\n                }\n            ],\n            \"locked\": false,\n            \"metadata\": {\n                \"My Server Name\": \"Apache1\"\n            },\n            \"name\": \"new-server-test\",\n            \"os-extended-volumes:volumes_attached\": [],\n            \"progress\": 0,\n            \"security_groups\": [\n                {\n                    \"name\": \"default\"\n                }\n            ],\n            \"status\": \"ACTIVE\",\n            \"tags\": [],\n            \"tenant_id\": \"6f70656e737461636b20342065766572\",\n            \"trusted_image_certificates\": [\n                \"0b5d2c72-12cc-4ba6-a8d7-3ff5cc1d8cb8\",\n                \"674736e3-f25c-405c-8362-bbf991e0ce0a\"\n            ],\n            \"updated\": \"2017-10-10T15:49:09Z\",\n            \"user_id\": \"fake\"\n        },\n        {\n            \"created\": \"2017-10-10T15:49:08Z\",\n            \"status\": \"UNKNOWN\",\n            \"tenant_id\": \"6f70656e737461636b20342065766572\",\n            \"id\": \"81e4d61f-9856-48fa-b9f7-4435f2dbde33\"\n        }\n    ]\n}","commit_id":"389e4851a8c6818e9744df4bae690304df6a0642"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"69ff2df19987880fa0bac62d2a7a14403966a388","unresolved":false,"context_lines":[{"line_number":203,"context_line":"``GET /servers/detail`` and ``GET /servers/{server_id}`` REST APIs."},{"line_number":204,"context_line":"There will be a new microversion for the client to recognise missing keys and"},{"line_number":205,"context_line":"NULL values for certain keys in the response."},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"Security impact"},{"line_number":208,"context_line":"---------------"},{"line_number":209,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_f357d959","line":206,"in_reply_to":"5f7c97a3_708dff7a","updated":"2018-06-29 13:21:49.000000000","message":"I prefer option 1, I don\u0027t like the fake values idea - what\u0027s the point? The client can\u0027t use them anyway, and then we have to make sure to mirror that for any new fields we add (like trusted_certs was the last new one).","commit_id":"389e4851a8c6818e9744df4bae690304df6a0642"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"30f2575bc4035c1405a4df05d682183b2b7f47cd","unresolved":false,"context_lines":[{"line_number":203,"context_line":"``GET /servers/detail`` and ``GET /servers/{server_id}`` REST APIs."},{"line_number":204,"context_line":"There will be a new microversion for the client to recognise missing keys and"},{"line_number":205,"context_line":"NULL values for certain keys in the response."},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"Security impact"},{"line_number":208,"context_line":"---------------"},{"line_number":209,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_708dff7a","line":206,"in_reply_to":"5f7c97a3_caeb2fa2","updated":"2018-06-29 12:18:03.000000000","message":"Absolutely! This depends on which path we take,\n\n1. Where we skip all keys except (uuid, project_id, created_at fields from instance_mapping), and for this we would have to modify stuff under nova/api/openstack/compute like avz, keypairs, config_drive, extended_server_attributed etc.. to ignore those checks for one part of the list (i.e the unavailable records)\n\n2. we just add a \"cell_down_instance\" like a \"fake_instance\" with all keys set to \"UNKNOWN\" and if they are not of string type, then set to None.\n\nI am working to put up POCs on both of these so that its easier to vote on which way to go. I personally don\u0027t have a strong opinion since either ways we would document saying \"from this microversion, except these values..\"","commit_id":"389e4851a8c6818e9744df4bae690304df6a0642"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"457b83c6de138d5d6807e041fedda2adba7cd8c3","unresolved":false,"context_lines":[{"line_number":221,"context_line":"``nova service-list`` will work with the records from the down cell not having"},{"line_number":222,"context_line":"all the information. When these commands are used with filters/sorting/paging,"},{"line_number":223,"context_line":"the output will totally skip the down cell and return only information from the"},{"line_number":224,"context_line":"up cells. ``nova boot`` will work if that project does not have any instances"},{"line_number":225,"context_line":"in the down cell."},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"Performance Impact"},{"line_number":228,"context_line":"------------------"}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_8ac77712","line":225,"range":{"start_line":224,"start_character":10,"end_line":225,"end_character":17},"updated":"2018-06-27 18:35:10.000000000","message":"Well, with caveats: if I\u0027m requesting a server in an AZ that happens to be in a down cell, that\u0027s not going to work, or if I\u0027m an admin forcing a server to be created in a specific host in a down cell that won\u0027t work either - same for tenants isolated to aggregates in down cells, etc. Those are all scheduling issues. Now that I ask about that, do we correctly handle scheduling across computes that are in down cells when we pull them from the database? The answer is yes:\n\nhttps://github.com/openstack/nova/blob/c8b93fa2493dce82ef4c0b1e7a503ba9b81c2e86/nova/scheduler/host_manager.py#L631-L634\n\nSo in those server create scenarios, you\u0027d just get NoValidHost which is the correct behavior.","commit_id":"389e4851a8c6818e9744df4bae690304df6a0642"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"30f2575bc4035c1405a4df05d682183b2b7f47cd","unresolved":false,"context_lines":[{"line_number":221,"context_line":"``nova service-list`` will work with the records from the down cell not having"},{"line_number":222,"context_line":"all the information. When these commands are used with filters/sorting/paging,"},{"line_number":223,"context_line":"the output will totally skip the down cell and return only information from the"},{"line_number":224,"context_line":"up cells. ``nova boot`` will work if that project does not have any instances"},{"line_number":225,"context_line":"in the down cell."},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"Performance Impact"},{"line_number":228,"context_line":"------------------"}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_90df7b65","line":225,"range":{"start_line":224,"start_character":10,"end_line":225,"end_character":17},"in_reply_to":"5f7c97a3_8ac77712","updated":"2018-06-29 12:18:03.000000000","message":"I agree, and that should be how it is. When I say nova boot should work, this is included that if there no hosts found (no matter what the scene is it should be no valid host). Maybe I will change this sentence into saying, \"nova boot will not work if that tenant_id has living instances in the down cells\" (this is related to the quota calculation part which is going wrong today, apart from that mark when we further go down to scheduling, sure it should fail if all the filtered hosts are in down cells)","commit_id":"389e4851a8c6818e9744df4bae690304df6a0642"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"457b83c6de138d5d6807e041fedda2adba7cd8c3","unresolved":false,"context_lines":[{"line_number":247,"context_line":"--------------"},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"Since there will be a change in the api DB schema, the ``nova-manage api_db"},{"line_number":250,"context_line":"sync`` command will have to be run to update the instance_mappings table. The"},{"line_number":251,"context_line":"new online data migration tool that will be added to populate the new column"},{"line_number":252,"context_line":"will have to be run."},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"Implementation"},{"line_number":255,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_caf56f53","line":252,"range":{"start_line":250,"start_character":74,"end_line":252,"end_character":20},"updated":"2018-06-27 18:35:10.000000000","message":"Can we get a bit more detail on this? I think I\u0027ve commented on this before in earlier patches, but the idea is for all instance mappings that have instances which aren\u0027t deleted (nor soft deleted), they\u0027d be queued_for_delete\u003dFalse, and for any instance mappings that have (soft) deleted instances in the cell would be queued_for_delete\u003dTrue?","commit_id":"389e4851a8c6818e9744df4bae690304df6a0642"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"69ff2df19987880fa0bac62d2a7a14403966a388","unresolved":false,"context_lines":[{"line_number":247,"context_line":"--------------"},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"Since there will be a change in the api DB schema, the ``nova-manage api_db"},{"line_number":250,"context_line":"sync`` command will have to be run to update the instance_mappings table. The"},{"line_number":251,"context_line":"new online data migration tool that will be added to populate the new column"},{"line_number":252,"context_line":"will have to be run."},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"Implementation"},{"line_number":255,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_13b93578","line":252,"range":{"start_line":250,"start_character":74,"end_line":252,"end_character":20},"in_reply_to":"5f7c97a3_90fbfbbc","updated":"2018-06-29 13:21:49.000000000","message":"Yup sounds good.","commit_id":"389e4851a8c6818e9744df4bae690304df6a0642"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"30f2575bc4035c1405a4df05d682183b2b7f47cd","unresolved":false,"context_lines":[{"line_number":247,"context_line":"--------------"},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"Since there will be a change in the api DB schema, the ``nova-manage api_db"},{"line_number":250,"context_line":"sync`` command will have to be run to update the instance_mappings table. The"},{"line_number":251,"context_line":"new online data migration tool that will be added to populate the new column"},{"line_number":252,"context_line":"will have to be run."},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"Implementation"},{"line_number":255,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_90fbfbbc","line":252,"range":{"start_line":250,"start_character":74,"end_line":252,"end_character":20},"in_reply_to":"5f7c97a3_caf56f53","updated":"2018-06-29 12:18:03.000000000","message":"yes so this is what I propose,\n\n\n if instance.state \u003d\u003d \"DELETED\" or \"SOFT_DELETE\":\n     queued_for_delete \u003d True\n else:\n     queued_for_delete \u003d False\n\n\nand then whenever we do all kinds of delete (normal delete, local delete, soft_delete as api calls, we update queued_for_delete). The only spot where we set this back from True to False, is at the time of reclaiming when state turns to \"ACTIVE\" from \"SOFT_DELETED\".","commit_id":"389e4851a8c6818e9744df4bae690304df6a0642"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"06bc1ed08c664aea5cfd573b7f191822ff353032","unresolved":false,"context_lines":[{"line_number":267,"context_line":"----------"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"#. Add a new column ``queued_for_delete`` to nova_api.instance_mappings table."},{"line_number":270,"context_line":"#. Add a new field ``queued_for_delete`` to InstanceMapping object."},{"line_number":271,"context_line":"#. Add a new online migration tool for populating ``queued_for_delete`` of"},{"line_number":272,"context_line":"   existing instance_mappings."},{"line_number":273,"context_line":"#. Handle ``nova list`` gracefully on receiving a timeout from a cell `here`_."}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_1edf2c39","line":270,"updated":"2018-06-27 19:01:42.000000000","message":"Will we need to always set InstanceMapping.queued_for_delete\u003dTrue when deleting an instance even if the cell is up and we successfully delete the instance? Thinking about the case that you\u0027re doing \"nova list --deleted\" to list deleted instances - if we\u0027re listing over down cells and we don\u0027t have accurate InstanceMapping.queued_for_delete values, we won\u0027t be showing actual deleted instances in those down cells. Or flip that around - if we did delete the instance from a cell but InstanceMapping.queued_for_delete\u003dFalse and now I\u0027m listing instances from that cell, won\u0027t it start showing deleted instances?","commit_id":"389e4851a8c6818e9744df4bae690304df6a0642"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"457b83c6de138d5d6807e041fedda2adba7cd8c3","unresolved":false,"context_lines":[{"line_number":303,"context_line":""},{"line_number":304,"context_line":".. _resilient server listing: https://review.openstack.org/#/c/575734/"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":".. _resilient service listing: https://review.openstack.org/#/c/568271/"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":".. _quotas using placement: https://review.openstack.org/#/c/509042/"},{"line_number":309,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_ef395d40","line":306,"range":{"start_line":306,"start_character":31,"end_line":306,"end_character":71},"updated":"2018-06-27 18:35:10.000000000","message":"Side note: you should backport this to stable/queens.","commit_id":"389e4851a8c6818e9744df4bae690304df6a0642"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"30f2575bc4035c1405a4df05d682183b2b7f47cd","unresolved":false,"context_lines":[{"line_number":303,"context_line":""},{"line_number":304,"context_line":".. _resilient server listing: https://review.openstack.org/#/c/575734/"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":".. _resilient service listing: https://review.openstack.org/#/c/568271/"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":".. _quotas using placement: https://review.openstack.org/#/c/509042/"},{"line_number":309,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_70509fd6","line":306,"range":{"start_line":306,"start_character":31,"end_line":306,"end_character":71},"in_reply_to":"5f7c97a3_ef395d40","updated":"2018-06-29 12:18:03.000000000","message":"yes, I will do this now itself, just realized this when I was looking into our production code today expecting parallel querying.","commit_id":"389e4851a8c6818e9744df4bae690304df6a0642"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"5331f0a89dbd6090f8bc5ecf4f7d6a97159b2c0c","unresolved":false,"context_lines":[{"line_number":102,"context_line":"   #. instance_uuid, created_at and project_id from the instance_mapping table."},{"line_number":103,"context_line":"   #. user_id, flavor, image and availability_zone from the request_spec table."},{"line_number":104,"context_line":"   #. power_state is set to NOSTATE."},{"line_number":105,"context_line":"   #. rest of the field keys will be missing."},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"#. ``nova service-list`` should return a minimalistic construct from the"},{"line_number":108,"context_line":"   available information in the API DB which would include:"}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f7c97a3_832621cb","line":105,"range":{"start_line":105,"start_character":6,"end_line":105,"end_character":45},"updated":"2018-07-03 02:18:17.000000000","message":"do we set vm_state to uknown?","commit_id":"d2b7884d0536b55c219914e9954ec8bd630b4969"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"57228c0f2e66a8a272959f07b54761fc9245aafd","unresolved":false,"context_lines":[{"line_number":102,"context_line":"   #. instance_uuid, created_at and project_id from the instance_mapping table."},{"line_number":103,"context_line":"   #. user_id, flavor, image and availability_zone from the request_spec table."},{"line_number":104,"context_line":"   #. power_state is set to NOSTATE."},{"line_number":105,"context_line":"   #. rest of the field keys will be missing."},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"#. ``nova service-list`` should return a minimalistic construct from the"},{"line_number":108,"context_line":"   available information in the API DB which would include:"}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f7c97a3_751936cf","line":105,"range":{"start_line":105,"start_character":6,"end_line":105,"end_character":45},"in_reply_to":"5f7c97a3_832621cb","updated":"2018-07-03 12:10:47.000000000","message":"No, we totally omit all state keys, the status is UNKNOWN, but all state keys are not going to be there since we don\u0027t know the value.","commit_id":"d2b7884d0536b55c219914e9954ec8bd630b4969"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"5331f0a89dbd6090f8bc5ecf4f7d6a97159b2c0c","unresolved":false,"context_lines":[{"line_number":112,"context_line":""},{"line_number":113,"context_line":"   Note that if cell0 goes down the controller services will not be listed."},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"#. ``nova boot`` should not succeed if the requesting project has living VMs in"},{"line_number":116,"context_line":"   the down cell. So if the scatter-gather utility returns a"},{"line_number":117,"context_line":"   did_not_respond_sentinel while calculating quotas, we have to go and check"},{"line_number":118,"context_line":"   if this project has living instances in the down cell from the"},{"line_number":119,"context_line":"   instance_mapping table and prevent the boot request if it has."},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"For the 1st, 2nd and 4th operations to work when a cell is down, we need to"},{"line_number":122,"context_line":"have the information regarding if an instance is in SOFT_DELETED/DELETED state"}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f7c97a3_e337d5fd","line":119,"range":{"start_line":115,"start_character":0,"end_line":119,"end_character":65},"updated":"2018-07-03 02:18:17.000000000","message":"I think this is unacceptable, from user prospective, as cell deployments are invisiable to normal users, why should an internal cell failure affect user when booting new instances? I understand that there might be a quota problem, but maybe we have to come up with a better solution on this one rather than just easily forbid instance creation.","commit_id":"d2b7884d0536b55c219914e9954ec8bd630b4969"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"6ba4f27b59f3d1200f70345d4dcd3bbfa64cff93","unresolved":false,"context_lines":[{"line_number":112,"context_line":""},{"line_number":113,"context_line":"   Note that if cell0 goes down the controller services will not be listed."},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"#. ``nova boot`` should not succeed if the requesting project has living VMs in"},{"line_number":116,"context_line":"   the down cell. So if the scatter-gather utility returns a"},{"line_number":117,"context_line":"   did_not_respond_sentinel while calculating quotas, we have to go and check"},{"line_number":118,"context_line":"   if this project has living instances in the down cell from the"},{"line_number":119,"context_line":"   instance_mapping table and prevent the boot request if it has."},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"For the 1st, 2nd and 4th operations to work when a cell is down, we need to"},{"line_number":122,"context_line":"have the information regarding if an instance is in SOFT_DELETED/DELETED state"}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f7c97a3_3ac92b59","line":119,"range":{"start_line":115,"start_character":0,"end_line":119,"end_character":65},"in_reply_to":"5f7c97a3_1789aac5","updated":"2018-07-06 01:35:55.000000000","message":"Yeah,controlable sounds better, we(Huawei) are also evaluating using cellv2 in our public cloud, unlike CERN, we cannot limit users/projects to one specific cell, as we have many flavors generations, and it will continues to grow, so I think the most doable way to do if we add new flavor generations is to put the hosts that can launch those flavors in a new cell etc. And we cannot limit which flavor users could use, so most likely our users will have instances all across the deployment, and a cell db connection failure to one cell could cause the large numbers of users unable to boot instances. Which is unacceptable.","commit_id":"d2b7884d0536b55c219914e9954ec8bd630b4969"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e21eefa229d8c3a4519539febe56fc3512059fc8","unresolved":false,"context_lines":[{"line_number":112,"context_line":""},{"line_number":113,"context_line":"   Note that if cell0 goes down the controller services will not be listed."},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"#. ``nova boot`` should not succeed if the requesting project has living VMs in"},{"line_number":116,"context_line":"   the down cell. So if the scatter-gather utility returns a"},{"line_number":117,"context_line":"   did_not_respond_sentinel while calculating quotas, we have to go and check"},{"line_number":118,"context_line":"   if this project has living instances in the down cell from the"},{"line_number":119,"context_line":"   instance_mapping table and prevent the boot request if it has."},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"For the 1st, 2nd and 4th operations to work when a cell is down, we need to"},{"line_number":122,"context_line":"have the information regarding if an instance is in SOFT_DELETED/DELETED state"}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f7c97a3_41889cc1","line":119,"range":{"start_line":115,"start_character":0,"end_line":119,"end_character":65},"in_reply_to":"5f7c97a3_1e1683f3","updated":"2018-07-09 08:30:41.000000000","message":"+1 for this new policy","commit_id":"d2b7884d0536b55c219914e9954ec8bd630b4969"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"dd142eeda0a8662d00fc682bfb91214feefe6fcd","unresolved":false,"context_lines":[{"line_number":112,"context_line":""},{"line_number":113,"context_line":"   Note that if cell0 goes down the controller services will not be listed."},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"#. ``nova boot`` should not succeed if the requesting project has living VMs in"},{"line_number":116,"context_line":"   the down cell. So if the scatter-gather utility returns a"},{"line_number":117,"context_line":"   did_not_respond_sentinel while calculating quotas, we have to go and check"},{"line_number":118,"context_line":"   if this project has living instances in the down cell from the"},{"line_number":119,"context_line":"   instance_mapping table and prevent the boot request if it has."},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"For the 1st, 2nd and 4th operations to work when a cell is down, we need to"},{"line_number":122,"context_line":"have the information regarding if an instance is in SOFT_DELETED/DELETED state"}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f7c97a3_e6fb1abc","line":119,"range":{"start_line":115,"start_character":0,"end_line":119,"end_character":65},"in_reply_to":"5f7c97a3_3ac92b59","updated":"2018-07-06 08:21:25.000000000","message":"Going ahead with making this controllable (like here: https://github.com/openstack/nova/blob/master/nova/policies/servers.py or with a config option?) works for us.\n\n@ZhenyuZheng: Thanks for explaining your scenario :)!","commit_id":"d2b7884d0536b55c219914e9954ec8bd630b4969"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"32267ca43048cb9f6c01e80e4e00f39b37865902","unresolved":false,"context_lines":[{"line_number":112,"context_line":""},{"line_number":113,"context_line":"   Note that if cell0 goes down the controller services will not be listed."},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"#. ``nova boot`` should not succeed if the requesting project has living VMs in"},{"line_number":116,"context_line":"   the down cell. So if the scatter-gather utility returns a"},{"line_number":117,"context_line":"   did_not_respond_sentinel while calculating quotas, we have to go and check"},{"line_number":118,"context_line":"   if this project has living instances in the down cell from the"},{"line_number":119,"context_line":"   instance_mapping table and prevent the boot request if it has."},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"For the 1st, 2nd and 4th operations to work when a cell is down, we need to"},{"line_number":122,"context_line":"have the information regarding if an instance is in SOFT_DELETED/DELETED state"}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f7c97a3_1e1683f3","line":119,"range":{"start_line":115,"start_character":0,"end_line":119,"end_character":65},"in_reply_to":"5f7c97a3_4162eaae","updated":"2018-07-09 07:01:56.000000000","message":"thanks! I will update the spec with adding a new policy.","commit_id":"d2b7884d0536b55c219914e9954ec8bd630b4969"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"f38da7dab7e9aa8cb3619a73788dcff16d658e61","unresolved":false,"context_lines":[{"line_number":112,"context_line":""},{"line_number":113,"context_line":"   Note that if cell0 goes down the controller services will not be listed."},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"#. ``nova boot`` should not succeed if the requesting project has living VMs in"},{"line_number":116,"context_line":"   the down cell. So if the scatter-gather utility returns a"},{"line_number":117,"context_line":"   did_not_respond_sentinel while calculating quotas, we have to go and check"},{"line_number":118,"context_line":"   if this project has living instances in the down cell from the"},{"line_number":119,"context_line":"   instance_mapping table and prevent the boot request if it has."},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"For the 1st, 2nd and 4th operations to work when a cell is down, we need to"},{"line_number":122,"context_line":"have the information regarding if an instance is in SOFT_DELETED/DELETED state"}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f7c97a3_1789aac5","line":119,"range":{"start_line":115,"start_character":0,"end_line":119,"end_character":65},"in_reply_to":"5f7c97a3_9e750f36","updated":"2018-07-06 00:21:33.000000000","message":"I agree with the concern about blocking instance create because of down cells (that are not the fault of the user). I don\u0027t like it either. But I don\u0027t think we have many options. I had wanted us to rely on only placement and the api database for the quota part, but we _can\u0027t_ because in placement, we have no way to assume that all allocation usages belong to our instance of nova (there could be more novas running in the data center using the same placement). Adding that to placement will be a significant amount of work with a still unknown design and we\u0027re trying to come up with a way forward for down cell resiliency as soon as we can.\n\nI\u0027m wondering if it would be legit to make the behavior controllable via policy somehow. That is, if you\u0027re an operator who thinks it\u0027s more important to strictly enforce quota, you will configure your policy to reject instance create if the project has instances in down cell(s). If you\u0027re an operator who thinks it\u0027s more important to have the cloud always available, then you will configure your policy to accept users potentially exceeding quota until the down cells are restored.","commit_id":"d2b7884d0536b55c219914e9954ec8bd630b4969"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"57228c0f2e66a8a272959f07b54761fc9245aafd","unresolved":false,"context_lines":[{"line_number":112,"context_line":""},{"line_number":113,"context_line":"   Note that if cell0 goes down the controller services will not be listed."},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"#. ``nova boot`` should not succeed if the requesting project has living VMs in"},{"line_number":116,"context_line":"   the down cell. So if the scatter-gather utility returns a"},{"line_number":117,"context_line":"   did_not_respond_sentinel while calculating quotas, we have to go and check"},{"line_number":118,"context_line":"   if this project has living instances in the down cell from the"},{"line_number":119,"context_line":"   instance_mapping table and prevent the boot request if it has."},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"For the 1st, 2nd and 4th operations to work when a cell is down, we need to"},{"line_number":122,"context_line":"have the information regarding if an instance is in SOFT_DELETED/DELETED state"}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f7c97a3_9e750f36","line":119,"range":{"start_line":115,"start_character":0,"end_line":119,"end_character":65},"in_reply_to":"5f7c97a3_e337d5fd","updated":"2018-07-03 12:10:47.000000000","message":"\u003e I think this is unacceptable, from user prospective, as cell\n \u003e deployments are invisiable to normal users, why should an internal\n \u003e cell failure affect user when booting new instances? \n\nI get your point, but this is a technical failure which is doing wrong things, meaning providing the user a way of  creating instances more than he/she is allowed to. As for user operations being restricted due to cell down, this is application for other operations like deleting, until now even listing.\n\n \u003e I understand\n \u003e that there might be a quota problem, but maybe we have to come up\n \u003e with a better solution on this one rather than just easily forbid\n \u003e instance creation.\n\nsee L63 TO L65.","commit_id":"d2b7884d0536b55c219914e9954ec8bd630b4969"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"85ef63529017120baf96a2d723544587ca01b93f","unresolved":false,"context_lines":[{"line_number":112,"context_line":""},{"line_number":113,"context_line":"   Note that if cell0 goes down the controller services will not be listed."},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"#. ``nova boot`` should not succeed if the requesting project has living VMs in"},{"line_number":116,"context_line":"   the down cell. So if the scatter-gather utility returns a"},{"line_number":117,"context_line":"   did_not_respond_sentinel while calculating quotas, we have to go and check"},{"line_number":118,"context_line":"   if this project has living instances in the down cell from the"},{"line_number":119,"context_line":"   instance_mapping table and prevent the boot request if it has."},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"For the 1st, 2nd and 4th operations to work when a cell is down, we need to"},{"line_number":122,"context_line":"have the information regarding if an instance is in SOFT_DELETED/DELETED state"}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f7c97a3_4162eaae","line":119,"range":{"start_line":115,"start_character":0,"end_line":119,"end_character":65},"in_reply_to":"5f7c97a3_e6fb1abc","updated":"2018-07-06 21:14:58.000000000","message":"\u003e Going ahead with making this controllable (like here:\n \u003e https://github.com/openstack/nova/blob/master/nova/policies/servers.py\n \u003e or with a config option?) works for us.\n \u003e \n \u003e @ZhenyuZheng: Thanks for explaining your scenario :)!\n\nI could go either way I think. We already have the [quota]/recheck_quota config option so we are already controlling how quota works to an extent using config options, which is config-driven API behavior (generally something we try to avoid since it\u0027s not interoperable).\n\nAlternative to a config option is a policy rule which could default to rule:is_admin so only admins can create instances when they have existing instances in down cells. Then for clouds that need to enable this for all users, they can change the rule to rule:admin_or_owner or define their own set of roles for the types of users that can do this, and it\u0027s more flexible than a simple pass/fail config option. That\u0027s also similar to the thinking with the new policy rule added in change Id67e1285a0522474844de130c9263e11868f67fb.","commit_id":"d2b7884d0536b55c219914e9954ec8bd630b4969"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"7c9d57d59bc26db6b8d07195b7045a1952ca77cb","unresolved":false,"context_lines":[{"line_number":137,"context_line":"Edge Cases"},{"line_number":138,"context_line":"----------"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"* Filters: If the user is listing servers using filters the results from the"},{"line_number":141,"context_line":"  down cell will be skipped and no minimalistic construct will be provided"},{"line_number":142,"context_line":"  since there is no way of validating the filtered results from the down cell"},{"line_number":143,"context_line":"  if the value of the filter key itself is missing. Note that by default"},{"line_number":144,"context_line":"  ``nova list`` uses the ``deleted\u003dFalse`` and   ``project_id\u003dtenant_id``"},{"line_number":145,"context_line":"  filters and since we know both of these values from the instance_mapping"},{"line_number":146,"context_line":"  table, they will be the only allowed filters. Hence only doing ``nova list``"},{"line_number":147,"context_line":"  and ``nova list --minimal`` will show minimalistic results for the down cell."},{"line_number":148,"context_line":"  Other filters like ``nova list --deleted`` or ``nova list --host xx`` will"},{"line_number":149,"context_line":"  skip the results for the down cell."},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"* Marker: If the user does ``nova list --marker`` it will fail with a 500 if"},{"line_number":152,"context_line":"  the marker is in the down cell."}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f7c97a3_5e4d406f","line":149,"range":{"start_line":140,"start_character":0,"end_line":149,"end_character":37},"updated":"2018-07-03 02:26:03.000000000","message":"well, what if I want to filter all my instances in UKNOWN status? as I want to know how many instances are affected with the down cell.","commit_id":"d2b7884d0536b55c219914e9954ec8bd630b4969"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"57228c0f2e66a8a272959f07b54761fc9245aafd","unresolved":false,"context_lines":[{"line_number":137,"context_line":"Edge Cases"},{"line_number":138,"context_line":"----------"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"* Filters: If the user is listing servers using filters the results from the"},{"line_number":141,"context_line":"  down cell will be skipped and no minimalistic construct will be provided"},{"line_number":142,"context_line":"  since there is no way of validating the filtered results from the down cell"},{"line_number":143,"context_line":"  if the value of the filter key itself is missing. Note that by default"},{"line_number":144,"context_line":"  ``nova list`` uses the ``deleted\u003dFalse`` and   ``project_id\u003dtenant_id``"},{"line_number":145,"context_line":"  filters and since we know both of these values from the instance_mapping"},{"line_number":146,"context_line":"  table, they will be the only allowed filters. Hence only doing ``nova list``"},{"line_number":147,"context_line":"  and ``nova list --minimal`` will show minimalistic results for the down cell."},{"line_number":148,"context_line":"  Other filters like ``nova list --deleted`` or ``nova list --host xx`` will"},{"line_number":149,"context_line":"  skip the results for the down cell."},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"* Marker: If the user does ``nova list --marker`` it will fail with a 500 if"},{"line_number":152,"context_line":"  the marker is in the down cell."}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f7c97a3_be580b8a","line":149,"range":{"start_line":140,"start_character":0,"end_line":149,"end_character":37},"in_reply_to":"5f7c97a3_5e4d406f","updated":"2018-07-03 12:10:47.000000000","message":"hmm, I could include this if its helpful. I would have to include \"UNKNOWN\" in the list of status values.","commit_id":"d2b7884d0536b55c219914e9954ec8bd630b4969"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"0fe351ff78fe04617eac58705ece21cdc341a1fe","unresolved":false,"context_lines":[{"line_number":137,"context_line":"Edge Cases"},{"line_number":138,"context_line":"----------"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"* Filters: If the user is listing servers using filters the results from the"},{"line_number":141,"context_line":"  down cell will be skipped and no minimalistic construct will be provided"},{"line_number":142,"context_line":"  since there is no way of validating the filtered results from the down cell"},{"line_number":143,"context_line":"  if the value of the filter key itself is missing. Note that by default"},{"line_number":144,"context_line":"  ``nova list`` uses the ``deleted\u003dFalse`` and   ``project_id\u003dtenant_id``"},{"line_number":145,"context_line":"  filters and since we know both of these values from the instance_mapping"},{"line_number":146,"context_line":"  table, they will be the only allowed filters. Hence only doing ``nova list``"},{"line_number":147,"context_line":"  and ``nova list --minimal`` will show minimalistic results for the down cell."},{"line_number":148,"context_line":"  Other filters like ``nova list --deleted`` or ``nova list --host xx`` will"},{"line_number":149,"context_line":"  skip the results for the down cell."},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"* Marker: If the user does ``nova list --marker`` it will fail with a 500 if"},{"line_number":152,"context_line":"  the marker is in the down cell."}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f7c97a3_de3aa7e4","line":149,"range":{"start_line":140,"start_character":0,"end_line":149,"end_character":37},"in_reply_to":"5f7c97a3_be580b8a","updated":"2018-07-03 12:14:16.000000000","message":"as of now *any* filter including --status would ignore down cells. but if --status with UNKNOWN seems necessary it could be done.","commit_id":"d2b7884d0536b55c219914e9954ec8bd630b4969"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e21eefa229d8c3a4519539febe56fc3512059fc8","unresolved":false,"context_lines":[{"line_number":157,"context_line":"* Paging: We ignore the down cell. For instance if we have three cells A (up),"},{"line_number":158,"context_line":"  B (down) and C (up) and if the marker is half way in A, we would get the"},{"line_number":159,"context_line":"  rest half of the results from A, all the results from C and ignore cell B."},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"Alternatives"},{"line_number":162,"context_line":"------------"},{"line_number":163,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f7c97a3_04015204","line":160,"updated":"2018-07-09 08:30:41.000000000","message":"@Surya: Thanks for defining the behavior in the edge cases. LGTM!","commit_id":"d2b7884d0536b55c219914e9954ec8bd630b4969"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"847c358992523d908096c3959336922bfd6ec040","unresolved":false,"context_lines":[{"line_number":309,"context_line":"            {"},{"line_number":310,"context_line":"                \"status\": \"UNKNOWN\","},{"line_number":311,"context_line":"                \"tenant_id\": \"940f47b984034c7f8f9624ab28f5643c\","},{"line_number":312,"context_line":"                \"os-extended-volumes:volumes_attached\": [],"},{"line_number":313,"context_line":"                \"id\": \"bcc6c6dd-3d0a-4633-9586-60878fd68edb\","},{"line_number":314,"context_line":"                \"security_groups\": ["},{"line_number":315,"context_line":"                    {"}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f7c97a3_87a87620","line":312,"updated":"2018-07-02 17:39:29.000000000","message":"this is because of https://review.openstack.org/#/c/541246/ , it would automatically skip the down cells. If this key should be avoided from the response, I can tweak it. Same for the security_groups key if needed to be removed.","commit_id":"d2b7884d0536b55c219914e9954ec8bd630b4969"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e21eefa229d8c3a4519539febe56fc3512059fc8","unresolved":false,"context_lines":[{"line_number":309,"context_line":"            {"},{"line_number":310,"context_line":"                \"status\": \"UNKNOWN\","},{"line_number":311,"context_line":"                \"tenant_id\": \"940f47b984034c7f8f9624ab28f5643c\","},{"line_number":312,"context_line":"                \"os-extended-volumes:volumes_attached\": [],"},{"line_number":313,"context_line":"                \"id\": \"bcc6c6dd-3d0a-4633-9586-60878fd68edb\","},{"line_number":314,"context_line":"                \"security_groups\": ["},{"line_number":315,"context_line":"                    {"}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f7c97a3_c4a27afb","line":312,"in_reply_to":"5f7c97a3_87a87620","updated":"2018-07-09 08:30:41.000000000","message":"The [] could be read \u0027this instance doesn\u0027t have any volumes\u0027 while it actually means \u0027we don\u0027t know how many volumes this instance has\u0027. So I suggest to remove the key instead.","commit_id":"d2b7884d0536b55c219914e9954ec8bd630b4969"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"990a78cf799b23418d0f465de137456379ea9c7f","unresolved":false,"context_lines":[{"line_number":309,"context_line":"            {"},{"line_number":310,"context_line":"                \"status\": \"UNKNOWN\","},{"line_number":311,"context_line":"                \"tenant_id\": \"940f47b984034c7f8f9624ab28f5643c\","},{"line_number":312,"context_line":"                \"os-extended-volumes:volumes_attached\": [],"},{"line_number":313,"context_line":"                \"id\": \"bcc6c6dd-3d0a-4633-9586-60878fd68edb\","},{"line_number":314,"context_line":"                \"security_groups\": ["},{"line_number":315,"context_line":"                    {"}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f7c97a3_ce7a7eee","line":312,"in_reply_to":"5f7c97a3_8a3569f8","updated":"2018-07-10 07:12:09.000000000","message":"Thanks!","commit_id":"d2b7884d0536b55c219914e9954ec8bd630b4969"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"edccb7944f958c197dbebd41ca6d13fa1897ef20","unresolved":false,"context_lines":[{"line_number":309,"context_line":"            {"},{"line_number":310,"context_line":"                \"status\": \"UNKNOWN\","},{"line_number":311,"context_line":"                \"tenant_id\": \"940f47b984034c7f8f9624ab28f5643c\","},{"line_number":312,"context_line":"                \"os-extended-volumes:volumes_attached\": [],"},{"line_number":313,"context_line":"                \"id\": \"bcc6c6dd-3d0a-4633-9586-60878fd68edb\","},{"line_number":314,"context_line":"                \"security_groups\": ["},{"line_number":315,"context_line":"                    {"}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f7c97a3_8a3569f8","line":312,"in_reply_to":"5f7c97a3_c4a27afb","updated":"2018-07-09 10:40:44.000000000","message":"ack! I will remove the \"security_groups\" and \"os-extended-volumes:volumes_attached\" keys also.","commit_id":"d2b7884d0536b55c219914e9954ec8bd630b4969"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e21eefa229d8c3a4519539febe56fc3512059fc8","unresolved":false,"context_lines":[{"line_number":311,"context_line":"                \"tenant_id\": \"940f47b984034c7f8f9624ab28f5643c\","},{"line_number":312,"context_line":"                \"os-extended-volumes:volumes_attached\": [],"},{"line_number":313,"context_line":"                \"id\": \"bcc6c6dd-3d0a-4633-9586-60878fd68edb\","},{"line_number":314,"context_line":"                \"security_groups\": ["},{"line_number":315,"context_line":"                    {"},{"line_number":316,"context_line":"                        \"name\": \"default\""},{"line_number":317,"context_line":"                    }"},{"line_number":318,"context_line":"                ]"},{"line_number":319,"context_line":"            }"},{"line_number":320,"context_line":"        ]"},{"line_number":321,"context_line":"    }"}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f7c97a3_64ada6e8","line":318,"range":{"start_line":314,"start_character":1,"end_line":318,"end_character":1},"updated":"2018-07-09 08:30:41.000000000","message":"If this is the same situation as the volumes_attached then I have the same opinion, i.e. remove the key.","commit_id":"d2b7884d0536b55c219914e9954ec8bd630b4969"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8f8b5055d511aabbd37226b5a4586bcd20a4de39","unresolved":false,"context_lines":[{"line_number":85,"context_line":"#. ``nova list`` should return a minimalistic construct from the available"},{"line_number":86,"context_line":"   information in the API DB which would include:"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"   #. instance_uuid and project_id from the instance_mapping table."},{"line_number":89,"context_line":"   #. status of the instance would be \"UNKNOWN\" which would be the major"},{"line_number":90,"context_line":"      indication that the record for this instance is partial."},{"line_number":91,"context_line":"   #. rest of the field keys will be missing."}],"source_content_type":"text/x-rst","patch_set":7,"id":"5f7c97a3_c959268d","line":88,"range":{"start_line":88,"start_character":24,"end_line":88,"end_character":34},"updated":"2018-07-09 18:10:00.000000000","message":"nit: created_at should have stayed in this list, so instance uuid, created_at and project_id, like on L102.","commit_id":"616718bce6f2c0757066a25d330dd4036e5a1ecb"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8f8b5055d511aabbd37226b5a4586bcd20a4de39","unresolved":false,"context_lines":[{"line_number":99,"context_line":"   instance_mapping and request_spec table for the instance details which would"},{"line_number":100,"context_line":"   include:"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"   #. instance_uuid, created_at and project_id from the instance_mapping table."},{"line_number":103,"context_line":"   #. user_id, flavor, image and availability_zone from the request_spec table."},{"line_number":104,"context_line":"   #. power_state is set to NOSTATE."},{"line_number":105,"context_line":"   #. rest of the field keys will be missing."}],"source_content_type":"text/x-rst","patch_set":7,"id":"5f7c97a3_69d9f2f1","line":102,"updated":"2018-07-09 18:10:00.000000000","message":"nit: should include:\n\n#. status of the instance would be \"UNKNOWN\" which would be the major\n      indication that the record for this instance is partial.","commit_id":"616718bce6f2c0757066a25d330dd4036e5a1ecb"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"94a5511b4a6e2d3d415c889f90e128272e4c74ff","unresolved":false,"context_lines":[{"line_number":99,"context_line":"   instance_mapping and request_spec table for the instance details which would"},{"line_number":100,"context_line":"   include:"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"   #. instance_uuid, created_at and project_id from the instance_mapping table."},{"line_number":103,"context_line":"   #. user_id, flavor, image and availability_zone from the request_spec table."},{"line_number":104,"context_line":"   #. power_state is set to NOSTATE."},{"line_number":105,"context_line":"   #. rest of the field keys will be missing."}],"source_content_type":"text/x-rst","patch_set":7,"id":"5f7c97a3_541e0e74","line":102,"in_reply_to":"5f7c97a3_69d9f2f1","updated":"2018-07-09 19:44:51.000000000","message":"Done","commit_id":"616718bce6f2c0757066a25d330dd4036e5a1ecb"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8f8b5055d511aabbd37226b5a4586bcd20a4de39","unresolved":false,"context_lines":[{"line_number":119,"context_line":"   instance_mapping table and prevent the boot request if it has. However it"},{"line_number":120,"context_line":"   might not be desirable to block VM creation for users having VMs in multiple"},{"line_number":121,"context_line":"   cells if a single cell goes down. Hence a new policy rule"},{"line_number":122,"context_line":"   ``os_compute_api:servers:create:cell_down`` which defaults to ``is_admin``"},{"line_number":123,"context_line":"   can be added by which the ability to create instances when a project has"},{"line_number":124,"context_line":"   instances in a down cell can be controlled between users/admin. Using this"},{"line_number":125,"context_line":"   deployments can configure their setup in whichever way they desire."}],"source_content_type":"text/x-rst","patch_set":7,"id":"5f7c97a3_6987b2b7","line":122,"range":{"start_line":122,"start_character":67,"end_line":122,"end_character":75},"updated":"2018-07-09 18:10:00.000000000","message":"nit: should be ``rule:admin_api``","commit_id":"616718bce6f2c0757066a25d330dd4036e5a1ecb"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"94a5511b4a6e2d3d415c889f90e128272e4c74ff","unresolved":false,"context_lines":[{"line_number":119,"context_line":"   instance_mapping table and prevent the boot request if it has. However it"},{"line_number":120,"context_line":"   might not be desirable to block VM creation for users having VMs in multiple"},{"line_number":121,"context_line":"   cells if a single cell goes down. Hence a new policy rule"},{"line_number":122,"context_line":"   ``os_compute_api:servers:create:cell_down`` which defaults to ``is_admin``"},{"line_number":123,"context_line":"   can be added by which the ability to create instances when a project has"},{"line_number":124,"context_line":"   instances in a down cell can be controlled between users/admin. Using this"},{"line_number":125,"context_line":"   deployments can configure their setup in whichever way they desire."}],"source_content_type":"text/x-rst","patch_set":7,"id":"5f7c97a3_54592e58","line":122,"range":{"start_line":122,"start_character":67,"end_line":122,"end_character":75},"in_reply_to":"5f7c97a3_6987b2b7","updated":"2018-07-09 19:44:51.000000000","message":"Done","commit_id":"616718bce6f2c0757066a25d330dd4036e5a1ecb"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8f8b5055d511aabbd37226b5a4586bcd20a4de39","unresolved":false,"context_lines":[{"line_number":150,"context_line":"  ``nova list`` uses the ``deleted\u003dFalse`` and   ``project_id\u003dtenant_id``"},{"line_number":151,"context_line":"  filters and since we know both of these values from the instance_mapping"},{"line_number":152,"context_line":"  table, they will be the only allowed filters. Hence only doing ``nova list``"},{"line_number":153,"context_line":"  and ``nova list --minimal`` will show minimalistic results for the down cell."},{"line_number":154,"context_line":"  Other filters like ``nova list --deleted`` or ``nova list --host xx`` will"},{"line_number":155,"context_line":"  skip the results for the down cell."},{"line_number":156,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"5f7c97a3_e94ae280","line":153,"range":{"start_line":153,"start_character":18,"end_line":153,"end_character":27},"updated":"2018-07-09 18:10:00.000000000","message":"This returns uuid and name, but we won\u0027t have the instance name from a down cell (it\u0027s not in the instance mapping). So --minimal wouldn\u0027t work here.","commit_id":"616718bce6f2c0757066a25d330dd4036e5a1ecb"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"94a5511b4a6e2d3d415c889f90e128272e4c74ff","unresolved":false,"context_lines":[{"line_number":150,"context_line":"  ``nova list`` uses the ``deleted\u003dFalse`` and   ``project_id\u003dtenant_id``"},{"line_number":151,"context_line":"  filters and since we know both of these values from the instance_mapping"},{"line_number":152,"context_line":"  table, they will be the only allowed filters. Hence only doing ``nova list``"},{"line_number":153,"context_line":"  and ``nova list --minimal`` will show minimalistic results for the down cell."},{"line_number":154,"context_line":"  Other filters like ``nova list --deleted`` or ``nova list --host xx`` will"},{"line_number":155,"context_line":"  skip the results for the down cell."},{"line_number":156,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"5f7c97a3_345ef244","line":153,"range":{"start_line":153,"start_character":18,"end_line":153,"end_character":27},"in_reply_to":"5f7c97a3_e94ae280","updated":"2018-07-09 19:44:51.000000000","message":"--minimal would just return only the uuids and blank dashes for the names column.","commit_id":"616718bce6f2c0757066a25d330dd4036e5a1ecb"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8f8b5055d511aabbd37226b5a4586bcd20a4de39","unresolved":false,"context_lines":[{"line_number":314,"context_line":"            },"},{"line_number":315,"context_line":"            {"},{"line_number":316,"context_line":"                \"status\": \"UNKNOWN\","},{"line_number":317,"context_line":"                \"tenant_id\": \"940f47b984034c7f8f9624ab28f5643c\","},{"line_number":318,"context_line":"                \"id\": \"bcc6c6dd-3d0a-4633-9586-60878fd68edb\","},{"line_number":319,"context_line":"            }"},{"line_number":320,"context_line":"        ]"}],"source_content_type":"text/x-rst","patch_set":7,"id":"5f7c97a3_112bc87b","line":317,"updated":"2018-07-09 18:10:00.000000000","message":"nit: include created_at","commit_id":"616718bce6f2c0757066a25d330dd4036e5a1ecb"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"94a5511b4a6e2d3d415c889f90e128272e4c74ff","unresolved":false,"context_lines":[{"line_number":314,"context_line":"            },"},{"line_number":315,"context_line":"            {"},{"line_number":316,"context_line":"                \"status\": \"UNKNOWN\","},{"line_number":317,"context_line":"                \"tenant_id\": \"940f47b984034c7f8f9624ab28f5643c\","},{"line_number":318,"context_line":"                \"id\": \"bcc6c6dd-3d0a-4633-9586-60878fd68edb\","},{"line_number":319,"context_line":"            }"},{"line_number":320,"context_line":"        ]"}],"source_content_type":"text/x-rst","patch_set":7,"id":"5f7c97a3_54704eda","line":317,"in_reply_to":"5f7c97a3_112bc87b","updated":"2018-07-09 19:44:51.000000000","message":"well I kind off left \"created_at\" key out on purpose, since it was kind of the default sort_key I was about to make this the \"if \u0027created_at\u0027 is missing on this new micro version, then this is the impartial result.\" I could also use another key for this.","commit_id":"616718bce6f2c0757066a25d330dd4036e5a1ecb"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8f8b5055d511aabbd37226b5a4586bcd20a4de39","unresolved":false,"context_lines":[{"line_number":337,"context_line":"``nova service-list`` will work with the records from the down cell not having"},{"line_number":338,"context_line":"all the information. When these commands are used with filters/sorting/paging,"},{"line_number":339,"context_line":"the output will totally skip the down cell and return only information from the"},{"line_number":340,"context_line":"up cells. ``nova boot`` will not work if that tenant_id has any living"},{"line_number":341,"context_line":"instances in the down cell."},{"line_number":342,"context_line":""},{"line_number":343,"context_line":"Performance Impact"},{"line_number":344,"context_line":"------------------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"5f7c97a3_9154b8fe","line":341,"range":{"start_line":340,"start_character":10,"end_line":341,"end_character":27},"updated":"2018-07-09 18:10:00.000000000","message":"Well, this depends on the policy rule. So I\u0027d just say, \"Per default policy, ``nova boot`` will not work....\".","commit_id":"616718bce6f2c0757066a25d330dd4036e5a1ecb"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"94a5511b4a6e2d3d415c889f90e128272e4c74ff","unresolved":false,"context_lines":[{"line_number":337,"context_line":"``nova service-list`` will work with the records from the down cell not having"},{"line_number":338,"context_line":"all the information. When these commands are used with filters/sorting/paging,"},{"line_number":339,"context_line":"the output will totally skip the down cell and return only information from the"},{"line_number":340,"context_line":"up cells. ``nova boot`` will not work if that tenant_id has any living"},{"line_number":341,"context_line":"instances in the down cell."},{"line_number":342,"context_line":""},{"line_number":343,"context_line":"Performance Impact"},{"line_number":344,"context_line":"------------------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"5f7c97a3_971fc858","line":341,"range":{"start_line":340,"start_character":10,"end_line":341,"end_character":27},"in_reply_to":"5f7c97a3_9154b8fe","updated":"2018-07-09 19:44:51.000000000","message":"Done","commit_id":"616718bce6f2c0757066a25d330dd4036e5a1ecb"}]}
