)]}'
{"doc/source/tasks.rst":[{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"3be61c42c8057e318ddec408ef1da82edc542cb9","unresolved":false,"context_lines":[{"line_number":30,"context_line":"on the compute manager side is not really reporting that correct to the API"},{"line_number":31,"context_line":"when an instance gets stuck or where there is an error coming from the virt"},{"line_number":32,"context_line":"driver. By using a consistent internal model for spotting all actions coming,"},{"line_number":33,"context_line":"we should be able to consider mid-term to implement a detection model based"},{"line_number":34,"context_line":"on some patterns where we could try to fix automatically some well-known"},{"line_number":35,"context_line":"issues and incrementally refine those patterns for automatic remediation."},{"line_number":36,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"ba15a1d1_6292004e","line":33,"updated":"2015-09-17 18:07:18.000000000","message":"Remove the reference to mid-term.  It\u0027s good to explain the goal without attaching a timeline to it.","commit_id":"82c3e05ad755617010dd9d9f79acf236bdf712d5"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"3be61c42c8057e318ddec408ef1da82edc542cb9","unresolved":false,"context_lines":[{"line_number":77,"context_line":"Tasks as a Facade for exposing the status of one to many actions."},{"line_number":78,"context_line":""},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"Proposal"},{"line_number":81,"context_line":"--------"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"Since it\u0027s a massive amount of work, we are proposing to split that effort into"}],"source_content_type":"text/x-rst","patch_set":2,"id":"ba15a1d1_820b94d5","line":80,"updated":"2015-09-17 18:07:18.000000000","message":"I would leave this section out of the devref.  Getting into details on how the work will be split or implemented should just be in specs.  My concern here is that the devref should require modifications if we decide to change some aspect of Nova, but not if we decide to implement something differently or at a different time.  Basically I don\u0027t think it should talk about the future except at a very high level.","commit_id":"82c3e05ad755617010dd9d9f79acf236bdf712d5"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"3be61c42c8057e318ddec408ef1da82edc542cb9","unresolved":false,"context_lines":[{"line_number":97,"context_line":" - fix reporting of compute manager error handling for adding more events to"},{"line_number":98,"context_line":"   the existing actions"},{"line_number":99,"context_line":" - make sure that all possible actions are reported"},{"line_number":100,"context_line":" - improve our detection patterns for trying to find stuck actions and put"},{"line_number":101,"context_line":"   the corresponding instance(s) to ERROR state"},{"line_number":102,"context_line":" - improve our current error triggering for putting instances into ERROR state"},{"line_number":103,"context_line":"   if correlated operations are failed"}],"source_content_type":"text/x-rst","patch_set":2,"id":"ba15a1d1_8232b4a5","line":100,"updated":"2015-09-17 18:07:18.000000000","message":"This seems like a feature to me.","commit_id":"82c3e05ad755617010dd9d9f79acf236bdf712d5"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"3be61c42c8057e318ddec408ef1da82edc542cb9","unresolved":false,"context_lines":[{"line_number":147,"context_line":"thresholds [4]. That kind of problem can be very common in production with"},{"line_number":148,"context_line":"flakey message queues that could leave the operation in a transient state. By"},{"line_number":149,"context_line":"accepting that if an action is not correctly updated now then it will not be"},{"line_number":150,"context_line":"later on, we could consider marking the instance as ERROR which could prevent"},{"line_number":151,"context_line":"the end-user to play with nova reset-state or anything like that."},{"line_number":152,"context_line":""},{"line_number":153,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"ba15a1d1_a2c7b862","line":150,"updated":"2015-09-17 18:07:18.000000000","message":"Part of this whole effort is the desire to avoid the ERROR state whenever possible.  I think it would be better to focus on reporting when this happens without affecting the instance state.","commit_id":"82c3e05ad755617010dd9d9f79acf236bdf712d5"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"22d56bbdcb891ac06f558ff45c9e0ffc8a16ec43","unresolved":false,"context_lines":[{"line_number":147,"context_line":"thresholds [4]. That kind of problem can be very common in production with"},{"line_number":148,"context_line":"flakey message queues that could leave the operation in a transient state. By"},{"line_number":149,"context_line":"accepting that if an action is not correctly updated now then it will not be"},{"line_number":150,"context_line":"later on, we could consider marking the instance as ERROR which could prevent"},{"line_number":151,"context_line":"the end-user to play with nova reset-state or anything like that."},{"line_number":152,"context_line":""},{"line_number":153,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"9a1a9d01_63fa3677","line":150,"in_reply_to":"ba15a1d1_a2c7b862","updated":"2015-09-29 13:58:51.000000000","message":"That\u0027s understandable. MHO is that we should also help the operators not to provide a nova reset-state each time we have the above problems and rather set the error when it\u0027s already wedged instead of not saying anything ;-)","commit_id":"82c3e05ad755617010dd9d9f79acf236bdf712d5"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"3be61c42c8057e318ddec408ef1da82edc542cb9","unresolved":false,"context_lines":[{"line_number":169,"context_line":"instance actions API, but rather provide a new Tasks API. That blueprint should"},{"line_number":170,"context_line":"be for providing a good model for that Tasks object, having a way to have"},{"line_number":171,"context_line":"multiple tasks per operation and some subtasks per parent task. That blueprint"},{"line_number":172,"context_line":"would not be for getting a list of tasks and their status, not for having some"},{"line_number":173,"context_line":"ways to modify their status (by cancelling them or resuming them)."},{"line_number":174,"context_line":""},{"line_number":175,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"ba15a1d1_22aac885","line":172,"updated":"2015-09-17 18:07:18.000000000","message":"s/^would not be/would be/ ?","commit_id":"82c3e05ad755617010dd9d9f79acf236bdf712d5"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"271ad7726343d2fa25d233ef1407e9e60c0d5524","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"  - how we can improve status and error reporting in the API"},{"line_number":30,"context_line":"  - how the state machine in Nova can be reworked for better managing error"},{"line_number":31,"context_line":"    handling"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"Tracking what happens when a long-running action is done is possible with Nova"}],"source_content_type":"text/x-rst","patch_set":3,"id":"da85f559_cd73a514","line":31,"updated":"2015-11-13 11:34:11.000000000","message":"Nit: maybe reverse the ordering there.","commit_id":"639ac820863852165c75996ec319fff381fab726"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"0bffb6772bd369c11a17564fa9d084a41a942df3","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":"Tracking what happens when a long-running action is done is possible with Nova"},{"line_number":35,"context_line":"at the moment thanks to the os-server-actions API where you can list either"},{"line_number":36,"context_line":"for a specific instance or for a specific Request ID all the related actions."},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"That said, the API is mostly incomplete as some of the conductor events are"},{"line_number":39,"context_line":"missing (live migrate for example), and most of the error handling happening on"}],"source_content_type":"text/x-rst","patch_set":3,"id":"da85f559_c435a9f7","line":36,"updated":"2015-11-13 18:49:18.000000000","message":"This is only true for API instantiated actions.  Something like an evacuate would not be tracked.","commit_id":"639ac820863852165c75996ec319fff381fab726"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"effbd1d72a8f3ff07823bb7c0cbdd4fec4c53f92","unresolved":false,"context_lines":[{"line_number":66,"context_line":"Instead of that, we prefer to mention that we take the opportunity of that"},{"line_number":67,"context_line":"manifesto to express our will to define a totally different model called"},{"line_number":68,"context_line":"Tasks, based on some previous nice insights we had in the past thanks to"},{"line_number":69,"context_line":"alaski [1] and jaypipes [2]."},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"Finally, we would like to have a model so that it would decouple the result of"},{"line_number":72,"context_line":"the requested action from the status of the instance, eg. a failing reboot not"}],"source_content_type":"text/x-rst","patch_set":3,"id":"da85f559_f6fe7537","line":69,"updated":"2015-11-13 16:20:03.000000000","message":"I wonder if, perhaps, on further consideration this paragraph might possibly be considered to err towards over-perambulation, and that its essence might be conveyed more succinctly and precisely with increased verbal frugality.\n\nI enjoyed reading this paragraph. In case it\u0027s not clear, this is not a substantive comment :)","commit_id":"639ac820863852165c75996ec319fff381fab726"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"effbd1d72a8f3ff07823bb7c0cbdd4fec4c53f92","unresolved":false,"context_lines":[{"line_number":77,"context_line":"solution like Taskflow or automaton for managing a state machine or"},{"line_number":78,"context_line":"transitions, because we consider that we shouldn\u0027t be driven by the technology"},{"line_number":79,"context_line":"but rather focus on the design, any solution possibly being addressed when it"},{"line_number":80,"context_line":"comes up to the implementation phase."},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"Last but not the least, maybe a long-term goal would be to consider that"},{"line_number":83,"context_line":"Tasks are self-containing their own logic for transitioning so that conductor"}],"source_content_type":"text/x-rst","patch_set":3,"id":"da85f559_b919be7b","line":80,"updated":"2015-11-13 16:20:03.000000000","message":"Absolutely. The critical design points are the required data, and where, and when they are persisted. Implementation details can be changed around these fundamentals.","commit_id":"639ac820863852165c75996ec319fff381fab726"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"271ad7726343d2fa25d233ef1407e9e60c0d5524","unresolved":false,"context_lines":[{"line_number":84,"context_line":"and compute processes would just call those methods rather than trying to"},{"line_number":85,"context_line":"implement that logic internally and manage all the possible error conditions."},{"line_number":86,"context_line":"That is still subject to discussion and doesn\u0027t prevent the existing to use"},{"line_number":87,"context_line":"Tasks as a Facade for exposing the status of one to many actions."},{"line_number":88,"context_line":""},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"Since it\u0027s a massive amount of work, we are proposing to split that effort into"}],"source_content_type":"text/x-rst","patch_set":3,"id":"da85f559_704cd276","line":87,"updated":"2015-11-13 11:34:11.000000000","message":"I think we might want to split this above bit into two sections:\n\nError handling and API","commit_id":"639ac820863852165c75996ec319fff381fab726"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"0bffb6772bd369c11a17564fa9d084a41a942df3","unresolved":false,"context_lines":[{"line_number":84,"context_line":"and compute processes would just call those methods rather than trying to"},{"line_number":85,"context_line":"implement that logic internally and manage all the possible error conditions."},{"line_number":86,"context_line":"That is still subject to discussion and doesn\u0027t prevent the existing to use"},{"line_number":87,"context_line":"Tasks as a Facade for exposing the status of one to many actions."},{"line_number":88,"context_line":""},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"Since it\u0027s a massive amount of work, we are proposing to split that effort into"}],"source_content_type":"text/x-rst","patch_set":3,"id":"da85f559_c73b6b9b","line":87,"in_reply_to":"da85f559_704cd276","updated":"2015-11-13 18:49:18.000000000","message":"I think the important bit here which is missing is that currently logic is strewn all over compute/conductor and the interactions are not well defined.  Consolidating it within a task will make it easier to reason about and easier to model the interactions between various states and error conditions.","commit_id":"639ac820863852165c75996ec319fff381fab726"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"271ad7726343d2fa25d233ef1407e9e60c0d5524","unresolved":false,"context_lines":[{"line_number":102,"context_line":""},{"line_number":103,"context_line":"Technical debt items :"},{"line_number":104,"context_line":" - fix reporting of compute manager error handling for adding more events to"},{"line_number":105,"context_line":"   the existing actions"},{"line_number":106,"context_line":" - make sure that all possible actions are reported"},{"line_number":107,"context_line":" - improve our current error triggering for putting instances into ERROR state"},{"line_number":108,"context_line":"   if correlated operations are failed"}],"source_content_type":"text/x-rst","patch_set":3,"id":"da85f559_70fe1207","line":105,"updated":"2015-11-13 11:34:11.000000000","message":"Probably need to include handling success here?","commit_id":"639ac820863852165c75996ec319fff381fab726"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"271ad7726343d2fa25d233ef1407e9e60c0d5524","unresolved":false,"context_lines":[{"line_number":105,"context_line":"   the existing actions"},{"line_number":106,"context_line":" - make sure that all possible actions are reported"},{"line_number":107,"context_line":" - improve our current error triggering for putting instances into ERROR state"},{"line_number":108,"context_line":"   if correlated operations are failed"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"New features items :"},{"line_number":111,"context_line":" - improve our detection patterns for trying to find stuck actions and put"}],"source_content_type":"text/x-rst","patch_set":3,"id":"da85f559_50242eae","line":108,"updated":"2015-11-13 11:34:11.000000000","message":"Need to kill instance faults DB table, in preference for instance actions. That means registering multiple faults against and action that might be considered a success. Maybe they end up being warnings in that case, etc.","commit_id":"639ac820863852165c75996ec319fff381fab726"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"effbd1d72a8f3ff07823bb7c0cbdd4fec4c53f92","unresolved":false,"context_lines":[{"line_number":114,"context_line":" - provide a backwards compatibility with the instance actions model"},{"line_number":115,"context_line":" - amend the model to be able to cancel an action if requested"},{"line_number":116,"context_line":" - be able to resume an action after an upgrade by ensuring that instance state"},{"line_number":117,"context_line":"   is coherent before applying the action again"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"All of that can be detailed below but will mostly be drafted out in specs."},{"line_number":120,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"da85f559_996b9a85","line":117,"updated":"2015-11-13 16:20:03.000000000","message":"I was thinking along the lines of a big bang approach per operation. Taking boot as an example, we would port that to a Tasks api. In the process we would get all of the above advantages, but only for the boot operation.\n\nBoot is an arbitrary choice.","commit_id":"639ac820863852165c75996ec319fff381fab726"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"271ad7726343d2fa25d233ef1407e9e60c0d5524","unresolved":false,"context_lines":[{"line_number":114,"context_line":" - provide a backwards compatibility with the instance actions model"},{"line_number":115,"context_line":" - amend the model to be able to cancel an action if requested"},{"line_number":116,"context_line":" - be able to resume an action after an upgrade by ensuring that instance state"},{"line_number":117,"context_line":"   is coherent before applying the action again"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"All of that can be detailed below but will mostly be drafted out in specs."},{"line_number":120,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"da85f559_b0b8fa2b","line":117,"updated":"2015-11-13 11:34:11.000000000","message":"something about self-service administration, so you can get faults for each action, which deep diving in the logs.","commit_id":"639ac820863852165c75996ec319fff381fab726"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"271ad7726343d2fa25d233ef1407e9e60c0d5524","unresolved":false,"context_lines":[{"line_number":125,"context_line":""},{"line_number":126,"context_line":"We currently have lots of error handling in Nova both in the API, conductor"},{"line_number":127,"context_line":"and compute manager. The main problem is that for the moment, we only persist"},{"line_number":128,"context_line":"and expose that error on the conductor side thanks to a specific context"},{"line_number":129,"context_line":"manager [3]."},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"The effort for that should be to look at all the exception catching for the"}],"source_content_type":"text/x-rst","patch_set":3,"id":"da85f559_b0c31a38","line":128,"updated":"2015-11-13 11:34:11.000000000","message":"do you mean compute manager side?","commit_id":"639ac820863852165c75996ec319fff381fab726"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"0bffb6772bd369c11a17564fa9d084a41a942df3","unresolved":false,"context_lines":[{"line_number":125,"context_line":""},{"line_number":126,"context_line":"We currently have lots of error handling in Nova both in the API, conductor"},{"line_number":127,"context_line":"and compute manager. The main problem is that for the moment, we only persist"},{"line_number":128,"context_line":"and expose that error on the conductor side thanks to a specific context"},{"line_number":129,"context_line":"manager [3]."},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"The effort for that should be to look at all the exception catching for the"}],"source_content_type":"text/x-rst","patch_set":3,"id":"da85f559_670e3fe7","line":128,"in_reply_to":"da85f559_b0c31a38","updated":"2015-11-13 18:49:18.000000000","message":"I think it\u0027s done within both compute and conductor, but some actions do not have full reporting yet.","commit_id":"639ac820863852165c75996ec319fff381fab726"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"0bffb6772bd369c11a17564fa9d084a41a942df3","unresolved":false,"context_lines":[{"line_number":140,"context_line":"live migration API, we can see there are no actions related to that. That"},{"line_number":141,"context_line":"blueprint should focus on looking at all the possible API updates for an"},{"line_number":142,"context_line":"instance and see if it\u0027s needed to provide an action related to it (and not"},{"line_number":143,"context_line":"only the move operations)."},{"line_number":144,"context_line":""},{"line_number":145,"context_line":""},{"line_number":146,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"da85f559_27e7d713","line":143,"updated":"2015-11-13 18:49:18.000000000","message":"Something to consider here is whether or not all actions should be exposed to users.  live-migrate is an admin action not available to users, in most deploys, so should users see when that is done to their instance?  I think different deployers may have different answers here but we may want to just be opinionated here rather than making this a policy/deployer decision.","commit_id":"639ac820863852165c75996ec319fff381fab726"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"effbd1d72a8f3ff07823bb7c0cbdd4fec4c53f92","unresolved":false,"context_lines":[{"line_number":148,"context_line":"------------------------------"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"Given the two above points should be merged, we could probably try to provide"},{"line_number":151,"context_line":"some patterns for detecting stuck actions (ie. no further events since a while)"},{"line_number":152,"context_line":"and consider moving the instance to an ERROR state and not only guessing using"},{"line_number":153,"context_line":"thresholds [4]. That kind of problem can be very common in production with"},{"line_number":154,"context_line":"flakey message queues that could leave the operation in a transient state. By"}],"source_content_type":"text/x-rst","patch_set":3,"id":"da85f559_de8c9f37","line":151,"updated":"2015-11-13 16:20:03.000000000","message":"I would be disappointed to see us adopt a heuristic here like a timeout. I would like to see an internal api which allows us to query the service which is supposed to be running the task to see if it is still up. This implies that we must be able to both identify and address that specific service, which is not currently the case for conductor iiuc.\n\nNote that there are only 2 possible answers to this query:\n1. It\u0027s up\n2. It might be down\n\nCertainty that a service is down would additionally require some kind of fencing.","commit_id":"639ac820863852165c75996ec319fff381fab726"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"0bffb6772bd369c11a17564fa9d084a41a942df3","unresolved":false,"context_lines":[{"line_number":148,"context_line":"------------------------------"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"Given the two above points should be merged, we could probably try to provide"},{"line_number":151,"context_line":"some patterns for detecting stuck actions (ie. no further events since a while)"},{"line_number":152,"context_line":"and consider moving the instance to an ERROR state and not only guessing using"},{"line_number":153,"context_line":"thresholds [4]. That kind of problem can be very common in production with"},{"line_number":154,"context_line":"flakey message queues that could leave the operation in a transient state. By"}],"source_content_type":"text/x-rst","patch_set":3,"id":"da85f559_879d635b","line":151,"in_reply_to":"da85f559_de8c9f37","updated":"2015-11-13 18:49:18.000000000","message":"One bit of complexity here is that an action could be in a message queue and not \"owned\" by any service yet.  Solving that is just another challenge in this large body of work, with one idea being to not treat messaging as a queue but have local queues within a service.  This would provide some visibility into them which rabbitmq does not provide.","commit_id":"639ac820863852165c75996ec319fff381fab726"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"effbd1d72a8f3ff07823bb7c0cbdd4fec4c53f92","unresolved":false,"context_lines":[{"line_number":208,"context_line":"Okay, I\u0027ll not provide some very good explanations. I prefer to say about what"},{"line_number":209,"context_line":"operators would like :"},{"line_number":210,"context_line":" - imagine a world where it\u0027s possible to cancel a current task and rollback"},{"line_number":211,"context_line":"   gracefully to the previous state without necessarily impacting the instance"},{"line_number":212,"context_line":" - imagine a world where a compute node would restart and look at the current"},{"line_number":213,"context_line":"   stopped tasks in order to resume them"},{"line_number":214,"context_line":" - imagine what could become the compute manager if all the actual logic was"}],"source_content_type":"text/x-rst","patch_set":3,"id":"da85f559_9ed5b7ba","line":211,"updated":"2015-11-13 16:20:03.000000000","message":"This sounds hard.","commit_id":"639ac820863852165c75996ec319fff381fab726"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"0bffb6772bd369c11a17564fa9d084a41a942df3","unresolved":false,"context_lines":[{"line_number":208,"context_line":"Okay, I\u0027ll not provide some very good explanations. I prefer to say about what"},{"line_number":209,"context_line":"operators would like :"},{"line_number":210,"context_line":" - imagine a world where it\u0027s possible to cancel a current task and rollback"},{"line_number":211,"context_line":"   gracefully to the previous state without necessarily impacting the instance"},{"line_number":212,"context_line":" - imagine a world where a compute node would restart and look at the current"},{"line_number":213,"context_line":"   stopped tasks in order to resume them"},{"line_number":214,"context_line":" - imagine what could become the compute manager if all the actual logic was"}],"source_content_type":"text/x-rst","patch_set":3,"id":"da85f559_276d9732","line":211,"in_reply_to":"da85f559_9ed5b7ba","updated":"2015-11-13 18:49:18.000000000","message":"Yeah, I think this may need to have a limited scope.  Something like a reboot couldn\u0027t be cancelled after a certain point, but rescue/rebuild potentially could.","commit_id":"639ac820863852165c75996ec319fff381fab726"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"effbd1d72a8f3ff07823bb7c0cbdd4fec4c53f92","unresolved":false,"context_lines":[{"line_number":210,"context_line":" - imagine a world where it\u0027s possible to cancel a current task and rollback"},{"line_number":211,"context_line":"   gracefully to the previous state without necessarily impacting the instance"},{"line_number":212,"context_line":" - imagine a world where a compute node would restart and look at the current"},{"line_number":213,"context_line":"   stopped tasks in order to resume them"},{"line_number":214,"context_line":" - imagine what could become the compute manager if all the actual logic was"},{"line_number":215,"context_line":"   moving to a Task object where we could call that way::"},{"line_number":216,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"da85f559_1e4b07b2","line":213,"updated":"2015-11-13 16:20:03.000000000","message":"This is absolutely achievable.","commit_id":"639ac820863852165c75996ec319fff381fab726"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"0c1c7a10c5c3682607111e4f4afcd8cee9ea9527","unresolved":false,"context_lines":[{"line_number":30,"context_line":"In Nova there are three classes of APIs calls:"},{"line_number":31,"context_line":"* Read system state (sync)"},{"line_number":32,"context_line":"* Write to the system state (sync)"},{"line_number":33,"context_line":"* Start a long-running action (async)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"This effort focuses on how Nova can improve the API calls that trigger long"},{"line_number":36,"context_line":"running tasks. Firstly, when the user requests a long running action, Nova"}],"source_content_type":"text/x-rst","patch_set":4,"id":"da85f559_2ab56a7d","line":33,"updated":"2015-11-13 15:12:00.000000000","message":"good explanation why we have local DB calls in the API while we also have RPC casts to the conductor","commit_id":"1cd09d3ec96f3deabcb76937cb07e5a86f2f909b"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"0c1c7a10c5c3682607111e4f4afcd8cee9ea9527","unresolved":false,"context_lines":[{"line_number":104,"context_line":""},{"line_number":105,"context_line":"* Some tasks record Instance Actions, used by os-server-actions API"},{"line_number":106,"context_line":"* Notifications for tasks with action.start then action.end or action.error"},{"line_number":107,"context_line":"* Decorator that sends an error notification on an exceptions that is raised"},{"line_number":108,"context_line":"* For some exceptions, and instance fault is recored in the database, and"},{"line_number":109,"context_line":"  its possible it was a non-fatal error that was recorded"},{"line_number":110,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"da85f559_a5618dd5","line":107,"range":{"start_line":107,"start_character":60,"end_line":107,"end_character":61},"updated":"2015-11-13 15:12:00.000000000","message":"grammar nit","commit_id":"1cd09d3ec96f3deabcb76937cb07e5a86f2f909b"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"0c1c7a10c5c3682607111e4f4afcd8cee9ea9527","unresolved":false,"context_lines":[{"line_number":105,"context_line":"* Some tasks record Instance Actions, used by os-server-actions API"},{"line_number":106,"context_line":"* Notifications for tasks with action.start then action.end or action.error"},{"line_number":107,"context_line":"* Decorator that sends an error notification on an exceptions that is raised"},{"line_number":108,"context_line":"* For some exceptions, and instance fault is recored in the database, and"},{"line_number":109,"context_line":"  its possible it was a non-fatal error that was recorded"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"We explicitly leave off the manifesto the discussion whether an existing"}],"source_content_type":"text/x-rst","patch_set":4,"id":"da85f559_6581654d","line":108,"range":{"start_line":108,"start_character":45,"end_line":108,"end_character":52},"updated":"2015-11-13 15:12:00.000000000","message":"nit (recorded)","commit_id":"1cd09d3ec96f3deabcb76937cb07e5a86f2f909b"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"0c1c7a10c5c3682607111e4f4afcd8cee9ea9527","unresolved":false,"context_lines":[{"line_number":167,"context_line":""},{"line_number":168,"context_line":"We must also have consistent Log messages when actions have started and"},{"line_number":169,"context_line":"completed."},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"Consistent reporting of known failed API actions"},{"line_number":172,"context_line":"-------------------------------------------------"},{"line_number":173,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"da85f559_e588f5c8","line":170,"updated":"2015-11-13 15:12:00.000000000","message":"I was mentioning the [3] footnote, it could be worth mentioning that we automatically log an instance action thanks to a specific context manager in the conductor for sucessful actions led by it.","commit_id":"1cd09d3ec96f3deabcb76937cb07e5a86f2f909b"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"b24afd8e964d45578a9a2b80854d4ca4d717e174","unresolved":false,"context_lines":[{"line_number":174,"context_line":"Ensure when we know something has failed, we report that in a consistent"},{"line_number":175,"context_line":"way, through os-server-actions API. This should include catching exceptions"},{"line_number":176,"context_line":"that interrupt the execution of those actions. We should focus on reporting"},{"line_number":177,"context_line":"the root cause of the problem, where possible."},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"Similarly, we should ensure we send the correct \"error\" notifications, instead"},{"line_number":180,"context_line":"of sending \"end\" notifications."}],"source_content_type":"text/x-rst","patch_set":4,"id":"ba8a016a_2478158f","line":177,"updated":"2015-11-17 17:01:22.000000000","message":"One thing to note is that os-server-actions was designed to only account for API initiated events.  Periodic tasks confirming a resize or offloading a shelved instance do not fall under its scope currently.  Or the virt lifecycle events.","commit_id":"1cd09d3ec96f3deabcb76937cb07e5a86f2f909b"},{"author":{"_account_id":7461,"name":"Paul Murray","email":"pmurray@hpe.com","username":"ptm"},"change_message_id":"001517604532989effbead461d1a53788822e4f0","unresolved":false,"context_lines":[{"line_number":207,"context_line":""},{"line_number":208,"context_line":"We could have a periodic task on the conductor that sees if any of the tasks"},{"line_number":209,"context_line":"have not been recently updated by their owner. When that happens it sends an"},{"line_number":210,"context_line":"RPC call to the worker to ask if it thinks it is currently still processing"},{"line_number":211,"context_line":"the specific task. If thats not the case, the task is marked as failed."},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"Its possible the worker does not respond to the RPC call, in that case we"}],"source_content_type":"text/x-rst","patch_set":4,"id":"da85f559_b9b53e32","line":210,"updated":"2015-11-13 14:19:39.000000000","message":"This is an optimization I suppose, to avoid timing things out unnecessarily, but I would be inclined to proceed without asking the owner. If the owner is blocked this would just back up message queues. I would rather allow tasks a long timeout - if they don\u0027t come back something is very wrong anyway.\n\nWe could also assume that everything is fine so long as the service appears to be up and not time out in that case. But again, a very long timeout is probably useful here too, for certainty in case something got lost. There is always the option an operator can check outstanding tasks if needed?\n\nI would also be inclined to allow tasks to proceed for some time even if the service goes down. In this case we could do something like check the task is proceeding and use a shorter timeout if it is not. The reason for this is that we often see compute managers get marked down when they are not. Since the database access was moved to conductor the heartbeat (when using the db) goes through message queues to conductor. That introduces many more ways for them to be delayed or not get through that have nothing to do with the operation of the database (conductors too loaded/queues backing up, transient rabbit partition etc.)\n\nIn general failure detection is unreliable, especially for something that is not a specialist failure detection system. If you have an external one of these, take its word when it says something has failed, but otherwise be conservative and don\u0027t assume failure too quickly.","commit_id":"1cd09d3ec96f3deabcb76937cb07e5a86f2f909b"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"0c1c7a10c5c3682607111e4f4afcd8cee9ea9527","unresolved":false,"context_lines":[{"line_number":207,"context_line":""},{"line_number":208,"context_line":"We could have a periodic task on the conductor that sees if any of the tasks"},{"line_number":209,"context_line":"have not been recently updated by their owner. When that happens it sends an"},{"line_number":210,"context_line":"RPC call to the worker to ask if it thinks it is currently still processing"},{"line_number":211,"context_line":"the specific task. If thats not the case, the task is marked as failed."},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"Its possible the worker does not respond to the RPC call, in that case we"}],"source_content_type":"text/x-rst","patch_set":4,"id":"da85f559_803b179c","line":210,"in_reply_to":"da85f559_b9b53e32","updated":"2015-11-13 15:12:00.000000000","message":"Well, for the moment, it\u0027s just a declaration of intent saying \"I feel we have a room for investigating that\". For sure, we\u0027re still stuck by the CAP theorem and we could only approximate some possibilities but I feel that is fine here.","commit_id":"1cd09d3ec96f3deabcb76937cb07e5a86f2f909b"},{"author":{"_account_id":7461,"name":"Paul Murray","email":"pmurray@hpe.com","username":"ptm"},"change_message_id":"001517604532989effbead461d1a53788822e4f0","unresolved":false,"context_lines":[{"line_number":212,"context_line":""},{"line_number":213,"context_line":"Its possible the worker does not respond to the RPC call, in that case we"},{"line_number":214,"context_line":"timeout and mark the task state as unknown. If the worker is \"force marked"},{"line_number":215,"context_line":"down\", then we error out the task and stop checking."},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"There are likely to be other issues not raised here, but this idea is"},{"line_number":218,"context_line":"purely to help add color to the issues are trying to be resolved here."}],"source_content_type":"text/x-rst","patch_set":4,"id":"da85f559_2c24aaad","line":215,"updated":"2015-11-13 14:19:39.000000000","message":"yep","commit_id":"1cd09d3ec96f3deabcb76937cb07e5a86f2f909b"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"0c1c7a10c5c3682607111e4f4afcd8cee9ea9527","unresolved":false,"context_lines":[{"line_number":227,"context_line":"are not two conductors running on the same host with the same queue name,"},{"line_number":228,"context_line":"as is the current common practice."},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"Given the two above points should be merged, we could probably try to provide"},{"line_number":231,"context_line":"some patterns for detecting stuck actions (ie. no further events since a while)"},{"line_number":232,"context_line":"and consider moving the instance to an ERROR state and not only guessing using"},{"line_number":233,"context_line":"thresholds [4]. That kind of problem can be very common in production with"}],"source_content_type":"text/x-rst","patch_set":4,"id":"da85f559_6004f3c5","line":230,"range":{"start_line":230,"start_character":10,"end_line":230,"end_character":13},"updated":"2015-11-13 15:12:00.000000000","message":"nit: \"two\" can be removed","commit_id":"1cd09d3ec96f3deabcb76937cb07e5a86f2f909b"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"517288b57e69ad5ee906c968ec6f004bb910d74a","unresolved":false,"context_lines":[{"line_number":300,"context_line":" - imagine what could become the compute manager if all the actual logic was"},{"line_number":301,"context_line":"   moving to a Task object where we could call that way::"},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"        Task(\"evacuate\u0027\")\u0027.execute(instance)"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"But let\u0027s stop dreaming and let\u0027s get back to work. All of that sounds for a"},{"line_number":306,"context_line":"next cycle and deserves good discussions before being designed."}],"source_content_type":"text/x-rst","patch_set":4,"id":"ba8a016a_d5043fc1","line":303,"updated":"2015-11-18 00:25:06.000000000","message":"Typo?\nIs the following correct?\n\nTask(\"evacuate\").execute(instance)","commit_id":"1cd09d3ec96f3deabcb76937cb07e5a86f2f909b"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"557b44455de21adfacbe29f5201273a9950031d4","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    handling"},{"line_number":28,"context_line":"  - how we can improve status and error reporting in the API"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"In Nova there are three classes of APIs calls:"},{"line_number":31,"context_line":"* Read system state (sync)"},{"line_number":32,"context_line":"* Write to the system state (sync)"},{"line_number":33,"context_line":"* Start a long-running action (async)"}],"source_content_type":"text/x-rst","patch_set":5,"id":"ba8a016a_aafc3cb8","line":30,"updated":"2015-11-20 00:28:15.000000000","message":"s/APIs calls/API calls/","commit_id":"f01669c743807849cfd27dc2ab2360722cba774d"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"557b44455de21adfacbe29f5201273a9950031d4","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"This effort focuses on how Nova can improve the API calls that trigger long"},{"line_number":36,"context_line":"running tasks. Firstly, when the user requests a long running action, Nova"},{"line_number":37,"context_line":"need to know if it succeeded or not. Secondly, we need to have a better way"},{"line_number":38,"context_line":"of communicating that knowledge with our API users."},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"API"}],"source_content_type":"text/x-rst","patch_set":5,"id":"ba8a016a_8a14d8e8","line":37,"updated":"2015-11-20 00:28:15.000000000","message":"s/need to know/needs to know/","commit_id":"f01669c743807849cfd27dc2ab2360722cba774d"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"557b44455de21adfacbe29f5201273a9950031d4","unresolved":false,"context_lines":[{"line_number":35,"context_line":"This effort focuses on how Nova can improve the API calls that trigger long"},{"line_number":36,"context_line":"running tasks. Firstly, when the user requests a long running action, Nova"},{"line_number":37,"context_line":"need to know if it succeeded or not. Secondly, we need to have a better way"},{"line_number":38,"context_line":"of communicating that knowledge with our API users."},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"API"},{"line_number":41,"context_line":"---"}],"source_content_type":"text/x-rst","patch_set":5,"id":"ba8a016a_6af094c9","line":38,"updated":"2015-11-20 00:28:15.000000000","message":"s/with our API users/to our API users/","commit_id":"f01669c743807849cfd27dc2ab2360722cba774d"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"81b7efff2d15e788ae992ed3d5acf72529438b91","unresolved":false,"context_lines":[{"line_number":43,"context_line":"All API requests get a request-id that is used to track the progress of that"},{"line_number":44,"context_line":"API call as the thread of execution passes between different Nova components."},{"line_number":45,"context_line":"The request-id is returned to the end user in a header, it is used in all log"},{"line_number":46,"context_line":"messages, and is also used by the os-server-actions API."},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"With the os-server-actions API, you can list either"},{"line_number":49,"context_line":"for a specific instance or for a specific Request ID all the related actions."}],"source_content_type":"text/x-rst","patch_set":5,"id":"ba8a016a_3735e8f6","line":46,"updated":"2015-11-20 17:13:08.000000000","message":"I believe you\u0027re talking about http://developer.openstack.org/api-ref-compute-v2.1.html#os-instance-actions-v2.1 ? From the docs, it looks like it should be referred to as the \"Servers action API\" although it\u0027s identified by the \u0027os-instance-actions\u0027 resource in the URI.  Thus, \"os-server-actions API\" doesn\u0027t quite seem to be the correct way to describe it, though that\u0027s up to you.  My suggestion is that no matter how you decide to refer to that API, include a reference to the API doc so we all know we\u0027re talking about the same thing.","commit_id":"f01669c743807849cfd27dc2ab2360722cba774d"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"557b44455de21adfacbe29f5201273a9950031d4","unresolved":false,"context_lines":[{"line_number":104,"context_line":""},{"line_number":105,"context_line":"* Some tasks record Instance Actions, used by os-server-actions API"},{"line_number":106,"context_line":"* Notifications for tasks with action.start then action.end or action.error"},{"line_number":107,"context_line":"* Decorator that sends an error notification on an exceptions that is raised"},{"line_number":108,"context_line":"* For some exceptions, and instance fault is recored in the database, and"},{"line_number":109,"context_line":"  its possible it was a non-fatal error that was recorded"},{"line_number":110,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"ba8a016a_0a37884d","line":107,"updated":"2015-11-20 00:28:15.000000000","message":"s/an exceptions/an exception/","commit_id":"f01669c743807849cfd27dc2ab2360722cba774d"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"557b44455de21adfacbe29f5201273a9950031d4","unresolved":false,"context_lines":[{"line_number":105,"context_line":"* Some tasks record Instance Actions, used by os-server-actions API"},{"line_number":106,"context_line":"* Notifications for tasks with action.start then action.end or action.error"},{"line_number":107,"context_line":"* Decorator that sends an error notification on an exceptions that is raised"},{"line_number":108,"context_line":"* For some exceptions, and instance fault is recored in the database, and"},{"line_number":109,"context_line":"  its possible it was a non-fatal error that was recorded"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"We explicitly leave off the manifesto the discussion whether an existing"}],"source_content_type":"text/x-rst","patch_set":5,"id":"ba8a016a_2a15ac9a","line":108,"updated":"2015-11-20 00:28:15.000000000","message":"s/and instance/an instance/\n\ns/recored/recorded/","commit_id":"f01669c743807849cfd27dc2ab2360722cba774d"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"557b44455de21adfacbe29f5201273a9950031d4","unresolved":false,"context_lines":[{"line_number":106,"context_line":"* Notifications for tasks with action.start then action.end or action.error"},{"line_number":107,"context_line":"* Decorator that sends an error notification on an exceptions that is raised"},{"line_number":108,"context_line":"* For some exceptions, and instance fault is recored in the database, and"},{"line_number":109,"context_line":"  its possible it was a non-fatal error that was recorded"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"We explicitly leave off the manifesto the discussion whether an existing"},{"line_number":112,"context_line":"solution like Taskflow or automaton for managing a state machine or"}],"source_content_type":"text/x-rst","patch_set":5,"id":"ba8a016a_0a0ea88b","line":109,"updated":"2015-11-20 00:28:15.000000000","message":"s/its/it\u0027s/","commit_id":"f01669c743807849cfd27dc2ab2360722cba774d"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"557b44455de21adfacbe29f5201273a9950031d4","unresolved":false,"context_lines":[{"line_number":112,"context_line":"solution like Taskflow or automaton for managing a state machine or"},{"line_number":113,"context_line":"transitions, because we consider that we shouldn\u0027t be driven by the technology"},{"line_number":114,"context_line":"but rather focus on the design, any solution possibly being addressed when it"},{"line_number":115,"context_line":"comes up to the implementation phase."},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"Last but not the least, maybe a long-term goal would be to consider that"},{"line_number":118,"context_line":"Tasks are self-containing their own logic for transitioning so that conductor"}],"source_content_type":"text/x-rst","patch_set":5,"id":"ba8a016a_ca24200e","line":115,"updated":"2015-11-20 00:28:15.000000000","message":"++","commit_id":"f01669c743807849cfd27dc2ab2360722cba774d"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"557b44455de21adfacbe29f5201273a9950031d4","unresolved":false,"context_lines":[{"line_number":115,"context_line":"comes up to the implementation phase."},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"Last but not the least, maybe a long-term goal would be to consider that"},{"line_number":118,"context_line":"Tasks are self-containing their own logic for transitioning so that conductor"},{"line_number":119,"context_line":"and compute processes would just call those methods rather than trying to"},{"line_number":120,"context_line":"implement that logic internally and manage all the possible error conditions."},{"line_number":121,"context_line":"That is still subject to discussion and doesn\u0027t prevent the existing to use"}],"source_content_type":"text/x-rst","patch_set":5,"id":"ba8a016a_8a4858b4","line":118,"updated":"2015-11-20 00:28:15.000000000","message":"s/are self-containing their own logic for transitioning so that conductor and compute processes would just call those methods rather than trying to implement that logic internally and manage all the possible error conditions/are self-contained./","commit_id":"f01669c743807849cfd27dc2ab2360722cba774d"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"557b44455de21adfacbe29f5201273a9950031d4","unresolved":false,"context_lines":[{"line_number":137,"context_line":"are provided while some other effort could be done in the same time for"},{"line_number":138,"context_line":"implementing the Tasks objects and the API related resources."},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"Each of those items should trigger a specific independent objective and could"},{"line_number":141,"context_line":"possibly be delivered over more than one cycle."},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"The current proposal for splitting that epic into blueprints could be :"}],"source_content_type":"text/x-rst","patch_set":5,"id":"ba8a016a_0aea2874","line":140,"updated":"2015-11-20 00:28:15.000000000","message":"s/a specific independent/an individual/","commit_id":"f01669c743807849cfd27dc2ab2360722cba774d"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"557b44455de21adfacbe29f5201273a9950031d4","unresolved":false,"context_lines":[{"line_number":157,"context_line":" - amend the model to be able to cancel an action if requested"},{"line_number":158,"context_line":" - be able to resume an action after an upgrade by ensuring that instance state"},{"line_number":159,"context_line":"   is coherent before applying the action again"},{"line_number":160,"context_line":" - Enable more self-service administrator, useful for very small private clouds"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"All of that can be detailed below but will mostly be drafted out in specs."},{"line_number":163,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"ba8a016a_4a9b5018","line":160,"updated":"2015-11-20 00:28:15.000000000","message":"s/administrator/administration/","commit_id":"f01669c743807849cfd27dc2ab2360722cba774d"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"557b44455de21adfacbe29f5201273a9950031d4","unresolved":false,"context_lines":[{"line_number":212,"context_line":""},{"line_number":213,"context_line":"Lets discuss a possible solution to explore this issue."},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"We could record an owner of a specific task. This could maps to the RPC"},{"line_number":216,"context_line":"queue the task was sent to by the API, usually a nova-compute worker."},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"We could have a periodic task on the conductor that sees if any of the tasks"}],"source_content_type":"text/x-rst","patch_set":5,"id":"ba8a016a_aa7afcba","line":215,"updated":"2015-11-20 00:28:15.000000000","message":"s/could maps/could map/","commit_id":"f01669c743807849cfd27dc2ab2360722cba774d"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"557b44455de21adfacbe29f5201273a9950031d4","unresolved":false,"context_lines":[{"line_number":218,"context_line":"We could have a periodic task on the conductor that sees if any of the tasks"},{"line_number":219,"context_line":"have not been recently updated by their owner. When that happens it sends an"},{"line_number":220,"context_line":"RPC call to the worker to ask if it thinks it is currently still processing"},{"line_number":221,"context_line":"the specific task. If thats not the case, the task is marked as failed."},{"line_number":222,"context_line":"Of course, the idea is not to detect all the possible failures (after all, we"},{"line_number":223,"context_line":"are capped by the CAP theorem, aren\u0027t we ?) but rather identify what could be"},{"line_number":224,"context_line":"the possible hypothesis for getting some reliable failure detection."}],"source_content_type":"text/x-rst","patch_set":5,"id":"ba8a016a_2a4dac99","line":221,"updated":"2015-11-20 00:28:15.000000000","message":"s/thats/that\u0027s/","commit_id":"f01669c743807849cfd27dc2ab2360722cba774d"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"557b44455de21adfacbe29f5201273a9950031d4","unresolved":false,"context_lines":[{"line_number":220,"context_line":"RPC call to the worker to ask if it thinks it is currently still processing"},{"line_number":221,"context_line":"the specific task. If thats not the case, the task is marked as failed."},{"line_number":222,"context_line":"Of course, the idea is not to detect all the possible failures (after all, we"},{"line_number":223,"context_line":"are capped by the CAP theorem, aren\u0027t we ?) but rather identify what could be"},{"line_number":224,"context_line":"the possible hypothesis for getting some reliable failure detection."},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"Its possible the worker does not respond to the RPC call, in that case we"}],"source_content_type":"text/x-rst","patch_set":5,"id":"ba8a016a_6a573426","line":223,"updated":"2015-11-20 00:28:15.000000000","message":"Well, the CAP theorem doesn\u0027t have anything to do with whether or not we can identify all possible failure surfaces...","commit_id":"f01669c743807849cfd27dc2ab2360722cba774d"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"557b44455de21adfacbe29f5201273a9950031d4","unresolved":false,"context_lines":[{"line_number":223,"context_line":"are capped by the CAP theorem, aren\u0027t we ?) but rather identify what could be"},{"line_number":224,"context_line":"the possible hypothesis for getting some reliable failure detection."},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"Its possible the worker does not respond to the RPC call, in that case we"},{"line_number":227,"context_line":"timeout and mark the task state as unknown. If the worker is \"force marked"},{"line_number":228,"context_line":"down\", then we error out the task and stop checking."},{"line_number":229,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"ba8a016a_ea39e4f2","line":226,"updated":"2015-11-20 00:28:15.000000000","message":"s/Its/It\u0027s/","commit_id":"f01669c743807849cfd27dc2ab2360722cba774d"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"557b44455de21adfacbe29f5201273a9950031d4","unresolved":false,"context_lines":[{"line_number":270,"context_line":"Define a better API for tasks"},{"line_number":271,"context_line":"-----------------------------"},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"Like we said above, there is no compelling reasons for trying to update the"},{"line_number":274,"context_line":"instance actions API, but rather provide a new Tasks API. That blueprint should"},{"line_number":275,"context_line":"be for providing a good model for that Tasks object, having a way to have"},{"line_number":276,"context_line":"multiple tasks per operation and some subtasks per parent task. That blueprint"}],"source_content_type":"text/x-rst","patch_set":5,"id":"ba8a016a_a516ad49","line":273,"updated":"2015-11-20 00:28:15.000000000","message":"s/reasons/reasoon/","commit_id":"f01669c743807849cfd27dc2ab2360722cba774d"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"557b44455de21adfacbe29f5201273a9950031d4","unresolved":false,"context_lines":[{"line_number":281,"context_line":"Replace instance actions by tasks"},{"line_number":282,"context_line":"---------------------------------"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"Disclaimer: Since we said that tasks !\u003d1 instance actions, just changing"},{"line_number":285,"context_line":"the claims to instance actions by Tasks calls should be not really good."},{"line_number":286,"context_line":"That said, we think that just making sure that previous actions are at least"},{"line_number":287,"context_line":"creating a task leaves the Tasks API quite identical to instance actions, until"}],"source_content_type":"text/x-rst","patch_set":5,"id":"ba8a016a_e56cb5d1","line":284,"updated":"2015-11-20 00:28:15.000000000","message":"s/tasks !\u003d1 instance actions/tasks are not the same as instance actions/","commit_id":"f01669c743807849cfd27dc2ab2360722cba774d"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"557b44455de21adfacbe29f5201273a9950031d4","unresolved":false,"context_lines":[{"line_number":282,"context_line":"---------------------------------"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"Disclaimer: Since we said that tasks !\u003d1 instance actions, just changing"},{"line_number":285,"context_line":"the claims to instance actions by Tasks calls should be not really good."},{"line_number":286,"context_line":"That said, we think that just making sure that previous actions are at least"},{"line_number":287,"context_line":"creating a task leaves the Tasks API quite identical to instance actions, until"},{"line_number":288,"context_line":"we decide to refine those tasks and set some subtasks every time it\u0027s needed"}],"source_content_type":"text/x-rst","patch_set":5,"id":"ba8a016a_a56b0db6","line":285,"updated":"2015-11-20 00:28:15.000000000","message":"s/should be not really good/is not enough/","commit_id":"f01669c743807849cfd27dc2ab2360722cba774d"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"557b44455de21adfacbe29f5201273a9950031d4","unresolved":false,"context_lines":[{"line_number":290,"context_line":"creation task)."},{"line_number":291,"context_line":"That way, we should also think about providing a backwards compatibility with"},{"line_number":292,"context_line":"the instance actions API which should be deprecated, by thinking about which"},{"line_number":293,"context_line":"task should be provided as an action and which one is just a child one."},{"line_number":294,"context_line":""},{"line_number":295,"context_line":"Replace instance faults by tasks"},{"line_number":296,"context_line":"--------------------------------"}],"source_content_type":"text/x-rst","patch_set":5,"id":"ba8a016a_259e3db9","line":293,"updated":"2015-11-20 00:28:15.000000000","message":"On further consideration, the above paragraphs need to be rewritten to be more clear... they are very difficult to understand.","commit_id":"f01669c743807849cfd27dc2ab2360722cba774d"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"ecd84b2956b1ea9b48ee869f3d8ab975d04e1551","unresolved":false,"context_lines":[{"line_number":52,"context_line":"Also, giving to the user a consistent API for tracking actions and faults"},{"line_number":53,"context_line":"(following a RBAC admin policy of course) should allow them to identify"},{"line_number":54,"context_line":"long-running tasks and pending actions so they could be able to see the"},{"line_number":55,"context_line":"progress and possibly cancel one gracefully."},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"Given the existing, we could be tempted to refine the existing instance actions"},{"line_number":58,"context_line":"model and its current API resources, but there are many drawbacks to that :"}],"source_content_type":"text/x-rst","patch_set":6,"id":"fa69d971_34a9327c","line":55,"updated":"2016-01-03 16:40:28.000000000","message":"\"Giving users a consistent API for tracking actions and faults (following RBAC admin policy, of course) can allow them to observe and cancel long-running tasks and pending actions.\"\n\nOr something like that. It\u0027s a bit long winded as is.","commit_id":"1e1b06375a7cb24dd91004a203adaecabb821222"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"ecd84b2956b1ea9b48ee869f3d8ab975d04e1551","unresolved":false,"context_lines":[{"line_number":54,"context_line":"long-running tasks and pending actions so they could be able to see the"},{"line_number":55,"context_line":"progress and possibly cancel one gracefully."},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"Given the existing, we could be tempted to refine the existing instance actions"},{"line_number":58,"context_line":"model and its current API resources, but there are many drawbacks to that :"},{"line_number":59,"context_line":" - the model is mostly constrained by having one action per request-id, which"},{"line_number":60,"context_line":"   means that we can\u0027t split an API operation like a create into a list of"}],"source_content_type":"text/x-rst","patch_set":6,"id":"fa69d971_94b01edf","line":57,"updated":"2016-01-03 16:40:28.000000000","message":"Drop everything up to \"we\"","commit_id":"1e1b06375a7cb24dd91004a203adaecabb821222"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"ecd84b2956b1ea9b48ee869f3d8ab975d04e1551","unresolved":false,"context_lines":[{"line_number":68,"context_line":"   backporting those rich objects at the API level which would possibly create"},{"line_number":69,"context_line":"   some debt that we should keep until we remove that old API (possibly never)"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"Instead of that, we prefer to mention that we take the opportunity of that"},{"line_number":72,"context_line":"manifesto to express our will to define a totally different model called"},{"line_number":73,"context_line":"Tasks, based on some previous nice insights we had in the past thanks to"},{"line_number":74,"context_line":"alaski [1] and jaypipes [2]."}],"source_content_type":"text/x-rst","patch_set":6,"id":"fa69d971_f4e07ace","line":71,"updated":"2016-01-03 16:40:28.000000000","message":"we prefer to use this manifesto to express out will...","commit_id":"1e1b06375a7cb24dd91004a203adaecabb821222"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"ecd84b2956b1ea9b48ee869f3d8ab975d04e1551","unresolved":false,"context_lines":[{"line_number":74,"context_line":"alaski [1] and jaypipes [2]."},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"Finally, we would like to have a model so that it would decouple the result of"},{"line_number":77,"context_line":"the requested action from the status of the instance, eg. a failing reboot not"},{"line_number":78,"context_line":"necessarily putting the instance into an ERROR state. That last assumption"},{"line_number":79,"context_line":"leads towards the idea that tasks could have a separate state machine than the"},{"line_number":80,"context_line":"rudimentary one that Nova has for describing VM states."}],"source_content_type":"text/x-rst","patch_set":6,"id":"fa69d971_b4ea02ab","line":77,"updated":"2016-01-03 16:40:28.000000000","message":"Finally, we would like to have a model that will decouple the result of the requested action from the status of the instance...\"","commit_id":"1e1b06375a7cb24dd91004a203adaecabb821222"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"ecd84b2956b1ea9b48ee869f3d8ab975d04e1551","unresolved":false,"context_lines":[{"line_number":96,"context_line":""},{"line_number":97,"context_line":"* An Exception is raised in compute manager, but not handled by anyone"},{"line_number":98,"context_line":"* nova-compute worker is killed during upgrade, because the graceful"},{"line_number":99,"context_line":"  shutdown was taking to long, and that interupts all the in flight"},{"line_number":100,"context_line":"  actions"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"Part of the issue are the number of ways we track errors with long running"}],"source_content_type":"text/x-rst","patch_set":6,"id":"fa69d971_14f3ce9f","line":99,"updated":"2016-01-03 16:40:28.000000000","message":"s/to/too/","commit_id":"1e1b06375a7cb24dd91004a203adaecabb821222"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"ecd84b2956b1ea9b48ee869f3d8ab975d04e1551","unresolved":false,"context_lines":[{"line_number":99,"context_line":"  shutdown was taking to long, and that interupts all the in flight"},{"line_number":100,"context_line":"  actions"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"Part of the issue are the number of ways we track errors with long running"},{"line_number":103,"context_line":"tasks. Here are a few examples of current approaches:"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"* Some tasks record Instance Actions, used by os-server-actions API"}],"source_content_type":"text/x-rst","patch_set":6,"id":"fa69d971_d42bf6e9","line":102,"updated":"2016-01-03 16:40:28.000000000","message":"s/are/is/","commit_id":"1e1b06375a7cb24dd91004a203adaecabb821222"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"ecd84b2956b1ea9b48ee869f3d8ab975d04e1551","unresolved":false,"context_lines":[{"line_number":108,"context_line":"* For some exceptions, an instance fault is recorded in the database, and"},{"line_number":109,"context_line":"  it\u0027s possible it was a non-fatal error that was recorded"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"We explicitly leave off the manifesto the discussion whether an existing"},{"line_number":112,"context_line":"solution like Taskflow or automaton for managing a state machine or"},{"line_number":113,"context_line":"transitions, because we consider that we shouldn\u0027t be driven by the technology"},{"line_number":114,"context_line":"but rather focus on the design, any solution possibly being addressed when it"}],"source_content_type":"text/x-rst","patch_set":6,"id":"fa69d971_b438c23e","line":111,"updated":"2016-01-03 16:40:28.000000000","message":"s/whether/of whether/","commit_id":"1e1b06375a7cb24dd91004a203adaecabb821222"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"ecd84b2956b1ea9b48ee869f3d8ab975d04e1551","unresolved":false,"context_lines":[{"line_number":109,"context_line":"  it\u0027s possible it was a non-fatal error that was recorded"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"We explicitly leave off the manifesto the discussion whether an existing"},{"line_number":112,"context_line":"solution like Taskflow or automaton for managing a state machine or"},{"line_number":113,"context_line":"transitions, because we consider that we shouldn\u0027t be driven by the technology"},{"line_number":114,"context_line":"but rather focus on the design, any solution possibly being addressed when it"},{"line_number":115,"context_line":"comes up to the implementation phase."}],"source_content_type":"text/x-rst","patch_set":6,"id":"fa69d971_940c9e95","line":112,"updated":"2016-01-03 16:40:28.000000000","message":"s/for/should be used for/","commit_id":"1e1b06375a7cb24dd91004a203adaecabb821222"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"ecd84b2956b1ea9b48ee869f3d8ab975d04e1551","unresolved":false,"context_lines":[{"line_number":114,"context_line":"but rather focus on the design, any solution possibly being addressed when it"},{"line_number":115,"context_line":"comes up to the implementation phase."},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"Last but not the least, maybe a long-term goal would be to consider that Tasks"},{"line_number":118,"context_line":"are self-contained."},{"line_number":119,"context_line":"That is still subject to discussion and doesn\u0027t prevent the existing to use"},{"line_number":120,"context_line":"Tasks as a Facade for exposing the status of one to many actions. Given that"}],"source_content_type":"text/x-rst","patch_set":6,"id":"fa69d971_54270612","line":117,"updated":"2016-01-03 16:40:28.000000000","message":"Last but not least, a long-term goal should be to consider...","commit_id":"1e1b06375a7cb24dd91004a203adaecabb821222"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"ecd84b2956b1ea9b48ee869f3d8ab975d04e1551","unresolved":false,"context_lines":[{"line_number":116,"context_line":""},{"line_number":117,"context_line":"Last but not the least, maybe a long-term goal would be to consider that Tasks"},{"line_number":118,"context_line":"are self-contained."},{"line_number":119,"context_line":"That is still subject to discussion and doesn\u0027t prevent the existing to use"},{"line_number":120,"context_line":"Tasks as a Facade for exposing the status of one to many actions. Given that"},{"line_number":121,"context_line":"the logic is currently shared somewhere in the interaction between a conductor"},{"line_number":122,"context_line":"and a compute processes, consolidating that behind the said Facade could help"}],"source_content_type":"text/x-rst","patch_set":6,"id":"fa69d971_74224a03","line":119,"updated":"2016-01-03 16:40:28.000000000","message":"s/to use/use of/","commit_id":"1e1b06375a7cb24dd91004a203adaecabb821222"},{"author":{"_account_id":7789,"name":"John Wood","email":"john.wood@rackspace.com","username":"woodster"},"change_message_id":"fbdefe2da5e1aad7bdf606b1f04c08e41310b3b5","unresolved":false,"context_lines":[{"line_number":63,"context_line":"   an instance sequentially and doesn\u0027t provide some better composed view where"},{"line_number":64,"context_line":"   a task could have a list of subtasks, with each of them a specific status."},{"line_number":65,"context_line":"   Amending that API would be possible using microversions but the"},{"line_number":66,"context_line":"   compatibility layer for v2.0 would require some important tooling for"},{"line_number":67,"context_line":"   backporting those rich objects at the API level which would possibly create"},{"line_number":68,"context_line":"   some debt that we should keep until we remove that old API (possibly never)"},{"line_number":69,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"1aa78d24_96a709a6","line":66,"updated":"2016-07-07 15:04:24.000000000","message":"Can this be updated now that v2.0 is removed?","commit_id":"2344f769621884042f2ba74afeba455e7ccca0b1"},{"author":{"_account_id":7789,"name":"John Wood","email":"john.wood@rackspace.com","username":"woodster"},"change_message_id":"fbdefe2da5e1aad7bdf606b1f04c08e41310b3b5","unresolved":false,"context_lines":[{"line_number":110,"context_line":"solution like Taskflow or automaton should be used for managing a state"},{"line_number":111,"context_line":"machine or transitions, because we consider that we shouldn\u0027t be driven by the"},{"line_number":112,"context_line":"technology but rather focus on the design, any solution possibly being"},{"line_number":113,"context_line":"addressed when it comes up to the implementation phase."},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"Last but not the least, maybe a long-term goal should be to consider that Tasks"},{"line_number":116,"context_line":"are self-contained."}],"source_content_type":"text/x-rst","patch_set":7,"id":"1aa78d24_9600a903","line":113,"updated":"2016-07-07 15:04:24.000000000","message":"That\u0027s reasonable. If we do utilize a workflow engine though, it\u0027s possible we\u0027d want to undo previous tasks to \u0027rollback\u0027 an instance to a known state (or to remove it and its resources entirely). If were were to query the current task during that rollback sequence, it\u0027d be good to indicate the task is being rolled back rather than being processed (i.e. task \u0027state\u0027).","commit_id":"2344f769621884042f2ba74afeba455e7ccca0b1"},{"author":{"_account_id":7789,"name":"John Wood","email":"john.wood@rackspace.com","username":"woodster"},"change_message_id":"fbdefe2da5e1aad7bdf606b1f04c08e41310b3b5","unresolved":false,"context_lines":[{"line_number":213,"context_line":"the task was sent to by the API, usually a nova-compute worker."},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"We could have a periodic task on the conductor that sees if any of the tasks"},{"line_number":216,"context_line":"have not been recently updated by their owner. When that happens it sends an"},{"line_number":217,"context_line":"RPC call to the worker to ask if it thinks it is currently still processing"},{"line_number":218,"context_line":"the specific task. If that\u0027s not the case, the task is marked as failed."},{"line_number":219,"context_line":"Of course, the idea is not to detect all the possible failures but rather"}],"source_content_type":"text/x-rst","patch_set":7,"id":"1aa78d24_39dc4645","line":216,"updated":"2016-07-07 15:04:24.000000000","message":"A workflow engine might do this as well should Nova go that route.","commit_id":"2344f769621884042f2ba74afeba455e7ccca0b1"},{"author":{"_account_id":7789,"name":"John Wood","email":"john.wood@rackspace.com","username":"woodster"},"change_message_id":"fbdefe2da5e1aad7bdf606b1f04c08e41310b3b5","unresolved":false,"context_lines":[{"line_number":281,"context_line":"Disclaimer: Since we said that tasks tasks are not the same as instance"},{"line_number":282,"context_line":"actions, just changing the claims to instance actions by Tasks calls is not"},{"line_number":283,"context_line":"enough."},{"line_number":284,"context_line":"Given that, the relationship between instance actions and tasks is still a grey"},{"line_number":285,"context_line":"area that this manifesto doesn\u0027t try to answer. For the moment, we consider"},{"line_number":286,"context_line":"those two resources as independent and we reserve the right to reconsider that"},{"line_number":287,"context_line":"in a later spec."}],"source_content_type":"text/x-rst","patch_set":7,"id":"1aa78d24_59cf9255","line":284,"updated":"2016-07-07 15:04:24.000000000","message":"Perhaps an instance could reference the current task(s) and do away with actions?","commit_id":"2344f769621884042f2ba74afeba455e7ccca0b1"},{"author":{"_account_id":7789,"name":"John Wood","email":"john.wood@rackspace.com","username":"woodster"},"change_message_id":"fbdefe2da5e1aad7bdf606b1f04c08e41310b3b5","unresolved":false,"context_lines":[{"line_number":303,"context_line":"operators would like :"},{"line_number":304,"context_line":" - imagine a world where it\u0027s possible to cancel a current task and rollback"},{"line_number":305,"context_line":"   gracefully to the previous state without necessarily impacting the instance."},{"line_number":306,"context_line":"   For sure, some actions could be impossible to rollback but some others can"},{"line_number":307,"context_line":"   be achievable like rebuild or rescue."},{"line_number":308,"context_line":" - imagine a world where a compute node would restart and look at the current"},{"line_number":309,"context_line":"   stopped tasks in order to resume them"}],"source_content_type":"text/x-rst","patch_set":7,"id":"1aa78d24_3959e68e","line":306,"updated":"2016-07-07 15:04:24.000000000","message":"+1 :)","commit_id":"2344f769621884042f2ba74afeba455e7ccca0b1"},{"author":{"_account_id":7789,"name":"John Wood","email":"john.wood@rackspace.com","username":"woodster"},"change_message_id":"fbdefe2da5e1aad7bdf606b1f04c08e41310b3b5","unresolved":false,"context_lines":[{"line_number":305,"context_line":"   gracefully to the previous state without necessarily impacting the instance."},{"line_number":306,"context_line":"   For sure, some actions could be impossible to rollback but some others can"},{"line_number":307,"context_line":"   be achievable like rebuild or rescue."},{"line_number":308,"context_line":" - imagine a world where a compute node would restart and look at the current"},{"line_number":309,"context_line":"   stopped tasks in order to resume them"},{"line_number":310,"context_line":" - imagine what could become the compute manager if all the actual logic was"},{"line_number":311,"context_line":"   moving to a Task object where we could call that way::"}],"source_content_type":"text/x-rst","patch_set":7,"id":"1aa78d24_998d7ad5","line":308,"updated":"2016-07-07 15:04:24.000000000","message":"Or else a periodic task manager would do this?","commit_id":"2344f769621884042f2ba74afeba455e7ccca0b1"}]}
