)]}'
{"doc/specs/rocky/compute-node.rst":[{"author":{"_account_id":11878,"name":"Rushil Chugh","email":"rushil.chugh@gmail.com","username":"rushil"},"change_message_id":"abeb1b6af6d2f70bbc5ec4eebf4e0dbcb09a28b0","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Cyborg is a service for managing accelerators, such as FPGAs, GPUs, etc. For"},{"line_number":12,"context_line":"scheduling an instance that needs accelerators, Cyborg needs to work with Nova"},{"line_number":13,"context_line":"at three levels:"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"* Representation and Discovery: Cyborg shall represent accelerators"},{"line_number":16,"context_line":"  as resources in Placement. When a device is discovered, Cyborg"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f7c97a3_4d8e2f28","line":13,"range":{"start_line":13,"start_character":0,"end_line":13,"end_character":2},"updated":"2018-05-18 18:23:04.000000000","message":"on","commit_id":"48665f12da1eea93f08c4a2a63a5737299b3a0a9"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"c4ad46a440b6d5489c8e00f57d805ae609228642","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Cyborg is a service for managing accelerators, such as FPGAs, GPUs, etc. For"},{"line_number":12,"context_line":"scheduling an instance that needs accelerators, Cyborg needs to work with Nova"},{"line_number":13,"context_line":"at three levels:"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"* Representation and Discovery: Cyborg shall represent accelerators"},{"line_number":16,"context_line":"  as resources in Placement. When a device is discovered, Cyborg"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f7c97a3_50756897","line":13,"range":{"start_line":13,"start_character":0,"end_line":13,"end_character":2},"in_reply_to":"5f7c97a3_4d8e2f28","updated":"2018-05-18 18:45:59.000000000","message":"\u0027at\u0027 seems to be acceptable and common too. :)","commit_id":"48665f12da1eea93f08c4a2a63a5737299b3a0a9"},{"author":{"_account_id":11878,"name":"Rushil Chugh","email":"rushil.chugh@gmail.com","username":"rushil"},"change_message_id":"abeb1b6af6d2f70bbc5ec4eebf4e0dbcb09a28b0","unresolved":false,"context_lines":[{"line_number":17,"context_line":"  updates resource inventories in Placement."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"* Instance placement/scheduling: Cyborg may provide a weigher"},{"line_number":20,"context_line":"  that prioritize hosts based on available accelerator resources."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"* Attaching accelerators to instances. In the compute node, Cyborg"},{"line_number":23,"context_line":"  shall define a workflow based on interacting with Nova through a"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f7c97a3_2d9df358","line":20,"range":{"start_line":20,"start_character":7,"end_line":20,"end_character":17},"updated":"2018-05-18 18:23:04.000000000","message":"prioritizes","commit_id":"48665f12da1eea93f08c4a2a63a5737299b3a0a9"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"c4ad46a440b6d5489c8e00f57d805ae609228642","unresolved":false,"context_lines":[{"line_number":17,"context_line":"  updates resource inventories in Placement."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"* Instance placement/scheduling: Cyborg may provide a weigher"},{"line_number":20,"context_line":"  that prioritize hosts based on available accelerator resources."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"* Attaching accelerators to instances. In the compute node, Cyborg"},{"line_number":23,"context_line":"  shall define a workflow based on interacting with Nova through a"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f7c97a3_9049c061","line":20,"range":{"start_line":20,"start_character":7,"end_line":20,"end_character":17},"in_reply_to":"5f7c97a3_2d9df358","updated":"2018-05-18 18:45:59.000000000","message":"Done","commit_id":"48665f12da1eea93f08c4a2a63a5737299b3a0a9"},{"author":{"_account_id":14131,"name":"shaohef","email":"shaohe.feng@intel.com","username":"shaohefeng"},"change_message_id":"004933e2eee8bc581be0384074cd5edfe831472f","unresolved":false,"context_lines":[{"line_number":83,"context_line":"Once Nova has picked a compute node for placement of an instance that needs"},{"line_number":84,"context_line":"accelerators, the following steps needs to happen:"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"* Nova compute on that node has to invoke Cyborg Agent for handling the needed"},{"line_number":87,"context_line":"  accelerators. This needs to happen through a library, named os-acc, patterned"},{"line_number":88,"context_line":"  after os-vif (Neutron) and os-brick (Cinder)."},{"line_number":89,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f7c97a3_8d9a79b6","line":86,"range":{"start_line":86,"start_character":42,"end_line":86,"end_character":54},"updated":"2018-05-14 12:19:45.000000000","message":"Nova compute call Cyborg Agent directly?","commit_id":"48665f12da1eea93f08c4a2a63a5737299b3a0a9"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"24821625101411615a8dfe6126091d6d6f1e9489","unresolved":false,"context_lines":[{"line_number":83,"context_line":"Once Nova has picked a compute node for placement of an instance that needs"},{"line_number":84,"context_line":"accelerators, the following steps needs to happen:"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"* Nova compute on that node has to invoke Cyborg Agent for handling the needed"},{"line_number":87,"context_line":"  accelerators. This needs to happen through a library, named os-acc, patterned"},{"line_number":88,"context_line":"  after os-vif (Neutron) and os-brick (Cinder)."},{"line_number":89,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f7c97a3_0dcf0a29","line":86,"range":{"start_line":86,"start_character":42,"end_line":86,"end_character":54},"in_reply_to":"5f7c97a3_8d9a79b6","updated":"2018-05-16 17:50:56.000000000","message":"Nova compute will call os-acc directly, which will call Cyborg agent, as noted in next sentence.","commit_id":"48665f12da1eea93f08c4a2a63a5737299b3a0a9"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"f25c0afd00bcb4bcd4bf8656cc5ecce614a4022c","unresolved":false,"context_lines":[{"line_number":87,"context_line":"  accelerators. This needs to happen through a library, named os-acc, patterned"},{"line_number":88,"context_line":"  after os-vif (Neutron) and os-brick (Cinder)."},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"* Cyborg Agent may call Glance to fetch a bitstream, either by id or based on"},{"line_number":91,"context_line":"  tags."},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"* Cyborg Agent may need to call into a Cyborg driver to program said bitstream."},{"line_number":94,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f7c97a3_e9cc616b","line":91,"range":{"start_line":90,"start_character":2,"end_line":91,"end_character":7},"updated":"2018-05-11 13:29:11.000000000","message":"Just a note about \"tags\": Glance actually has image tags (in addition to image properties).  One advantage to using image properties instead of tags is that the operator has the ability to set CRUD on particular image properties.  I don\u0027t know if that matters for your use case or not; just thought I\u0027d mention it.  Either way, the Cyborg Agent would make 2 calls to glance: the first using the tag or property to get a list of images, the second (once the image id has been determined from the first call) to get the data.","commit_id":"48665f12da1eea93f08c4a2a63a5737299b3a0a9"},{"author":{"_account_id":14131,"name":"shaohef","email":"shaohe.feng@intel.com","username":"shaohefeng"},"change_message_id":"004933e2eee8bc581be0384074cd5edfe831472f","unresolved":false,"context_lines":[{"line_number":88,"context_line":"  after os-vif (Neutron) and os-brick (Cinder)."},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"* Cyborg Agent may call Glance to fetch a bitstream, either by id or based on"},{"line_number":91,"context_line":"  tags."},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"* Cyborg Agent may need to call into a Cyborg driver to program said bitstream."},{"line_number":94,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f7c97a3_6de03d27","line":91,"range":{"start_line":91,"start_character":2,"end_line":91,"end_character":7},"updated":"2018-05-14 12:19:45.000000000","message":"should you give the related link to show which tags are needed?","commit_id":"48665f12da1eea93f08c4a2a63a5737299b3a0a9"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"24821625101411615a8dfe6126091d6d6f1e9489","unresolved":false,"context_lines":[{"line_number":88,"context_line":"  after os-vif (Neutron) and os-brick (Cinder)."},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"* Cyborg Agent may call Glance to fetch a bitstream, either by id or based on"},{"line_number":91,"context_line":"  tags."},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"* Cyborg Agent may need to call into a Cyborg driver to program said bitstream."},{"line_number":94,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f7c97a3_0d9dca08","line":91,"range":{"start_line":91,"start_character":2,"end_line":91,"end_character":7},"in_reply_to":"5f7c97a3_6de03d27","updated":"2018-05-16 17:50:56.000000000","message":"s/tags/properties\nThe bitstream metadata spec is here: https://review.openstack.org/#/c/558265/ \n\nThe main properties we need are function UUID (what the bitstream provides) and region type UUID (what the bitstream needs).","commit_id":"48665f12da1eea93f08c4a2a63a5737299b3a0a9"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"da23b8d16ecabea30a424f38b773bfd065846526","unresolved":false,"context_lines":[{"line_number":87,"context_line":"  accelerators. This needs to happen through a library, named os-acc, patterned"},{"line_number":88,"context_line":"  after os-vif (Neutron) and os-brick (Cinder)."},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"* Cyborg Agent may call Glance to fetch a bitstream, either by id or based on"},{"line_number":91,"context_line":"  tags."},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"* Cyborg Agent may need to call into a Cyborg driver to program said bitstream."},{"line_number":94,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f7c97a3_c3a85e21","line":91,"range":{"start_line":90,"start_character":2,"end_line":91,"end_character":7},"in_reply_to":"5f7c97a3_e9cc616b","updated":"2018-05-11 17:57:16.000000000","message":"Thanks, Brian. We propose to use properties, primarily because of the availability of property protections, as you pointed out. The reference to \u0027tags\u0027 here is a misnomer -- I will fix it.","commit_id":"48665f12da1eea93f08c4a2a63a5737299b3a0a9"},{"author":{"_account_id":14131,"name":"shaohef","email":"shaohe.feng@intel.com","username":"shaohefeng"},"change_message_id":"004933e2eee8bc581be0384074cd5edfe831472f","unresolved":false,"context_lines":[{"line_number":98,"context_line":"* Cyborg Agent returns enough information to Nova compute via os-acc for the"},{"line_number":99,"context_line":"  instance to be launched."},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"The behavior of each of these steps needs to be specified."},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"In addition, the OpenStack Compute API [#ServerConcepts]_ specifies the"},{"line_number":104,"context_line":"operations that can be done on an instance. The behavior with respect to"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f7c97a3_6d67ddb8","line":101,"range":{"start_line":101,"start_character":0,"end_line":101,"end_character":58},"updated":"2018-05-14 12:19:45.000000000","message":"Here, you are just describe the create process.\nFor other process will be implemented in next release?\n\nAlso you need to file a new spec in nova project.","commit_id":"48665f12da1eea93f08c4a2a63a5737299b3a0a9"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"24821625101411615a8dfe6126091d6d6f1e9489","unresolved":false,"context_lines":[{"line_number":98,"context_line":"* Cyborg Agent returns enough information to Nova compute via os-acc for the"},{"line_number":99,"context_line":"  instance to be launched."},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"The behavior of each of these steps needs to be specified."},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"In addition, the OpenStack Compute API [#ServerConcepts]_ specifies the"},{"line_number":104,"context_line":"operations that can be done on an instance. The behavior with respect to"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f7c97a3_2db9a677","line":101,"range":{"start_line":101,"start_character":0,"end_line":101,"end_character":58},"in_reply_to":"5f7c97a3_6d67ddb8","updated":"2018-05-16 17:50:56.000000000","message":"My understanding is that other supported use cases require rescheduling, and so they will look like creation. For use cases that do not require rescheduling, we either say it is a no-op (like pause/suspend) or do not support them.","commit_id":"48665f12da1eea93f08c4a2a63a5737299b3a0a9"},{"author":{"_account_id":14131,"name":"shaohef","email":"shaohe.feng@intel.com","username":"shaohefeng"},"change_message_id":"004933e2eee8bc581be0384074cd5edfe831472f","unresolved":false,"context_lines":[{"line_number":161,"context_line":"  re-attached on when the instance is scheduled again."},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"* Evacuate: This is a forcible rebuild by the administrator. As the semantics"},{"line_number":164,"context_line":"  of evacuation are left open even without accelerators, Cyborg’s behavior is"},{"line_number":165,"context_line":"  also left undefined."},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"* Set administrator password, trigger crash dump: These are supported and not"},{"line_number":168,"context_line":"  no-ops for accelerators."}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f7c97a3_cde8717d","line":165,"range":{"start_line":164,"start_character":56,"end_line":165,"end_character":22},"updated":"2018-05-14 12:19:45.000000000","message":"administrator will forcibly rebuild a new same server on another node.","commit_id":"48665f12da1eea93f08c4a2a63a5737299b3a0a9"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"24821625101411615a8dfe6126091d6d6f1e9489","unresolved":false,"context_lines":[{"line_number":161,"context_line":"  re-attached on when the instance is scheduled again."},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"* Evacuate: This is a forcible rebuild by the administrator. As the semantics"},{"line_number":164,"context_line":"  of evacuation are left open even without accelerators, Cyborg’s behavior is"},{"line_number":165,"context_line":"  also left undefined."},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"* Set administrator password, trigger crash dump: These are supported and not"},{"line_number":168,"context_line":"  no-ops for accelerators."}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f7c97a3_cd26f2ce","line":165,"range":{"start_line":164,"start_character":56,"end_line":165,"end_character":22},"in_reply_to":"5f7c97a3_cde8717d","updated":"2018-05-16 17:50:56.000000000","message":"Do you want to define this a detachment of accelerators, followed by attachment of equivalent accelerators in destination node? I am not sure if this goes through the scheduling process. So, keeping the accelerator usage data consistent across Cyborg and Nova can be a problem.","commit_id":"48665f12da1eea93f08c4a2a63a5737299b3a0a9"},{"author":{"_account_id":14131,"name":"shaohef","email":"shaohe.feng@intel.com","username":"shaohefeng"},"change_message_id":"004933e2eee8bc581be0384074cd5edfe831472f","unresolved":false,"context_lines":[{"line_number":169,"context_line":""},{"line_number":170,"context_line":"The following instance operations are not supported in this release:"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"* Booting off a snapshot: The snapshot may have been taken when the attached"},{"line_number":173,"context_line":"  accelerators were in a particular state. When booting off a previous"},{"line_number":174,"context_line":"  snapshot, the current configuration and state of accelerators may not match"},{"line_number":175,"context_line":"  the snapshot. So, this is unsupported."},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"* Live migration: Until a mechanism is defined to migrate accelerator state"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f7c97a3_ad7415d0","line":174,"range":{"start_line":172,"start_character":26,"end_line":174,"end_character":43},"updated":"2018-05-14 12:19:45.000000000","message":"IMHO, the accelerators just depend on the current instance configure.","commit_id":"48665f12da1eea93f08c4a2a63a5737299b3a0a9"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"24821625101411615a8dfe6126091d6d6f1e9489","unresolved":false,"context_lines":[{"line_number":169,"context_line":""},{"line_number":170,"context_line":"The following instance operations are not supported in this release:"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"* Booting off a snapshot: The snapshot may have been taken when the attached"},{"line_number":173,"context_line":"  accelerators were in a particular state. When booting off a previous"},{"line_number":174,"context_line":"  snapshot, the current configuration and state of accelerators may not match"},{"line_number":175,"context_line":"  the snapshot. So, this is unsupported."},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"* Live migration: Until a mechanism is defined to migrate accelerator state"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f7c97a3_d510bc52","line":174,"range":{"start_line":172,"start_character":26,"end_line":174,"end_character":43},"in_reply_to":"5f7c97a3_ad7415d0","updated":"2018-05-16 17:50:56.000000000","message":"The application in the VM may set up buffers, which are used for DMA of data to and from the accelerator. If you take the snapshot when the buffers are in a certain state, then the state changes, and then you restore the snapshot while the accelerator state is left unchanged, that would be a problem.","commit_id":"48665f12da1eea93f08c4a2a63a5737299b3a0a9"},{"author":{"_account_id":14131,"name":"shaohef","email":"shaohe.feng@intel.com","username":"shaohefeng"},"change_message_id":"004933e2eee8bc581be0384074cd5edfe831472f","unresolved":false,"context_lines":[{"line_number":175,"context_line":"  the snapshot. So, this is unsupported."},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"* Live migration: Until a mechanism is defined to migrate accelerator state"},{"line_number":178,"context_line":"  along with the instance, this is unsupported."},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"os_acc Structure"},{"line_number":181,"context_line":"----------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f7c97a3_ad5df547","line":178,"range":{"start_line":178,"start_character":35,"end_line":178,"end_character":47},"updated":"2018-05-14 12:19:45.000000000","message":"unsupported does it means Live migration failed?","commit_id":"48665f12da1eea93f08c4a2a63a5737299b3a0a9"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"24821625101411615a8dfe6126091d6d6f1e9489","unresolved":false,"context_lines":[{"line_number":175,"context_line":"  the snapshot. So, this is unsupported."},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"* Live migration: Until a mechanism is defined to migrate accelerator state"},{"line_number":178,"context_line":"  along with the instance, this is unsupported."},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"os_acc Structure"},{"line_number":181,"context_line":"----------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f7c97a3_752be881","line":178,"range":{"start_line":178,"start_character":35,"end_line":178,"end_character":47},"in_reply_to":"5f7c97a3_ad5df547","updated":"2018-05-16 17:50:56.000000000","message":"This means that operators should not try LM with accelerators; if they do, the results are undefined. Do you think we should explicitly fail LM when accelerators are attached?","commit_id":"48665f12da1eea93f08c4a2a63a5737299b3a0a9"},{"author":{"_account_id":11878,"name":"Rushil Chugh","email":"rushil.chugh@gmail.com","username":"rushil"},"change_message_id":"abeb1b6af6d2f70bbc5ec4eebf4e0dbcb09a28b0","unresolved":false,"context_lines":[{"line_number":205,"context_line":"  * Throws ``CyborgAgentUnavailable`` exception if Cyborg Agent cannot be"},{"line_number":206,"context_line":"    contacted."},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"* plug(instance_info, selected_rp, flavor_extra_specs)"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"  * Parameters are all read-only. Here are their descriptions:"},{"line_number":211,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f7c97a3_8df2079a","line":208,"range":{"start_line":208,"start_character":22,"end_line":208,"end_character":53},"updated":"2018-05-18 18:23:04.000000000","message":"Can these two params be passed as kwargs and not be a required parameter?","commit_id":"48665f12da1eea93f08c4a2a63a5737299b3a0a9"},{"author":{"_account_id":11878,"name":"Rushil Chugh","email":"rushil.chugh@gmail.com","username":"rushil"},"change_message_id":"0432e9e4bf8a5feb85b32767190c4a88fbeb022c","unresolved":false,"context_lines":[{"line_number":205,"context_line":"  * Throws ``CyborgAgentUnavailable`` exception if Cyborg Agent cannot be"},{"line_number":206,"context_line":"    contacted."},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"* plug(instance_info, selected_rp, flavor_extra_specs)"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"  * Parameters are all read-only. Here are their descriptions:"},{"line_number":211,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f7c97a3_30454c18","line":208,"range":{"start_line":208,"start_character":22,"end_line":208,"end_character":53},"in_reply_to":"5f7c97a3_4d94efe8","updated":"2018-05-18 18:56:48.000000000","message":"I meant only the extra_specs. But, looking over the spec it can be a required parameter.","commit_id":"48665f12da1eea93f08c4a2a63a5737299b3a0a9"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"c4ad46a440b6d5489c8e00f57d805ae609228642","unresolved":false,"context_lines":[{"line_number":205,"context_line":"  * Throws ``CyborgAgentUnavailable`` exception if Cyborg Agent cannot be"},{"line_number":206,"context_line":"    contacted."},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"* plug(instance_info, selected_rp, flavor_extra_specs)"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"  * Parameters are all read-only. Here are their descriptions:"},{"line_number":211,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f7c97a3_4d94efe8","line":208,"range":{"start_line":208,"start_character":22,"end_line":208,"end_character":53},"in_reply_to":"5f7c97a3_8df2079a","updated":"2018-05-18 18:45:59.000000000","message":"Both are necessary for Cyborg to do its job. Could you clarify in what situations these would be optional?","commit_id":"48665f12da1eea93f08c4a2a63a5737299b3a0a9"},{"author":{"_account_id":11878,"name":"Rushil Chugh","email":"rushil.chugh@gmail.com","username":"rushil"},"change_message_id":"abeb1b6af6d2f70bbc5ec4eebf4e0dbcb09a28b0","unresolved":false,"context_lines":[{"line_number":313,"context_line":"REST API impact"},{"line_number":314,"context_line":"---------------"},{"line_number":315,"context_line":""},{"line_number":316,"context_line":"None"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"Security impact"},{"line_number":319,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f7c97a3_6d7d2be6","line":316,"range":{"start_line":316,"start_character":0,"end_line":316,"end_character":4},"updated":"2018-05-18 18:23:04.000000000","message":"This will have REST API impact, right?","commit_id":"48665f12da1eea93f08c4a2a63a5737299b3a0a9"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"c4ad46a440b6d5489c8e00f57d805ae609228642","unresolved":false,"context_lines":[{"line_number":313,"context_line":"REST API impact"},{"line_number":314,"context_line":"---------------"},{"line_number":315,"context_line":""},{"line_number":316,"context_line":"None"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"Security impact"},{"line_number":319,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f7c97a3_ad8ee3cd","line":316,"range":{"start_line":316,"start_character":0,"end_line":316,"end_character":4},"in_reply_to":"5f7c97a3_6d7d2be6","updated":"2018-05-18 18:45:59.000000000","message":"I am not proposing any change to Cyborg/Glance REST APIs.","commit_id":"48665f12da1eea93f08c4a2a63a5737299b3a0a9"},{"author":{"_account_id":11878,"name":"Rushil Chugh","email":"rushil.chugh@gmail.com","username":"rushil"},"change_message_id":"abeb1b6af6d2f70bbc5ec4eebf4e0dbcb09a28b0","unresolved":false,"context_lines":[{"line_number":380,"context_line":"Documentation Impact"},{"line_number":381,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":382,"context_line":""},{"line_number":383,"context_line":"None"},{"line_number":384,"context_line":""},{"line_number":385,"context_line":"References"},{"line_number":386,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f7c97a3_2d397340","line":383,"range":{"start_line":383,"start_character":0,"end_line":383,"end_character":4},"updated":"2018-05-18 18:23:04.000000000","message":"This should have significant doc impact?","commit_id":"48665f12da1eea93f08c4a2a63a5737299b3a0a9"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"c4ad46a440b6d5489c8e00f57d805ae609228642","unresolved":false,"context_lines":[{"line_number":380,"context_line":"Documentation Impact"},{"line_number":381,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":382,"context_line":""},{"line_number":383,"context_line":"None"},{"line_number":384,"context_line":""},{"line_number":385,"context_line":"References"},{"line_number":386,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f7c97a3_ed729be3","line":383,"range":{"start_line":383,"start_character":0,"end_line":383,"end_character":4},"in_reply_to":"5f7c97a3_2d397340","updated":"2018-05-18 18:45:59.000000000","message":"Agreed. Thanks for catching this. The behavior of accelerators during various instance operations should be documented somewhere. The bitstream uploading operation should also be documented, though it may belong in the bitstream metadata spec.","commit_id":"48665f12da1eea93f08c4a2a63a5737299b3a0a9"},{"author":{"_account_id":11878,"name":"Rushil Chugh","email":"rushil.chugh@gmail.com","username":"rushil"},"change_message_id":"e5286a0686df3f1751172ce807674b112ae413e1","unresolved":false,"context_lines":[{"line_number":318,"context_line":"Security impact"},{"line_number":319,"context_line":"---------------"},{"line_number":320,"context_line":""},{"line_number":321,"context_line":"None"},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"Notifications impact"},{"line_number":324,"context_line":"--------------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5f7c97a3_100e10e5","line":321,"range":{"start_line":321,"start_character":0,"end_line":321,"end_character":4},"updated":"2018-05-18 18:59:04.000000000","message":"I\u0027m assuming there are no security impacts?","commit_id":"5dec5eef321a62bacf9441a0c580122ebe1fdd39"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"efc0760405334aa12dc8bde6436bcebe8e91a4ee","unresolved":false,"context_lines":[{"line_number":318,"context_line":"Security impact"},{"line_number":319,"context_line":"---------------"},{"line_number":320,"context_line":""},{"line_number":321,"context_line":"None"},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"Notifications impact"},{"line_number":324,"context_line":"--------------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5f7c97a3_961778ee","line":321,"range":{"start_line":321,"start_character":0,"end_line":321,"end_character":4},"in_reply_to":"5f7c97a3_100e10e5","updated":"2018-05-18 21:11:49.000000000","message":"This spec does not introduce any security aspect or risk beyond what is already there.","commit_id":"5dec5eef321a62bacf9441a0c580122ebe1fdd39"},{"author":{"_account_id":11878,"name":"Rushil Chugh","email":"rushil.chugh@gmail.com","username":"rushil"},"change_message_id":"e5286a0686df3f1751172ce807674b112ae413e1","unresolved":false,"context_lines":[{"line_number":333,"context_line":"Performance Impact"},{"line_number":334,"context_line":"------------------"},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"None"},{"line_number":337,"context_line":""},{"line_number":338,"context_line":"Other deployer impact"},{"line_number":339,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5f7c97a3_700984db","line":336,"range":{"start_line":336,"start_character":0,"end_line":336,"end_character":4},"updated":"2018-05-18 18:59:04.000000000","message":"What about performance impact?","commit_id":"5dec5eef321a62bacf9441a0c580122ebe1fdd39"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"efc0760405334aa12dc8bde6436bcebe8e91a4ee","unresolved":false,"context_lines":[{"line_number":333,"context_line":"Performance Impact"},{"line_number":334,"context_line":"------------------"},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"None"},{"line_number":337,"context_line":""},{"line_number":338,"context_line":"Other deployer impact"},{"line_number":339,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5f7c97a3_fbcfb526","line":336,"range":{"start_line":336,"start_character":0,"end_line":336,"end_character":4},"in_reply_to":"5f7c97a3_700984db","updated":"2018-05-18 21:11:49.000000000","message":"None expected. In particular, FPGA programming is expected to be overlapped with other operations through the use of async interfaces.","commit_id":"5dec5eef321a62bacf9441a0c580122ebe1fdd39"},{"author":{"_account_id":11878,"name":"Rushil Chugh","email":"rushil.chugh@gmail.com","username":"rushil"},"change_message_id":"e5286a0686df3f1751172ce807674b112ae413e1","unresolved":false,"context_lines":[{"line_number":343,"context_line":"Developer impact"},{"line_number":344,"context_line":"----------------"},{"line_number":345,"context_line":""},{"line_number":346,"context_line":"None"},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"Implementation"},{"line_number":349,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5f7c97a3_b0695c8c","line":346,"range":{"start_line":346,"start_character":0,"end_line":346,"end_character":4},"updated":"2018-05-18 18:59:04.000000000","message":"What about developer impact?","commit_id":"5dec5eef321a62bacf9441a0c580122ebe1fdd39"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"efc0760405334aa12dc8bde6436bcebe8e91a4ee","unresolved":false,"context_lines":[{"line_number":343,"context_line":"Developer impact"},{"line_number":344,"context_line":"----------------"},{"line_number":345,"context_line":""},{"line_number":346,"context_line":"None"},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"Implementation"},{"line_number":349,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5f7c97a3_fb9d750a","line":346,"range":{"start_line":346,"start_character":0,"end_line":346,"end_character":4},"in_reply_to":"5f7c97a3_b0695c8c","updated":"2018-05-18 21:11:49.000000000","message":"Nothing specific. For a mature project, changes can impact established developer practices. But we are laying the ground work for Cyborg with these specs.","commit_id":"5dec5eef321a62bacf9441a0c580122ebe1fdd39"},{"author":{"_account_id":27458,"name":"Li Liu","email":"liliueecg@gmail.com","username":"liliu"},"change_message_id":"226f3555153af86ef1cc912aedda53d4e8052bcd","unresolved":false,"context_lines":[{"line_number":81,"context_line":"Problem description"},{"line_number":82,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":83,"context_line":"Once Nova has picked a compute node for placement of an instance that needs"},{"line_number":84,"context_line":"accelerators, the following steps needs to happen:"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"* Nova compute on that node has to invoke Cyborg Agent for handling the needed"},{"line_number":87,"context_line":"  accelerators. This needs to happen through a library, named os-acc, patterned"}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_98944746","line":84,"range":{"start_line":84,"start_character":34,"end_line":84,"end_character":39},"updated":"2018-05-24 15:09:48.000000000","message":"need","commit_id":"030d8f51517c9afe50cd79d96cda20713a924551"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"4bc83b4fc7ac4c9827c5072414ea2fe50c7bb7d6","unresolved":false,"context_lines":[{"line_number":81,"context_line":"Problem description"},{"line_number":82,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":83,"context_line":"Once Nova has picked a compute node for placement of an instance that needs"},{"line_number":84,"context_line":"accelerators, the following steps needs to happen:"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"* Nova compute on that node has to invoke Cyborg Agent for handling the needed"},{"line_number":87,"context_line":"  accelerators. This needs to happen through a library, named os-acc, patterned"}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_e5e3f903","line":84,"range":{"start_line":84,"start_character":34,"end_line":84,"end_character":39},"in_reply_to":"5f7c97a3_98944746","updated":"2018-05-31 01:59:28.000000000","message":"Done","commit_id":"030d8f51517c9afe50cd79d96cda20713a924551"},{"author":{"_account_id":25738,"name":"Xinran WANG","email":"xin-ran.wang@intel.com","username":"Xinran"},"change_message_id":"362eeb6f22e736fa0a2da4c492def1594d2636dc","unresolved":false,"context_lines":[{"line_number":82,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":83,"context_line":"Once Nova has picked a compute node for placement of an instance that needs"},{"line_number":84,"context_line":"accelerators, the following steps needs to happen:"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"* Nova compute on that node has to invoke Cyborg Agent for handling the needed"},{"line_number":87,"context_line":"  accelerators. This needs to happen through a library, named os-acc, patterned"},{"line_number":88,"context_line":"  after os-vif (Neutron) and os-brick (Cinder)."},{"line_number":89,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_545633d0","line":86,"range":{"start_line":85,"start_character":0,"end_line":86,"end_character":3},"updated":"2018-05-30 09:27:10.000000000","message":"Do we need call Cyborg API to create an accelerator before invoking Cyborg Agent?","commit_id":"030d8f51517c9afe50cd79d96cda20713a924551"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"4bc83b4fc7ac4c9827c5072414ea2fe50c7bb7d6","unresolved":false,"context_lines":[{"line_number":82,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":83,"context_line":"Once Nova has picked a compute node for placement of an instance that needs"},{"line_number":84,"context_line":"accelerators, the following steps needs to happen:"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"* Nova compute on that node has to invoke Cyborg Agent for handling the needed"},{"line_number":87,"context_line":"  accelerators. This needs to happen through a library, named os-acc, patterned"},{"line_number":88,"context_line":"  after os-vif (Neutron) and os-brick (Cinder)."},{"line_number":89,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_05db954e","line":86,"range":{"start_line":85,"start_character":0,"end_line":86,"end_character":3},"in_reply_to":"5f7c97a3_545633d0","updated":"2018-05-31 01:59:28.000000000","message":"CYborg agent/drivers will discover the accelerators. This is done at agent startup and periodically after that. Cyborg needs to publish these resources first before a flavor referencing these resources can be requested by a tenant.","commit_id":"030d8f51517c9afe50cd79d96cda20713a924551"},{"author":{"_account_id":27505,"name":"Dutch Althoff","email":"dalthoff@genesiscloud.com","username":"Dutch"},"change_message_id":"381622789ad1027fc0615061ec40e4614dbf53df","unresolved":false,"context_lines":[{"line_number":87,"context_line":"  accelerators. This needs to happen through a library, named os-acc, patterned"},{"line_number":88,"context_line":"  after os-vif (Neutron) and os-brick (Cinder)."},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"* Cyborg Agent may call Glance to fetch a bitstream, either by id or based on"},{"line_number":91,"context_line":"  tags."},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"* Cyborg Agent may need to call into a Cyborg driver to program said bitstream."},{"line_number":94,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_861098aa","line":91,"range":{"start_line":90,"start_character":66,"end_line":91,"end_character":7},"updated":"2018-05-21 00:06:36.000000000","message":"What does this mean? What tags?","commit_id":"030d8f51517c9afe50cd79d96cda20713a924551"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"3d1d37e11411524bfe8acf28f2fded6af4677e36","unresolved":false,"context_lines":[{"line_number":87,"context_line":"  accelerators. This needs to happen through a library, named os-acc, patterned"},{"line_number":88,"context_line":"  after os-vif (Neutron) and os-brick (Cinder)."},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"* Cyborg Agent may call Glance to fetch a bitstream, either by id or based on"},{"line_number":91,"context_line":"  tags."},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"* Cyborg Agent may need to call into a Cyborg driver to program said bitstream."},{"line_number":94,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_d18c0c37","line":91,"range":{"start_line":90,"start_character":66,"end_line":91,"end_character":7},"in_reply_to":"5f7c97a3_861098aa","updated":"2018-05-21 01:04:39.000000000","message":"It should say properties instead of tags. Will fix.","commit_id":"030d8f51517c9afe50cd79d96cda20713a924551"},{"author":{"_account_id":27458,"name":"Li Liu","email":"liliueecg@gmail.com","username":"liliu"},"change_message_id":"226f3555153af86ef1cc912aedda53d4e8052bcd","unresolved":false,"context_lines":[{"line_number":90,"context_line":"* Cyborg Agent may call Glance to fetch a bitstream, either by id or based on"},{"line_number":91,"context_line":"  tags."},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"* Cyborg Agent may need to call into a Cyborg driver to program said bitstream."},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"* Cyborg Agent needs to call into a Cyborg driver to prepare a device and/or"},{"line_number":96,"context_line":"  obtain an attach handle (e.g. PCI BDF) that can be attached to the instance."}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_d8839f03","line":93,"range":{"start_line":93,"start_character":64,"end_line":93,"end_character":68},"updated":"2018-05-24 15:09:48.000000000","message":"the","commit_id":"030d8f51517c9afe50cd79d96cda20713a924551"},{"author":{"_account_id":27505,"name":"Dutch Althoff","email":"dalthoff@genesiscloud.com","username":"Dutch"},"change_message_id":"381622789ad1027fc0615061ec40e4614dbf53df","unresolved":false,"context_lines":[{"line_number":108,"context_line":"Use Cases"},{"line_number":109,"context_line":"---------"},{"line_number":110,"context_line":"Please see [#CyborgNovaSched]_. We intend to support FPGAaaS with"},{"line_number":111,"context_line":"request time programming, and AFaaS (both pre-programmed and"},{"line_number":112,"context_line":"orchestrator-programmed scenarios)."},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"Cyborg will discover accelerator resources whenever the Cyborg agent starts up."}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_c6c9b025","line":111,"range":{"start_line":111,"start_character":30,"end_line":111,"end_character":35},"updated":"2018-05-21 00:06:36.000000000","message":"What is this?","commit_id":"030d8f51517c9afe50cd79d96cda20713a924551"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"3d1d37e11411524bfe8acf28f2fded6af4677e36","unresolved":false,"context_lines":[{"line_number":108,"context_line":"Use Cases"},{"line_number":109,"context_line":"---------"},{"line_number":110,"context_line":"Please see [#CyborgNovaSched]_. We intend to support FPGAaaS with"},{"line_number":111,"context_line":"request time programming, and AFaaS (both pre-programmed and"},{"line_number":112,"context_line":"orchestrator-programmed scenarios)."},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"Cyborg will discover accelerator resources whenever the Cyborg agent starts up."}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_b1895027","line":111,"range":{"start_line":111,"start_character":30,"end_line":111,"end_character":35},"in_reply_to":"5f7c97a3_c6c9b025","updated":"2018-05-21 01:04:39.000000000","message":"Accelerated Function as a Service: defined earlier in this spec, same terminology as in the scheduling spec.","commit_id":"030d8f51517c9afe50cd79d96cda20713a924551"},{"author":{"_account_id":27458,"name":"Li Liu","email":"liliueecg@gmail.com","username":"liliu"},"change_message_id":"226f3555153af86ef1cc912aedda53d4e8052bcd","unresolved":false,"context_lines":[{"line_number":112,"context_line":"orchestrator-programmed scenarios)."},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"Cyborg will discover accelerator resources whenever the Cyborg agent starts up."},{"line_number":115,"context_line":"PCI hot plug can be supported past Rocky release."},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"Cyborg must support all instance operations mentioned in OpenStack Compute API"},{"line_number":118,"context_line":"[#ServerConcepts]_ in Rocky, except booting off a snapshot and live migration."}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_98a2079a","line":115,"range":{"start_line":115,"start_character":30,"end_line":115,"end_character":34},"updated":"2018-05-24 15:09:48.000000000","message":"post","commit_id":"030d8f51517c9afe50cd79d96cda20713a924551"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"4bc83b4fc7ac4c9827c5072414ea2fe50c7bb7d6","unresolved":false,"context_lines":[{"line_number":112,"context_line":"orchestrator-programmed scenarios)."},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"Cyborg will discover accelerator resources whenever the Cyborg agent starts up."},{"line_number":115,"context_line":"PCI hot plug can be supported past Rocky release."},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"Cyborg must support all instance operations mentioned in OpenStack Compute API"},{"line_number":118,"context_line":"[#ServerConcepts]_ in Rocky, except booting off a snapshot and live migration."}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_85756534","line":115,"range":{"start_line":115,"start_character":30,"end_line":115,"end_character":34},"in_reply_to":"5f7c97a3_98a2079a","updated":"2018-05-31 01:59:28.000000000","message":"Done","commit_id":"030d8f51517c9afe50cd79d96cda20713a924551"},{"author":{"_account_id":25738,"name":"Xinran WANG","email":"xin-ran.wang@intel.com","username":"Xinran"},"change_message_id":"362eeb6f22e736fa0a2da4c492def1594d2636dc","unresolved":false,"context_lines":[{"line_number":115,"context_line":"PCI hot plug can be supported past Rocky release."},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"Cyborg must support all instance operations mentioned in OpenStack Compute API"},{"line_number":118,"context_line":"[#ServerConcepts]_ in Rocky, except booting off a snapshot and live migration."},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"Proposed change"},{"line_number":121,"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":5,"id":"5f7c97a3_34e4d70c","line":118,"range":{"start_line":118,"start_character":62,"end_line":118,"end_character":77},"updated":"2018-05-30 09:27:10.000000000","message":"Does it mean Cyborg will not support hot plug and hot unplug for devices in Rocky?","commit_id":"030d8f51517c9afe50cd79d96cda20713a924551"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"4bc83b4fc7ac4c9827c5072414ea2fe50c7bb7d6","unresolved":false,"context_lines":[{"line_number":115,"context_line":"PCI hot plug can be supported past Rocky release."},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"Cyborg must support all instance operations mentioned in OpenStack Compute API"},{"line_number":118,"context_line":"[#ServerConcepts]_ in Rocky, except booting off a snapshot and live migration."},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"Proposed change"},{"line_number":121,"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":5,"id":"5f7c97a3_c5a4bda8","line":118,"range":{"start_line":118,"start_character":62,"end_line":118,"end_character":77},"in_reply_to":"5f7c97a3_34e4d70c","updated":"2018-05-31 01:59:28.000000000","message":"Not sure I follow -- the phrase \u0027live migration\u0027 is commented on, but the question is on hot plug. \n\nCyborg agent today polls the drivers periodically. This should enable handling of PCI hot swap. However, I am not aware of any pressing requirement to handle it now -- so, if there were a bug in PCI hot swap handling, we should probably deliver the basic functionality before getting to it.","commit_id":"030d8f51517c9afe50cd79d96cda20713a924551"},{"author":{"_account_id":27458,"name":"Li Liu","email":"liliueecg@gmail.com","username":"liliu"},"change_message_id":"226f3555153af86ef1cc912aedda53d4e8052bcd","unresolved":false,"context_lines":[{"line_number":123,"context_line":"OpenStack Server API Behavior"},{"line_number":124,"context_line":"-----------------------------"},{"line_number":125,"context_line":"The OpenStack Compute API [#ServerConcepts]_ mentions the list of operations"},{"line_number":126,"context_line":"that can be performed on an instance. Of these, some will not be supported by"},{"line_number":127,"context_line":"Cyborg in Rocky. The list of supported operations (with"},{"line_number":128,"context_line":"the intended behaviors) are as follows:"},{"line_number":129,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_78a7eba8","line":126,"range":{"start_line":126,"start_character":38,"end_line":126,"end_character":40},"updated":"2018-05-24 15:09:48.000000000","message":"Among","commit_id":"030d8f51517c9afe50cd79d96cda20713a924551"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"4bc83b4fc7ac4c9827c5072414ea2fe50c7bb7d6","unresolved":false,"context_lines":[{"line_number":123,"context_line":"OpenStack Server API Behavior"},{"line_number":124,"context_line":"-----------------------------"},{"line_number":125,"context_line":"The OpenStack Compute API [#ServerConcepts]_ mentions the list of operations"},{"line_number":126,"context_line":"that can be performed on an instance. Of these, some will not be supported by"},{"line_number":127,"context_line":"Cyborg in Rocky. The list of supported operations (with"},{"line_number":128,"context_line":"the intended behaviors) are as follows:"},{"line_number":129,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_45baedc0","line":126,"range":{"start_line":126,"start_character":38,"end_line":126,"end_character":40},"in_reply_to":"5f7c97a3_78a7eba8","updated":"2018-05-31 01:59:28.000000000","message":"Please clarify why this change is needed.","commit_id":"030d8f51517c9afe50cd79d96cda20713a924551"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"3d1d37e11411524bfe8acf28f2fded6af4677e36","unresolved":false,"context_lines":[{"line_number":128,"context_line":"the intended behaviors) are as follows:"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"* When an instance is started, the accelerators requested by that instance’s"},{"line_number":131,"context_line":"  flavor must be attached to the instance. On termination, those resources are"},{"line_number":132,"context_line":"  released."},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"* When an instance is paused, suspended or locked, the accelerator resources"}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_5178fc29","line":131,"range":{"start_line":131,"start_character":46,"end_line":131,"end_character":57},"updated":"2018-05-21 01:04:39.000000000","message":"On stop or terminate: will fix","commit_id":"030d8f51517c9afe50cd79d96cda20713a924551"},{"author":{"_account_id":27458,"name":"Li Liu","email":"liliueecg@gmail.com","username":"liliu"},"change_message_id":"226f3555153af86ef1cc912aedda53d4e8052bcd","unresolved":false,"context_lines":[{"line_number":128,"context_line":"the intended behaviors) are as follows:"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"* When an instance is started, the accelerators requested by that instance’s"},{"line_number":131,"context_line":"  flavor must be attached to the instance. On termination, those resources are"},{"line_number":132,"context_line":"  released."},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"* When an instance is paused, suspended or locked, the accelerator resources"}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_d8b15fe3","line":131,"range":{"start_line":131,"start_character":46,"end_line":131,"end_character":57},"updated":"2018-05-24 15:09:48.000000000","message":"as we discussed in the summit, I agree when the instance is terminated, accelerator resource should be released. But when some just stop the instance, I believe the resource should get released.","commit_id":"030d8f51517c9afe50cd79d96cda20713a924551"},{"author":{"_account_id":25738,"name":"Xinran WANG","email":"xin-ran.wang@intel.com","username":"Xinran"},"change_message_id":"362eeb6f22e736fa0a2da4c492def1594d2636dc","unresolved":false,"context_lines":[{"line_number":128,"context_line":"the intended behaviors) are as follows:"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"* When an instance is started, the accelerators requested by that instance’s"},{"line_number":131,"context_line":"  flavor must be attached to the instance. On termination, those resources are"},{"line_number":132,"context_line":"  released."},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"* When an instance is paused, suspended or locked, the accelerator resources"}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_f4973f44","line":131,"range":{"start_line":131,"start_character":46,"end_line":131,"end_character":57},"in_reply_to":"5f7c97a3_d8b15fe3","updated":"2018-05-30 09:27:10.000000000","message":"Li Liu, you mean the resource should not get released when someone just stop the instance I guess?","commit_id":"030d8f51517c9afe50cd79d96cda20713a924551"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"4bc83b4fc7ac4c9827c5072414ea2fe50c7bb7d6","unresolved":false,"context_lines":[{"line_number":128,"context_line":"the intended behaviors) are as follows:"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"* When an instance is started, the accelerators requested by that instance’s"},{"line_number":131,"context_line":"  flavor must be attached to the instance. On termination, those resources are"},{"line_number":132,"context_line":"  released."},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"* When an instance is paused, suspended or locked, the accelerator resources"}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_e5cd395d","line":131,"range":{"start_line":131,"start_character":46,"end_line":131,"end_character":57},"in_reply_to":"5f7c97a3_f4973f44","updated":"2018-05-31 01:59:28.000000000","message":"Yes, the resources are released on termination, but not when the instance is stopped. Fixed in the spec.","commit_id":"030d8f51517c9afe50cd79d96cda20713a924551"},{"author":{"_account_id":27505,"name":"Dutch Althoff","email":"dalthoff@genesiscloud.com","username":"Dutch"},"change_message_id":"381622789ad1027fc0615061ec40e4614dbf53df","unresolved":false,"context_lines":[{"line_number":131,"context_line":"  flavor must be attached to the instance. On termination, those resources are"},{"line_number":132,"context_line":"  released."},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"* When an instance is paused, suspended or locked, the accelerator resources"},{"line_number":135,"context_line":"  are left intact, and not detached from the instance. So, when the instance is"},{"line_number":136,"context_line":"  unpaused, resumed or unlocked, there is nothing to do."},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"* When an instance is shelved, the accelerator resources are detached. On an"},{"line_number":139,"context_line":"  unshelve, it is expected that the build operation will go through the"}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_e6fcec3f","line":136,"range":{"start_line":134,"start_character":0,"end_line":136,"end_character":56},"updated":"2018-05-21 00:06:36.000000000","message":"This is not ideal. Let\u0027s not do this.","commit_id":"030d8f51517c9afe50cd79d96cda20713a924551"},{"author":{"_account_id":27458,"name":"Li Liu","email":"liliueecg@gmail.com","username":"liliu"},"change_message_id":"226f3555153af86ef1cc912aedda53d4e8052bcd","unresolved":false,"context_lines":[{"line_number":131,"context_line":"  flavor must be attached to the instance. On termination, those resources are"},{"line_number":132,"context_line":"  released."},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"* When an instance is paused, suspended or locked, the accelerator resources"},{"line_number":135,"context_line":"  are left intact, and not detached from the instance. So, when the instance is"},{"line_number":136,"context_line":"  unpaused, resumed or unlocked, there is nothing to do."},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"* When an instance is shelved, the accelerator resources are detached. On an"},{"line_number":139,"context_line":"  unshelve, it is expected that the build operation will go through the"}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_f8e9bbb6","line":136,"range":{"start_line":134,"start_character":0,"end_line":136,"end_character":56},"in_reply_to":"5f7c97a3_7183b805","updated":"2018-05-24 15:09:48.000000000","message":"Dutch, for these scenarios(paused, suspended, locked), even without accelerators, I think we should guarantee the instance to be resumed on the same host as before, right?","commit_id":"030d8f51517c9afe50cd79d96cda20713a924551"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"3d1d37e11411524bfe8acf28f2fded6af4677e36","unresolved":false,"context_lines":[{"line_number":131,"context_line":"  flavor must be attached to the instance. On termination, those resources are"},{"line_number":132,"context_line":"  released."},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"* When an instance is paused, suspended or locked, the accelerator resources"},{"line_number":135,"context_line":"  are left intact, and not detached from the instance. So, when the instance is"},{"line_number":136,"context_line":"  unpaused, resumed or unlocked, there is nothing to do."},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"* When an instance is shelved, the accelerator resources are detached. On an"},{"line_number":139,"context_line":"  unshelve, it is expected that the build operation will go through the"}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_7183b805","line":136,"range":{"start_line":134,"start_character":0,"end_line":136,"end_character":56},"in_reply_to":"5f7c97a3_e6fcec3f","updated":"2018-05-21 01:04:39.000000000","message":"What is the alternative?","commit_id":"030d8f51517c9afe50cd79d96cda20713a924551"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"4bc83b4fc7ac4c9827c5072414ea2fe50c7bb7d6","unresolved":false,"context_lines":[{"line_number":131,"context_line":"  flavor must be attached to the instance. On termination, those resources are"},{"line_number":132,"context_line":"  released."},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"* When an instance is paused, suspended or locked, the accelerator resources"},{"line_number":135,"context_line":"  are left intact, and not detached from the instance. So, when the instance is"},{"line_number":136,"context_line":"  unpaused, resumed or unlocked, there is nothing to do."},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"* When an instance is shelved, the accelerator resources are detached. On an"},{"line_number":139,"context_line":"  unshelve, it is expected that the build operation will go through the"}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_45166daa","line":136,"range":{"start_line":134,"start_character":0,"end_line":136,"end_character":56},"in_reply_to":"5f7c97a3_f8e9bbb6","updated":"2018-05-31 01:59:28.000000000","message":"https://developer.openstack.org/api-ref/compute/ does not guarantee that. However, an unpause does not result in rescheduling, so it should come back in the same host.","commit_id":"030d8f51517c9afe50cd79d96cda20713a924551"},{"author":{"_account_id":27458,"name":"Li Liu","email":"liliueecg@gmail.com","username":"liliu"},"change_message_id":"226f3555153af86ef1cc912aedda53d4e8052bcd","unresolved":false,"context_lines":[{"line_number":172,"context_line":"* Booting off a snapshot: The snapshot may have been taken when the attached"},{"line_number":173,"context_line":"  accelerators were in a particular state. When booting off a previous"},{"line_number":174,"context_line":"  snapshot, the current configuration and state of accelerators may not match"},{"line_number":175,"context_line":"  the snapshot. So, this is unsupported."},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"* Live migration: Until a mechanism is defined to migrate accelerator state"},{"line_number":178,"context_line":"  along with the instance, this is unsupported."}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_0c6310b3","line":175,"updated":"2018-05-24 15:09:48.000000000","message":"Can we make it supported just to the extend that if the user does not care about the state of the accelerator,, we will just give back the resource, but no garantee on the state. This way, it should cover most of the cases already.","commit_id":"030d8f51517c9afe50cd79d96cda20713a924551"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"4bc83b4fc7ac4c9827c5072414ea2fe50c7bb7d6","unresolved":false,"context_lines":[{"line_number":172,"context_line":"* Booting off a snapshot: The snapshot may have been taken when the attached"},{"line_number":173,"context_line":"  accelerators were in a particular state. When booting off a previous"},{"line_number":174,"context_line":"  snapshot, the current configuration and state of accelerators may not match"},{"line_number":175,"context_line":"  the snapshot. So, this is unsupported."},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"* Live migration: Until a mechanism is defined to migrate accelerator state"},{"line_number":178,"context_line":"  along with the instance, this is unsupported."}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_c5dcbde5","line":175,"in_reply_to":"5f7c97a3_0c6310b3","updated":"2018-05-31 01:59:28.000000000","message":"How do we know whether the user cares or not? Consider this:\n1. A VM boots up with an assigned accelerator. \n2. A snapshot is taken.\n3. The VM allocates buffers and posts to the device.\n4. The VM is now rebooted off the snapshot in #2.\n5. The device starts to DMA. Oops -- no buffers!\n\nIn general, bad things will happen if the VM state is not correlated with device state.","commit_id":"030d8f51517c9afe50cd79d96cda20713a924551"},{"author":{"_account_id":27505,"name":"Dutch Althoff","email":"dalthoff@genesiscloud.com","username":"Dutch"},"change_message_id":"381622789ad1027fc0615061ec40e4614dbf53df","unresolved":false,"context_lines":[{"line_number":197,"context_line":""},{"line_number":198,"context_line":"* initialize()"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"  * Called once at start of day. Waits for Cyborg Agent to be ready to accept"},{"line_number":201,"context_line":"    requests, i.e., all devices enumerated and traits published."},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"  * Returns None on success."}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_467120de","line":200,"range":{"start_line":200,"start_character":19,"end_line":200,"end_character":31},"updated":"2018-05-21 00:06:36.000000000","message":"At the start of the day?","commit_id":"030d8f51517c9afe50cd79d96cda20713a924551"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"3d1d37e11411524bfe8acf28f2fded6af4677e36","unresolved":false,"context_lines":[{"line_number":197,"context_line":""},{"line_number":198,"context_line":"* initialize()"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"  * Called once at start of day. Waits for Cyborg Agent to be ready to accept"},{"line_number":201,"context_line":"    requests, i.e., all devices enumerated and traits published."},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"  * Returns None on success."}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_b18e3025","line":200,"range":{"start_line":200,"start_character":19,"end_line":200,"end_character":31},"in_reply_to":"5f7c97a3_467120de","updated":"2018-05-21 01:04:39.000000000","message":"Beginning of operations -- typically server boot-up, could be Nova compute restart","commit_id":"030d8f51517c9afe50cd79d96cda20713a924551"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"4bc83b4fc7ac4c9827c5072414ea2fe50c7bb7d6","unresolved":false,"context_lines":[{"line_number":197,"context_line":""},{"line_number":198,"context_line":"* initialize()"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"  * Called once at start of day. Waits for Cyborg Agent to be ready to accept"},{"line_number":201,"context_line":"    requests, i.e., all devices enumerated and traits published."},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"  * Returns None on success."}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_85fb2545","line":200,"range":{"start_line":200,"start_character":19,"end_line":200,"end_character":31},"in_reply_to":"5f7c97a3_b18e3025","updated":"2018-05-31 01:59:28.000000000","message":"Done","commit_id":"030d8f51517c9afe50cd79d96cda20713a924551"},{"author":{"_account_id":27458,"name":"Li Liu","email":"liliueecg@gmail.com","username":"liliu"},"change_message_id":"226f3555153af86ef1cc912aedda53d4e8052bcd","unresolved":false,"context_lines":[{"line_number":205,"context_line":"  * Throws ``CyborgAgentUnavailable`` exception if Cyborg Agent cannot be"},{"line_number":206,"context_line":"    contacted."},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"* plug(instance_info, selected_rp, flavor_extra_specs)"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"  * Parameters are all read-only. Here are their descriptions:"},{"line_number":211,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_ec8ed425","line":208,"range":{"start_line":208,"start_character":22,"end_line":208,"end_character":33},"updated":"2018-05-24 15:09:48.000000000","message":"Better make this a list as there might be multiple devices need to plug.","commit_id":"030d8f51517c9afe50cd79d96cda20713a924551"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"4bc83b4fc7ac4c9827c5072414ea2fe50c7bb7d6","unresolved":false,"context_lines":[{"line_number":205,"context_line":"  * Throws ``CyborgAgentUnavailable`` exception if Cyborg Agent cannot be"},{"line_number":206,"context_line":"    contacted."},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"* plug(instance_info, selected_rp, flavor_extra_specs)"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"  * Parameters are all read-only. Here are their descriptions:"},{"line_number":211,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_c58a7dbd","line":208,"range":{"start_line":208,"start_character":22,"end_line":208,"end_character":33},"in_reply_to":"5f7c97a3_ec8ed425","updated":"2018-05-31 01:59:28.000000000","message":"Agreed, but how do we correlate the list of RPs with vaious fields in extra specs? That is, if region A needs bitstream 1 and region B needs bitstream 2, how would we know that?","commit_id":"030d8f51517c9afe50cd79d96cda20713a924551"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"d1068070549e9e103eb490595046a16ba4411a20","unresolved":false,"context_lines":[{"line_number":209,"context_line":""},{"line_number":210,"context_line":"  * Parameters are all read-only. Here are their descriptions:"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"    * instance_info: dictionary containing instance UUID, instance name,"},{"line_number":213,"context_line":"      project/tenant ID and VM image UUID. The instance name is needed for"},{"line_number":214,"context_line":"      better logging, the project/tenant ID may be passed to some accelerator"},{"line_number":215,"context_line":"      policy engine in the future and the VM image UUID may be used to query"}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_9d6042a7","line":212,"range":{"start_line":212,"start_character":21,"end_line":212,"end_character":31},"updated":"2018-06-13 19:19:13.000000000","message":"Following the example of os-vif, these should params be versioned objects, since they\u0027ll be flying around among several services (Nova, Cyborg, and potentially Glance).","commit_id":"030d8f51517c9afe50cd79d96cda20713a924551"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"b0e3a53c5434d0903634ba7e374ae3b1b1df8959","unresolved":false,"context_lines":[{"line_number":209,"context_line":""},{"line_number":210,"context_line":"  * Parameters are all read-only. Here are their descriptions:"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"    * instance_info: dictionary containing instance UUID, instance name,"},{"line_number":213,"context_line":"      project/tenant ID and VM image UUID. The instance name is needed for"},{"line_number":214,"context_line":"      better logging, the project/tenant ID may be passed to some accelerator"},{"line_number":215,"context_line":"      policy engine in the future and the VM image UUID may be used to query"}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_e86e4962","line":212,"range":{"start_line":212,"start_character":21,"end_line":212,"end_character":31},"in_reply_to":"5f7c97a3_9d6042a7","updated":"2018-06-14 06:25:04.000000000","message":"OK","commit_id":"030d8f51517c9afe50cd79d96cda20713a924551"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"d1068070549e9e103eb490595046a16ba4411a20","unresolved":false,"context_lines":[{"line_number":216,"context_line":"      Glance for metadata about accelerator requirements that may be stored"},{"line_number":217,"context_line":"      with the VM image."},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"    * selected_rp: Information about the selected resource provider is"},{"line_number":220,"context_line":"      passed as a dictionary."},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"    * flavor_extra_specs: the extra_specs field in the flavor, including"},{"line_number":223,"context_line":"      resource classes, traits and other fields interpreted by Cyborg."}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_5d0b8ad3","line":220,"range":{"start_line":219,"start_character":6,"end_line":220,"end_character":29},"updated":"2018-06-13 19:19:13.000000000","message":"Again following os-vif, I was expecting to see os-acc define an ovo base class (AccBase?) from which a number of accelerator type subclasses would be derived (AccGPU, AccFPGA, AccHPTS, ...), and this parameter would be an instance of one of those subclasses.  AccBase would have a `plugin` field in which I can register the path of my platform-specific AccPluginBase subclass that knows how to plug and unplug (and depending on the accelerator type, program) that particular type for that particular platform.","commit_id":"030d8f51517c9afe50cd79d96cda20713a924551"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"b0e3a53c5434d0903634ba7e374ae3b1b1df8959","unresolved":false,"context_lines":[{"line_number":216,"context_line":"      Glance for metadata about accelerator requirements that may be stored"},{"line_number":217,"context_line":"      with the VM image."},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"    * selected_rp: Information about the selected resource provider is"},{"line_number":220,"context_line":"      passed as a dictionary."},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"    * flavor_extra_specs: the extra_specs field in the flavor, including"},{"line_number":223,"context_line":"      resource classes, traits and other fields interpreted by Cyborg."}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_08a3859f","line":220,"range":{"start_line":219,"start_character":6,"end_line":220,"end_character":29},"in_reply_to":"5f7c97a3_5d0b8ad3","updated":"2018-06-14 06:25:04.000000000","message":"Will update","commit_id":"030d8f51517c9afe50cd79d96cda20713a924551"},{"author":{"_account_id":27505,"name":"Dutch Althoff","email":"dalthoff@genesiscloud.com","username":"Dutch"},"change_message_id":"381622789ad1027fc0615061ec40e4614dbf53df","unresolved":false,"context_lines":[{"line_number":231,"context_line":""},{"line_number":232,"context_line":"  * As part of this call, Cyborg Agent may fetch bitstreams from Glance and"},{"line_number":233,"context_line":"    initiate programming. It may fetch the bitstream specified in the"},{"line_number":234,"context_line":"    request’s flavor extra specs, if any. If the request refers to a"},{"line_number":235,"context_line":"    function ID/name, Cyborg Agent would query Glance to find bitstreams"},{"line_number":236,"context_line":"    that provide the flavor and match the chosen device, and would then"},{"line_number":237,"context_line":"    fetch the needed bitstream."},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"  * As part of this call, Cyborg Agent will locate the Deployable corresponding"},{"line_number":240,"context_line":"    to the chosen RP, locate the attach handles (e.g. PCI BDF) needed, update"}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_d1788c90","line":237,"range":{"start_line":234,"start_character":42,"end_line":237,"end_character":31},"updated":"2018-05-21 00:06:36.000000000","message":"This is not clear. \nFunction ID/name from where? \nGlance and bitstreams don\u0027t really provide flavors, I\u0027m not sure what this means.","commit_id":"030d8f51517c9afe50cd79d96cda20713a924551"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"3d1d37e11411524bfe8acf28f2fded6af4677e36","unresolved":false,"context_lines":[{"line_number":231,"context_line":""},{"line_number":232,"context_line":"  * As part of this call, Cyborg Agent may fetch bitstreams from Glance and"},{"line_number":233,"context_line":"    initiate programming. It may fetch the bitstream specified in the"},{"line_number":234,"context_line":"    request’s flavor extra specs, if any. If the request refers to a"},{"line_number":235,"context_line":"    function ID/name, Cyborg Agent would query Glance to find bitstreams"},{"line_number":236,"context_line":"    that provide the flavor and match the chosen device, and would then"},{"line_number":237,"context_line":"    fetch the needed bitstream."},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"  * As part of this call, Cyborg Agent will locate the Deployable corresponding"},{"line_number":240,"context_line":"    to the chosen RP, locate the attach handles (e.g. PCI BDF) needed, update"}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_519d5c55","line":237,"range":{"start_line":234,"start_character":42,"end_line":237,"end_character":31},"in_reply_to":"5f7c97a3_d1788c90","updated":"2018-05-21 01:04:39.000000000","message":"Please read this in conjunction with earlier specs, like scheduling and bitstream metadata. A bitstream may have an optional properties: Function ID and Function Name. They will identify the bitstream\u0027s functionality, e.g. gzip. This is part of AFaaS.\n\ns/flavor/function -- will fix.","commit_id":"030d8f51517c9afe50cd79d96cda20713a924551"},{"author":{"_account_id":25738,"name":"Xinran WANG","email":"xin-ran.wang@intel.com","username":"Xinran"},"change_message_id":"362eeb6f22e736fa0a2da4c492def1594d2636dc","unresolved":false,"context_lines":[{"line_number":236,"context_line":"    that provide the flavor and match the chosen device, and would then"},{"line_number":237,"context_line":"    fetch the needed bitstream."},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"  * As part of this call, Cyborg Agent will locate the Deployable corresponding"},{"line_number":240,"context_line":"    to the chosen RP, locate the attach handles (e.g. PCI BDF) needed, update"},{"line_number":241,"context_line":"    its internal data structures in a persistent way, and return the needed"},{"line_number":242,"context_line":"    information back to Nova."}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_cf186a77","line":239,"range":{"start_line":239,"start_character":51,"end_line":239,"end_character":66},"updated":"2018-05-30 09:27:10.000000000","message":"Small question : When is the Deployable is created ?","commit_id":"030d8f51517c9afe50cd79d96cda20713a924551"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"4bc83b4fc7ac4c9827c5072414ea2fe50c7bb7d6","unresolved":false,"context_lines":[{"line_number":236,"context_line":"    that provide the flavor and match the chosen device, and would then"},{"line_number":237,"context_line":"    fetch the needed bitstream."},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"  * As part of this call, Cyborg Agent will locate the Deployable corresponding"},{"line_number":240,"context_line":"    to the chosen RP, locate the attach handles (e.g. PCI BDF) needed, update"},{"line_number":241,"context_line":"    its internal data structures in a persistent way, and return the needed"},{"line_number":242,"context_line":"    information back to Nova."}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_25b9f177","line":239,"range":{"start_line":239,"start_character":51,"end_line":239,"end_character":66},"in_reply_to":"5f7c97a3_cf186a77","updated":"2018-05-31 01:59:28.000000000","message":"Cyborg creates the Deployable when it discovers the devices, regions, etc., before it populates Placement with RPs etc.","commit_id":"030d8f51517c9afe50cd79d96cda20713a924551"},{"author":{"_account_id":27458,"name":"Li Liu","email":"liliueecg@gmail.com","username":"liliu"},"change_message_id":"226f3555153af86ef1cc912aedda53d4e8052bcd","unresolved":false,"context_lines":[{"line_number":244,"context_line":"  * Returns an array, with one entry per requested accelerator, each entry"},{"line_number":245,"context_line":"    being a dictionary. The dictionary is structured as below for Rocky:"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"   | { “pci_id”: \u003cpci bdf\u003e }"},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"* unplug(instance_info)"},{"line_number":250,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_8c8f202d","line":247,"range":{"start_line":247,"start_character":3,"end_line":247,"end_character":28},"updated":"2018-05-24 15:09:48.000000000","message":"I have a feeling this is still too PCI oriented. Since os-ass wants to provide attach function to various protocols(pci is one of these).\nAlso, the function plug does not look like a \"plug\", rather a \"preparation\". It \"prepare\" the device and give it back the bdf to Nova Compute for the actual attachment. Can os-acc actually help to do the actual attachment?","commit_id":"030d8f51517c9afe50cd79d96cda20713a924551"},{"author":{"_account_id":25738,"name":"Xinran WANG","email":"xin-ran.wang@intel.com","username":"Xinran"},"change_message_id":"362eeb6f22e736fa0a2da4c492def1594d2636dc","unresolved":false,"context_lines":[{"line_number":244,"context_line":"  * Returns an array, with one entry per requested accelerator, each entry"},{"line_number":245,"context_line":"    being a dictionary. The dictionary is structured as below for Rocky:"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"   | { “pci_id”: \u003cpci bdf\u003e }"},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"* unplug(instance_info)"},{"line_number":250,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_0f98a2bd","line":247,"range":{"start_line":247,"start_character":3,"end_line":247,"end_character":28},"updated":"2018-05-30 09:27:10.000000000","message":"I\u0027m agree with Li Liu, if cyborg don\u0027t return pci_id to nova, what will be returned to Nova?","commit_id":"030d8f51517c9afe50cd79d96cda20713a924551"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"4bc83b4fc7ac4c9827c5072414ea2fe50c7bb7d6","unresolved":false,"context_lines":[{"line_number":244,"context_line":"  * Returns an array, with one entry per requested accelerator, each entry"},{"line_number":245,"context_line":"    being a dictionary. The dictionary is structured as below for Rocky:"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"   | { “pci_id”: \u003cpci bdf\u003e }"},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"* unplug(instance_info)"},{"line_number":250,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_651fe96b","line":247,"range":{"start_line":247,"start_character":3,"end_line":247,"end_character":28},"in_reply_to":"5f7c97a3_0f98a2bd","updated":"2018-05-31 01:59:28.000000000","message":"Agreed this part is PCI-oriented and should not be so. However, do we know enough about all alternatives, like mediated devices and their use cases, to address them now? I suspect that: (a) we will be able to address only PCI devices in Rocky, and (b) we have to revisit any proposed interface as we learn more about alternatives. What do you all think?","commit_id":"030d8f51517c9afe50cd79d96cda20713a924551"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"d1068070549e9e103eb490595046a16ba4411a20","unresolved":false,"context_lines":[{"line_number":244,"context_line":"  * Returns an array, with one entry per requested accelerator, each entry"},{"line_number":245,"context_line":"    being a dictionary. The dictionary is structured as below for Rocky:"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"   | { “pci_id”: \u003cpci bdf\u003e }"},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"* unplug(instance_info)"},{"line_number":250,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_9da122ac","line":247,"range":{"start_line":247,"start_character":3,"end_line":247,"end_character":28},"in_reply_to":"5f7c97a3_651fe96b","updated":"2018-06-13 19:19:13.000000000","message":"First, why an array?  Each call to `plug` is only plugging one device, nah?\n\nSecond, why does the caller need to know this information?  What is it going to do with it?\n\nI would suggest that any code that needs to know about PCI should live in the vendor-specific code (plugins), not in the main os-acc library, cyborg agent, etc.\n\nIf such information is necessary for some *other* vendor-specific call later on (like unplug?) then it should be returned as an instance of a vendor-registered object which is opaque to the common code.","commit_id":"030d8f51517c9afe50cd79d96cda20713a924551"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"e943a9cc7a49913952af10fe37614abf1f89170e","unresolved":false,"context_lines":[{"line_number":244,"context_line":"  * Returns an array, with one entry per requested accelerator, each entry"},{"line_number":245,"context_line":"    being a dictionary. The dictionary is structured as below for Rocky:"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"   | { “pci_id”: \u003cpci bdf\u003e }"},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"* unplug(instance_info)"},{"line_number":250,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_1c7ae275","line":247,"range":{"start_line":247,"start_character":3,"end_line":247,"end_character":28},"in_reply_to":"5f7c97a3_882b15e9","updated":"2018-06-14 13:23:09.000000000","message":"\u003e 1. The plugin handles an array because, in general, a VM may need\n \u003e multiple accelerators; and attaching them may require\n \u003e synchronization. The plugin may serialize or parallelize the\n \u003e attaches based on the need for synchronization and performance.\n\nIf the devices are somehow interdependent, or if it is important to attach them in a certain order, then I can buy that.  But if the only issue is parallel vs. serial, certainly the call can be parallel (optimized performance by default) and the plugin can serialize via a lock if necessary/desired.  That\u0027s easier than each plugin duplicating threading code, which is finicky and error-prone.\n\nCurious how others feel about this.  I believe it\u0027s what neutron does for port plugging, isn\u0027t it?\n\n \u003e 2. The caller needs to pass the info to the virt drivers. For\n \u003e example, libvirt\u0027s domain XML has to be updated with the PCI bdf\n \u003e for passthrough.\n \u003e Since the domain XML that libvirt handles has to have the PCI BDFs,\n \u003e it is not clear to me how we can confine the PCI aspects to the\n \u003e vendor driver alone.\n\nAh, see this is exactly where getting closer to the os-vif model will help you.  I may still be misunderstanding os-vif - I only dove into it very recently - but each VIF object has a `plugin` field whose value is the path to a plugin class which implements *vendor/driver-specific* plug and unplug methods.  Any vendor/driver-specific information is embedded in the VIF object, and vendor/driver-specific logic is isolated to the plugin.\n\nLet\u0027s have a chat about this on IRC or hangout when we can get an os-vif expert to join us.  What geo are you in?","commit_id":"030d8f51517c9afe50cd79d96cda20713a924551"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"b0e3a53c5434d0903634ba7e374ae3b1b1df8959","unresolved":false,"context_lines":[{"line_number":244,"context_line":"  * Returns an array, with one entry per requested accelerator, each entry"},{"line_number":245,"context_line":"    being a dictionary. The dictionary is structured as below for Rocky:"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"   | { “pci_id”: \u003cpci bdf\u003e }"},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"* unplug(instance_info)"},{"line_number":250,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_882b15e9","line":247,"range":{"start_line":247,"start_character":3,"end_line":247,"end_character":28},"in_reply_to":"5f7c97a3_9da122ac","updated":"2018-06-14 06:25:04.000000000","message":"1. The plugin handles an array because, in general, a VM may need multiple accelerators; and attaching them may require synchronization. The plugin may serialize or parallelize the attaches based on the need for synchronization and performance.\n\n2. The caller needs to pass the info to the virt drivers. For example, libvirt\u0027s domain XML has to be updated with the PCI bdf for passthrough. \n   Since the domain XML that libvirt handles has to have the PCI BDFs, it is not clear to me how we can confine the PCI aspects to the vendor driver alone.","commit_id":"030d8f51517c9afe50cd79d96cda20713a924551"},{"author":{"_account_id":27458,"name":"Li Liu","email":"liliueecg@gmail.com","username":"liliu"},"change_message_id":"226f3555153af86ef1cc912aedda53d4e8052bcd","unresolved":false,"context_lines":[{"line_number":246,"context_line":""},{"line_number":247,"context_line":"   | { “pci_id”: \u003cpci bdf\u003e }"},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"* unplug(instance_info)"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"  * Parameters are all read-only. Here are their descriptions:"},{"line_number":252,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_6c7de41a","line":249,"range":{"start_line":249,"start_character":9,"end_line":249,"end_character":22},"updated":"2018-05-24 15:09:48.000000000","message":"Suggest to add an optional parameter here --\u003e list of accelerators to be unplugged. Since we don\u0027t want the life cycle of accelerators to be bond to the instance.","commit_id":"030d8f51517c9afe50cd79d96cda20713a924551"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"b0e3a53c5434d0903634ba7e374ae3b1b1df8959","unresolved":false,"context_lines":[{"line_number":246,"context_line":""},{"line_number":247,"context_line":"   | { “pci_id”: \u003cpci bdf\u003e }"},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"* unplug(instance_info)"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"  * Parameters are all read-only. Here are their descriptions:"},{"line_number":252,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_a817f1a2","line":249,"range":{"start_line":249,"start_character":9,"end_line":249,"end_character":22},"in_reply_to":"5f7c97a3_5d806af7","updated":"2018-06-14 06:25:04.000000000","message":"Having the ability to handle N accelerators at a time automatically allows us to handle the special case when N\u003d1. But, if all we have is the single-accelerator case, handling the N \u003e 1 scenario will issues of concurrency and performance.","commit_id":"030d8f51517c9afe50cd79d96cda20713a924551"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"4bc83b4fc7ac4c9827c5072414ea2fe50c7bb7d6","unresolved":false,"context_lines":[{"line_number":246,"context_line":""},{"line_number":247,"context_line":"   | { “pci_id”: \u003cpci bdf\u003e }"},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"* unplug(instance_info)"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"  * Parameters are all read-only. Here are their descriptions:"},{"line_number":252,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_803313f6","line":249,"range":{"start_line":249,"start_character":9,"end_line":249,"end_character":22},"in_reply_to":"5f7c97a3_6c7de41a","updated":"2018-05-31 01:59:28.000000000","message":"unplug is basically detach, rather than power-off, just as in os-vif (in case it was confusing). On instance termination, shelve etc., all accelerators attached to that instance will be detached (i.e. unplugged).","commit_id":"030d8f51517c9afe50cd79d96cda20713a924551"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"d1068070549e9e103eb490595046a16ba4411a20","unresolved":false,"context_lines":[{"line_number":246,"context_line":""},{"line_number":247,"context_line":"   | { “pci_id”: \u003cpci bdf\u003e }"},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"* unplug(instance_info)"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"  * Parameters are all read-only. Here are their descriptions:"},{"line_number":252,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_5d806af7","line":249,"range":{"start_line":249,"start_character":9,"end_line":249,"end_character":22},"in_reply_to":"5f7c97a3_803313f6","updated":"2018-06-13 19:19:13.000000000","message":"We still need the ability to request unplug of a specific device.  If there isn\u0027t already, there will eventually be a need for the accelerator equivalent of attach_interface/attach_volume and their detach_* counterparts.\n\nAs with plug, this method should take a single accelerator and be invoked in a (potentially asynchronous) loop if you\u0027re doing something like destroying the instance.","commit_id":"030d8f51517c9afe50cd79d96cda20713a924551"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"e943a9cc7a49913952af10fe37614abf1f89170e","unresolved":false,"context_lines":[{"line_number":246,"context_line":""},{"line_number":247,"context_line":"   | { “pci_id”: \u003cpci bdf\u003e }"},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"* unplug(instance_info)"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"  * Parameters are all read-only. Here are their descriptions:"},{"line_number":252,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_bcb64e24","line":249,"range":{"start_line":249,"start_character":9,"end_line":249,"end_character":22},"in_reply_to":"5f7c97a3_a817f1a2","updated":"2018-06-14 13:23:09.000000000","message":"Right, but the problem here is that you *only* have the ability to handle N accelerators (i.e. all of them).\n\nWe can have the concurrency discussion same as above as to whether any threading should be done by the caller or the method.  If we decide on the latter, obviously the method needs to accept args specifying a particular accelerator to unplug.  But even if we decide on the former, it still needs to accept a list of them, so that we can ask it to unplug one or more *particular* accelerators and leave the others plugged in.","commit_id":"030d8f51517c9afe50cd79d96cda20713a924551"},{"author":{"_account_id":27505,"name":"Dutch Althoff","email":"dalthoff@genesiscloud.com","username":"Dutch"},"change_message_id":"381622789ad1027fc0615061ec40e4614dbf53df","unresolved":false,"context_lines":[{"line_number":275,"context_line":"  def plug(instance_info, rp, extra_specs):"},{"line_number":276,"context_line":"    validate_params(....)"},{"line_number":277,"context_line":"    glance \u003d glanceclient.Client(...)"},{"line_number":278,"context_line":"    driver \u003d # select Cyborg driver for chosen rp"},{"line_number":279,"context_line":"    rp_deployable \u003d # get deployable for RP"},{"line_number":280,"context_line":"    if extra_specs refers to ``CUSTOM_FPGA_\u003cvendor\u003e_REGION_\u003cuuid\u003e`` and"},{"line_number":281,"context_line":"       extra_specs refers to ``bitstream:\u003cuuid\u003e``:"}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_b19ab0c2","line":278,"range":{"start_line":278,"start_character":47,"end_line":278,"end_character":49},"updated":"2018-05-21 00:06:36.000000000","message":"RP","commit_id":"030d8f51517c9afe50cd79d96cda20713a924551"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"3d1d37e11411524bfe8acf28f2fded6af4677e36","unresolved":false,"context_lines":[{"line_number":275,"context_line":"  def plug(instance_info, rp, extra_specs):"},{"line_number":276,"context_line":"    validate_params(....)"},{"line_number":277,"context_line":"    glance \u003d glanceclient.Client(...)"},{"line_number":278,"context_line":"    driver \u003d # select Cyborg driver for chosen rp"},{"line_number":279,"context_line":"    rp_deployable \u003d # get deployable for RP"},{"line_number":280,"context_line":"    if extra_specs refers to ``CUSTOM_FPGA_\u003cvendor\u003e_REGION_\u003cuuid\u003e`` and"},{"line_number":281,"context_line":"       extra_specs refers to ``bitstream:\u003cuuid\u003e``:"}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_b1b710d9","line":278,"range":{"start_line":278,"start_character":47,"end_line":278,"end_character":49},"in_reply_to":"5f7c97a3_b19ab0c2","updated":"2018-05-21 01:04:39.000000000","message":"Is this a comment on lower vs upper case? Or something more?","commit_id":"030d8f51517c9afe50cd79d96cda20713a924551"}]}
