)]}'
{"specs/juno/instance-tasks-api.rst":[{"author":{"_account_id":964,"name":"Anne Gentle","email":"annegentle@justwriteclick.com","username":"annegentle"},"change_message_id":"b4e70fdfe0ac9fd86f3b5ed0921f26122f87c84a","unresolved":false,"context_lines":[{"line_number":23,"context_line":"of an action without affecting the instance itself. For example, if a reboot"},{"line_number":24,"context_line":"fails, it may leave the instance untouched and usable so it\u0027s not appropriate"},{"line_number":25,"context_line":"to set the vm_state to ERROR.  But without doing so there\u0027s no way to indicate"},{"line_number":26,"context_line":"that the reboot failed."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"Another challenge is accounting for what has happened to an instance.  The"},{"line_number":29,"context_line":"details of who has performed which action on an instance is stored and"}],"source_content_type":"text/x-rst","patch_set":1,"id":"AAAAW3%2F%2FnOg%3D","line":26,"updated":"2014-04-11 18:36:36.000000000","message":"I sense we could enhance the documentation for states as well, there are plenty of questions about it. \n\nWhat about shelving a server? Is that a potential use case here? Shelving a server would mean you could leave it suspended without being billed, for example.","commit_id":"af595da287fe876de5a28ea059887ec26b0103eb"},{"author":{"_account_id":964,"name":"Anne Gentle","email":"annegentle@justwriteclick.com","username":"annegentle"},"change_message_id":"b4e70fdfe0ac9fd86f3b5ed0921f26122f87c84a","unresolved":false,"context_lines":[{"line_number":30,"context_line":"presented by the instance-actions extension but few users know of its"},{"line_number":31,"context_line":"existence.  This is useful information and should be clearly visible in the"},{"line_number":32,"context_line":"API."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"Proposed change"},{"line_number":36,"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":"AAAAW3%2F%2FnO0%3D","line":33,"updated":"2014-04-11 18:36:36.000000000","message":"I\u0027ve discussed some below as well, but I sense there could be user confusion between tasks and states. What if a paused server is in error? Will the customer get billed?","commit_id":"af595da287fe876de5a28ea059887ec26b0103eb"},{"author":{"_account_id":964,"name":"Anne Gentle","email":"annegentle@justwriteclick.com","username":"annegentle"},"change_message_id":"b4e70fdfe0ac9fd86f3b5ed0921f26122f87c84a","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":"POSTs to /v3/servers/ or /v3/servers/\u003cuuid\u003e would return a task object as the"},{"line_number":39,"context_line":"response body.  The API impact will be described more fully in the REST API"},{"line_number":40,"context_line":"impact section below."},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"A task will initially be made up of the following components:"},{"line_number":43,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"AAAAW3%2F%2FnNM%3D","line":40,"updated":"2014-04-11 18:36:36.000000000","message":"Would POST to /v3/servers/\n\ndo something different from POST /v3/servers/\u003cuuid\u003e?\n\nIs one a listing of all servers tasks and the other tasks for a single server?\n\nCan a server have more than one task assigned?","commit_id":"af595da287fe876de5a28ea059887ec26b0103eb"},{"author":{"_account_id":964,"name":"Anne Gentle","email":"annegentle@justwriteclick.com","username":"annegentle"},"change_message_id":"b4e70fdfe0ac9fd86f3b5ed0921f26122f87c84a","unresolved":false,"context_lines":[{"line_number":42,"context_line":"A task will initially be made up of the following components:"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":" * uuid:"},{"line_number":45,"context_line":" * task: The name of the task i.e. rebooting."},{"line_number":46,"context_line":" * state: \u0027active\u0027, \u0027error\u0027, \u0027complete\u0027 is a non exhaustive list of examples."},{"line_number":47,"context_line":" * resource: A reference to what\u0027s being acted on.  Something like"},{"line_number":48,"context_line":"   {\u0027server\u0027: \u003cuuid\u003e}"}],"source_content_type":"text/x-rst","patch_set":1,"id":"AAAAW3%2F%2FnPQ%3D","line":45,"updated":"2014-04-11 18:36:36.000000000","message":"I suspect you\u0027ll get confusion between the state and task. These are the states:\npause\nunpause\nsuspend\nresume\nlock\nunlock\n\nand so on. What will be the differentiator between task and state?","commit_id":"af595da287fe876de5a28ea059887ec26b0103eb"},{"author":{"_account_id":964,"name":"Anne Gentle","email":"annegentle@justwriteclick.com","username":"annegentle"},"change_message_id":"b4e70fdfe0ac9fd86f3b5ed0921f26122f87c84a","unresolved":false,"context_lines":[{"line_number":65,"context_line":"   compute before a restart and then resumed afterwards."},{"line_number":66,"context_line":""},{"line_number":67,"context_line":" * Eventually we may want to attach an instance to a task and pass tasks around"},{"line_number":68,"context_line":"   Nova rather than instances."},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"Alternatives"},{"line_number":71,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"AAAAW3%2F%2FnNI%3D","line":68,"updated":"2014-04-11 18:36:36.000000000","message":"Why would you want to do this? Give your dev perspective as well as a user need.","commit_id":"af595da287fe876de5a28ea059887ec26b0103eb"},{"author":{"_account_id":964,"name":"Anne Gentle","email":"annegentle@justwriteclick.com","username":"annegentle"},"change_message_id":"b4e70fdfe0ac9fd86f3b5ed0921f26122f87c84a","unresolved":false,"context_lines":[{"line_number":73,"context_line":"The instance-actions extension was an alternative approach to solving some of"},{"line_number":74,"context_line":"these problems.  But it is not extensible enough to fully deprecate the"},{"line_number":75,"context_line":"instance task_state, nor is it visible enough to gain widespread use.  Tasks is"},{"line_number":76,"context_line":"an attempt to achieve what it could not."},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"Data model impact"},{"line_number":79,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"AAAAW3%2F%2FnOI%3D","line":76,"updated":"2014-04-11 18:36:36.000000000","message":"This sounds like a doc problem more than a design problem?","commit_id":"af595da287fe876de5a28ea059887ec26b0103eb"},{"author":{"_account_id":964,"name":"Anne Gentle","email":"annegentle@justwriteclick.com","username":"annegentle"},"change_message_id":"b4e70fdfe0ac9fd86f3b5ed0921f26122f87c84a","unresolved":false,"context_lines":[{"line_number":129,"context_line":"Notifications impact"},{"line_number":130,"context_line":"--------------------"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"None"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"Other end user impact"},{"line_number":135,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"AAAAW3%2F%2FoHs%3D","line":132,"updated":"2014-04-11 18:36:36.000000000","message":"Would users want to be notified on the progress with last_updated?","commit_id":"af595da287fe876de5a28ea059887ec26b0103eb"},{"author":{"_account_id":964,"name":"Anne Gentle","email":"annegentle@justwriteclick.com","username":"annegentle"},"change_message_id":"b4e70fdfe0ac9fd86f3b5ed0921f26122f87c84a","unresolved":false,"context_lines":[{"line_number":195,"context_line":"Documentation Impact"},{"line_number":196,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"The REST API additions will need to be documented."},{"line_number":199,"context_line":""},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"References"}],"source_content_type":"text/x-rst","patch_set":1,"id":"AAAAW3%2F%2FnNA%3D","line":198,"updated":"2014-04-11 18:36:36.000000000","message":"Be more explicit:\n-Reference documentation in WADL for POST /v3/servers/ and\nPOST /v3/servers/\u003cuuid\u003e with JSON requests and response examples as well as definitions for each task. (bare minimum)\n\nHow-to information with curl commands for using this extension (nice to have)\n\nDo you expect that policies for the use of this will also need to be documented?","commit_id":"af595da287fe876de5a28ea059887ec26b0103eb"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"a15c9e335ce01b7648f7ff4ad054e8aedd018b97","unresolved":false,"context_lines":[{"line_number":5,"context_line":" http://creativecommons.org/licenses/by/3.0/legalcode"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":8,"context_line":"Add tasks to the API"},{"line_number":9,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"https://blueprints.launchpad.net/nova/+spec/instance-tasks-api"}],"source_content_type":"text/x-rst","patch_set":3,"id":"AAAAW3%2F%2FOgs%3D","line":8,"updated":"2014-04-15 23:10:21.000000000","message":"It sounds like from the rest of the text here, that this is really \"Add tasks to the API for creating an instance\", is that right? If not, I think we need quite a bit more content here about who creates tasks (API, presumably), how they get passed to the compute node (,etc) during an operation, etc. If we\u0027re talking about implementing tasks for, for example, migrations, I would expect that the API would create a task object, and then pass it along with the RPC call to the compute node to start that process.","commit_id":"d7812056a753a00b6e9cb447b32cf39fa4bb6a6c"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"afc94fd55e12a5c5307f5b55ba0f4141a599f30e","unresolved":false,"context_lines":[{"line_number":5,"context_line":" http://creativecommons.org/licenses/by/3.0/legalcode"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":8,"context_line":"Add tasks to the API"},{"line_number":9,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"https://blueprints.launchpad.net/nova/+spec/instance-tasks-api"}],"source_content_type":"text/x-rst","patch_set":3,"id":"AAAAXH%2F%2F7OU%3D","line":8,"in_reply_to":"AAAAW3%2F%2FOgs%3D","updated":"2014-04-16 13:28:52.000000000","message":"Okay, I\u0027ll work to lay this out a bit more clearly.  It\u0027s intended to be more than just tasks for creating an instance.  My initial plan is that anything that causes a task_state update on an instance would be updating a task as well, so any API request that causes that would create a task object.  I\u0027ll go into more detail on this in the spec.","commit_id":"d7812056a753a00b6e9cb447b32cf39fa4bb6a6c"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"a15c9e335ce01b7648f7ff4ad054e8aedd018b97","unresolved":false,"context_lines":[{"line_number":77,"context_line":"instance task_state.  It is constrained by only being able to have one"},{"line_number":78,"context_line":"instance-action per request_id.  And for multiple server create, or future"},{"line_number":79,"context_line":"sub-tasks that is too limiting.  Tasks is an attempt to achieve what it could"},{"line_number":80,"context_line":"not."},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"Data model impact"},{"line_number":83,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"AAAAW3%2F%2FOiM%3D","line":80,"updated":"2014-04-15 23:10:21.000000000","message":"Can/should we either deprecate the instance-action stuff, or make instance action bits auto-update the task related to a particular thing?","commit_id":"d7812056a753a00b6e9cb447b32cf39fa4bb6a6c"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"afc94fd55e12a5c5307f5b55ba0f4141a599f30e","unresolved":false,"context_lines":[{"line_number":77,"context_line":"instance task_state.  It is constrained by only being able to have one"},{"line_number":78,"context_line":"instance-action per request_id.  And for multiple server create, or future"},{"line_number":79,"context_line":"sub-tasks that is too limiting.  Tasks is an attempt to achieve what it could"},{"line_number":80,"context_line":"not."},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"Data model impact"},{"line_number":83,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"AAAAXH%2F%2F7TY%3D","line":80,"in_reply_to":"AAAAW3%2F%2FOiM%3D","updated":"2014-04-16 13:28:52.000000000","message":"I think we should deprecate the instance-action stuff.  Tasks provide or can provide everything that instance-actions do, though the specifics of user facing messages might slightly differ.  I\u0027ll note this somewhere.","commit_id":"d7812056a753a00b6e9cb447b32cf39fa4bb6a6c"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"a15c9e335ce01b7648f7ff4ad054e8aedd018b97","unresolved":false,"context_lines":[{"line_number":98,"context_line":"following structure::"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    task \u003d {"},{"line_number":101,"context_line":"        \u0027type\u0027: \u0027object\u0027,"},{"line_number":102,"context_line":"        \u0027properties\u0027: {"},{"line_number":103,"context_line":"            \u0027uuid\u0027: { \u0027type\u0027: \u0027string\u0027, \u0027format\u0027: \u0027uuid\u0027 },"},{"line_number":104,"context_line":"            \u0027task\u0027: { \u0027type\u0027: \u0027string\u0027 },"}],"source_content_type":"text/x-rst","patch_set":3,"id":"AAAAW3%2F%2FOhY%3D","line":101,"updated":"2014-04-15 23:10:21.000000000","message":"I\u0027m not a JSON schema dude, but does this mean we end up with an actual object, or a dict-like-thing?","commit_id":"d7812056a753a00b6e9cb447b32cf39fa4bb6a6c"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"afc94fd55e12a5c5307f5b55ba0f4141a599f30e","unresolved":false,"context_lines":[{"line_number":98,"context_line":"following structure::"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    task \u003d {"},{"line_number":101,"context_line":"        \u0027type\u0027: \u0027object\u0027,"},{"line_number":102,"context_line":"        \u0027properties\u0027: {"},{"line_number":103,"context_line":"            \u0027uuid\u0027: { \u0027type\u0027: \u0027string\u0027, \u0027format\u0027: \u0027uuid\u0027 },"},{"line_number":104,"context_line":"            \u0027task\u0027: { \u0027type\u0027: \u0027string\u0027 },"}],"source_content_type":"text/x-rst","patch_set":3,"id":"AAAAXH%2F%2F7R8%3D","line":101,"in_reply_to":"AAAAW3%2F%2FOhY%3D","updated":"2014-04-16 13:28:52.000000000","message":"I\u0027m not either... I just copied from Nova code and briefly looked at the spec.  But my understanding is that we end up with a dict like thing.  \u0027object\u0027 just means it\u0027s composed of sub-parts as far as I can tell.","commit_id":"d7812056a753a00b6e9cb447b32cf39fa4bb6a6c"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"a15c9e335ce01b7648f7ff4ad054e8aedd018b97","unresolved":false,"context_lines":[{"line_number":138,"context_line":"Other end user impact"},{"line_number":139,"context_line":"---------------------"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"python-novaclient will need to adapt to display a task resource."},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"Performance Impact"},{"line_number":144,"context_line":"------------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"AAAAW3%2F%2FOhM%3D","line":141,"updated":"2014-04-15 23:10:21.000000000","message":"display in the CLI case, but also return for users of the client as a library, right?","commit_id":"d7812056a753a00b6e9cb447b32cf39fa4bb6a6c"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"afc94fd55e12a5c5307f5b55ba0f4141a599f30e","unresolved":false,"context_lines":[{"line_number":138,"context_line":"Other end user impact"},{"line_number":139,"context_line":"---------------------"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"python-novaclient will need to adapt to display a task resource."},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"Performance Impact"},{"line_number":144,"context_line":"------------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"AAAAXH%2F%2F7SE%3D","line":141,"in_reply_to":"AAAAW3%2F%2FOhM%3D","updated":"2014-04-16 13:28:52.000000000","message":"Good point.  The answer is yes.","commit_id":"d7812056a753a00b6e9cb447b32cf39fa4bb6a6c"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"1bfb40e20c3bfff8b4033ad7dd2500f2968344ed","unresolved":false,"context_lines":[{"line_number":29,"context_line":"details of who has performed which action on an instance is stored and"},{"line_number":30,"context_line":"presented by the instance-actions extension but few users know of its"},{"line_number":31,"context_line":"existence.  This is useful information and should be clearly visible in the"},{"line_number":32,"context_line":"API."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"Proposed change"}],"source_content_type":"text/x-rst","patch_set":4,"id":"AAAAXH%2F%2Fn0g%3D","line":32,"updated":"2014-04-18 18:59:49.000000000","message":"+1","commit_id":"26b14e2c8bad56d9e37168718bc0ee4252eaf55d"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"0d16900d1135a67a442ef29fe1d24744f2a4daa5","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":"A POST to /v3/servers/ to create an instance or POSTs to"},{"line_number":39,"context_line":"/v3/servers/\u003cuuid\u003e/action to perform actions like reboot/rescue/rebuild/etc"},{"line_number":40,"context_line":"would return a task object as the response body.  The API impact will be"},{"line_number":41,"context_line":"described more fully in the REST API impact section below."},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"A task will initially be made up of the following components:"}],"source_content_type":"text/x-rst","patch_set":4,"id":"AAAAXH%2F%2FoTU%3D","line":40,"updated":"2014-04-18 17:49:30.000000000","message":"What about a request to create \u003e1 server? Would it return a task object for each server?","commit_id":"26b14e2c8bad56d9e37168718bc0ee4252eaf55d"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"d5854d5bdf4bad5369395fedaea767770a001711","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":"A POST to /v3/servers/ to create an instance or POSTs to"},{"line_number":39,"context_line":"/v3/servers/\u003cuuid\u003e/action to perform actions like reboot/rescue/rebuild/etc"},{"line_number":40,"context_line":"would return a task object as the response body.  The API impact will be"},{"line_number":41,"context_line":"described more fully in the REST API impact section below."},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"A task will initially be made up of the following components:"}],"source_content_type":"text/x-rst","patch_set":4,"id":"AAAAXH%2F%2FnZ4%3D","line":40,"in_reply_to":"AAAAXH%2F%2Fn0M%3D","updated":"2014-04-18 20:14:58.000000000","message":"Yes, multiple tasks will be returned when creating multiple servers.  I\u0027ll clarify in the spec.","commit_id":"26b14e2c8bad56d9e37168718bc0ee4252eaf55d"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"1bfb40e20c3bfff8b4033ad7dd2500f2968344ed","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":"A POST to /v3/servers/ to create an instance or POSTs to"},{"line_number":39,"context_line":"/v3/servers/\u003cuuid\u003e/action to perform actions like reboot/rescue/rebuild/etc"},{"line_number":40,"context_line":"would return a task object as the response body.  The API impact will be"},{"line_number":41,"context_line":"described more fully in the REST API impact section below."},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"A task will initially be made up of the following components:"}],"source_content_type":"text/x-rst","patch_set":4,"id":"AAAAXH%2F%2Fn0M%3D","line":40,"in_reply_to":"AAAAXH%2F%2FoTU%3D","updated":"2014-04-18 18:59:49.000000000","message":"Ya, please make sure we return many objects (or a MultiTask object if u will), not single (especially from create server, or any other API that does expose N-way operations).","commit_id":"26b14e2c8bad56d9e37168718bc0ee4252eaf55d"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"0d16900d1135a67a442ef29fe1d24744f2a4daa5","unresolved":false,"context_lines":[{"line_number":44,"context_line":""},{"line_number":45,"context_line":" * uuid:"},{"line_number":46,"context_line":" * task: The name of the task i.e. rebooting, rescue, rebuild, pause, etc..."},{"line_number":47,"context_line":" * state: \u0027active\u0027, \u0027error\u0027, \u0027complete\u0027 is a non exhaustive list of examples."},{"line_number":48,"context_line":" * resource: A reference to what\u0027s being acted on.  Something like"},{"line_number":49,"context_line":"   {\u0027server\u0027: \u003cuuid\u003e}"},{"line_number":50,"context_line":" * request_id: context.request_id"}],"source_content_type":"text/x-rst","patch_set":4,"id":"AAAAXH%2F%2FoR0%3D","line":47,"updated":"2014-04-18 17:49:30.000000000","message":"I would also add:\n\n TIMEDOUT\n ABORTED","commit_id":"26b14e2c8bad56d9e37168718bc0ee4252eaf55d"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"7b46d69a861474e0995b52fc1070513e7cacf407","unresolved":false,"context_lines":[{"line_number":44,"context_line":""},{"line_number":45,"context_line":" * uuid:"},{"line_number":46,"context_line":" * task: The name of the task i.e. rebooting, rescue, rebuild, pause, etc..."},{"line_number":47,"context_line":" * state: \u0027active\u0027, \u0027error\u0027, \u0027complete\u0027 is a non exhaustive list of examples."},{"line_number":48,"context_line":" * resource: A reference to what\u0027s being acted on.  Something like"},{"line_number":49,"context_line":"   {\u0027server\u0027: \u003cuuid\u003e}"},{"line_number":50,"context_line":" * request_id: context.request_id"}],"source_content_type":"text/x-rst","patch_set":4,"id":"AAAAXH%2F%2FmjM%3D","line":47,"in_reply_to":"AAAAXH%2F%2FnW0%3D","updated":"2014-04-18 22:13:53.000000000","message":"Understood, thanks andrew :)","commit_id":"26b14e2c8bad56d9e37168718bc0ee4252eaf55d"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"d5854d5bdf4bad5369395fedaea767770a001711","unresolved":false,"context_lines":[{"line_number":44,"context_line":""},{"line_number":45,"context_line":" * uuid:"},{"line_number":46,"context_line":" * task: The name of the task i.e. rebooting, rescue, rebuild, pause, etc..."},{"line_number":47,"context_line":" * state: \u0027active\u0027, \u0027error\u0027, \u0027complete\u0027 is a non exhaustive list of examples."},{"line_number":48,"context_line":" * resource: A reference to what\u0027s being acted on.  Something like"},{"line_number":49,"context_line":"   {\u0027server\u0027: \u003cuuid\u003e}"},{"line_number":50,"context_line":" * request_id: context.request_id"}],"source_content_type":"text/x-rst","patch_set":4,"id":"AAAAXH%2F%2FnW0%3D","line":47,"in_reply_to":"AAAAXH%2F%2Fnz4%3D","updated":"2014-04-18 20:14:58.000000000","message":"Jay: can do.\n\nJoshua: I agree with you on defining explicit task transitions but I think that\u0027s a next step thing.  As you mention this is an API improvement and not meant to be a large improvement to Nova internals.  Modifying the Nova internals around task_states is a large effort in itself and if coupled with the API changes is going to make this a monumental undertaking.  So, I love your input and agree but will have to defer for now.","commit_id":"26b14e2c8bad56d9e37168718bc0ee4252eaf55d"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"f4952070b3c8c66269ebff724307bd17e808e119","unresolved":false,"context_lines":[{"line_number":44,"context_line":""},{"line_number":45,"context_line":" * uuid:"},{"line_number":46,"context_line":" * task: The name of the task i.e. rebooting, rescue, rebuild, pause, etc..."},{"line_number":47,"context_line":" * state: \u0027active\u0027, \u0027error\u0027, \u0027complete\u0027 is a non exhaustive list of examples."},{"line_number":48,"context_line":" * resource: A reference to what\u0027s being acted on.  Something like"},{"line_number":49,"context_line":"   {\u0027server\u0027: \u003cuuid\u003e}"},{"line_number":50,"context_line":" * request_id: context.request_id"}],"source_content_type":"text/x-rst","patch_set":4,"id":"AAAAXH%2F%2Fnr8%3D","line":47,"in_reply_to":"AAAAXH%2F%2Fnz4%3D","updated":"2014-04-18 19:05:48.000000000","message":"To continue on this (yes I know the above is already to long, haha), cinder has a same desire for this kind of defined and explict state-machine (https://etherpad.openstack.org/p/CinderTaskFlowFSM) so it would be great if we could figure out how to work together to make this possible (if taskflow can provide this even better, but it doesn\u0027t appear that tasks or well-defined states and transitions are anything specific to one project).","commit_id":"26b14e2c8bad56d9e37168718bc0ee4252eaf55d"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"1bfb40e20c3bfff8b4033ad7dd2500f2968344ed","unresolved":false,"context_lines":[{"line_number":44,"context_line":""},{"line_number":45,"context_line":" * uuid:"},{"line_number":46,"context_line":" * task: The name of the task i.e. rebooting, rescue, rebuild, pause, etc..."},{"line_number":47,"context_line":" * state: \u0027active\u0027, \u0027error\u0027, \u0027complete\u0027 is a non exhaustive list of examples."},{"line_number":48,"context_line":" * resource: A reference to what\u0027s being acted on.  Something like"},{"line_number":49,"context_line":"   {\u0027server\u0027: \u003cuuid\u003e}"},{"line_number":50,"context_line":" * request_id: context.request_id"}],"source_content_type":"text/x-rst","patch_set":4,"id":"AAAAXH%2F%2Fnz4%3D","line":47,"in_reply_to":"AAAAXH%2F%2FoR0%3D","updated":"2014-04-18 18:59:49.000000000","message":"Perhaps the following also might be a useful reference (including jays states): https://github.com/openstack/taskflow/blob/master/taskflow/states.py#L35.\n\nI\u0027d really like to have the state transitions that are applicable/allowed/possible be well defined and easy to see what they are and are not (this kind of analysis/verification is really really hard in the current nova code). Something like https://github.com/openstack/taskflow/blob/master/taskflow/states.py#L125 would make it so much easier to understand nova\u0027s state transitions if it was explicitly defined (and not implicit and scattered across nova). IMHO me not explicitly (explicit is better than implicit right?) defining the states makes tasks only an improvement for the API users and not for nova itself (which although good, does not use tasks to there full potential). I believe one of the key benefits of task concept (and the explicitness) is that it makes it easier to understand (and extend) openstack code, openstack state-transitions, which makes it easier to get new developers involved in openstack, easier to fix and understand what the fix will affect and so-on....","commit_id":"26b14e2c8bad56d9e37168718bc0ee4252eaf55d"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"0d16900d1135a67a442ef29fe1d24744f2a4daa5","unresolved":false,"context_lines":[{"line_number":46,"context_line":" * task: The name of the task i.e. rebooting, rescue, rebuild, pause, etc..."},{"line_number":47,"context_line":" * state: \u0027active\u0027, \u0027error\u0027, \u0027complete\u0027 is a non exhaustive list of examples."},{"line_number":48,"context_line":" * resource: A reference to what\u0027s being acted on.  Something like"},{"line_number":49,"context_line":"   {\u0027server\u0027: \u003cuuid\u003e}"},{"line_number":50,"context_line":" * request_id: context.request_id"},{"line_number":51,"context_line":" * user_id: context.user_id"},{"line_number":52,"context_line":" * project_id: context.project_id"}],"source_content_type":"text/x-rst","patch_set":4,"id":"AAAAXH%2F%2FoSI%3D","line":49,"updated":"2014-04-18 17:49:30.000000000","message":"Recommend just making this \"server_id\" and having the table specific to server tasks. What other tasks are you thinking about generalizing this for?\n\nFor query and join performance, doing a JOIN condition on:\n\n WHERE resource LIKE \u0027%server%$UUID\u0027\n\nis terrible performance vs:\n\n WHERE  server_id \u003d $UUID","commit_id":"26b14e2c8bad56d9e37168718bc0ee4252eaf55d"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"571541f688592dba1d6a38824fa8acc9b92d3fe4","unresolved":false,"context_lines":[{"line_number":46,"context_line":" * task: The name of the task i.e. rebooting, rescue, rebuild, pause, etc..."},{"line_number":47,"context_line":" * state: \u0027active\u0027, \u0027error\u0027, \u0027complete\u0027 is a non exhaustive list of examples."},{"line_number":48,"context_line":" * resource: A reference to what\u0027s being acted on.  Something like"},{"line_number":49,"context_line":"   {\u0027server\u0027: \u003cuuid\u003e}"},{"line_number":50,"context_line":" * request_id: context.request_id"},{"line_number":51,"context_line":" * user_id: context.user_id"},{"line_number":52,"context_line":" * project_id: context.project_id"}],"source_content_type":"text/x-rst","patch_set":4,"id":"AAAAXH%2F%2FmeA%3D","line":49,"in_reply_to":"AAAAXH%2F%2FmuM%3D","updated":"2014-04-18 22:32:49.000000000","message":"I can see changing this to server tasks, which is how I prototyped it when I played around in Icehouse, but I think it will still be helpful to reference other resources when they\u0027re involved.  So even if it\u0027s server_id: \u003cinstance uuid\u003e I would still like to store an image/network/volume uuid when applicable.  Maybe \u0027additional_resource\u0027, \u0027additional_resource_id\u0027 fields?  I\u0027ll think on this.","commit_id":"26b14e2c8bad56d9e37168718bc0ee4252eaf55d"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"7a1150e384c177a8705b34ae14645bb4a8adcd66","unresolved":false,"context_lines":[{"line_number":46,"context_line":" * task: The name of the task i.e. rebooting, rescue, rebuild, pause, etc..."},{"line_number":47,"context_line":" * state: \u0027active\u0027, \u0027error\u0027, \u0027complete\u0027 is a non exhaustive list of examples."},{"line_number":48,"context_line":" * resource: A reference to what\u0027s being acted on.  Something like"},{"line_number":49,"context_line":"   {\u0027server\u0027: \u003cuuid\u003e}"},{"line_number":50,"context_line":" * request_id: context.request_id"},{"line_number":51,"context_line":" * user_id: context.user_id"},{"line_number":52,"context_line":" * project_id: context.project_id"}],"source_content_type":"text/x-rst","patch_set":4,"id":"AAAAXH%2F%2FmuM%3D","line":49,"in_reply_to":"AAAAXH%2F%2FnTc%3D","updated":"2014-04-18 21:40:32.000000000","message":"At a minimum, yes, splitting into a resource_type and resource_uuid field would be critical for DB performance reasons.\n\nFYI, image snapshot uploads are still server tasks -- the snapshot is of an instance after all :) And network operations are always (at least in Nova\u0027s neck of the woods) specific to a server, and therefore are server tasks.\n\nFor volume multi-step tasks, I think Cinder is a more appropriate place to track tasks -- for volume operations only.","commit_id":"26b14e2c8bad56d9e37168718bc0ee4252eaf55d"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"d5854d5bdf4bad5369395fedaea767770a001711","unresolved":false,"context_lines":[{"line_number":46,"context_line":" * task: The name of the task i.e. rebooting, rescue, rebuild, pause, etc..."},{"line_number":47,"context_line":" * state: \u0027active\u0027, \u0027error\u0027, \u0027complete\u0027 is a non exhaustive list of examples."},{"line_number":48,"context_line":" * resource: A reference to what\u0027s being acted on.  Something like"},{"line_number":49,"context_line":"   {\u0027server\u0027: \u003cuuid\u003e}"},{"line_number":50,"context_line":" * request_id: context.request_id"},{"line_number":51,"context_line":" * user_id: context.user_id"},{"line_number":52,"context_line":" * project_id: context.project_id"}],"source_content_type":"text/x-rst","patch_set":4,"id":"AAAAXH%2F%2FnTc%3D","line":49,"in_reply_to":"AAAAXH%2F%2FoSI%3D","updated":"2014-04-18 20:14:58.000000000","message":"This could be used for things like image snapshot uploads or volume/network operations that need to be done.  This is driven by some discussion around the idea of a task spawning sub-tasks for operations that need to occur which will provide more granular reporting on what\u0027s going on.  Especially if/when we get to adding/tracking concepts like retries on the different operations.  So I think keeping this generalized is the right way to go, though I could see splitting the json into two fields like \u0027resource\u0027 and \u0027resource_uuid\u0027.","commit_id":"26b14e2c8bad56d9e37168718bc0ee4252eaf55d"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"0d16900d1135a67a442ef29fe1d24744f2a4daa5","unresolved":false,"context_lines":[{"line_number":48,"context_line":" * resource: A reference to what\u0027s being acted on.  Something like"},{"line_number":49,"context_line":"   {\u0027server\u0027: \u003cuuid\u003e}"},{"line_number":50,"context_line":" * request_id: context.request_id"},{"line_number":51,"context_line":" * user_id: context.user_id"},{"line_number":52,"context_line":" * project_id: context.project_id"},{"line_number":53,"context_line":" * start_time:"},{"line_number":54,"context_line":" * last_updated: Can be used to periodically update a long running task to show"}],"source_content_type":"text/x-rst","patch_set":4,"id":"AAAAXH%2F%2FoRo%3D","line":51,"updated":"2014-04-18 17:49:30.000000000","message":"How about \"started_by\" instead of user_id?","commit_id":"26b14e2c8bad56d9e37168718bc0ee4252eaf55d"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"7a1150e384c177a8705b34ae14645bb4a8adcd66","unresolved":false,"context_lines":[{"line_number":48,"context_line":" * resource: A reference to what\u0027s being acted on.  Something like"},{"line_number":49,"context_line":"   {\u0027server\u0027: \u003cuuid\u003e}"},{"line_number":50,"context_line":" * request_id: context.request_id"},{"line_number":51,"context_line":" * user_id: context.user_id"},{"line_number":52,"context_line":" * project_id: context.project_id"},{"line_number":53,"context_line":" * start_time:"},{"line_number":54,"context_line":" * last_updated: Can be used to periodically update a long running task to show"}],"source_content_type":"text/x-rst","patch_set":4,"id":"AAAAXH%2F%2FmuA%3D","line":51,"in_reply_to":"AAAAXH%2F%2FnTQ%3D","updated":"2014-04-18 21:40:32.000000000","message":"++","commit_id":"26b14e2c8bad56d9e37168718bc0ee4252eaf55d"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"d5854d5bdf4bad5369395fedaea767770a001711","unresolved":false,"context_lines":[{"line_number":48,"context_line":" * resource: A reference to what\u0027s being acted on.  Something like"},{"line_number":49,"context_line":"   {\u0027server\u0027: \u003cuuid\u003e}"},{"line_number":50,"context_line":" * request_id: context.request_id"},{"line_number":51,"context_line":" * user_id: context.user_id"},{"line_number":52,"context_line":" * project_id: context.project_id"},{"line_number":53,"context_line":" * start_time:"},{"line_number":54,"context_line":" * last_updated: Can be used to periodically update a long running task to show"}],"source_content_type":"text/x-rst","patch_set":4,"id":"AAAAXH%2F%2FnTQ%3D","line":51,"in_reply_to":"AAAAXH%2F%2FoRo%3D","updated":"2014-04-18 20:14:58.000000000","message":"I like the idea.  How about \u0027started_by_user\u0027 so it\u0027s clear it\u0027s linked to user_id?","commit_id":"26b14e2c8bad56d9e37168718bc0ee4252eaf55d"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"0d16900d1135a67a442ef29fe1d24744f2a4daa5","unresolved":false,"context_lines":[{"line_number":49,"context_line":"   {\u0027server\u0027: \u003cuuid\u003e}"},{"line_number":50,"context_line":" * request_id: context.request_id"},{"line_number":51,"context_line":" * user_id: context.user_id"},{"line_number":52,"context_line":" * project_id: context.project_id"},{"line_number":53,"context_line":" * start_time:"},{"line_number":54,"context_line":" * last_updated: Can be used to periodically update a long running task to show"},{"line_number":55,"context_line":"   that it has not stalled."}],"source_content_type":"text/x-rst","patch_set":4,"id":"AAAAXH%2F%2FoSs%3D","line":52,"updated":"2014-04-18 17:49:30.000000000","message":"Wouldn\u0027t the project_id be redundant with the project_id in the instances table?","commit_id":"26b14e2c8bad56d9e37168718bc0ee4252eaf55d"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"571541f688592dba1d6a38824fa8acc9b92d3fe4","unresolved":false,"context_lines":[{"line_number":49,"context_line":"   {\u0027server\u0027: \u003cuuid\u003e}"},{"line_number":50,"context_line":" * request_id: context.request_id"},{"line_number":51,"context_line":" * user_id: context.user_id"},{"line_number":52,"context_line":" * project_id: context.project_id"},{"line_number":53,"context_line":" * start_time:"},{"line_number":54,"context_line":" * last_updated: Can be used to periodically update a long running task to show"},{"line_number":55,"context_line":"   that it has not stalled."}],"source_content_type":"text/x-rst","patch_set":4,"id":"AAAAXH%2F%2FmdY%3D","line":52,"in_reply_to":"AAAAXH%2F%2Fmtc%3D","updated":"2014-04-18 22:32:49.000000000","message":"I don\u0027t remember who made the request specifically but it came out of the mid-cycle meetup.  I still like keeping project_id here because it can also be used for policy checks, but I can change it if it matters.  As long as it\u0027s populated in the task object I\u0027m less concerned about whether or not it\u0027s in the tasks table.","commit_id":"26b14e2c8bad56d9e37168718bc0ee4252eaf55d"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"7a1150e384c177a8705b34ae14645bb4a8adcd66","unresolved":false,"context_lines":[{"line_number":49,"context_line":"   {\u0027server\u0027: \u003cuuid\u003e}"},{"line_number":50,"context_line":" * request_id: context.request_id"},{"line_number":51,"context_line":" * user_id: context.user_id"},{"line_number":52,"context_line":" * project_id: context.project_id"},{"line_number":53,"context_line":" * start_time:"},{"line_number":54,"context_line":" * last_updated: Can be used to periodically update a long running task to show"},{"line_number":55,"context_line":"   that it has not stalled."}],"source_content_type":"text/x-rst","patch_set":4,"id":"AAAAXH%2F%2Fmtc%3D","line":52,"in_reply_to":"AAAAXH%2F%2FnSE%3D","updated":"2014-04-18 21:40:32.000000000","message":"Hmmm :( Who made that request? It would be as simple as:\n\n SELECT t.* FROM tasks t\n JOIN instances i ON t.resource_uuid \u003d i.uuid\n WHERE i.project_id \u003d $PROJECT;\n\nAnd no lookup operations on the data records would be needed at all (only index operations on instances(project_id) index.","commit_id":"26b14e2c8bad56d9e37168718bc0ee4252eaf55d"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"d5854d5bdf4bad5369395fedaea767770a001711","unresolved":false,"context_lines":[{"line_number":49,"context_line":"   {\u0027server\u0027: \u003cuuid\u003e}"},{"line_number":50,"context_line":" * request_id: context.request_id"},{"line_number":51,"context_line":" * user_id: context.user_id"},{"line_number":52,"context_line":" * project_id: context.project_id"},{"line_number":53,"context_line":" * start_time:"},{"line_number":54,"context_line":" * last_updated: Can be used to periodically update a long running task to show"},{"line_number":55,"context_line":"   that it has not stalled."}],"source_content_type":"text/x-rst","patch_set":4,"id":"AAAAXH%2F%2FnSE%3D","line":52,"in_reply_to":"AAAAXH%2F%2FoSs%3D","updated":"2014-04-18 20:14:58.000000000","message":"This may not always be joined with instances.  There was a request to be able to list tasks at the project level while specifying filter criteria, in which case we can avoid looking at instances at all.","commit_id":"26b14e2c8bad56d9e37168718bc0ee4252eaf55d"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"1bfb40e20c3bfff8b4033ad7dd2500f2968344ed","unresolved":false,"context_lines":[{"line_number":59,"context_line":"that is currently passed there.  They will also be passed via RPC to compute"},{"line_number":60,"context_line":"nodes so that they can be updated there without needing to pull them from the"},{"line_number":61,"context_line":"database.  Basically any method that along a code path that updates tasks will"},{"line_number":62,"context_line":"be passed a task object along with the instance object."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"There are some things that are out of scope for this change but should be"},{"line_number":65,"context_line":"mentioned as they may affect some design decisions or answer questions that may"}],"source_content_type":"text/x-rst","patch_set":4,"id":"AAAAXH%2F%2Fnzw%3D","line":62,"updated":"2014-04-18 18:59:49.000000000","message":"+1","commit_id":"26b14e2c8bad56d9e37168718bc0ee4252eaf55d"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"0d16900d1135a67a442ef29fe1d24744f2a4daa5","unresolved":false,"context_lines":[{"line_number":66,"context_line":"come up later."},{"line_number":67,"context_line":""},{"line_number":68,"context_line":" * task_state isn\u0027t being modified in any way.  This will ensure the v2 API and"},{"line_number":69,"context_line":"   the current task_state state machine won\u0027t be effected."},{"line_number":70,"context_line":""},{"line_number":71,"context_line":" * There has been some thought about the ability to persist and pause/resume"},{"line_number":72,"context_line":"   tasks.  Future work could allow long running operations to be paused on a"}],"source_content_type":"text/x-rst","patch_set":4,"id":"AAAAXH%2F%2FoRE%3D","line":69,"updated":"2014-04-18 17:49:30.000000000","message":"What\u0027s the point of this then? :)","commit_id":"26b14e2c8bad56d9e37168718bc0ee4252eaf55d"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"571541f688592dba1d6a38824fa8acc9b92d3fe4","unresolved":false,"context_lines":[{"line_number":66,"context_line":"come up later."},{"line_number":67,"context_line":""},{"line_number":68,"context_line":" * task_state isn\u0027t being modified in any way.  This will ensure the v2 API and"},{"line_number":69,"context_line":"   the current task_state state machine won\u0027t be effected."},{"line_number":70,"context_line":""},{"line_number":71,"context_line":" * There has been some thought about the ability to persist and pause/resume"},{"line_number":72,"context_line":"   tasks.  Future work could allow long running operations to be paused on a"}],"source_content_type":"text/x-rst","patch_set":4,"id":"AAAAXH%2F%2FmdQ%3D","line":69,"in_reply_to":"AAAAXH%2F%2FmtY%3D","updated":"2014-04-18 22:32:49.000000000","message":":)","commit_id":"26b14e2c8bad56d9e37168718bc0ee4252eaf55d"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"7a1150e384c177a8705b34ae14645bb4a8adcd66","unresolved":false,"context_lines":[{"line_number":66,"context_line":"come up later."},{"line_number":67,"context_line":""},{"line_number":68,"context_line":" * task_state isn\u0027t being modified in any way.  This will ensure the v2 API and"},{"line_number":69,"context_line":"   the current task_state state machine won\u0027t be effected."},{"line_number":70,"context_line":""},{"line_number":71,"context_line":" * There has been some thought about the ability to persist and pause/resume"},{"line_number":72,"context_line":"   tasks.  Future work could allow long running operations to be paused on a"}],"source_content_type":"text/x-rst","patch_set":4,"id":"AAAAXH%2F%2FmtY%3D","line":69,"in_reply_to":"AAAAXH%2F%2FnQ8%3D","updated":"2014-04-18 21:40:32.000000000","message":"I understand ya. Was mostly just pulling your leg ;)","commit_id":"26b14e2c8bad56d9e37168718bc0ee4252eaf55d"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"d5854d5bdf4bad5369395fedaea767770a001711","unresolved":false,"context_lines":[{"line_number":66,"context_line":"come up later."},{"line_number":67,"context_line":""},{"line_number":68,"context_line":" * task_state isn\u0027t being modified in any way.  This will ensure the v2 API and"},{"line_number":69,"context_line":"   the current task_state state machine won\u0027t be effected."},{"line_number":70,"context_line":""},{"line_number":71,"context_line":" * There has been some thought about the ability to persist and pause/resume"},{"line_number":72,"context_line":"   tasks.  Future work could allow long running operations to be paused on a"}],"source_content_type":"text/x-rst","patch_set":4,"id":"AAAAXH%2F%2FnQ8%3D","line":69,"in_reply_to":"AAAAXH%2F%2FoRE%3D","updated":"2014-04-18 20:14:58.000000000","message":"Heh, I know it seems minimally useful atm.\n\nBut it\u0027s to set up future work.  As I mentioned above in a reply to Joshua if I were to add reworking task_state transitions into this blueprint I think the scale of it would be a bit much.  I\u0027d like to get tasks exposed and hopefully pull task_state out of the instance view in v3, and then look at just focusing on better defining task transitions or making other improvements.","commit_id":"26b14e2c8bad56d9e37168718bc0ee4252eaf55d"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"0d16900d1135a67a442ef29fe1d24744f2a4daa5","unresolved":false,"context_lines":[{"line_number":70,"context_line":""},{"line_number":71,"context_line":" * There has been some thought about the ability to persist and pause/resume"},{"line_number":72,"context_line":"   tasks.  Future work could allow long running operations to be paused on a"},{"line_number":73,"context_line":"   compute before a restart and then resumed afterwards."},{"line_number":74,"context_line":""},{"line_number":75,"context_line":" * Tasks could eventually spawn sub-tasks in order to more granularly represent"},{"line_number":76,"context_line":"   what is happening withing Nova.  An example is a task to upload an image"}],"source_content_type":"text/x-rst","patch_set":4,"id":"AAAAXH%2F%2FoQQ%3D","line":73,"updated":"2014-04-18 17:49:30.000000000","message":"A more common use case is task abortion. This is *extemely* common use case that is essential for providing proper deletion semantics -- for example, if I launch an instance and then immediately delete it, I want to ensure all tasks and subtasks involved in the launch sequence are aborted...","commit_id":"26b14e2c8bad56d9e37168718bc0ee4252eaf55d"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"7b46d69a861474e0995b52fc1070513e7cacf407","unresolved":false,"context_lines":[{"line_number":70,"context_line":""},{"line_number":71,"context_line":" * There has been some thought about the ability to persist and pause/resume"},{"line_number":72,"context_line":"   tasks.  Future work could allow long running operations to be paused on a"},{"line_number":73,"context_line":"   compute before a restart and then resumed afterwards."},{"line_number":74,"context_line":""},{"line_number":75,"context_line":" * Tasks could eventually spawn sub-tasks in order to more granularly represent"},{"line_number":76,"context_line":"   what is happening withing Nova.  An example is a task to upload an image"}],"source_content_type":"text/x-rst","patch_set":4,"id":"AAAAXH%2F%2Fmiw%3D","line":73,"in_reply_to":"AAAAXH%2F%2FnO4%3D","updated":"2014-04-18 22:13:53.000000000","message":"Agreed, different viewpoints but same thing :)","commit_id":"26b14e2c8bad56d9e37168718bc0ee4252eaf55d"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"d5854d5bdf4bad5369395fedaea767770a001711","unresolved":false,"context_lines":[{"line_number":70,"context_line":""},{"line_number":71,"context_line":" * There has been some thought about the ability to persist and pause/resume"},{"line_number":72,"context_line":"   tasks.  Future work could allow long running operations to be paused on a"},{"line_number":73,"context_line":"   compute before a restart and then resumed afterwards."},{"line_number":74,"context_line":""},{"line_number":75,"context_line":" * Tasks could eventually spawn sub-tasks in order to more granularly represent"},{"line_number":76,"context_line":"   what is happening withing Nova.  An example is a task to upload an image"}],"source_content_type":"text/x-rst","patch_set":4,"id":"AAAAXH%2F%2FnO4%3D","line":73,"in_reply_to":"AAAAXH%2F%2FnxA%3D","updated":"2014-04-18 20:14:58.000000000","message":"Jay: good point, I will try to work this around that.\n\nJoshua: I think we\u0027re thinking at different levels, but your view might make this more clear.  If you look at the next bullet point I talk about sub-tasks.  I think killing and retrying sub-tasks makes sense, but from the parent task point of view it could be considered paused.","commit_id":"26b14e2c8bad56d9e37168718bc0ee4252eaf55d"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"1bfb40e20c3bfff8b4033ad7dd2500f2968344ed","unresolved":false,"context_lines":[{"line_number":70,"context_line":""},{"line_number":71,"context_line":" * There has been some thought about the ability to persist and pause/resume"},{"line_number":72,"context_line":"   tasks.  Future work could allow long running operations to be paused on a"},{"line_number":73,"context_line":"   compute before a restart and then resumed afterwards."},{"line_number":74,"context_line":""},{"line_number":75,"context_line":" * Tasks could eventually spawn sub-tasks in order to more granularly represent"},{"line_number":76,"context_line":"   what is happening withing Nova.  An example is a task to upload an image"}],"source_content_type":"text/x-rst","patch_set":4,"id":"AAAAXH%2F%2FnxA%3D","line":73,"in_reply_to":"AAAAXH%2F%2FoQQ%3D","updated":"2014-04-18 18:59:49.000000000","message":"To me u shouldn\u0027t need to even pause, why can\u0027t we abort running processes and resume them later (this brings into the whole idempotency concept). If stages of tasks are granular enough then there isn\u0027t even need to pause (just kill the process and on restart restart from the last idempotent task that didn\u0027t finish and continue on).","commit_id":"26b14e2c8bad56d9e37168718bc0ee4252eaf55d"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"0d16900d1135a67a442ef29fe1d24744f2a4daa5","unresolved":false,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":" * Tasks could eventually spawn sub-tasks in order to more granularly represent"},{"line_number":76,"context_line":"   what is happening withing Nova.  An example is a task to upload an image"},{"line_number":77,"context_line":"   after a snapshot."},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"Alternatives"},{"line_number":80,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"AAAAXH%2F%2FoPw%3D","line":77,"updated":"2014-04-18 17:49:30.000000000","message":"A better example is the launch sequence :)","commit_id":"26b14e2c8bad56d9e37168718bc0ee4252eaf55d"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"d5854d5bdf4bad5369395fedaea767770a001711","unresolved":false,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":" * Tasks could eventually spawn sub-tasks in order to more granularly represent"},{"line_number":76,"context_line":"   what is happening withing Nova.  An example is a task to upload an image"},{"line_number":77,"context_line":"   after a snapshot."},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"Alternatives"},{"line_number":80,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"AAAAXH%2F%2FnOs%3D","line":77,"in_reply_to":"AAAAXH%2F%2FoPw%3D","updated":"2014-04-18 20:14:58.000000000","message":"Definitely.  I used this example to show that a task could represent an action on an image as well.  But based on your feedback above I think I need to make this point differently.","commit_id":"26b14e2c8bad56d9e37168718bc0ee4252eaf55d"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"b5607e3fd2f1444d4f1eb1a128a5d2829c837492","unresolved":false,"context_lines":[{"line_number":91,"context_line":"provide the same capabilities that instance-actions do, or can be expanded to"},{"line_number":92,"context_line":"do so.  Initially the deprecation could be accomplished by not including them"},{"line_number":93,"context_line":"in API V3.  Further work to remove instance-actions will be somewhat reliant on"},{"line_number":94,"context_line":"how API V2 is handled once V3 is available."},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"Data model impact"},{"line_number":97,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"AAAAXH%2F%2F3UQ%3D","line":94,"updated":"2014-04-16 20:38:50.000000000","message":"I think we need to be pretty clear about how we handle a new API that is handling things from a mixed cluster. So, a Juno API node creates a task and goes to pass it to the compute. However, the compute nodes are a mix of icehouse and juno, which means we\u0027re restricted to icehouse RPC versioning. That means that (a) the task isn\u0027t going to get updated by the icehouse node, unless we plug into the instance actions stuff in some way, and (b) the juno node will want to do the task updating, but won\u0027t be able to receive the task from the API because of the RPC version cap. I\u0027m not really sure what to do there, but I think it\u0027s worth thinking through at least.","commit_id":"26b14e2c8bad56d9e37168718bc0ee4252eaf55d"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"fe62c1a2fb7fa7c2e47ce0b3a1d4f26716cef0fd","unresolved":false,"context_lines":[{"line_number":91,"context_line":"provide the same capabilities that instance-actions do, or can be expanded to"},{"line_number":92,"context_line":"do so.  Initially the deprecation could be accomplished by not including them"},{"line_number":93,"context_line":"in API V3.  Further work to remove instance-actions will be somewhat reliant on"},{"line_number":94,"context_line":"how API V2 is handled once V3 is available."},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"Data model impact"},{"line_number":97,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"AAAAXH%2F%2F3Ho%3D","line":94,"in_reply_to":"AAAAXH%2F%2F3UQ%3D","updated":"2014-04-16 21:26:39.000000000","message":"Definitely worth considering, since I\u0027ll admit there was no consideration for a mixed cluster.  I have thought about plugging into the instance save method when it updates task_state, but didn\u0027t really want to introduce that coupling.  Maybe plugging into instance-actions will  be a better fit and address this.  I\u0027ll look into it and see how that looks and maybe some other options.","commit_id":"26b14e2c8bad56d9e37168718bc0ee4252eaf55d"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"0d16900d1135a67a442ef29fe1d24744f2a4daa5","unresolved":false,"context_lines":[{"line_number":98,"context_line":""},{"line_number":99,"context_line":"A new table will be added to store tasks.  The schema will be created such that"},{"line_number":100,"context_line":"it can store the tasks as described above.  This table will initially be empty"},{"line_number":101,"context_line":"so a schema migration will be necessary but not a data migration."},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"REST API impact"},{"line_number":104,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"AAAAXH%2F%2FoPA%3D","line":101,"updated":"2014-04-18 17:49:30.000000000","message":"I recommend adding a subtasks model up front. I discuss a server task/subtask API and data model here that you might find interesting or useful for ideas:\n\nhttp://docs.oscomputevnext.apiary.io/#servertask\n\nhttp://docs.oscomputevnext.apiary.io/#servertaskitem","commit_id":"26b14e2c8bad56d9e37168718bc0ee4252eaf55d"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"d5854d5bdf4bad5369395fedaea767770a001711","unresolved":false,"context_lines":[{"line_number":98,"context_line":""},{"line_number":99,"context_line":"A new table will be added to store tasks.  The schema will be created such that"},{"line_number":100,"context_line":"it can store the tasks as described above.  This table will initially be empty"},{"line_number":101,"context_line":"so a schema migration will be necessary but not a data migration."},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"REST API impact"},{"line_number":104,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"AAAAXH%2F%2FnLY%3D","line":101,"in_reply_to":"AAAAXH%2F%2FoPA%3D","updated":"2014-04-18 20:14:58.000000000","message":"Jay: Thanks, I\u0027ll check those out.  I intend to make it possible to have subtasks up front, but admittedly haven\u0027t fully thought through the data model to ensure that\u0027s possible.  But I don\u0027t see adding any subtasks into Nova at this point.  My main goal is to expose the concept of tasks and use them enough to get parity with task_state at this point.  Anything beyond that I will probably want to throw into another blueprint.\n\nJoshua: I\u0027ll check that out, thanks.","commit_id":"26b14e2c8bad56d9e37168718bc0ee4252eaf55d"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"1bfb40e20c3bfff8b4033ad7dd2500f2968344ed","unresolved":false,"context_lines":[{"line_number":98,"context_line":""},{"line_number":99,"context_line":"A new table will be added to store tasks.  The schema will be created such that"},{"line_number":100,"context_line":"it can store the tasks as described above.  This table will initially be empty"},{"line_number":101,"context_line":"so a schema migration will be necessary but not a data migration."},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"REST API impact"},{"line_number":104,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"AAAAXH%2F%2FnwQ%3D","line":101,"in_reply_to":"AAAAXH%2F%2FoPA%3D","updated":"2014-04-18 18:59:49.000000000","message":"This is where I\u0027ll put the obligatory taskflow data model (which could be used or could be learned from). https://wiki.openstack.org/wiki/TaskFlow/Patterns_and_Engines/Persistence#Task_detail. The concept of flow (flows contain tasks) nesting is supported by taskflow inherently, which imho is equivalent of your subtasks model.","commit_id":"26b14e2c8bad56d9e37168718bc0ee4252eaf55d"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"0d16900d1135a67a442ef29fe1d24744f2a4daa5","unresolved":false,"context_lines":[{"line_number":161,"context_line":""},{"line_number":162,"context_line":"This change will involve more writes to the database.  The number of writes"},{"line_number":163,"context_line":"should end up being approximately equal to the number of task_state updates"},{"line_number":164,"context_line":"that currently occur."},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"Other deployer impact"},{"line_number":167,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"AAAAXH%2F%2FoMg%3D","line":164,"updated":"2014-04-18 17:49:30.000000000","message":"In most cases, it is better performing and reduces lock contention to add a record to a table vs. updating a record. Just FYI.","commit_id":"26b14e2c8bad56d9e37168718bc0ee4252eaf55d"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"d5854d5bdf4bad5369395fedaea767770a001711","unresolved":false,"context_lines":[{"line_number":161,"context_line":""},{"line_number":162,"context_line":"This change will involve more writes to the database.  The number of writes"},{"line_number":163,"context_line":"should end up being approximately equal to the number of task_state updates"},{"line_number":164,"context_line":"that currently occur."},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"Other deployer impact"},{"line_number":167,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"AAAAXH%2F%2FnLw%3D","line":164,"in_reply_to":"AAAAXH%2F%2FoMg%3D","updated":"2014-04-18 20:14:58.000000000","message":"That\u0027s good to know.  In this case I think the number of writes will be fairly low with a finite number of writes per task.  And conceptually I think it will be much simpler to deal with this as an updateable model rather than a log.  But I\u0027ll think about this.","commit_id":"26b14e2c8bad56d9e37168718bc0ee4252eaf55d"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"1bfb40e20c3bfff8b4033ad7dd2500f2968344ed","unresolved":false,"context_lines":[{"line_number":185,"context_line":"  alaski"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"Other contributors:"},{"line_number":188,"context_line":"  None"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"Work Items"},{"line_number":191,"context_line":"----------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"AAAAXH%2F%2Fnvs%3D","line":188,"updated":"2014-04-18 18:59:49.000000000","message":"I\u0027ll put myself up, if u want help (?), Maybe we can even look at taskflow and how it can help (or even be used) since it\u0027s concepts shouldn\u0027t be reinvented in nova (just as they shouldn\u0027t be reinvented in glance for there own *similar* task api, https://etherpad.openstack.org/p/taskflow-glance). Might as well take advantage of it to avoid recreating the same code/concepts imho (since that\u0027s why it was created). Of course I am biased ;)","commit_id":"26b14e2c8bad56d9e37168718bc0ee4252eaf55d"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"7b46d69a861474e0995b52fc1070513e7cacf407","unresolved":false,"context_lines":[{"line_number":185,"context_line":"  alaski"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"Other contributors:"},{"line_number":188,"context_line":"  None"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"Work Items"},{"line_number":191,"context_line":"----------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"AAAAXH%2F%2FmiQ%3D","line":188,"in_reply_to":"AAAAXH%2F%2FnNo%3D","updated":"2014-04-18 22:13:53.000000000","message":"I\u0027m fine with doing either, or anything that can help progress this concept in nova.","commit_id":"26b14e2c8bad56d9e37168718bc0ee4252eaf55d"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"d5854d5bdf4bad5369395fedaea767770a001711","unresolved":false,"context_lines":[{"line_number":185,"context_line":"  alaski"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"Other contributors:"},{"line_number":188,"context_line":"  None"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"Work Items"},{"line_number":191,"context_line":"----------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"AAAAXH%2F%2FnNo%3D","line":188,"in_reply_to":"AAAAXH%2F%2Fnvs%3D","updated":"2014-04-18 20:14:58.000000000","message":"I\u0027m happy to add you as another contributor.  But this work is limited to exposing a concept of a task, and actually doing much with them internally to Nova will be a future effort.","commit_id":"26b14e2c8bad56d9e37168718bc0ee4252eaf55d"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"b5607e3fd2f1444d4f1eb1a128a5d2829c837492","unresolved":false,"context_lines":[{"line_number":196,"context_line":""},{"line_number":197,"context_line":" * Add task API resources for querying."},{"line_number":198,"context_line":""},{"line_number":199,"context_line":" * Create and return tasks with instance POST requests."},{"line_number":200,"context_line":""},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"Dependencies"}],"source_content_type":"text/x-rst","patch_set":4,"id":"AAAAXH%2F%2F3Tk%3D","line":199,"updated":"2014-04-16 20:38:50.000000000","message":"Enumerating all the things that can touch task_state and listing them here might be a bit overkill, but should we have one more item here like:\n\n * Identify remaining task_state-modifying things\n\nWhere we expect that potentially we implement server create and a list of remaining things for juno, and that list of things would become the blueprint for K?","commit_id":"26b14e2c8bad56d9e37168718bc0ee4252eaf55d"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"fe62c1a2fb7fa7c2e47ce0b3a1d4f26716cef0fd","unresolved":false,"context_lines":[{"line_number":196,"context_line":""},{"line_number":197,"context_line":" * Add task API resources for querying."},{"line_number":198,"context_line":""},{"line_number":199,"context_line":" * Create and return tasks with instance POST requests."},{"line_number":200,"context_line":""},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"Dependencies"}],"source_content_type":"text/x-rst","patch_set":4,"id":"AAAAXH%2F%2F3G8%3D","line":199,"in_reply_to":"AAAAXH%2F%2F3Tk%3D","updated":"2014-04-16 21:26:39.000000000","message":"Seems like a good idea.  I\u0027ve seen launchpad blueprint whiteboards used for this type of tracking and it seems to work well so I can enumerate some things there and then whatever is left gets put into the K blueprint based on the work item here.","commit_id":"26b14e2c8bad56d9e37168718bc0ee4252eaf55d"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"704078d13de217d48bb34daeffb5b70a79888eba","unresolved":false,"context_lines":[{"line_number":44,"context_line":""},{"line_number":45,"context_line":"A task will initially be made up of the following components:"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":" * uuid:"},{"line_number":48,"context_line":" * task: The name of the task i.e. rebooting, rescue, rebuild, pause, etc..."},{"line_number":49,"context_line":" * state: \u0027active\u0027, \u0027error\u0027, \u0027complete\u0027, \u0027timedout\u0027, \u0027aborted\u0027 is a"},{"line_number":50,"context_line":"   non-exhaustive list of examples."}],"source_content_type":"text/x-rst","patch_set":5,"id":"1ae5cdf2_d003a071","line":47,"updated":"2014-05-30 11:04:07.000000000","message":"nit, maybe just use \u0027id\u0027. in most of api use \u0027id\u0027 I guess.","commit_id":"e8a412fc840ab63035babdd24cf11e1366c5210f"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"907e5c2c398993ce4e9734b053ae2baafdbfad44","unresolved":false,"context_lines":[{"line_number":44,"context_line":""},{"line_number":45,"context_line":"A task will initially be made up of the following components:"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":" * uuid:"},{"line_number":48,"context_line":" * task: The name of the task i.e. rebooting, rescue, rebuild, pause, etc..."},{"line_number":49,"context_line":" * state: \u0027active\u0027, \u0027error\u0027, \u0027complete\u0027, \u0027timedout\u0027, \u0027aborted\u0027 is a"},{"line_number":50,"context_line":"   non-exhaustive list of examples."}],"source_content_type":"text/x-rst","patch_set":5,"id":"1ae5cdf2_881ed6b9","line":47,"in_reply_to":"1ae5cdf2_d003a071","updated":"2014-06-03 20:38:14.000000000","message":"I\u0027d rather not use id since it can be confused with the id autoincrement field in the database.  While instance exposes id in the api it uses uuid for everything internally.  Tasks will also use uuid internally and I like having the consistency.","commit_id":"e8a412fc840ab63035babdd24cf11e1366c5210f"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"704078d13de217d48bb34daeffb5b70a79888eba","unresolved":false,"context_lines":[{"line_number":48,"context_line":" * task: The name of the task i.e. rebooting, rescue, rebuild, pause, etc..."},{"line_number":49,"context_line":" * state: \u0027active\u0027, \u0027error\u0027, \u0027complete\u0027, \u0027timedout\u0027, \u0027aborted\u0027 is a"},{"line_number":50,"context_line":"   non-exhaustive list of examples."},{"line_number":51,"context_line":" * server_id: uuid of the instance related to the task."},{"line_number":52,"context_line":" * request_id: context.request_id"},{"line_number":53,"context_line":" * started_by_user: context.user_id"},{"line_number":54,"context_line":" * project_id: context.project_id"}],"source_content_type":"text/x-rst","patch_set":5,"id":"1ae5cdf2_e1ae10e7","line":51,"updated":"2014-05-30 11:04:07.000000000","message":"why this is different with line 123. line 123 is a field called \u0027resource\u0027?","commit_id":"e8a412fc840ab63035babdd24cf11e1366c5210f"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"907e5c2c398993ce4e9734b053ae2baafdbfad44","unresolved":false,"context_lines":[{"line_number":48,"context_line":" * task: The name of the task i.e. rebooting, rescue, rebuild, pause, etc..."},{"line_number":49,"context_line":" * state: \u0027active\u0027, \u0027error\u0027, \u0027complete\u0027, \u0027timedout\u0027, \u0027aborted\u0027 is a"},{"line_number":50,"context_line":"   non-exhaustive list of examples."},{"line_number":51,"context_line":" * server_id: uuid of the instance related to the task."},{"line_number":52,"context_line":" * request_id: context.request_id"},{"line_number":53,"context_line":" * started_by_user: context.user_id"},{"line_number":54,"context_line":" * project_id: context.project_id"}],"source_content_type":"text/x-rst","patch_set":5,"id":"1ae5cdf2_88e336a3","line":51,"in_reply_to":"1ae5cdf2_e1ae10e7","updated":"2014-06-03 20:38:14.000000000","message":"This was updated based on some comments from Jay Pipes, and I didn\u0027t update the definition below to match.  But there\u0027s some discussion down there about this same idea so I\u0027ll comment there and then I\u0027ll update both places to match whichever direction is decided.","commit_id":"e8a412fc840ab63035babdd24cf11e1366c5210f"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"704078d13de217d48bb34daeffb5b70a79888eba","unresolved":false,"context_lines":[{"line_number":54,"context_line":" * project_id: context.project_id"},{"line_number":55,"context_line":" * start_time:"},{"line_number":56,"context_line":" * last_updated: Can be used to periodically update a long running task to show"},{"line_number":57,"context_line":"   that it has not stalled."},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"Task objects will be created in the API method that handles the request, and"},{"line_number":60,"context_line":"will be sent to the appropriate compute.api methods along with the instance"}],"source_content_type":"text/x-rst","patch_set":5,"id":"1ae5cdf2_01da1c78","line":57,"updated":"2014-05-30 11:04:07.000000000","message":"should we have a field to show detail info of error?","commit_id":"e8a412fc840ab63035babdd24cf11e1366c5210f"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"907e5c2c398993ce4e9734b053ae2baafdbfad44","unresolved":false,"context_lines":[{"line_number":54,"context_line":" * project_id: context.project_id"},{"line_number":55,"context_line":" * start_time:"},{"line_number":56,"context_line":" * last_updated: Can be used to periodically update a long running task to show"},{"line_number":57,"context_line":"   that it has not stalled."},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"Task objects will be created in the API method that handles the request, and"},{"line_number":60,"context_line":"will be sent to the appropriate compute.api methods along with the instance"}],"source_content_type":"text/x-rst","patch_set":5,"id":"1ae5cdf2_de67b44b","line":57,"in_reply_to":"1ae5cdf2_01da1c78","updated":"2014-06-03 20:38:14.000000000","message":"At some point I think it\u0027s worth doing that.  But for now I would prefer to leave it out so this doesn\u0027t get bogged down with details on that feature.\n\nThere are a few other things that I would like to see added as well.","commit_id":"e8a412fc840ab63035babdd24cf11e1366c5210f"},{"author":{"_account_id":8922,"name":"haruka tanizawa","email":"h-tanizawa@intellilink.co.jp","username":"h-tanizawa"},"change_message_id":"d07bada38b6fc6e19d08e57c0bbc1fd848ac37a3","unresolved":false,"context_lines":[{"line_number":109,"context_line":"The requests for creating an instance or acting on an instance will not change"},{"line_number":110,"context_line":"but the responses will.  The success response code of 202 will not change and"},{"line_number":111,"context_line":"error codes will not change, though the messages may change for task related"},{"line_number":112,"context_line":"failures."},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"The reponse object returned for requests which return a task will have the"},{"line_number":115,"context_line":"following structure::"}],"source_content_type":"text/x-rst","patch_set":5,"id":"3ae8d1ca_18d88152","line":112,"updated":"2014-05-29 08:54:01.000000000","message":"In this nova-specs, I can\u0027t find any APIs written in Etherpad.\nLike https://etherpad.openstack.org/p/IcehouseTaskAPI .\n\nNow, What api are you going to implement?","commit_id":"e8a412fc840ab63035babdd24cf11e1366c5210f"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"907e5c2c398993ce4e9734b053ae2baafdbfad44","unresolved":false,"context_lines":[{"line_number":109,"context_line":"The requests for creating an instance or acting on an instance will not change"},{"line_number":110,"context_line":"but the responses will.  The success response code of 202 will not change and"},{"line_number":111,"context_line":"error codes will not change, though the messages may change for task related"},{"line_number":112,"context_line":"failures."},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"The reponse object returned for requests which return a task will have the"},{"line_number":115,"context_line":"following structure::"}],"source_content_type":"text/x-rst","patch_set":5,"id":"1ae5cdf2_5edac4e8","line":112,"in_reply_to":"3ae8d1ca_18d88152","updated":"2014-06-03 20:38:14.000000000","message":"You\u0027re right, I focused on the task structure that will be returned.  I\u0027ll include the new URLs as well.","commit_id":"e8a412fc840ab63035babdd24cf11e1366c5210f"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"704078d13de217d48bb34daeffb5b70a79888eba","unresolved":false,"context_lines":[{"line_number":121,"context_line":"            \u0027task\u0027: { \u0027type\u0027: \u0027string\u0027 },"},{"line_number":122,"context_line":"            \u0027state\u0027: { \u0027type\u0027: \u0027string\u0027 },"},{"line_number":123,"context_line":"            \u0027resource\u0027: {"},{"line_number":124,"context_line":"                \u0027type\u0027: \u0027object\u0027,"},{"line_number":125,"context_line":"                \u0027patternProperties\u0027: {"},{"line_number":126,"context_line":"                    \u0027server|image|network|volume\u0027: {"},{"line_number":127,"context_line":"                        \u0027type\u0027: \u0027string\u0027,"}],"source_content_type":"text/x-rst","patch_set":5,"id":"1ae5cdf2_81a62cc0","line":124,"updated":"2014-05-30 11:04:07.000000000","message":"why this is sub-object? how about use \u0027resource_type\u0027 and \u0027resource_id\u0027? then we can implement query URL like /v3/tasks/[task-id]?resource_id\u003d or /v3/tasks/[task-id]?resource_type\n\nAnother related comment at line 143","commit_id":"e8a412fc840ab63035babdd24cf11e1366c5210f"},{"author":{"_account_id":8922,"name":"haruka tanizawa","email":"h-tanizawa@intellilink.co.jp","username":"h-tanizawa"},"change_message_id":"d07bada38b6fc6e19d08e57c0bbc1fd848ac37a3","unresolved":false,"context_lines":[{"line_number":140,"context_line":""},{"line_number":141,"context_line":"additionalProperties is True because there may be times that it makes sense to"},{"line_number":142,"context_line":"return a copy of the resource as well and there may be other additions over"},{"line_number":143,"context_line":"time."},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"Security impact"},{"line_number":146,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":5,"id":"3ae8d1ca_78fa65be","line":143,"updated":"2014-05-29 08:54:01.000000000","message":"I know that you are targetting at instance.\n\nHowever, TaskAPI have limited uses if you implement server_id as mandatory parameter, or let task belong to instance.","commit_id":"e8a412fc840ab63035babdd24cf11e1366c5210f"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"ac4fe9c6a4de2ecd97ada3f5c1c1498e4058f19c","unresolved":false,"context_lines":[{"line_number":140,"context_line":""},{"line_number":141,"context_line":"additionalProperties is True because there may be times that it makes sense to"},{"line_number":142,"context_line":"return a copy of the resource as well and there may be other additions over"},{"line_number":143,"context_line":"time."},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"Security impact"},{"line_number":146,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":5,"id":"7adec928_b08bf266","line":143,"updated":"2014-05-16 06:46:11.000000000","message":"To tracing taks status after creating/acting a server, will we need the other API url like \"http://\u003c..\u003e/v3/servers/\u003cserver-id\u003e/os-server-tasks\"?","commit_id":"e8a412fc840ab63035babdd24cf11e1366c5210f"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"f271ff89a936b979ebd2f0e65c18e612a4fbb863","unresolved":false,"context_lines":[{"line_number":140,"context_line":""},{"line_number":141,"context_line":"additionalProperties is True because there may be times that it makes sense to"},{"line_number":142,"context_line":"return a copy of the resource as well and there may be other additions over"},{"line_number":143,"context_line":"time."},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"Security impact"},{"line_number":146,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":5,"id":"1ae5cdf2_9ce68fe7","line":143,"in_reply_to":"1ae5cdf2_fe6b90ee","updated":"2014-06-07 10:37:18.000000000","message":"I only think resource id is more generic that is good for extending. But for now, I didn\u0027t see any limitations","commit_id":"e8a412fc840ab63035babdd24cf11e1366c5210f"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"907e5c2c398993ce4e9734b053ae2baafdbfad44","unresolved":false,"context_lines":[{"line_number":140,"context_line":""},{"line_number":141,"context_line":"additionalProperties is True because there may be times that it makes sense to"},{"line_number":142,"context_line":"return a copy of the resource as well and there may be other additions over"},{"line_number":143,"context_line":"time."},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"Security impact"},{"line_number":146,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":5,"id":"1ae5cdf2_fe6b90ee","line":143,"in_reply_to":"3ae8d1ca_78fa65be","updated":"2014-06-03 20:38:14.000000000","message":"Jay Pipes made the good point that every Nova task should have an instance associated with it.  Even for something like downloading/uploading an image, or a network operation, it will still be associated with an instance.  What limitations do you see if this is targeted at instances?  To be clear, I would like to include both an instance and an associated resource like image/network/volume if there is one.\n\nAlthough one consideration that comes up is if we\u0027re going to continue to proxy image/network requests should those include tasks?  If so then we shouldn\u0027t tie a task to an instance.","commit_id":"e8a412fc840ab63035babdd24cf11e1366c5210f"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"b929d8dbfb7cd3486582e1780096fc06fff76e9d","unresolved":false,"context_lines":[{"line_number":140,"context_line":""},{"line_number":141,"context_line":"additionalProperties is True because there may be times that it makes sense to"},{"line_number":142,"context_line":"return a copy of the resource as well and there may be other additions over"},{"line_number":143,"context_line":"time."},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"Security impact"},{"line_number":146,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":5,"id":"7adec928_d14d8f3f","line":143,"in_reply_to":"7adec928_b08bf266","updated":"2014-05-19 19:51:29.000000000","message":"I\u0027d like it to be http://\u003c..\u003e/v3/servers/\u003cserver-id\u003e/tasks, but yes.  I will mention this.","commit_id":"e8a412fc840ab63035babdd24cf11e1366c5210f"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"704078d13de217d48bb34daeffb5b70a79888eba","unresolved":false,"context_lines":[{"line_number":140,"context_line":""},{"line_number":141,"context_line":"additionalProperties is True because there may be times that it makes sense to"},{"line_number":142,"context_line":"return a copy of the resource as well and there may be other additions over"},{"line_number":143,"context_line":"time."},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"Security impact"},{"line_number":146,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":5,"id":"1ae5cdf2_56a7884f","line":143,"in_reply_to":"7adec928_d14d8f3f","updated":"2014-05-30 11:04:07.000000000","message":"There is \u0027resource\u0027 fields for task object. That means task isn\u0027t only for server, it also can be used by other resource (line 126). So why we add task as sub-resource of servers? Why not access task through url \u0027/v3/tasks\u0027?","commit_id":"e8a412fc840ab63035babdd24cf11e1366c5210f"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"5362777f76c617a14dfae56a4e4e910c407a86d7","unresolved":false,"context_lines":[{"line_number":140,"context_line":""},{"line_number":141,"context_line":"additionalProperties is True because there may be times that it makes sense to"},{"line_number":142,"context_line":"return a copy of the resource as well and there may be other additions over"},{"line_number":143,"context_line":"time."},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"Security impact"},{"line_number":146,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":5,"id":"7adec928_f6ac39ef","line":143,"in_reply_to":"7adec928_d14d8f3f","updated":"2014-05-20 01:24:08.000000000","message":"Will tasks API be core API?\nIf yes, the url you said would be nice. If no, the prefix \"os-\" would be necessary to represent not-core like http://\u003c..\u003e/v3/servers/\u003cserver-id\u003e/os-tasks.\n\nAnyway, I\u0027m looking forward to seeing the updated specs including the more detail of the API design.","commit_id":"e8a412fc840ab63035babdd24cf11e1366c5210f"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"00821e2f1d6eaa6ba6d9be8756a09c75c1418571","unresolved":false,"context_lines":[{"line_number":140,"context_line":""},{"line_number":141,"context_line":"additionalProperties is True because there may be times that it makes sense to"},{"line_number":142,"context_line":"return a copy of the resource as well and there may be other additions over"},{"line_number":143,"context_line":"time."},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"Security impact"},{"line_number":146,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":5,"id":"5adbc538_ba2518ad","line":143,"in_reply_to":"7adec928_f6ac39ef","updated":"2014-05-26 00:48:34.000000000","message":"I think tasks should definitely be part of core.\n\nHowever I am interested to see what the multiple create server response case looks like as I think its something we need to support from the start (we handle it very badly at the moment)","commit_id":"e8a412fc840ab63035babdd24cf11e1366c5210f"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"b0baf8dcf6c5e209c5d76349077b7bc2a7b42b9e","unresolved":false,"context_lines":[{"line_number":117,"context_line":"    task \u003d {"},{"line_number":118,"context_line":"        \u0027type\u0027: \u0027object\u0027,"},{"line_number":119,"context_line":"        \u0027properties\u0027: {"},{"line_number":120,"context_line":"            \u0027uuid\u0027: { \u0027type\u0027: \u0027string\u0027, \u0027format\u0027: \u0027uuid\u0027 },"},{"line_number":121,"context_line":"            \u0027task\u0027: { \u0027type\u0027: \u0027string\u0027 },"},{"line_number":122,"context_line":"            \u0027state\u0027: { \u0027type\u0027: \u0027string\u0027 },"},{"line_number":123,"context_line":"            \u0027server_id\u0027: {\u0027type\u0027: \u0027string\u0027 },"}],"source_content_type":"text/x-rst","patch_set":7,"id":"1ae5cdf2_1709cc2b","line":120,"updated":"2014-06-05 00:36:30.000000000","message":"For API consistency, I prefer \u0027id\u0027 instead of \u0027uuid\u0027 because there is not any v3 API which returns \u0027uuid\u0027 as its resource id. Most APIs return \u0027id\u0027 as its resource id.\n\nThat was the same as Alex\u0027s comment of patchset5, but I\u0027d like to pick it up again.","commit_id":"31653971d266b19be58eb684dd6c40691be2b718"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"4f706e3cdaf27491a3666e089ac8291a22153357","unresolved":false,"context_lines":[{"line_number":117,"context_line":"    task \u003d {"},{"line_number":118,"context_line":"        \u0027type\u0027: \u0027object\u0027,"},{"line_number":119,"context_line":"        \u0027properties\u0027: {"},{"line_number":120,"context_line":"            \u0027uuid\u0027: { \u0027type\u0027: \u0027string\u0027, \u0027format\u0027: \u0027uuid\u0027 },"},{"line_number":121,"context_line":"            \u0027task\u0027: { \u0027type\u0027: \u0027string\u0027 },"},{"line_number":122,"context_line":"            \u0027state\u0027: { \u0027type\u0027: \u0027string\u0027 },"},{"line_number":123,"context_line":"            \u0027server_id\u0027: {\u0027type\u0027: \u0027string\u0027 },"}],"source_content_type":"text/x-rst","patch_set":7,"id":"1ae5cdf2_04b34a98","line":120,"in_reply_to":"1ae5cdf2_1709cc2b","updated":"2014-06-05 13:07:55.000000000","message":"That\u0027s fair.  For the model above I\u0027ll leave it as uuid but for external consumption I can change it to id.  I would prefer to move everything else to uuid though :)","commit_id":"31653971d266b19be58eb684dd6c40691be2b718"},{"author":{"_account_id":8922,"name":"haruka tanizawa","email":"h-tanizawa@intellilink.co.jp","username":"h-tanizawa"},"change_message_id":"833a61eaa5ae4852e4c4d264ce483f47ec9f6d69","unresolved":false,"context_lines":[{"line_number":128,"context_line":"            \u0027last_updated\u0027: { \u0027type\u0027: \u0027string\u0027, \u0027format\u0027: \u0027date-time\u0027 }"},{"line_number":129,"context_line":"        }"},{"line_number":130,"context_line":"        \u0027additionalProperties\u0027: True"},{"line_number":131,"context_line":"    }"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"additionalProperties is True because there may be times that it makes sense to"},{"line_number":134,"context_line":"return a copy of the resource as well and there may be other additions over"}],"source_content_type":"text/x-rst","patch_set":7,"id":"1ae5cdf2_62ea4bdc","line":131,"updated":"2014-06-05 06:36:40.000000000","message":"I imagined that Task is about all Nova\u0027s action.\n\nBut you set this feature as instance\u0027s action. I understood.\n\nBefore user get response, user\u0027s client down, user have no way to use this TaskAPI. There is no help for it.","commit_id":"31653971d266b19be58eb684dd6c40691be2b718"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"4f706e3cdaf27491a3666e089ac8291a22153357","unresolved":false,"context_lines":[{"line_number":128,"context_line":"            \u0027last_updated\u0027: { \u0027type\u0027: \u0027string\u0027, \u0027format\u0027: \u0027date-time\u0027 }"},{"line_number":129,"context_line":"        }"},{"line_number":130,"context_line":"        \u0027additionalProperties\u0027: True"},{"line_number":131,"context_line":"    }"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"additionalProperties is True because there may be times that it makes sense to"},{"line_number":134,"context_line":"return a copy of the resource as well and there may be other additions over"}],"source_content_type":"text/x-rst","patch_set":7,"id":"1ae5cdf2_e4a1fe46","line":131,"in_reply_to":"1ae5cdf2_62ea4bdc","updated":"2014-06-05 13:07:55.000000000","message":"I had originally thought of this as nova actions as well.  But as far as I can tell there are no actions in Nova that don\u0027t involve an instance.  If there is a case for that I am happy to look at broadening this to account for that.\n\nI have plans for the idempotency token idea, but there\u0027s enough work with just the basic plans that I want to hold off on that for now.  But it\u0027s not forgotten :)","commit_id":"31653971d266b19be58eb684dd6c40691be2b718"},{"author":{"_account_id":8922,"name":"haruka tanizawa","email":"h-tanizawa@intellilink.co.jp","username":"h-tanizawa"},"change_message_id":"833a61eaa5ae4852e4c4d264ce483f47ec9f6d69","unresolved":false,"context_lines":[{"line_number":145,"context_line":"Additionally there will be two new URLs for requesting task data.  The details"},{"line_number":146,"context_line":"of the v3 API are slightly unclear at this point, but building on what\u0027s in"},{"line_number":147,"context_line":"place at this moment the new URLs would be"},{"line_number":148,"context_line":"http://\u003chost\u003e/v3/servers/\u003cserver-uuid\u003e/tasks and http://\u003chost\u003e/v3/tasks."},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"The tasks URL under servers will allow listing tasks for a server with a GET on"},{"line_number":151,"context_line":"that URL, or getting details of a particular task with a GET on"}],"source_content_type":"text/x-rst","patch_set":7,"id":"1ae5cdf2_020c27ec","line":148,"updated":"2014-06-05 06:36:40.000000000","message":"Thanks for your additional description.","commit_id":"31653971d266b19be58eb684dd6c40691be2b718"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"b0baf8dcf6c5e209c5d76349077b7bc2a7b42b9e","unresolved":false,"context_lines":[{"line_number":154,"context_line":"The http://\u003chost\u003e/v3/tasks URL will allow listing all tasks within a"},{"line_number":155,"context_line":"project_id, or all tasks as an admin, and then filtering by various criteria."},{"line_number":156,"context_line":"The initial plan is to include filtering by task, state, request_id, and"},{"line_number":157,"context_line":"project_id(admin only)."},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"Security impact"},{"line_number":160,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"1ae5cdf2_b7173844","line":157,"updated":"2014-06-05 00:36:30.000000000","message":"The above line145-157 seems nice for me, thanks for updating.","commit_id":"31653971d266b19be58eb684dd6c40691be2b718"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"f21862465d40fe4c5733f1b134d5b1ef2017d8a8","unresolved":false,"context_lines":[{"line_number":36,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"A POST to /v3/servers/ to create an instance or POSTs to"},{"line_number":39,"context_line":"/v3/servers/\u003cuuid\u003e/action to perform actions like reboot/rescue/rebuild/etc"},{"line_number":40,"context_line":"would return a task object as the response body.  In the case of creating \u003e 1"},{"line_number":41,"context_line":"server with a single request mutiple task objects will be returned, one for"},{"line_number":42,"context_line":"each server being built.  The API impact will be described more fully in the"}],"source_content_type":"text/x-rst","patch_set":8,"id":"1ae5cdf2_1cc35f39","line":39,"updated":"2014-06-07 10:32:49.000000000","message":"What about delete a server? Will it be a task?","commit_id":"47cfa5a7ef0d27d528e4ec962828e121d6e14cd4"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"2eeed9831e28165487778c0718c31ce1ab7a8637","unresolved":false,"context_lines":[{"line_number":36,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"A POST to /v3/servers/ to create an instance or POSTs to"},{"line_number":39,"context_line":"/v3/servers/\u003cuuid\u003e/action to perform actions like reboot/rescue/rebuild/etc"},{"line_number":40,"context_line":"would return a task object as the response body.  In the case of creating \u003e 1"},{"line_number":41,"context_line":"server with a single request mutiple task objects will be returned, one for"},{"line_number":42,"context_line":"each server being built.  The API impact will be described more fully in the"}],"source_content_type":"text/x-rst","patch_set":8,"id":"1ae5cdf2_9f5498cb","line":39,"in_reply_to":"1ae5cdf2_1cc35f39","updated":"2014-06-09 20:16:19.000000000","message":"deleting a server will be a task.  But tasks will have the same visibility as servers so once the server is deleted the tasks won\u0027t be queryable.","commit_id":"47cfa5a7ef0d27d528e4ec962828e121d6e14cd4"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"d7112ac32c3f8d8ed40be4b899de29dac728aec4","unresolved":false,"context_lines":[{"line_number":36,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"A POST to /v3/servers/ to create an instance or POSTs to"},{"line_number":39,"context_line":"/v3/servers/\u003cuuid\u003e/action to perform actions like reboot/rescue/rebuild/etc"},{"line_number":40,"context_line":"would return a task object as the response body.  In the case of creating \u003e 1"},{"line_number":41,"context_line":"server with a single request mutiple task objects will be returned, one for"},{"line_number":42,"context_line":"each server being built.  The API impact will be described more fully in the"}],"source_content_type":"text/x-rst","patch_set":8,"id":"1ae5cdf2_8b5d2b7c","line":39,"in_reply_to":"1ae5cdf2_9f5498cb","updated":"2014-06-10 06:12:59.000000000","message":"thanks for clarify","commit_id":"47cfa5a7ef0d27d528e4ec962828e121d6e14cd4"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"3c453a1ae4727465f699861c417260f34571b6c7","unresolved":false,"context_lines":[{"line_number":54,"context_line":" * project_id: context.project_id"},{"line_number":55,"context_line":" * start_time:"},{"line_number":56,"context_line":" * last_updated: Can be used to periodically update a long running task to show"},{"line_number":57,"context_line":"   that it has not stalled."},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"Task objects will be created in the API method that handles the request, and"},{"line_number":60,"context_line":"will be sent to the appropriate compute.api methods along with the instance"}],"source_content_type":"text/x-rst","patch_set":8,"id":"1ae5cdf2_1cda7f17","line":57,"updated":"2014-06-07 10:39:22.000000000","message":"I still prefer you can update the field name in this model can be same with the output of rest api, at least that is good for our developer.","commit_id":"47cfa5a7ef0d27d528e4ec962828e121d6e14cd4"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"2eeed9831e28165487778c0718c31ce1ab7a8637","unresolved":false,"context_lines":[{"line_number":54,"context_line":" * project_id: context.project_id"},{"line_number":55,"context_line":" * start_time:"},{"line_number":56,"context_line":" * last_updated: Can be used to periodically update a long running task to show"},{"line_number":57,"context_line":"   that it has not stalled."},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"Task objects will be created in the API method that handles the request, and"},{"line_number":60,"context_line":"will be sent to the appropriate compute.api methods along with the instance"}],"source_content_type":"text/x-rst","patch_set":8,"id":"1ae5cdf2_df2b8031","line":57,"in_reply_to":"1ae5cdf2_1cda7f17","updated":"2014-06-09 20:16:19.000000000","message":"If we want to maintain that consistency then I think we need to update the API to use uuid.  We can\u0027t, and shouldn\u0027t even if we could, use id internally because that\u0027s the autoincrement field in the database.  We use uuid internally for all other objects, except perhaps flavor, so using uuid is more consistent.","commit_id":"47cfa5a7ef0d27d528e4ec962828e121d6e14cd4"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"ecf69158d08e98e24b7e7cd6982d4d39f4943cab","unresolved":false,"context_lines":[{"line_number":120,"context_line":"            \u0027id\u0027: { \u0027type\u0027: \u0027string\u0027, \u0027format\u0027: \u0027uuid\u0027 },"},{"line_number":121,"context_line":"            \u0027task\u0027: { \u0027type\u0027: \u0027string\u0027 },"},{"line_number":122,"context_line":"            \u0027state\u0027: { \u0027type\u0027: \u0027string\u0027 },"},{"line_number":123,"context_line":"            \u0027server_id\u0027: {\u0027type\u0027: \u0027string\u0027 },"},{"line_number":124,"context_line":"            \u0027request_id\u0027: { \u0027type\u0027: \u0027string\u0027 },"},{"line_number":125,"context_line":"            \u0027user_id\u0027: { \u0027type\u0027: \u0027string\u0027 },"},{"line_number":126,"context_line":"            \u0027project_id\u0027: { \u0027type\u0027: \u0027string\u0027 },"}],"source_content_type":"text/x-rst","patch_set":8,"id":"1ae5cdf2_a0515910","line":123,"updated":"2014-06-08 15:07:25.000000000","message":"When review precache-image propose https://review.openstack.org/#/c/85792/14, I feel this may can use task in the future. If this is a case for task, I think it hard to reference to a server.","commit_id":"47cfa5a7ef0d27d528e4ec962828e121d6e14cd4"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"302145b4eea9dda6e9ed9473bcf47783eddc90b5","unresolved":false,"context_lines":[{"line_number":125,"context_line":"            \u0027user_id\u0027: { \u0027type\u0027: \u0027string\u0027 },"},{"line_number":126,"context_line":"            \u0027project_id\u0027: { \u0027type\u0027: \u0027string\u0027 },"},{"line_number":127,"context_line":"            \u0027start_time\u0027: { \u0027type\u0027: \u0027string\u0027, \u0027format\u0027: \u0027date-time\u0027 },"},{"line_number":128,"context_line":"            \u0027last_updated\u0027: { \u0027type\u0027: \u0027string\u0027, \u0027format\u0027: \u0027date-time\u0027 }"},{"line_number":129,"context_line":"        }"},{"line_number":130,"context_line":"        \u0027additionalProperties\u0027: True"},{"line_number":131,"context_line":"    }"}],"source_content_type":"text/x-rst","patch_set":8,"id":"1ae5cdf2_5cdc0719","line":128,"updated":"2014-06-07 10:34:25.000000000","message":"I saw all the nova db models that with time stamp will inherit from https://github.com/openstack/nova/blob/master/nova/openstack/common/db/sqlalchemy/models.py#L102\n\nshould we change \u0027start_time\u0027 and \u0027last_updated\u0027 to \u0027created_at\u0027 and \u0027updated_at\u0027","commit_id":"47cfa5a7ef0d27d528e4ec962828e121d6e14cd4"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"5c27efd25bd59740fe78f53836502097e1740661","unresolved":false,"context_lines":[{"line_number":125,"context_line":"            \u0027user_id\u0027: { \u0027type\u0027: \u0027string\u0027 },"},{"line_number":126,"context_line":"            \u0027project_id\u0027: { \u0027type\u0027: \u0027string\u0027 },"},{"line_number":127,"context_line":"            \u0027start_time\u0027: { \u0027type\u0027: \u0027string\u0027, \u0027format\u0027: \u0027date-time\u0027 },"},{"line_number":128,"context_line":"            \u0027last_updated\u0027: { \u0027type\u0027: \u0027string\u0027, \u0027format\u0027: \u0027date-time\u0027 }"},{"line_number":129,"context_line":"        }"},{"line_number":130,"context_line":"        \u0027additionalProperties\u0027: True"},{"line_number":131,"context_line":"    }"}],"source_content_type":"text/x-rst","patch_set":8,"id":"1ae5cdf2_e696a6ef","line":128,"in_reply_to":"1ae5cdf2_5cdc0719","updated":"2014-06-11 14:17:53.000000000","message":"Perhaps I shouldn\u0027t think of it this way, but I consider id, created_at, updated_at, deleted, deleted_at as metadata for a model.  Which means I don\u0027t think they should be used as components of the model.  start_time and last_updated may duplicate created_at and updated_at but I want to have explicit control over those fields and I don\u0027t think created_at/updated_at should be modified explicitly.","commit_id":"47cfa5a7ef0d27d528e4ec962828e121d6e14cd4"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"12e3bb99402e3937fe2a6976bc24bd5595fbd23d","unresolved":false,"context_lines":[{"line_number":125,"context_line":"            \u0027user_id\u0027: { \u0027type\u0027: \u0027string\u0027 },"},{"line_number":126,"context_line":"            \u0027project_id\u0027: { \u0027type\u0027: \u0027string\u0027 },"},{"line_number":127,"context_line":"            \u0027start_time\u0027: { \u0027type\u0027: \u0027string\u0027, \u0027format\u0027: \u0027date-time\u0027 },"},{"line_number":128,"context_line":"            \u0027last_updated\u0027: { \u0027type\u0027: \u0027string\u0027, \u0027format\u0027: \u0027date-time\u0027 }"},{"line_number":129,"context_line":"        }"},{"line_number":130,"context_line":"        \u0027additionalProperties\u0027: True"},{"line_number":131,"context_line":"    }"}],"source_content_type":"text/x-rst","patch_set":8,"id":"1ae5cdf2_ac171d44","line":128,"in_reply_to":"1ae5cdf2_e696a6ef","updated":"2014-06-12 18:57:15.000000000","message":"Thinking a bit more, I think I\u0027d like to remove start_time and just use created_at but leave last_updated.","commit_id":"47cfa5a7ef0d27d528e4ec962828e121d6e14cd4"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"5bd60ba331acb69e17057ee2ca4cc3656af47e63","unresolved":false,"context_lines":[{"line_number":128,"context_line":"            \u0027last_updated\u0027: { \u0027type\u0027: \u0027string\u0027, \u0027format\u0027: \u0027date-time\u0027 }"},{"line_number":129,"context_line":"        }"},{"line_number":130,"context_line":"        \u0027additionalProperties\u0027: True"},{"line_number":131,"context_line":"    }"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"additionalProperties is True because there may be times that it makes sense to"},{"line_number":134,"context_line":"return a copy of the resource as well and there may be other additions over"}],"source_content_type":"text/x-rst","patch_set":8,"id":"1ae5cdf2_6de773ac","line":131,"updated":"2014-06-06 08:33:29.000000000","message":"When getting task info from http://\u003chost\u003e/v3/tasks, the above response seems nice for me.\n\nand I\u0027d like to know how to add task_id into a response when creating a server or acting on a server.\nHow about adding task_id(s) only into a response?\n\nResponse of creating a server\n {\n    \"server\": {\n        \"admin_password\": \"6NpUwoz2QDRN\",\n        \"id\": \"f5dc173b-6804-445a-a6d8-c705dad5b5eb\",\n        \"links\": [..],\n        \"tasks\": [\u003ctask-id01\u003e, \u003ctask-id02\u003e, ...]\n    }\n }\n\nThe change of a response would be small and it can cover multiple server creations.","commit_id":"47cfa5a7ef0d27d528e4ec962828e121d6e14cd4"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"12e3bb99402e3937fe2a6976bc24bd5595fbd23d","unresolved":false,"context_lines":[{"line_number":128,"context_line":"            \u0027last_updated\u0027: { \u0027type\u0027: \u0027string\u0027, \u0027format\u0027: \u0027date-time\u0027 }"},{"line_number":129,"context_line":"        }"},{"line_number":130,"context_line":"        \u0027additionalProperties\u0027: True"},{"line_number":131,"context_line":"    }"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"additionalProperties is True because there may be times that it makes sense to"},{"line_number":134,"context_line":"return a copy of the resource as well and there may be other additions over"}],"source_content_type":"text/x-rst","patch_set":8,"id":"1ae5cdf2_b129369d","line":131,"in_reply_to":"1ae5cdf2_6de773ac","updated":"2014-06-12 18:57:15.000000000","message":"Based on Christophers reply below, and my own inclinations, I think things are leaning in the opposite direction.  A server create would return a task which would have a server within it, or just the server id as shown above.","commit_id":"47cfa5a7ef0d27d528e4ec962828e121d6e14cd4"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"5acef8f52829f4dc31f544e93bc9ba438f2af56f","unresolved":false,"context_lines":[{"line_number":128,"context_line":"            \u0027last_updated\u0027: { \u0027type\u0027: \u0027string\u0027, \u0027format\u0027: \u0027date-time\u0027 }"},{"line_number":129,"context_line":"        }"},{"line_number":130,"context_line":"        \u0027additionalProperties\u0027: True"},{"line_number":131,"context_line":"    }"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"additionalProperties is True because there may be times that it makes sense to"},{"line_number":134,"context_line":"return a copy of the resource as well and there may be other additions over"}],"source_content_type":"text/x-rst","patch_set":8,"id":"1ae5cdf2_475194d7","line":131,"in_reply_to":"1ae5cdf2_6de773ac","updated":"2014-06-07 13:29:20.000000000","message":"Sorry, the last line of my previous comment was wrong. The above \"tasks\" parameter cannot cover multiple server creations, because \"server\" shows one server and \"tasks\" is included in it.","commit_id":"47cfa5a7ef0d27d528e4ec962828e121d6e14cd4"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"701e93b156e0570cac90a16adebd5c4e66924389","unresolved":false,"context_lines":[{"line_number":139,"context_line":"task will track each server.  The response for this case will be influenced by"},{"line_number":140,"context_line":"this spec and the spec linked below[1].  It will either end up being a list of"},{"line_number":141,"context_line":"tasks with each server contained within the task, or a list of servers with the"},{"line_number":142,"context_line":"tasks contained within."},{"line_number":143,"context_line":""},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"Additionally there will be two new URLs for requesting task data.  The details"}],"source_content_type":"text/x-rst","patch_set":8,"id":"1ae5cdf2_82b3ae08","line":142,"updated":"2014-06-06 07:45:54.000000000","message":"I think I\u0027d prefer that we keep the concept of tasks as sort of first class objects. So that would mean a list of tasks with then task specific information (in this case servers) contained within.\n\nWhile we\u0027re doing all this rework of create server though I think we need to support 207 multistatus properly. Because it is certainly possible that some of the server creation requests will return 202, whilst others already know by this point that they have failed. The os-server-external-events plugin is an example of how to do this.\n\nWhich brings up another question - what is the expected lifetime of a task. Do they last forever even after say an instance is deleted? Or do they disappear after the operation is complete?","commit_id":"47cfa5a7ef0d27d528e4ec962828e121d6e14cd4"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"2eeed9831e28165487778c0718c31ce1ab7a8637","unresolved":false,"context_lines":[{"line_number":139,"context_line":"task will track each server.  The response for this case will be influenced by"},{"line_number":140,"context_line":"this spec and the spec linked below[1].  It will either end up being a list of"},{"line_number":141,"context_line":"tasks with each server contained within the task, or a list of servers with the"},{"line_number":142,"context_line":"tasks contained within."},{"line_number":143,"context_line":""},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"Additionally there will be two new URLs for requesting task data.  The details"}],"source_content_type":"text/x-rst","patch_set":8,"id":"1ae5cdf2_3fd624c6","line":142,"in_reply_to":"1ae5cdf2_3c72db49","updated":"2014-06-09 20:16:19.000000000","message":"I\u0027m expecting tasks to have the same lifetime as the object they\u0027re attached to, meaning server in most if not all cases.  Some future work could go into pruning tasks if that\u0027s desired but I think it\u0027s useful to retain the history of work on a server.\n\nI see tasks as inheriting the same behavior as other data attached to servers, like metadata.  So when the server is deleted the task will be soft deleted and any pruning of data should treat the task the same as everything else.","commit_id":"47cfa5a7ef0d27d528e4ec962828e121d6e14cd4"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"719542acb125f1d42243f058dfdd0ae48d2f6850","unresolved":false,"context_lines":[{"line_number":139,"context_line":"task will track each server.  The response for this case will be influenced by"},{"line_number":140,"context_line":"this spec and the spec linked below[1].  It will either end up being a list of"},{"line_number":141,"context_line":"tasks with each server contained within the task, or a list of servers with the"},{"line_number":142,"context_line":"tasks contained within."},{"line_number":143,"context_line":""},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"Additionally there will be two new URLs for requesting task data.  The details"}],"source_content_type":"text/x-rst","patch_set":8,"id":"1ae5cdf2_f667864f","line":142,"in_reply_to":"1ae5cdf2_82b3ae08","updated":"2014-06-09 19:58:38.000000000","message":"-1. There are not any tasks in the compute API that are not directly related to a server. Having tasks be a top-level API resource, as opposed to a subresource of the server that the task is associated with, breaks the strict relationship that a task is specific to a server.","commit_id":"47cfa5a7ef0d27d528e4ec962828e121d6e14cd4"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"f21862465d40fe4c5733f1b134d5b1ef2017d8a8","unresolved":false,"context_lines":[{"line_number":139,"context_line":"task will track each server.  The response for this case will be influenced by"},{"line_number":140,"context_line":"this spec and the spec linked below[1].  It will either end up being a list of"},{"line_number":141,"context_line":"tasks with each server contained within the task, or a list of servers with the"},{"line_number":142,"context_line":"tasks contained within."},{"line_number":143,"context_line":""},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"Additionally there will be two new URLs for requesting task data.  The details"}],"source_content_type":"text/x-rst","patch_set":8,"id":"1ae5cdf2_3c72db49","line":142,"in_reply_to":"1ae5cdf2_82b3ae08","updated":"2014-06-07 10:32:49.000000000","message":"Same question. Or tasks will be deleted after server deleted?","commit_id":"47cfa5a7ef0d27d528e4ec962828e121d6e14cd4"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"701e93b156e0570cac90a16adebd5c4e66924389","unresolved":false,"context_lines":[{"line_number":145,"context_line":"Additionally there will be two new URLs for requesting task data.  The details"},{"line_number":146,"context_line":"of the v3 API are slightly unclear at this point, but building on what\u0027s in"},{"line_number":147,"context_line":"place at this moment the new URLs would be"},{"line_number":148,"context_line":"http://\u003chost\u003e/v3/servers/\u003cserver-uuid\u003e/tasks and http://\u003chost\u003e/v3/tasks."},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"The tasks URL under servers will allow listing tasks for a server with a GET on"},{"line_number":151,"context_line":"that URL, or getting details of a particular task with a GET on"}],"source_content_type":"text/x-rst","patch_set":8,"id":"1ae5cdf2_ffda4e76","line":148,"updated":"2014-06-06 07:45:54.000000000","message":"So the first url seems a little bit redundant to me. If we are going to support filtering on /v3/tasks, then why not just support a server_uuid filter\n\neg http://\u003chost\u003e/v3/tasks?server_uuid\u003d\u003cserver_uuid\u003e\n\nI think it would probably cut down a bit on duplicated code?","commit_id":"47cfa5a7ef0d27d528e4ec962828e121d6e14cd4"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"2eeed9831e28165487778c0718c31ce1ab7a8637","unresolved":false,"context_lines":[{"line_number":145,"context_line":"Additionally there will be two new URLs for requesting task data.  The details"},{"line_number":146,"context_line":"of the v3 API are slightly unclear at this point, but building on what\u0027s in"},{"line_number":147,"context_line":"place at this moment the new URLs would be"},{"line_number":148,"context_line":"http://\u003chost\u003e/v3/servers/\u003cserver-uuid\u003e/tasks and http://\u003chost\u003e/v3/tasks."},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"The tasks URL under servers will allow listing tasks for a server with a GET on"},{"line_number":151,"context_line":"that URL, or getting details of a particular task with a GET on"}],"source_content_type":"text/x-rst","patch_set":8,"id":"1ae5cdf2_d9947b46","line":148,"in_reply_to":"1ae5cdf2_76637641","updated":"2014-06-09 20:16:19.000000000","message":"The history behind the two URLs is that at the mid cycle meetup someone mentioned wanting to query for all tasks in a certain state, or all tasks with a certain request_id which is useful for multiple server create.  Having the top level queryable resource is very useful, but perhaps it would have been better to leave it off for now.  It\u0027s really not much code duplication though, or additional work so I\u0027d like to leave it.\n\nI think the API can be perfectly functional without including tasks under servers, but it does seem a bit odd to me that a POST on /servers/\u003cuuid\u003e/action wouldn\u0027t result in a resource under /servers/.","commit_id":"47cfa5a7ef0d27d528e4ec962828e121d6e14cd4"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"f7b39ad4f88c40be5f35a9277f98bcf57529b2c7","unresolved":false,"context_lines":[{"line_number":145,"context_line":"Additionally there will be two new URLs for requesting task data.  The details"},{"line_number":146,"context_line":"of the v3 API are slightly unclear at this point, but building on what\u0027s in"},{"line_number":147,"context_line":"place at this moment the new URLs would be"},{"line_number":148,"context_line":"http://\u003chost\u003e/v3/servers/\u003cserver-uuid\u003e/tasks and http://\u003chost\u003e/v3/tasks."},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"The tasks URL under servers will allow listing tasks for a server with a GET on"},{"line_number":151,"context_line":"that URL, or getting details of a particular task with a GET on"}],"source_content_type":"text/x-rst","patch_set":8,"id":"1ae5cdf2_cda7e209","line":148,"in_reply_to":"1ae5cdf2_d9947b46","updated":"2014-06-12 13:24:44.000000000","message":"if tasks are really always attached to a server (or set of servers) then perhaps we don\u0027t need the top level /tasks resource and can just hang it of /servers/ as /servers/tasks \n\nIf there is the possibility in the future that some tasks will not be attached to a server (and with the amount of the proxying that we do I suspect it is, then I\u0027m happy to go with just /tasks","commit_id":"47cfa5a7ef0d27d528e4ec962828e121d6e14cd4"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"719542acb125f1d42243f058dfdd0ae48d2f6850","unresolved":false,"context_lines":[{"line_number":145,"context_line":"Additionally there will be two new URLs for requesting task data.  The details"},{"line_number":146,"context_line":"of the v3 API are slightly unclear at this point, but building on what\u0027s in"},{"line_number":147,"context_line":"place at this moment the new URLs would be"},{"line_number":148,"context_line":"http://\u003chost\u003e/v3/servers/\u003cserver-uuid\u003e/tasks and http://\u003chost\u003e/v3/tasks."},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"The tasks URL under servers will allow listing tasks for a server with a GET on"},{"line_number":151,"context_line":"that URL, or getting details of a particular task with a GET on"}],"source_content_type":"text/x-rst","patch_set":8,"id":"1ae5cdf2_76637641","line":148,"in_reply_to":"1ae5cdf2_ffda4e76","updated":"2014-06-09 19:58:38.000000000","message":"Because it\u0027s not about filtering on server_uuid. It\u0027s about indicating that tasks are a collection of resources in the server, not a top-level resource.","commit_id":"47cfa5a7ef0d27d528e4ec962828e121d6e14cd4"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"5bd60ba331acb69e17057ee2ca4cc3656af47e63","unresolved":false,"context_lines":[{"line_number":145,"context_line":"Additionally there will be two new URLs for requesting task data.  The details"},{"line_number":146,"context_line":"of the v3 API are slightly unclear at this point, but building on what\u0027s in"},{"line_number":147,"context_line":"place at this moment the new URLs would be"},{"line_number":148,"context_line":"http://\u003chost\u003e/v3/servers/\u003cserver-uuid\u003e/tasks and http://\u003chost\u003e/v3/tasks."},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"The tasks URL under servers will allow listing tasks for a server with a GET on"},{"line_number":151,"context_line":"that URL, or getting details of a particular task with a GET on"}],"source_content_type":"text/x-rst","patch_set":8,"id":"1ae5cdf2_8d283f34","line":148,"in_reply_to":"1ae5cdf2_ffda4e76","updated":"2014-06-06 08:33:29.000000000","message":"This idea seems nice, we can do it only by adding server_uuid into line157 as a filter.","commit_id":"47cfa5a7ef0d27d528e4ec962828e121d6e14cd4"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"f21862465d40fe4c5733f1b134d5b1ef2017d8a8","unresolved":false,"context_lines":[{"line_number":154,"context_line":"The http://\u003chost\u003e/v3/tasks URL will allow listing all tasks within a"},{"line_number":155,"context_line":"project_id, or all tasks as an admin, and then filtering by various criteria."},{"line_number":156,"context_line":"The initial plan is to include filtering by task, state, request_id, and"},{"line_number":157,"context_line":"project_id(admin only)."},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"Security impact"},{"line_number":160,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":8,"id":"1ae5cdf2_fc779339","line":157,"updated":"2014-06-07 10:32:49.000000000","message":"list servers support all_tenants filter. In default, the admin only can get all servers in all tenants with all_tenants filter. Should we follow this?","commit_id":"47cfa5a7ef0d27d528e4ec962828e121d6e14cd4"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"12e3bb99402e3937fe2a6976bc24bd5595fbd23d","unresolved":false,"context_lines":[{"line_number":154,"context_line":"The http://\u003chost\u003e/v3/tasks URL will allow listing all tasks within a"},{"line_number":155,"context_line":"project_id, or all tasks as an admin, and then filtering by various criteria."},{"line_number":156,"context_line":"The initial plan is to include filtering by task, state, request_id, and"},{"line_number":157,"context_line":"project_id(admin only)."},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"Security impact"},{"line_number":160,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":8,"id":"1ae5cdf2_ec365702","line":157,"in_reply_to":"1ae5cdf2_4d459241","updated":"2014-06-12 18:57:15.000000000","message":"Woops, yeah.  None is better.","commit_id":"47cfa5a7ef0d27d528e4ec962828e121d6e14cd4"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"f7b39ad4f88c40be5f35a9277f98bcf57529b2c7","unresolved":false,"context_lines":[{"line_number":154,"context_line":"The http://\u003chost\u003e/v3/tasks URL will allow listing all tasks within a"},{"line_number":155,"context_line":"project_id, or all tasks as an admin, and then filtering by various criteria."},{"line_number":156,"context_line":"The initial plan is to include filtering by task, state, request_id, and"},{"line_number":157,"context_line":"project_id(admin only)."},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"Security impact"},{"line_number":160,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":8,"id":"1ae5cdf2_6d75ee96","line":157,"in_reply_to":"1ae5cdf2_c67b6abc","updated":"2014-06-12 13:24:44.000000000","message":"agreed about this.","commit_id":"47cfa5a7ef0d27d528e4ec962828e121d6e14cd4"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"5c27efd25bd59740fe78f53836502097e1740661","unresolved":false,"context_lines":[{"line_number":154,"context_line":"The http://\u003chost\u003e/v3/tasks URL will allow listing all tasks within a"},{"line_number":155,"context_line":"project_id, or all tasks as an admin, and then filtering by various criteria."},{"line_number":156,"context_line":"The initial plan is to include filtering by task, state, request_id, and"},{"line_number":157,"context_line":"project_id(admin only)."},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"Security impact"},{"line_number":160,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":8,"id":"1ae5cdf2_c67b6abc","line":157,"in_reply_to":"1ae5cdf2_cb673350","updated":"2014-06-11 14:17:53.000000000","message":"This is another area where I think the current method should be improved.  I think filtering based on project_id is more clear than passing an all_tenants flag so I would rather see other API calls move in this direction.","commit_id":"47cfa5a7ef0d27d528e4ec962828e121d6e14cd4"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"f7b39ad4f88c40be5f35a9277f98bcf57529b2c7","unresolved":false,"context_lines":[{"line_number":154,"context_line":"The http://\u003chost\u003e/v3/tasks URL will allow listing all tasks within a"},{"line_number":155,"context_line":"project_id, or all tasks as an admin, and then filtering by various criteria."},{"line_number":156,"context_line":"The initial plan is to include filtering by task, state, request_id, and"},{"line_number":157,"context_line":"project_id(admin only)."},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"Security impact"},{"line_number":160,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":8,"id":"1ae5cdf2_4d459241","line":157,"in_reply_to":"1ae5cdf2_dfbb8073","updated":"2014-06-12 13:24:44.000000000","message":"just a nit really but project_id\u003dfalse seems a bit awkward to me. Maybe project_id\u003dNone ?","commit_id":"47cfa5a7ef0d27d528e4ec962828e121d6e14cd4"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"d7112ac32c3f8d8ed40be4b899de29dac728aec4","unresolved":false,"context_lines":[{"line_number":154,"context_line":"The http://\u003chost\u003e/v3/tasks URL will allow listing all tasks within a"},{"line_number":155,"context_line":"project_id, or all tasks as an admin, and then filtering by various criteria."},{"line_number":156,"context_line":"The initial plan is to include filtering by task, state, request_id, and"},{"line_number":157,"context_line":"project_id(admin only)."},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"Security impact"},{"line_number":160,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":8,"id":"1ae5cdf2_cb673350","line":157,"in_reply_to":"1ae5cdf2_dfbb8073","updated":"2014-06-10 06:12:59.000000000","message":"yea, actually I suggestion API consistent. servers use all_tenant to list all tenants servers. So we can use all_tenant as filter at here also. we needn\u0027t introduce another way to list all tenants stuff.","commit_id":"47cfa5a7ef0d27d528e4ec962828e121d6e14cd4"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"2eeed9831e28165487778c0718c31ce1ab7a8637","unresolved":false,"context_lines":[{"line_number":154,"context_line":"The http://\u003chost\u003e/v3/tasks URL will allow listing all tasks within a"},{"line_number":155,"context_line":"project_id, or all tasks as an admin, and then filtering by various criteria."},{"line_number":156,"context_line":"The initial plan is to include filtering by task, state, request_id, and"},{"line_number":157,"context_line":"project_id(admin only)."},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"Security impact"},{"line_number":160,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":8,"id":"1ae5cdf2_dfbb8073","line":157,"in_reply_to":"1ae5cdf2_fc779339","updated":"2014-06-09 20:16:19.000000000","message":"I\u0027m proposing a similar thing.  By default tasks will be filtered by project_id, even if it\u0027s an admin, but if project_id\u003dfalse is passed in the query then it will get all tasks.","commit_id":"47cfa5a7ef0d27d528e4ec962828e121d6e14cd4"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"e261af0622511d7ca48aed0af53de231cb2e2b30","unresolved":false,"context_lines":[{"line_number":134,"context_line":"It\u0027s worth mentioning the multiple server create case specifically.  When a"},{"line_number":135,"context_line":"user requests multiple servers to be created with a single request a separate"},{"line_number":136,"context_line":"task will track each server.  The response for this case will be a list of"},{"line_number":137,"context_line":"tasks with the server, or just server_id, within each one."},{"line_number":138,"context_line":""},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"Additionally there will be two new URLs for requesting task data.  The details"}],"source_content_type":"text/x-rst","patch_set":9,"id":"1ae5cdf2_4d14b2e8","line":137,"updated":"2014-06-12 13:34:47.000000000","message":"I\u0027m not sure if it got accidentally missed but I think we should support 207 multistatus for this from the start (which is consistent with what you\u0027re specifying here just the output format is slightly different is some server creations fail early)","commit_id":"a931ac85f4c79b6162fdcb204ca020baf6567c20"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"3037701c2f5584e716d3e40d6cf1560ad6167c15","unresolved":false,"context_lines":[{"line_number":134,"context_line":"It\u0027s worth mentioning the multiple server create case specifically.  When a"},{"line_number":135,"context_line":"user requests multiple servers to be created with a single request a separate"},{"line_number":136,"context_line":"task will track each server.  The response for this case will be a list of"},{"line_number":137,"context_line":"tasks with the server, or just server_id, within each one."},{"line_number":138,"context_line":""},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"Additionally there will be two new URLs for requesting task data.  The details"}],"source_content_type":"text/x-rst","patch_set":9,"id":"1ae5cdf2_ecc1f7e4","line":137,"in_reply_to":"1ae5cdf2_4d14b2e8","updated":"2014-06-12 18:57:22.000000000","message":"I didn\u0027t think to include it in the spec but I definitely intend on supporting the 207 multistatus responses.  I\u0027ll update this to add it in.","commit_id":"a931ac85f4c79b6162fdcb204ca020baf6567c20"},{"author":{"_account_id":10070,"name":"LiangChen","email":"hs.chen@huawei.com","username":"LiangChen"},"change_message_id":"75b282d31e87127146971a7fbcfaea1dbe9949e1","unresolved":false,"context_lines":[{"line_number":156,"context_line":"is deleted at which point the associated tasks will be deleted.  And any db"},{"line_number":157,"context_line":"pruning should handle tasks the same as other data, like metadata, attached to"},{"line_number":158,"context_line":"a server."},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"Security impact"},{"line_number":161,"context_line":"---------------"},{"line_number":162,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"1ae5cdf2_6b5b9b2e","line":159,"updated":"2014-06-17 02:42:39.000000000","message":"I\u0027m interested in the feature and need it, Is there a mechanism to report task info?","commit_id":"a931ac85f4c79b6162fdcb204ca020baf6567c20"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"ff1cb1e0573232df5b1be256bd90ba14fc8629f7","unresolved":false,"context_lines":[{"line_number":156,"context_line":"is deleted at which point the associated tasks will be deleted.  And any db"},{"line_number":157,"context_line":"pruning should handle tasks the same as other data, like metadata, attached to"},{"line_number":158,"context_line":"a server."},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"Security impact"},{"line_number":161,"context_line":"---------------"},{"line_number":162,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"1ae5cdf2_3dd0f4c8","line":159,"in_reply_to":"1ae5cdf2_6b5b9b2e","updated":"2014-06-17 05:34:41.000000000","message":"@LiangChen\t\n\nIIUC, \"create a server\" API(or the other action APIs) will return task-id in the response body and we will be able to get task info(line 116) from the URL of line 143.","commit_id":"a931ac85f4c79b6162fdcb204ca020baf6567c20"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"97542252539cdb629bf6c3205b69fd0ed0c6cdf2","unresolved":false,"context_lines":[{"line_number":45,"context_line":"The task model will initially be made up of the following components:"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":" * uuid:"},{"line_number":48,"context_line":" * task: The name of the task i.e. rebooting, rescue, rebuild, pause, etc..."},{"line_number":49,"context_line":" * state: \u0027active\u0027, \u0027error\u0027, \u0027complete\u0027, \u0027timedout\u0027, \u0027aborted\u0027 is a"},{"line_number":50,"context_line":"   non-exhaustive list of examples."},{"line_number":51,"context_line":" * server_id: uuid of the instance related to the task."}],"source_content_type":"text/x-rst","patch_set":10,"id":"1ae5cdf2_22f51151","line":48,"updated":"2014-06-25 06:06:07.000000000","message":"When creating a server, what is this task name?\n\nI guess multiple tasks are created and they like:\n\n parent\u0027s task: \"create a server\"\n    child\u0027s task: \"networking\"\n    child\u0027s task: \"downloading image\"\n ...","commit_id":"0a5de5d11167918705bb61b4bce169f355878117"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"1a8abf19393ac59c2573545557fd14afc9cd8236","unresolved":false,"context_lines":[{"line_number":45,"context_line":"The task model will initially be made up of the following components:"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":" * uuid:"},{"line_number":48,"context_line":" * task: The name of the task i.e. rebooting, rescue, rebuild, pause, etc..."},{"line_number":49,"context_line":" * state: \u0027active\u0027, \u0027error\u0027, \u0027complete\u0027, \u0027timedout\u0027, \u0027aborted\u0027 is a"},{"line_number":50,"context_line":"   non-exhaustive list of examples."},{"line_number":51,"context_line":" * server_id: uuid of the instance related to the task."}],"source_content_type":"text/x-rst","patch_set":10,"id":"1ae5cdf2_ea104ead","line":48,"in_reply_to":"1ae5cdf2_22f51151","updated":"2014-06-25 14:49:10.000000000","message":"My plan was to use the states defined in compute/tasks_states.py as names.","commit_id":"0a5de5d11167918705bb61b4bce169f355878117"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"b583b222f01d6af58e0d6aea9d2c470c8e8e5cd7","unresolved":false,"context_lines":[{"line_number":45,"context_line":"The task model will initially be made up of the following components:"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":" * uuid:"},{"line_number":48,"context_line":" * task: The name of the task i.e. rebooting, rescue, rebuild, pause, etc..."},{"line_number":49,"context_line":" * state: \u0027active\u0027, \u0027error\u0027, \u0027complete\u0027, \u0027timedout\u0027, \u0027aborted\u0027 is a"},{"line_number":50,"context_line":"   non-exhaustive list of examples."},{"line_number":51,"context_line":" * server_id: uuid of the instance related to the task."}],"source_content_type":"text/x-rst","patch_set":10,"id":"1ae5cdf2_9fdc531a","line":48,"in_reply_to":"1ae5cdf2_ea104ead","updated":"2014-06-26 00:07:13.000000000","message":"nice, I agree with  your plan.","commit_id":"0a5de5d11167918705bb61b4bce169f355878117"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"ff80a557a0bfef1aae680da1271275714d75ecde","unresolved":false,"context_lines":[{"line_number":48,"context_line":" * task: The name of the task i.e. rebooting, rescue, rebuild, pause, etc..."},{"line_number":49,"context_line":" * state: \u0027active\u0027, \u0027error\u0027, \u0027complete\u0027, \u0027timedout\u0027, \u0027aborted\u0027 is a"},{"line_number":50,"context_line":"   non-exhaustive list of examples."},{"line_number":51,"context_line":" * server_id: uuid of the instance related to the task."},{"line_number":52,"context_line":" * request_id: context.request_id"},{"line_number":53,"context_line":" * started_by_user: context.user_id"},{"line_number":54,"context_line":" * project_id: context.project_id"}],"source_content_type":"text/x-rst","patch_set":10,"id":"1ae5cdf2_8b7a7923","line":51,"updated":"2014-06-25 10:49:02.000000000","message":"Hmm, I would love to use this for host actions, etc.\n\nCould we have resource_uuid and resource_type here?","commit_id":"0a5de5d11167918705bb61b4bce169f355878117"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"660311f9669edd675f207caac01fb6abe7587225","unresolved":false,"context_lines":[{"line_number":48,"context_line":" * task: The name of the task i.e. rebooting, rescue, rebuild, pause, etc..."},{"line_number":49,"context_line":" * state: \u0027active\u0027, \u0027error\u0027, \u0027complete\u0027, \u0027timedout\u0027, \u0027aborted\u0027 is a"},{"line_number":50,"context_line":"   non-exhaustive list of examples."},{"line_number":51,"context_line":" * server_id: uuid of the instance related to the task."},{"line_number":52,"context_line":" * request_id: context.request_id"},{"line_number":53,"context_line":" * started_by_user: context.user_id"},{"line_number":54,"context_line":" * project_id: context.project_id"}],"source_content_type":"text/x-rst","patch_set":10,"id":"1ae5cdf2_91f708d4","line":51,"in_reply_to":"1ae5cdf2_8b7a7923","updated":"2014-06-25 11:08:01.000000000","message":"resource_uuid and resource_type is a nice idea.\n\nWe will be able to use this feature for wide purposes.","commit_id":"0a5de5d11167918705bb61b4bce169f355878117"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"1a8abf19393ac59c2573545557fd14afc9cd8236","unresolved":false,"context_lines":[{"line_number":48,"context_line":" * task: The name of the task i.e. rebooting, rescue, rebuild, pause, etc..."},{"line_number":49,"context_line":" * state: \u0027active\u0027, \u0027error\u0027, \u0027complete\u0027, \u0027timedout\u0027, \u0027aborted\u0027 is a"},{"line_number":50,"context_line":"   non-exhaustive list of examples."},{"line_number":51,"context_line":" * server_id: uuid of the instance related to the task."},{"line_number":52,"context_line":" * request_id: context.request_id"},{"line_number":53,"context_line":" * started_by_user: context.user_id"},{"line_number":54,"context_line":" * project_id: context.project_id"}],"source_content_type":"text/x-rst","patch_set":10,"id":"1ae5cdf2_2ae6b6e8","line":51,"in_reply_to":"1ae5cdf2_91f708d4","updated":"2014-06-25 14:49:10.000000000","message":"This has gone back and forth a bit.  I\u0027ve gone with server_id for now because I haven\u0027t thought of an example of an action that would not involve a server.  What host action are you looking at that this would be helpful for.\n\nAfter a quick IRC discussion with John I\u0027m going to go with resource_uuid for now and the type issue can be solved later if non instance tasks come up.","commit_id":"0a5de5d11167918705bb61b4bce169f355878117"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"97542252539cdb629bf6c3205b69fd0ed0c6cdf2","unresolved":false,"context_lines":[{"line_number":54,"context_line":" * project_id: context.project_id"},{"line_number":55,"context_line":" * created_at: initialized by the database on creation"},{"line_number":56,"context_line":" * last_updated: Can be used to periodically update a long running task to show"},{"line_number":57,"context_line":"   that it has not stalled."},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"Task objects will be created in the API method that handles the request, and"},{"line_number":60,"context_line":"will be sent to the appropriate compute.api methods along with the instance"}],"source_content_type":"text/x-rst","patch_set":10,"id":"1ae5cdf2_228c31d7","line":57,"updated":"2014-06-25 06:06:07.000000000","message":"If sub-tasks are necessary for creating a server and sub-tasks also are represented with this object, \u0027parent\u0027 and \u0027child\u0027 also would be necessary I guess.","commit_id":"0a5de5d11167918705bb61b4bce169f355878117"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"ff80a557a0bfef1aae680da1271275714d75ecde","unresolved":false,"context_lines":[{"line_number":54,"context_line":" * project_id: context.project_id"},{"line_number":55,"context_line":" * created_at: initialized by the database on creation"},{"line_number":56,"context_line":" * last_updated: Can be used to periodically update a long running task to show"},{"line_number":57,"context_line":"   that it has not stalled."},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"Task objects will be created in the API method that handles the request, and"},{"line_number":60,"context_line":"will be sent to the appropriate compute.api methods along with the instance"}],"source_content_type":"text/x-rst","patch_set":10,"id":"1ae5cdf2_6b70cda4","line":57,"in_reply_to":"1ae5cdf2_228c31d7","updated":"2014-06-25 10:49:02.000000000","message":"I am -1 sub-tasks at this point, I feel we should get the basic tasks concept in here first\n\nWe can always add a parent field at a later date.\n\nSee the notes below.","commit_id":"0a5de5d11167918705bb61b4bce169f355878117"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"b583b222f01d6af58e0d6aea9d2c470c8e8e5cd7","unresolved":false,"context_lines":[{"line_number":54,"context_line":" * project_id: context.project_id"},{"line_number":55,"context_line":" * created_at: initialized by the database on creation"},{"line_number":56,"context_line":" * last_updated: Can be used to periodically update a long running task to show"},{"line_number":57,"context_line":"   that it has not stalled."},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"Task objects will be created in the API method that handles the request, and"},{"line_number":60,"context_line":"will be sent to the appropriate compute.api methods along with the instance"}],"source_content_type":"text/x-rst","patch_set":10,"id":"1ae5cdf2_bfe10fd2","line":57,"in_reply_to":"1ae5cdf2_2ab5d67d","updated":"2014-06-26 00:07:13.000000000","message":"yea, agree.","commit_id":"0a5de5d11167918705bb61b4bce169f355878117"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"660311f9669edd675f207caac01fb6abe7587225","unresolved":false,"context_lines":[{"line_number":54,"context_line":" * project_id: context.project_id"},{"line_number":55,"context_line":" * created_at: initialized by the database on creation"},{"line_number":56,"context_line":" * last_updated: Can be used to periodically update a long running task to show"},{"line_number":57,"context_line":"   that it has not stalled."},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"Task objects will be created in the API method that handles the request, and"},{"line_number":60,"context_line":"will be sent to the appropriate compute.api methods along with the instance"}],"source_content_type":"text/x-rst","patch_set":10,"id":"1ae5cdf2_f1c12c4f","line":57,"in_reply_to":"1ae5cdf2_6b70cda4","updated":"2014-06-25 11:08:01.000000000","message":"OK, let keep the scope small as the first step.","commit_id":"0a5de5d11167918705bb61b4bce169f355878117"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"1a8abf19393ac59c2573545557fd14afc9cd8236","unresolved":false,"context_lines":[{"line_number":54,"context_line":" * project_id: context.project_id"},{"line_number":55,"context_line":" * created_at: initialized by the database on creation"},{"line_number":56,"context_line":" * last_updated: Can be used to periodically update a long running task to show"},{"line_number":57,"context_line":"   that it has not stalled."},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"Task objects will be created in the API method that handles the request, and"},{"line_number":60,"context_line":"will be sent to the appropriate compute.api methods along with the instance"}],"source_content_type":"text/x-rst","patch_set":10,"id":"1ae5cdf2_2ab5d67d","line":57,"in_reply_to":"1ae5cdf2_f1c12c4f","updated":"2014-06-25 14:49:10.000000000","message":"Right.  I would like to add it later, since this is already a lot of work without it.","commit_id":"0a5de5d11167918705bb61b4bce169f355878117"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"a84d9b66bf1764e870e67886b8c1e7835be85f0f","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        \u0027type\u0027: \u0027object\u0027,"},{"line_number":119,"context_line":"        \u0027properties\u0027: {"},{"line_number":120,"context_line":"            \u0027id\u0027: { \u0027type\u0027: \u0027string\u0027, \u0027format\u0027: \u0027uuid\u0027 },"},{"line_number":121,"context_line":"            \u0027task\u0027: { \u0027type\u0027: \u0027string\u0027 },"},{"line_number":122,"context_line":"            \u0027state\u0027: { \u0027type\u0027: \u0027string\u0027 },"},{"line_number":123,"context_line":"            \u0027server_id\u0027: {\u0027type\u0027: \u0027string\u0027 },"},{"line_number":124,"context_line":"            \u0027request_id\u0027: { \u0027type\u0027: \u0027string\u0027 },"}],"source_content_type":"text/x-rst","patch_set":10,"id":"1ae5cdf2_7d241860","line":121,"updated":"2014-06-25 06:22:28.000000000","message":"I guess \"get task info\" API would return:\n\n {\n     \"task\": {\n         \"id\": \"70a599e0-31e7-49b7-b260-868f441e862b\",\n         \"server_id\": \"cee6d136-e378-4cfc-9eec-71797f025991\",\n         \"state\": \"active\",\n         [..]\n }\n\nand \"get a list of tasks\" API would return:\n\n {\n     \"tasks\": [\n         {\n             \"id\": \"70a599e0-31e7-49b7-b260-868f441e862b\",\n             \"server_id\": \"cee6d136-e378-4cfc-9eec-71797f025991\",\n             \"state\": \"active\",\n             [..],\n         },\n         {\n             \"id\": \"70a599e0-31e7-49b7-b260-868f441e862b\",\n             \"server_id\": \"cee6d136-e378-4cfc-9eec-71797f025991\",\n             \"state\": \"active\",\n             [..],\n         },\n [..]\n }\n\nlike server API. so the parameter \u0027task\u0027 is duplicated between top level and here. so how about renaming here to just \u0027name\u0027?","commit_id":"0a5de5d11167918705bb61b4bce169f355878117"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"1a8abf19393ac59c2573545557fd14afc9cd8236","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        \u0027type\u0027: \u0027object\u0027,"},{"line_number":119,"context_line":"        \u0027properties\u0027: {"},{"line_number":120,"context_line":"            \u0027id\u0027: { \u0027type\u0027: \u0027string\u0027, \u0027format\u0027: \u0027uuid\u0027 },"},{"line_number":121,"context_line":"            \u0027task\u0027: { \u0027type\u0027: \u0027string\u0027 },"},{"line_number":122,"context_line":"            \u0027state\u0027: { \u0027type\u0027: \u0027string\u0027 },"},{"line_number":123,"context_line":"            \u0027server_id\u0027: {\u0027type\u0027: \u0027string\u0027 },"},{"line_number":124,"context_line":"            \u0027request_id\u0027: { \u0027type\u0027: \u0027string\u0027 },"}],"source_content_type":"text/x-rst","patch_set":10,"id":"1ae5cdf2_05d56d1a","line":121,"in_reply_to":"1ae5cdf2_7d241860","updated":"2014-06-25 14:49:10.000000000","message":"\u0027name\u0027 works for me.","commit_id":"0a5de5d11167918705bb61b4bce169f355878117"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"a84d9b66bf1764e870e67886b8c1e7835be85f0f","unresolved":false,"context_lines":[{"line_number":122,"context_line":"            \u0027state\u0027: { \u0027type\u0027: \u0027string\u0027 },"},{"line_number":123,"context_line":"            \u0027server_id\u0027: {\u0027type\u0027: \u0027string\u0027 },"},{"line_number":124,"context_line":"            \u0027request_id\u0027: { \u0027type\u0027: \u0027string\u0027 },"},{"line_number":125,"context_line":"            \u0027started_by_user\u0027: { \u0027type\u0027: \u0027string\u0027 },"},{"line_number":126,"context_line":"            \u0027project_id\u0027: { \u0027type\u0027: \u0027string\u0027 },"},{"line_number":127,"context_line":"            \u0027created_at\u0027: { \u0027type\u0027: \u0027string\u0027 },"},{"line_number":128,"context_line":"            \u0027last_updated\u0027: { \u0027type\u0027: \u0027string\u0027, \u0027format\u0027: \u0027date-time\u0027 }"}],"source_content_type":"text/x-rst","patch_set":10,"id":"1ae5cdf2_7df17800","line":125,"updated":"2014-06-25 06:22:28.000000000","message":"The other APIs(such as \"show server info\") return the owner of resource as \u0027user_id\u0027. So how about renaming this to \u0027user_id\u0027 for the consistency?","commit_id":"0a5de5d11167918705bb61b4bce169f355878117"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"1a8abf19393ac59c2573545557fd14afc9cd8236","unresolved":false,"context_lines":[{"line_number":122,"context_line":"            \u0027state\u0027: { \u0027type\u0027: \u0027string\u0027 },"},{"line_number":123,"context_line":"            \u0027server_id\u0027: {\u0027type\u0027: \u0027string\u0027 },"},{"line_number":124,"context_line":"            \u0027request_id\u0027: { \u0027type\u0027: \u0027string\u0027 },"},{"line_number":125,"context_line":"            \u0027started_by_user\u0027: { \u0027type\u0027: \u0027string\u0027 },"},{"line_number":126,"context_line":"            \u0027project_id\u0027: { \u0027type\u0027: \u0027string\u0027 },"},{"line_number":127,"context_line":"            \u0027created_at\u0027: { \u0027type\u0027: \u0027string\u0027 },"},{"line_number":128,"context_line":"            \u0027last_updated\u0027: { \u0027type\u0027: \u0027string\u0027, \u0027format\u0027: \u0027date-time\u0027 }"}],"source_content_type":"text/x-rst","patch_set":10,"id":"1ae5cdf2_a50119b1","line":125,"in_reply_to":"1ae5cdf2_6be9adb6","updated":"2014-06-25 14:49:10.000000000","message":"Heh.  I had that originally but changed it based on feedback.  I think user_id is fine though.","commit_id":"0a5de5d11167918705bb61b4bce169f355878117"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"ff80a557a0bfef1aae680da1271275714d75ecde","unresolved":false,"context_lines":[{"line_number":122,"context_line":"            \u0027state\u0027: { \u0027type\u0027: \u0027string\u0027 },"},{"line_number":123,"context_line":"            \u0027server_id\u0027: {\u0027type\u0027: \u0027string\u0027 },"},{"line_number":124,"context_line":"            \u0027request_id\u0027: { \u0027type\u0027: \u0027string\u0027 },"},{"line_number":125,"context_line":"            \u0027started_by_user\u0027: { \u0027type\u0027: \u0027string\u0027 },"},{"line_number":126,"context_line":"            \u0027project_id\u0027: { \u0027type\u0027: \u0027string\u0027 },"},{"line_number":127,"context_line":"            \u0027created_at\u0027: { \u0027type\u0027: \u0027string\u0027 },"},{"line_number":128,"context_line":"            \u0027last_updated\u0027: { \u0027type\u0027: \u0027string\u0027, \u0027format\u0027: \u0027date-time\u0027 }"}],"source_content_type":"text/x-rst","patch_set":10,"id":"1ae5cdf2_6be9adb6","line":125,"in_reply_to":"1ae5cdf2_7df17800","updated":"2014-06-25 10:49:02.000000000","message":"+1 for user_id for consistency","commit_id":"0a5de5d11167918705bb61b4bce169f355878117"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"97542252539cdb629bf6c3205b69fd0ed0c6cdf2","unresolved":false,"context_lines":[{"line_number":136,"context_line":"It\u0027s worth mentioning the multiple server create case specifically.  When a"},{"line_number":137,"context_line":"user requests multiple servers to be created with a single request a separate"},{"line_number":138,"context_line":"task will track each server.  The response for this case will be a list of"},{"line_number":139,"context_line":"tasks with the server, or just server_id, within each one.  207 multistatus"},{"line_number":140,"context_line":"responses will be supported.  There is another proposal[1] open that gets into"},{"line_number":141,"context_line":"more specifics on the response format for multiple server create."},{"line_number":142,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"1ae5cdf2_6219d986","line":139,"updated":"2014-06-25 06:06:07.000000000","message":"Switching 202 and 207 would make client implementations a little difficult, and 202(Accepted) is not so bad for multiple creation also.\nso I prefer 202 for both single and multiple.","commit_id":"0a5de5d11167918705bb61b4bce169f355878117"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"1a8abf19393ac59c2573545557fd14afc9cd8236","unresolved":false,"context_lines":[{"line_number":136,"context_line":"It\u0027s worth mentioning the multiple server create case specifically.  When a"},{"line_number":137,"context_line":"user requests multiple servers to be created with a single request a separate"},{"line_number":138,"context_line":"task will track each server.  The response for this case will be a list of"},{"line_number":139,"context_line":"tasks with the server, or just server_id, within each one.  207 multistatus"},{"line_number":140,"context_line":"responses will be supported.  There is another proposal[1] open that gets into"},{"line_number":141,"context_line":"more specifics on the response format for multiple server create."},{"line_number":142,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"1ae5cdf2_05b80dc6","line":139,"in_reply_to":"1ae5cdf2_6219d986","updated":"2014-06-25 14:49:10.000000000","message":"It was my understanding that we were moving towards using 207 for multiple response cases.  But really the response in this case is going to rely on the implementation of https://review.openstack.org/#/c/91907/.  So I can leave out mentioning 207 explicitly.","commit_id":"0a5de5d11167918705bb61b4bce169f355878117"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"ff80a557a0bfef1aae680da1271275714d75ecde","unresolved":false,"context_lines":[{"line_number":138,"context_line":"task will track each server.  The response for this case will be a list of"},{"line_number":139,"context_line":"tasks with the server, or just server_id, within each one.  207 multistatus"},{"line_number":140,"context_line":"responses will be supported.  There is another proposal[1] open that gets into"},{"line_number":141,"context_line":"more specifics on the response format for multiple server create."},{"line_number":142,"context_line":""},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"Additionally there will be two new URLs for requesting task data.  The details"}],"source_content_type":"text/x-rst","patch_set":10,"id":"1ae5cdf2_863d102f","line":141,"updated":"2014-06-25 10:49:02.000000000","message":"Maybe lets ignore this for now.","commit_id":"0a5de5d11167918705bb61b4bce169f355878117"},{"author":{"_account_id":1849,"name":"Joe Gordon","email":"joe.gordon0@gmail.com","username":"jogo"},"change_message_id":"31830b7daa6858bce130725eff52265569e5f730","unresolved":false,"context_lines":[{"line_number":47,"context_line":" * uuid:"},{"line_number":48,"context_line":" * name: The name of the task i.e. rebooting, rescue, rebuild, pause, etc..."},{"line_number":49,"context_line":"         These will re-use the currently defined task states."},{"line_number":50,"context_line":" * state: \u0027active\u0027, \u0027error\u0027, \u0027complete\u0027, \u0027timedout\u0027, \u0027aborted\u0027 is a"},{"line_number":51,"context_line":"          non-exhaustive list of examples."},{"line_number":52,"context_line":" * resource_uuid: uuid of the instance in motion."},{"line_number":53,"context_line":" * request_id: context.request_id"}],"source_content_type":"text/x-rst","patch_set":11,"id":"baada198_d431660c","line":50,"updated":"2014-07-10 22:08:23.000000000","message":"my computer tells me timedout isn\u0027t a word","commit_id":"be5495a9f8093a65829fc16009a161d764c202f3"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"6732aa7dfb1155f6796b3a9afda8fbad877a2b79","unresolved":false,"context_lines":[{"line_number":47,"context_line":" * uuid:"},{"line_number":48,"context_line":" * name: The name of the task i.e. rebooting, rescue, rebuild, pause, etc..."},{"line_number":49,"context_line":"         These will re-use the currently defined task states."},{"line_number":50,"context_line":" * state: \u0027active\u0027, \u0027error\u0027, \u0027complete\u0027, \u0027timedout\u0027, \u0027aborted\u0027 is a"},{"line_number":51,"context_line":"          non-exhaustive list of examples."},{"line_number":52,"context_line":" * resource_uuid: uuid of the instance in motion."},{"line_number":53,"context_line":" * request_id: context.request_id"}],"source_content_type":"text/x-rst","patch_set":11,"id":"baada198_df1f2c6f","line":50,"in_reply_to":"baada198_845580fb","updated":"2014-07-15 19:18:44.000000000","message":"Thanks, I can use that.","commit_id":"be5495a9f8093a65829fc16009a161d764c202f3"},{"author":{"_account_id":8441,"name":"Tomoko Inoue","email":"inouetmko@gmail.com","username":"inoue-tomoko"},"change_message_id":"2536c422cb39867ce6eeda63f06daa5d89477cac","unresolved":false,"context_lines":[{"line_number":47,"context_line":" * uuid:"},{"line_number":48,"context_line":" * name: The name of the task i.e. rebooting, rescue, rebuild, pause, etc..."},{"line_number":49,"context_line":"         These will re-use the currently defined task states."},{"line_number":50,"context_line":" * state: \u0027active\u0027, \u0027error\u0027, \u0027complete\u0027, \u0027timedout\u0027, \u0027aborted\u0027 is a"},{"line_number":51,"context_line":"          non-exhaustive list of examples."},{"line_number":52,"context_line":" * resource_uuid: uuid of the instance in motion."},{"line_number":53,"context_line":" * request_id: context.request_id"}],"source_content_type":"text/x-rst","patch_set":11,"id":"baada198_845580fb","line":50,"in_reply_to":"baada198_cf328f0f","updated":"2014-07-15 11:22:50.000000000","message":"According to my dictionary, I feel like \u0027timeout\u0027 rather than \u0027timedout\u0027. But, it\u0027s up to you because I think it\u0027s clear what it means too.","commit_id":"be5495a9f8093a65829fc16009a161d764c202f3"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"e8cd00df3d36ad05d8213aee30c2cef88fc1ea3f","unresolved":false,"context_lines":[{"line_number":47,"context_line":" * uuid:"},{"line_number":48,"context_line":" * name: The name of the task i.e. rebooting, rescue, rebuild, pause, etc..."},{"line_number":49,"context_line":"         These will re-use the currently defined task states."},{"line_number":50,"context_line":" * state: \u0027active\u0027, \u0027error\u0027, \u0027complete\u0027, \u0027timedout\u0027, \u0027aborted\u0027 is a"},{"line_number":51,"context_line":"          non-exhaustive list of examples."},{"line_number":52,"context_line":" * resource_uuid: uuid of the instance in motion."},{"line_number":53,"context_line":" * request_id: context.request_id"}],"source_content_type":"text/x-rst","patch_set":11,"id":"baada198_cf328f0f","line":50,"in_reply_to":"baada198_d431660c","updated":"2014-07-11 17:46:23.000000000","message":"Do you have a suggestion for what to use?  Despite it not being in your dictionary I think it\u0027s clear what it means, but am open to suggestions.","commit_id":"be5495a9f8093a65829fc16009a161d764c202f3"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"dba75da5336405169b9b6f7bb14f4a36c9ea4307","unresolved":false,"context_lines":[{"line_number":102,"context_line":""},{"line_number":103,"context_line":"A new table will be added to store tasks.  The schema will be created such that"},{"line_number":104,"context_line":"it can store the tasks as described above.  This table will initially be empty"},{"line_number":105,"context_line":"so a schema migration will be necessary but not a data migration."},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"REST API impact"},{"line_number":108,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":11,"id":"1ae5cdf2_d9998e20","line":105,"updated":"2014-06-26 08:41:06.000000000","message":"though from context can guess the schema of the table\nlist it here may be more helpful","commit_id":"be5495a9f8093a65829fc16009a161d764c202f3"},{"author":{"_account_id":1849,"name":"Joe Gordon","email":"joe.gordon0@gmail.com","username":"jogo"},"change_message_id":"31830b7daa6858bce130725eff52265569e5f730","unresolved":false,"context_lines":[{"line_number":115,"context_line":"The reponse object returned for requests which return a task will have the"},{"line_number":116,"context_line":"following structure::"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    task \u003d {"},{"line_number":119,"context_line":"        \u0027type\u0027: \u0027object\u0027,"},{"line_number":120,"context_line":"        \u0027properties\u0027: {"},{"line_number":121,"context_line":"            \u0027id\u0027: { \u0027type\u0027: \u0027string\u0027, \u0027format\u0027: \u0027uuid\u0027 },"}],"source_content_type":"text/x-rst","patch_set":11,"id":"baada198_d7ffa8ff","line":118,"updated":"2014-07-10 22:08:23.000000000","message":"I see how returning all this data is useful for servers/server-uuid/tasks. But to be returned for every command that triggers a task, this seems verbose.","commit_id":"be5495a9f8093a65829fc16009a161d764c202f3"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"e8cd00df3d36ad05d8213aee30c2cef88fc1ea3f","unresolved":false,"context_lines":[{"line_number":115,"context_line":"The reponse object returned for requests which return a task will have the"},{"line_number":116,"context_line":"following structure::"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    task \u003d {"},{"line_number":119,"context_line":"        \u0027type\u0027: \u0027object\u0027,"},{"line_number":120,"context_line":"        \u0027properties\u0027: {"},{"line_number":121,"context_line":"            \u0027id\u0027: { \u0027type\u0027: \u0027string\u0027, \u0027format\u0027: \u0027uuid\u0027 },"}],"source_content_type":"text/x-rst","patch_set":11,"id":"baada198_816eab2d","line":118,"in_reply_to":"baada198_d7ffa8ff","updated":"2014-07-11 17:46:23.000000000","message":"I don\u0027t think it\u0027s overly verbose, but I\u0027m open to more opinions.  For V2 the plan was to just return a Location header and there was desire to include the full object the same way we do for a server now.","commit_id":"be5495a9f8093a65829fc16009a161d764c202f3"},{"author":{"_account_id":1849,"name":"Joe Gordon","email":"joe.gordon0@gmail.com","username":"jogo"},"change_message_id":"31830b7daa6858bce130725eff52265569e5f730","unresolved":false,"context_lines":[{"line_number":116,"context_line":"following structure::"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    task \u003d {"},{"line_number":119,"context_line":"        \u0027type\u0027: \u0027object\u0027,"},{"line_number":120,"context_line":"        \u0027properties\u0027: {"},{"line_number":121,"context_line":"            \u0027id\u0027: { \u0027type\u0027: \u0027string\u0027, \u0027format\u0027: \u0027uuid\u0027 },"},{"line_number":122,"context_line":"            \u0027name\u0027: { \u0027type\u0027: \u0027string\u0027 },"}],"source_content_type":"text/x-rst","patch_set":11,"id":"baada198_5402b63e","line":119,"updated":"2014-07-10 22:08:23.000000000","message":"what are some possible types?","commit_id":"be5495a9f8093a65829fc16009a161d764c202f3"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"e8cd00df3d36ad05d8213aee30c2cef88fc1ea3f","unresolved":false,"context_lines":[{"line_number":116,"context_line":"following structure::"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    task \u003d {"},{"line_number":119,"context_line":"        \u0027type\u0027: \u0027object\u0027,"},{"line_number":120,"context_line":"        \u0027properties\u0027: {"},{"line_number":121,"context_line":"            \u0027id\u0027: { \u0027type\u0027: \u0027string\u0027, \u0027format\u0027: \u0027uuid\u0027 },"},{"line_number":122,"context_line":"            \u0027name\u0027: { \u0027type\u0027: \u0027string\u0027 },"}],"source_content_type":"text/x-rst","patch_set":11,"id":"baada198_cf19af89","line":119,"in_reply_to":"baada198_5402b63e","updated":"2014-07-11 17:46:23.000000000","message":"object and string are both used in this definition.  Beyond that I don\u0027t remember what types the jsonschema spec defines since I didn\u0027t need to use them.","commit_id":"be5495a9f8093a65829fc16009a161d764c202f3"},{"author":{"_account_id":1849,"name":"Joe Gordon","email":"joe.gordon0@gmail.com","username":"jogo"},"change_message_id":"31830b7daa6858bce130725eff52265569e5f730","unresolved":false,"context_lines":[{"line_number":118,"context_line":"    task \u003d {"},{"line_number":119,"context_line":"        \u0027type\u0027: \u0027object\u0027,"},{"line_number":120,"context_line":"        \u0027properties\u0027: {"},{"line_number":121,"context_line":"            \u0027id\u0027: { \u0027type\u0027: \u0027string\u0027, \u0027format\u0027: \u0027uuid\u0027 },"},{"line_number":122,"context_line":"            \u0027name\u0027: { \u0027type\u0027: \u0027string\u0027 },"},{"line_number":123,"context_line":"            \u0027state\u0027: { \u0027type\u0027: \u0027string\u0027 },"},{"line_number":124,"context_line":"            \u0027resource_uuid\u0027: {\u0027type\u0027: \u0027string\u0027 },"}],"source_content_type":"text/x-rst","patch_set":11,"id":"baada198_94fc4e40","line":121,"updated":"2014-07-10 22:08:23.000000000","message":"is this the id of the task?","commit_id":"be5495a9f8093a65829fc16009a161d764c202f3"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"e8cd00df3d36ad05d8213aee30c2cef88fc1ea3f","unresolved":false,"context_lines":[{"line_number":118,"context_line":"    task \u003d {"},{"line_number":119,"context_line":"        \u0027type\u0027: \u0027object\u0027,"},{"line_number":120,"context_line":"        \u0027properties\u0027: {"},{"line_number":121,"context_line":"            \u0027id\u0027: { \u0027type\u0027: \u0027string\u0027, \u0027format\u0027: \u0027uuid\u0027 },"},{"line_number":122,"context_line":"            \u0027name\u0027: { \u0027type\u0027: \u0027string\u0027 },"},{"line_number":123,"context_line":"            \u0027state\u0027: { \u0027type\u0027: \u0027string\u0027 },"},{"line_number":124,"context_line":"            \u0027resource_uuid\u0027: {\u0027type\u0027: \u0027string\u0027 },"}],"source_content_type":"text/x-rst","patch_set":11,"id":"baada198_0101bb04","line":121,"in_reply_to":"baada198_94fc4e40","updated":"2014-07-11 17:46:23.000000000","message":"Yes.  For consistency it was asked that this just be \u0027id\u0027 since that\u0027s what servers expose in the API as well.","commit_id":"be5495a9f8093a65829fc16009a161d764c202f3"},{"author":{"_account_id":1849,"name":"Joe Gordon","email":"joe.gordon0@gmail.com","username":"jogo"},"change_message_id":"31830b7daa6858bce130725eff52265569e5f730","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        }"},{"line_number":131,"context_line":"        \u0027additionalProperties\u0027: True"},{"line_number":132,"context_line":"    }"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"additionalProperties is True because there may be times that it makes sense to"},{"line_number":135,"context_line":"return a copy of the server as well and there may be other additions over time."},{"line_number":136,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"baada198_b415d2e6","line":133,"updated":"2014-07-10 22:08:23.000000000","message":"I would like to see a sample output for this if possible.","commit_id":"be5495a9f8093a65829fc16009a161d764c202f3"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"e8cd00df3d36ad05d8213aee30c2cef88fc1ea3f","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        }"},{"line_number":131,"context_line":"        \u0027additionalProperties\u0027: True"},{"line_number":132,"context_line":"    }"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"additionalProperties is True because there may be times that it makes sense to"},{"line_number":135,"context_line":"return a copy of the server as well and there may be other additions over time."},{"line_number":136,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"baada198_01eb7b13","line":133,"in_reply_to":"baada198_b415d2e6","updated":"2014-07-11 17:46:23.000000000","message":"I\u0027m not sure what a sample will give you beyond the jsonschema definition.  The API sample tests will provide concrete samples for later documentation purposes.  So it feels repetitive for me to include the definition and a sample here when I don\u0027t think it changes the understanding of what the spec is trying to accomplish.","commit_id":"be5495a9f8093a65829fc16009a161d764c202f3"},{"author":{"_account_id":1849,"name":"Joe Gordon","email":"joe.gordon0@gmail.com","username":"jogo"},"change_message_id":"31830b7daa6858bce130725eff52265569e5f730","unresolved":false,"context_lines":[{"line_number":145,"context_line":"Additionally there will be two new URLs for requesting task data.  The details"},{"line_number":146,"context_line":"of the v3 API are slightly unclear at this point, but building on what\u0027s in"},{"line_number":147,"context_line":"place at this moment the new URLs would be"},{"line_number":148,"context_line":"http://\u003chost\u003e/v3/servers/\u003cserver-uuid\u003e/tasks and http://\u003chost\u003e/v3/tasks."},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"The tasks URL under servers will allow listing tasks for a server with a GET on"},{"line_number":151,"context_line":"that URL, or getting details of a particular task with a GET on"}],"source_content_type":"text/x-rst","patch_set":11,"id":"baada198_740eda33","line":148,"updated":"2014-07-10 22:08:23.000000000","message":"this could be formatted a little better for the rst to make these URLS easier to find when skimming the spec.","commit_id":"be5495a9f8093a65829fc16009a161d764c202f3"},{"author":{"_account_id":1849,"name":"Joe Gordon","email":"joe.gordon0@gmail.com","username":"jogo"},"change_message_id":"31830b7daa6858bce130725eff52265569e5f730","unresolved":false,"context_lines":[{"line_number":155,"context_line":"project_id, or all tasks as an admin, and then filtering by various criteria."},{"line_number":156,"context_line":"The initial plan is to include filtering by task, state, request_id, and"},{"line_number":157,"context_line":"project_id(admin only)."},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"And it should be noted that the lifetime of a task is expected to match the"},{"line_number":160,"context_line":"server that it\u0027s connected with.  So tasks should be visible until the server"},{"line_number":161,"context_line":"is deleted at which point the associated tasks will be deleted.  And any db"}],"source_content_type":"text/x-rst","patch_set":11,"id":"baada198_54963695","line":158,"updated":"2014-07-10 22:08:23.000000000","message":"awesome","commit_id":"be5495a9f8093a65829fc16009a161d764c202f3"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"1bbd626cd33365a6e69341ab61a9e093027c0ef3","unresolved":false,"context_lines":[{"line_number":55,"context_line":" * project_id: context.project_id"},{"line_number":56,"context_line":" * created_at: initialized by the database on creation"},{"line_number":57,"context_line":" * last_updated: Can be used to periodically update a long running task to show"},{"line_number":58,"context_line":"                 that it has not stalled."},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"Task objects will be created in the API method that handles the request, and"},{"line_number":61,"context_line":"will be sent to the appropriate compute.api methods along with the instance"}],"source_content_type":"text/x-rst","patch_set":12,"id":"7a016987_9843256c","line":58,"updated":"2015-05-21 19:29:34.000000000","message":"no error string? no stack trace?","commit_id":"d78dcddab9bbc654c61e681bac30316d2d3b2b26"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"c33e187eacec9e3a7893c036e89b5314913369ba","unresolved":false,"context_lines":[{"line_number":55,"context_line":" * project_id: context.project_id"},{"line_number":56,"context_line":" * created_at: initialized by the database on creation"},{"line_number":57,"context_line":" * last_updated: Can be used to periodically update a long running task to show"},{"line_number":58,"context_line":"                 that it has not stalled."},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"Task objects will be created in the API method that handles the request, and"},{"line_number":61,"context_line":"will be sent to the appropriate compute.api methods along with the instance"}],"source_content_type":"text/x-rst","patch_set":12,"id":"5afe65bd_251a8e18","line":58,"in_reply_to":"7a016987_9843256c","updated":"2015-06-01 15:43:33.000000000","message":"A human friendly message string would be helpful, not sure why I didn\u0027t include it here.  Stack traces are trickier for two reasons, one is that they shouldn\u0027t always be displayed, two is that there could be multiple traces and it\u0027s not always clear which one(s) is useful.  The first issue is dealt with easily enough via policy, the second issue needs some more thought.","commit_id":"d78dcddab9bbc654c61e681bac30316d2d3b2b26"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"1bbd626cd33365a6e69341ab61a9e093027c0ef3","unresolved":false,"context_lines":[{"line_number":129,"context_line":"error codes will not change, though the messages may change for task related"},{"line_number":130,"context_line":"failures."},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"The reponse object returned for requests which return a task will have the"},{"line_number":133,"context_line":"following structure (jsonschema)::"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    task \u003d {"}],"source_content_type":"text/x-rst","patch_set":12,"id":"7a016987_58100d57","line":132,"updated":"2015-05-21 19:29:34.000000000","message":"nit: response","commit_id":"d78dcddab9bbc654c61e681bac30316d2d3b2b26"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"1bbd626cd33365a6e69341ab61a9e093027c0ef3","unresolved":false,"context_lines":[{"line_number":175,"context_line":"project_id(admin only)."},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"And it should be noted that the lifetime of a task is expected to match the"},{"line_number":178,"context_line":"server that it\u0027s connected with.  So tasks should be visible until the server"},{"line_number":179,"context_line":"is deleted at which point the associated tasks will be deleted.  And any db"},{"line_number":180,"context_line":"pruning should handle tasks the same as other data, like metadata, attached to"},{"line_number":181,"context_line":"a server."}],"source_content_type":"text/x-rst","patch_set":12,"id":"7a016987_9308a629","line":178,"updated":"2015-05-21 19:29:34.000000000","message":"sorry, does server here mean instance?","commit_id":"d78dcddab9bbc654c61e681bac30316d2d3b2b26"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"c33e187eacec9e3a7893c036e89b5314913369ba","unresolved":false,"context_lines":[{"line_number":175,"context_line":"project_id(admin only)."},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"And it should be noted that the lifetime of a task is expected to match the"},{"line_number":178,"context_line":"server that it\u0027s connected with.  So tasks should be visible until the server"},{"line_number":179,"context_line":"is deleted at which point the associated tasks will be deleted.  And any db"},{"line_number":180,"context_line":"pruning should handle tasks the same as other data, like metadata, attached to"},{"line_number":181,"context_line":"a server."}],"source_content_type":"text/x-rst","patch_set":12,"id":"5afe65bd_45e46a0c","line":178,"in_reply_to":"7a016987_9308a629","updated":"2015-06-01 15:43:33.000000000","message":"Yes.  I use them interchangeably, but should be consistent throughout.","commit_id":"d78dcddab9bbc654c61e681bac30316d2d3b2b26"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"1bbd626cd33365a6e69341ab61a9e093027c0ef3","unresolved":false,"context_lines":[{"line_number":178,"context_line":"server that it\u0027s connected with.  So tasks should be visible until the server"},{"line_number":179,"context_line":"is deleted at which point the associated tasks will be deleted.  And any db"},{"line_number":180,"context_line":"pruning should handle tasks the same as other data, like metadata, attached to"},{"line_number":181,"context_line":"a server."},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"Security impact"},{"line_number":184,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":12,"id":"7a016987_730bea24","line":181,"updated":"2015-05-21 19:29:34.000000000","message":"so will that include an age cutoff?","commit_id":"d78dcddab9bbc654c61e681bac30316d2d3b2b26"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"c33e187eacec9e3a7893c036e89b5314913369ba","unresolved":false,"context_lines":[{"line_number":178,"context_line":"server that it\u0027s connected with.  So tasks should be visible until the server"},{"line_number":179,"context_line":"is deleted at which point the associated tasks will be deleted.  And any db"},{"line_number":180,"context_line":"pruning should handle tasks the same as other data, like metadata, attached to"},{"line_number":181,"context_line":"a server."},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"Security impact"},{"line_number":184,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":12,"id":"5afe65bd_45cb4a73","line":181,"in_reply_to":"7a016987_730bea24","updated":"2015-06-01 15:43:33.000000000","message":"Not at this time.  If an age cutoff is added to instances then it would be inherited by the tasks associated with that instance.","commit_id":"d78dcddab9bbc654c61e681bac30316d2d3b2b26"}]}
