)]}'
{"specs/stein/approved/nova-cyborg-interaction.rst":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5146079f94401dbf76d0ea5f6cf01f97b78e8383","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"* Representation: Cyborg shall represent devices as nested resource providers"},{"line_number":32,"context_line":"  under the compute node (except possibly for disaggregated servers),"},{"line_number":33,"context_line":"  accelerator types as resource classes and accelerators as resource units in"},{"line_number":34,"context_line":"  Placement. This is specified by [#cy-nova-place]_. This spec does not"},{"line_number":35,"context_line":"  dwell on this topic."},{"line_number":36,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_4d0d2f3c","line":33,"updated":"2018-09-20 07:27:58.000000000","message":"a resouce unit is not a placment concept. the correct ter in placment inventory.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"f77b20a084f6cb9b70f46a8993fe54c546c540dd","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"* Representation: Cyborg shall represent devices as nested resource providers"},{"line_number":32,"context_line":"  under the compute node (except possibly for disaggregated servers),"},{"line_number":33,"context_line":"  accelerator types as resource classes and accelerators as resource units in"},{"line_number":34,"context_line":"  Placement. This is specified by [#cy-nova-place]_. This spec does not"},{"line_number":35,"context_line":"  dwell on this topic."},{"line_number":36,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_709d4907","line":33,"in_reply_to":"3f79a3b5_4d0d2f3c","updated":"2018-09-28 13:21:33.000000000","message":"Done","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5146079f94401dbf76d0ea5f6cf01f97b78e8383","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"* Discovery and Updates: Among the devices discovered in a host, Cyborg"},{"line_number":38,"context_line":"  intends to claim only those that are not included under the PCI"},{"line_number":39,"context_line":"  Whitelisting mechanism. Cyborg shall update Placement in a way that is"},{"line_number":40,"context_line":"  compatible with the virt driver\u0027s update of Placement. Both these aspects"},{"line_number":41,"context_line":"  are addressed in Section `Discovery and Updates`_. Cyborg-specific details"},{"line_number":42,"context_line":"  of device discovery and update are specified by [#dev-disc]_."}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_6d082b2c","line":39,"updated":"2018-09-20 07:27:58.000000000","message":"cybog will not have acess to the pci whitelist or any other nova config file.\nthis was stated several times at the ptg.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"f77b20a084f6cb9b70f46a8993fe54c546c540dd","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"* Discovery and Updates: Among the devices discovered in a host, Cyborg"},{"line_number":38,"context_line":"  intends to claim only those that are not included under the PCI"},{"line_number":39,"context_line":"  Whitelisting mechanism. Cyborg shall update Placement in a way that is"},{"line_number":40,"context_line":"  compatible with the virt driver\u0027s update of Placement. Both these aspects"},{"line_number":41,"context_line":"  are addressed in Section `Discovery and Updates`_. Cyborg-specific details"},{"line_number":42,"context_line":"  of device discovery and update are specified by [#dev-disc]_."}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_9dfe95ad","line":39,"in_reply_to":"3f79a3b5_54e4ac42","updated":"2018-09-28 13:21:33.000000000","message":"Yes.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"67e70d80415b43e45708e03a8d92e8c31320734e","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"* Discovery and Updates: Among the devices discovered in a host, Cyborg"},{"line_number":38,"context_line":"  intends to claim only those that are not included under the PCI"},{"line_number":39,"context_line":"  Whitelisting mechanism. Cyborg shall update Placement in a way that is"},{"line_number":40,"context_line":"  compatible with the virt driver\u0027s update of Placement. Both these aspects"},{"line_number":41,"context_line":"  are addressed in Section `Discovery and Updates`_. Cyborg-specific details"},{"line_number":42,"context_line":"  of device discovery and update are specified by [#dev-disc]_."}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_3c9c8a59","line":39,"in_reply_to":"3f79a3b5_67a12a95","updated":"2018-10-04 01:04:27.000000000","message":"Initially, we\u0027ll leave it to the operator to ensure that a device is claimed by Nova exor Cyborg (not both). We can investigate other solutions later.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"f77b20a084f6cb9b70f46a8993fe54c546c540dd","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"* Discovery and Updates: Among the devices discovered in a host, Cyborg"},{"line_number":38,"context_line":"  intends to claim only those that are not included under the PCI"},{"line_number":39,"context_line":"  Whitelisting mechanism. Cyborg shall update Placement in a way that is"},{"line_number":40,"context_line":"  compatible with the virt driver\u0027s update of Placement. Both these aspects"},{"line_number":41,"context_line":"  are addressed in Section `Discovery and Updates`_. Cyborg-specific details"},{"line_number":42,"context_line":"  of device discovery and update are specified by [#dev-disc]_."}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_99e85b7b","line":39,"in_reply_to":"3f79a3b5_6d082b2c","updated":"2018-09-28 13:21:33.000000000","message":"I didn\u0027t say that Cyborg has access to any file or will read it. This statement only says what we want to do , not how we will do it.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b40e9f3d0a255f28fde945e611ab7b4172e5fe06","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"* Discovery and Updates: Among the devices discovered in a host, Cyborg"},{"line_number":38,"context_line":"  intends to claim only those that are not included under the PCI"},{"line_number":39,"context_line":"  Whitelisting mechanism. Cyborg shall update Placement in a way that is"},{"line_number":40,"context_line":"  compatible with the virt driver\u0027s update of Placement. Both these aspects"},{"line_number":41,"context_line":"  are addressed in Section `Discovery and Updates`_. Cyborg-specific details"},{"line_number":42,"context_line":"  of device discovery and update are specified by [#dev-disc]_."}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_54e4ac42","line":39,"in_reply_to":"3f79a3b5_6d082b2c","updated":"2018-09-21 22:07:08.000000000","message":"Right, so, \"It is the admin\u0027s responsibility to ensure that the nova PCI passthrough whitelist and cyborg-managed inventories are mutually exclusive.\"","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":27458,"name":"Li Liu","email":"liliueecg@gmail.com","username":"liliu"},"change_message_id":"0151e19806f554c959e63c0cd3fa33a1d1470c75","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"* Discovery and Updates: Among the devices discovered in a host, Cyborg"},{"line_number":38,"context_line":"  intends to claim only those that are not included under the PCI"},{"line_number":39,"context_line":"  Whitelisting mechanism. Cyborg shall update Placement in a way that is"},{"line_number":40,"context_line":"  compatible with the virt driver\u0027s update of Placement. Both these aspects"},{"line_number":41,"context_line":"  are addressed in Section `Discovery and Updates`_. Cyborg-specific details"},{"line_number":42,"context_line":"  of device discovery and update are specified by [#dev-disc]_."}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_67a12a95","line":39,"in_reply_to":"3f79a3b5_99e85b7b","updated":"2018-10-03 01:30:33.000000000","message":"I think Cyborg will just simply ignore what\u0027s specified in nova\u0027s pci whitelists. We don\u0027t deal with stuff on that side.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5146079f94401dbf76d0ea5f6cf01f97b78e8383","unresolved":false,"context_lines":[{"line_number":54,"context_line":"* Instance scheduling: Nova shall use the Placement data populated by Cyborg"},{"line_number":55,"context_line":"  to schedule instances. Cyborg may optionally provide filters or weighers"},{"line_number":56,"context_line":"  that follow the standard Nova model.  This spec does not dwell on this"},{"line_number":57,"context_line":"  topic."},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"* Assignment of accelerators: Nova and Cyborg shall work together to assign"},{"line_number":60,"context_line":"  accelerators to an instance upon user request and de-assign them when the"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_0d03b711","line":57,"updated":"2018-09-20 07:27:58.000000000","message":"it should be noted that following the standard nova model implies the cyborg filters will not make any rest or db calls to cyborg.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"f77b20a084f6cb9b70f46a8993fe54c546c540dd","unresolved":false,"context_lines":[{"line_number":54,"context_line":"* Instance scheduling: Nova shall use the Placement data populated by Cyborg"},{"line_number":55,"context_line":"  to schedule instances. Cyborg may optionally provide filters or weighers"},{"line_number":56,"context_line":"  that follow the standard Nova model.  This spec does not dwell on this"},{"line_number":57,"context_line":"  topic."},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"* Assignment of accelerators: Nova and Cyborg shall work together to assign"},{"line_number":60,"context_line":"  accelerators to an instance upon user request and de-assign them when the"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_799a1f13","line":57,"in_reply_to":"3f79a3b5_0d03b711","updated":"2018-09-28 13:21:33.000000000","message":"Updated.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5146079f94401dbf76d0ea5f6cf01f97b78e8383","unresolved":false,"context_lines":[{"line_number":96,"context_line":"^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"},{"line_number":97,"context_line":"The operator tells Nova which PCI devices to claim and use by configuring the"},{"line_number":98,"context_line":"PCI Whitelists mechanism. The operator tells Cyborg which devices to claim by"},{"line_number":99,"context_line":"installing Cyborg drivers and configuring them in Cyborg\u0027s ``setup.cfg``. The"},{"line_number":100,"context_line":"operator must ensure that both configurations are compatible."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"Cyborg developers can help the operators by providing a tool to detect"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_2dfeb305","line":99,"updated":"2018-09-20 07:27:58.000000000","message":"that is not how the setup.cfg works.\nthe setup.cfg is a config file for python setuptools to allow packaging of cyborg and is not something the opeator uses. cyborg will need an actual config file. for deivce whitlisting. as an alternitive if we proceed with https://review.openstack.org/#/c/603805/ you can consume a copy of the config file created by that proposal.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"f77b20a084f6cb9b70f46a8993fe54c546c540dd","unresolved":false,"context_lines":[{"line_number":96,"context_line":"^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"},{"line_number":97,"context_line":"The operator tells Nova which PCI devices to claim and use by configuring the"},{"line_number":98,"context_line":"PCI Whitelists mechanism. The operator tells Cyborg which devices to claim by"},{"line_number":99,"context_line":"installing Cyborg drivers and configuring them in Cyborg\u0027s ``setup.cfg``. The"},{"line_number":100,"context_line":"operator must ensure that both configurations are compatible."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"Cyborg developers can help the operators by providing a tool to detect"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_baf2e26d","line":99,"in_reply_to":"3f79a3b5_2dfeb305","updated":"2018-09-28 13:21:33.000000000","message":"Updated. If we converge soon enough on 603805 or some equivalent, well and good. We need some backup plan, though.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5146079f94401dbf76d0ea5f6cf01f97b78e8383","unresolved":false,"context_lines":[{"line_number":100,"context_line":"operator must ensure that both configurations are compatible."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"Cyborg developers can help the operators by providing a tool to detect"},{"line_number":103,"context_line":"such conflicts."},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"The interpretation of the PCI whitelist is that, if a PCI ID is not listed"},{"line_number":106,"context_line":"explicitly, it is implicitly blacklisted. That interpretation needs to change:"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_d8fedb03","line":103,"updated":"2018-09-20 07:27:58.000000000","message":"no they cant. cyborg cannot assume it will have acess to the nova config files\nas if it is deployed in a contaiener the nova config files will not be availabel\non its file system.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"f77b20a084f6cb9b70f46a8993fe54c546c540dd","unresolved":false,"context_lines":[{"line_number":100,"context_line":"operator must ensure that both configurations are compatible."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"Cyborg developers can help the operators by providing a tool to detect"},{"line_number":103,"context_line":"such conflicts."},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"The interpretation of the PCI whitelist is that, if a PCI ID is not listed"},{"line_number":106,"context_line":"explicitly, it is implicitly blacklisted. That interpretation needs to change:"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_9a94c6e9","line":103,"in_reply_to":"3f79a3b5_d8fedb03","updated":"2018-09-28 13:21:33.000000000","message":"Again, I didn\u0027t say that Cyborg reads any Nova file directly. The operator is going to run the tool and she can arrange to provide the needed input to the tool.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5146079f94401dbf76d0ea5f6cf01f97b78e8383","unresolved":false,"context_lines":[{"line_number":102,"context_line":"Cyborg developers can help the operators by providing a tool to detect"},{"line_number":103,"context_line":"such conflicts."},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"The interpretation of the PCI whitelist is that, if a PCI ID is not listed"},{"line_number":106,"context_line":"explicitly, it is implicitly blacklisted. That interpretation needs to change:"},{"line_number":107,"context_line":"if the operator has installed and configured Cyborg drivers, he has explicitly"},{"line_number":108,"context_line":"enabled the devices managed by those drivers."}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_f8015705","line":105,"updated":"2018-09-20 07:27:58.000000000","message":"that is not how the pci whitelist works in nova. its tru that if a value if no attibutes of the whitlies match that the device is blacklisted but the whitelist supprots several mechansiumes to whitelist a devces form pci vendor and product ids to regex based address matching to devname names. see https://github.com/openstack/nova/blob/master/nova/pci/devspec.py#L242-L281","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"f77b20a084f6cb9b70f46a8993fe54c546c540dd","unresolved":false,"context_lines":[{"line_number":102,"context_line":"Cyborg developers can help the operators by providing a tool to detect"},{"line_number":103,"context_line":"such conflicts."},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"The interpretation of the PCI whitelist is that, if a PCI ID is not listed"},{"line_number":106,"context_line":"explicitly, it is implicitly blacklisted. That interpretation needs to change:"},{"line_number":107,"context_line":"if the operator has installed and configured Cyborg drivers, he has explicitly"},{"line_number":108,"context_line":"enabled the devices managed by those drivers."}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_7a39aaee","line":105,"in_reply_to":"3f79a3b5_f8015705","updated":"2018-09-28 13:21:33.000000000","message":"The gist of this paragraph is that PCI whitelist semantics is deny-by-default -- a PCI ID or BDF has to be listed in some form (values or wildcards), otherwise it is denied. Anyways, I\u0027ll take this out because, from Nova\u0027s perspective, it is still deny-by-default.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b40e9f3d0a255f28fde945e611ab7b4172e5fe06","unresolved":false,"context_lines":[{"line_number":104,"context_line":""},{"line_number":105,"context_line":"The interpretation of the PCI whitelist is that, if a PCI ID is not listed"},{"line_number":106,"context_line":"explicitly, it is implicitly blacklisted. That interpretation needs to change:"},{"line_number":107,"context_line":"if the operator has installed and configured Cyborg drivers, he has explicitly"},{"line_number":108,"context_line":"enabled the devices managed by those drivers."},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"Note that the PCI device ID and other IDs could change when an FPGA is"},{"line_number":111,"context_line":"reprogrammed. It is not reasonable to expect operators to manage FPGAs using"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_34ab3089","line":108,"range":{"start_line":107,"start_character":0,"end_line":108,"end_character":45},"updated":"2018-09-21 22:07:08.000000000","message":"I don\u0027t think this is right. Unless you\u0027re saying that the list of \"devices managed by those drivers\" will have already been narrowed down by some kind of whitelisting by the time the drivers pick them up.\n\nIn a real deployment we can\u0027t whitelist by default. That\u0027s a security risk.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"f77b20a084f6cb9b70f46a8993fe54c546c540dd","unresolved":false,"context_lines":[{"line_number":104,"context_line":""},{"line_number":105,"context_line":"The interpretation of the PCI whitelist is that, if a PCI ID is not listed"},{"line_number":106,"context_line":"explicitly, it is implicitly blacklisted. That interpretation needs to change:"},{"line_number":107,"context_line":"if the operator has installed and configured Cyborg drivers, he has explicitly"},{"line_number":108,"context_line":"enabled the devices managed by those drivers."},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"Note that the PCI device ID and other IDs could change when an FPGA is"},{"line_number":111,"context_line":"reprogrammed. It is not reasonable to expect operators to manage FPGAs using"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_680179b5","line":108,"range":{"start_line":107,"start_character":0,"end_line":108,"end_character":45},"in_reply_to":"3f79a3b5_34ab3089","updated":"2018-09-28 13:21:33.000000000","message":"Following IRC discussion on Sep 26, we concluded that there could be an explicit configuration by the admin to whitelist by default.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"89b671437e1988a49853aef7916d357bad20541a","unresolved":false,"context_lines":[{"line_number":104,"context_line":""},{"line_number":105,"context_line":"The interpretation of the PCI whitelist is that, if a PCI ID is not listed"},{"line_number":106,"context_line":"explicitly, it is implicitly blacklisted. That interpretation needs to change:"},{"line_number":107,"context_line":"if the operator has installed and configured Cyborg drivers, he has explicitly"},{"line_number":108,"context_line":"enabled the devices managed by those drivers."},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"Note that the PCI device ID and other IDs could change when an FPGA is"},{"line_number":111,"context_line":"reprogrammed. It is not reasonable to expect operators to manage FPGAs using"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_9def75b0","line":108,"range":{"start_line":107,"start_character":0,"end_line":108,"end_character":45},"in_reply_to":"3f79a3b5_34ab3089","updated":"2018-09-26 21:13:22.000000000","message":"I don\u0027t think the analogy holds. Cyborg drivers are very specific to the device, whereas PCI devices can be just about anything. So if systems have a particular accelerator installed, and has the corresponding Cyborg driver for that device installed, it seems reasonable that the operator wants that device managed by that driver.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"92cdc8dd309b6998b9a097cacf5239dcb892e24c","unresolved":false,"context_lines":[{"line_number":104,"context_line":""},{"line_number":105,"context_line":"The interpretation of the PCI whitelist is that, if a PCI ID is not listed"},{"line_number":106,"context_line":"explicitly, it is implicitly blacklisted. That interpretation needs to change:"},{"line_number":107,"context_line":"if the operator has installed and configured Cyborg drivers, he has explicitly"},{"line_number":108,"context_line":"enabled the devices managed by those drivers."},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"Note that the PCI device ID and other IDs could change when an FPGA is"},{"line_number":111,"context_line":"reprogrammed. It is not reasonable to expect operators to manage FPGAs using"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_750c8992","line":108,"range":{"start_line":107,"start_character":0,"end_line":108,"end_character":45},"in_reply_to":"3f79a3b5_9def75b0","updated":"2018-10-02 04:44:23.000000000","message":"@Ed Leafe: Agreed.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5146079f94401dbf76d0ea5f6cf01f97b78e8383","unresolved":false,"context_lines":[{"line_number":111,"context_line":"reprogrammed. It is not reasonable to expect operators to manage FPGAs using"},{"line_number":112,"context_line":"PCI whitelists."},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"There is a proposal to improve the whitelisting mechanism [#kosamara]_. It can"},{"line_number":115,"context_line":"be further enhanced to explicitly identify which project owns a device. While"},{"line_number":116,"context_line":"this can help in some situations, it is not a prerequisite or dependency for"},{"line_number":117,"context_line":"Cyborg for the reasons cited above."}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_9804e315","line":114,"updated":"2018-09-20 07:27:58.000000000","message":"this proposal is specifically for nova and will not be avialable to cyborg to consume.\nthis section need to be rewtiien with the understanding that cyborg may not read any nova config files.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b40e9f3d0a255f28fde945e611ab7b4172e5fe06","unresolved":false,"context_lines":[{"line_number":111,"context_line":"reprogrammed. It is not reasonable to expect operators to manage FPGAs using"},{"line_number":112,"context_line":"PCI whitelists."},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"There is a proposal to improve the whitelisting mechanism [#kosamara]_. It can"},{"line_number":115,"context_line":"be further enhanced to explicitly identify which project owns a device. While"},{"line_number":116,"context_line":"this can help in some situations, it is not a prerequisite or dependency for"},{"line_number":117,"context_line":"Cyborg for the reasons cited above."}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_b46f405f","line":114,"in_reply_to":"3f79a3b5_9804e315","updated":"2018-09-21 22:07:08.000000000","message":"I think Sundar is saying that kosamara\u0027s spec proposes a whitelist format that we could adopt/adapt as the \"universal\" config file we discussed on Friday in Denver. I haven\u0027t read through https://review.openstack.org/#/c/603805/ yet, but IIUC that is proposing a similar, but alternative, way to do the same thing.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"f77b20a084f6cb9b70f46a8993fe54c546c540dd","unresolved":false,"context_lines":[{"line_number":111,"context_line":"reprogrammed. It is not reasonable to expect operators to manage FPGAs using"},{"line_number":112,"context_line":"PCI whitelists."},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"There is a proposal to improve the whitelisting mechanism [#kosamara]_. It can"},{"line_number":115,"context_line":"be further enhanced to explicitly identify which project owns a device. While"},{"line_number":116,"context_line":"this can help in some situations, it is not a prerequisite or dependency for"},{"line_number":117,"context_line":"Cyborg for the reasons cited above."}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_22588088","line":114,"in_reply_to":"3f79a3b5_b46f405f","updated":"2018-09-28 13:21:33.000000000","message":"Yes, as Eric said, we said in the PTG that we could have a common config file that will be exposed by the operator to both Nova and Cyborg. I thought it was kosamara\u0027s spec that was being discussed. Will rephrase.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5146079f94401dbf76d0ea5f6cf01f97b78e8383","unresolved":false,"context_lines":[{"line_number":127,"context_line":""},{"line_number":128,"context_line":"There are two options for updating Placement:"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"#. Nova virt drivers in the compute node call into the Cyborg agent on"},{"line_number":131,"context_line":"   that node periodically and combine the discovered devices in"},{"line_number":132,"context_line":"   ``update_provider_tree()``."},{"line_number":133,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_b8075f17","line":130,"updated":"2018-09-20 07:27:58.000000000","message":"nova would be using os-acc to call the cyborg conductor not the compute ageint\nin this case.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"f77b20a084f6cb9b70f46a8993fe54c546c540dd","unresolved":false,"context_lines":[{"line_number":127,"context_line":""},{"line_number":128,"context_line":"There are two options for updating Placement:"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"#. Nova virt drivers in the compute node call into the Cyborg agent on"},{"line_number":131,"context_line":"   that node periodically and combine the discovered devices in"},{"line_number":132,"context_line":"   ``update_provider_tree()``."},{"line_number":133,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_cd17ea45","line":130,"in_reply_to":"3f79a3b5_b8075f17","updated":"2018-09-28 13:21:33.000000000","message":"Done","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5146079f94401dbf76d0ea5f6cf01f97b78e8383","unresolved":false,"context_lines":[{"line_number":135,"context_line":"   and update RCs and traits."},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"There are several factors that favor the second option. First, there would be"},{"line_number":138,"context_line":"operator configurations to control the period of updates, to disable specific"},{"line_number":139,"context_line":"devices and other factors. Further, these periods and knobs may be different"},{"line_number":140,"context_line":"for devices than for other resources. Instead of embedding those config knobs"},{"line_number":141,"context_line":"in every virt driver, it would be better to let Cyborg be the central place"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_5812cb59","line":138,"updated":"2018-09-20 07:27:58.000000000","message":"this seams like it would be true in both cases. we already have ways for libs such as os-bricks and os-vif to have config sections in the nova compute agent conf so we could have a os-acc periodic task to poll.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"f77b20a084f6cb9b70f46a8993fe54c546c540dd","unresolved":false,"context_lines":[{"line_number":135,"context_line":"   and update RCs and traits."},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"There are several factors that favor the second option. First, there would be"},{"line_number":138,"context_line":"operator configurations to control the period of updates, to disable specific"},{"line_number":139,"context_line":"devices and other factors. Further, these periods and knobs may be different"},{"line_number":140,"context_line":"for devices than for other resources. Instead of embedding those config knobs"},{"line_number":141,"context_line":"in every virt driver, it would be better to let Cyborg be the central place"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_4d6bdab7","line":138,"in_reply_to":"3f79a3b5_5812cb59","updated":"2018-09-28 13:21:33.000000000","message":"I still don\u0027t see the point of combining config knobs for different projects in nova-cpu.conf. That it was done so in the past doesn\u0027t mean that it is the best way forward.\n\nFor e.g., if we need to adjust these knobs during an upgrade, it is easier if all the knobs are within the same project.\n\nIf you are saying that the config knobs should be in os-acc, well, the os-acc is a library, not a service with its own conf files that can run periodic tasks.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5146079f94401dbf76d0ea5f6cf01f97b78e8383","unresolved":false,"context_lines":[{"line_number":139,"context_line":"devices and other factors. Further, these periods and knobs may be different"},{"line_number":140,"context_line":"for devices than for other resources. Instead of embedding those config knobs"},{"line_number":141,"context_line":"in every virt driver, it would be better to let Cyborg be the central place"},{"line_number":142,"context_line":"for all such things."},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"Secondly, the logic to update the device configuration after a node scan has"},{"line_number":145,"context_line":"several aspects to it: devices may have turned unhealthy, marked disabled by"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_780d4733","line":142,"updated":"2018-09-20 07:27:58.000000000","message":"they would but in os-acc not in the virtdrivers.\nthe virt drivers loading os-acc would have to init the lib that would register the periodic task and config options.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"f77b20a084f6cb9b70f46a8993fe54c546c540dd","unresolved":false,"context_lines":[{"line_number":139,"context_line":"devices and other factors. Further, these periods and knobs may be different"},{"line_number":140,"context_line":"for devices than for other resources. Instead of embedding those config knobs"},{"line_number":141,"context_line":"in every virt driver, it would be better to let Cyborg be the central place"},{"line_number":142,"context_line":"for all such things."},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"Secondly, the logic to update the device configuration after a node scan has"},{"line_number":145,"context_line":"several aspects to it: devices may have turned unhealthy, marked disabled by"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_eddc2672","line":142,"in_reply_to":"3f79a3b5_780d4733","updated":"2018-09-28 13:21:33.000000000","message":"Please see previous comment.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5146079f94401dbf76d0ea5f6cf01f97b78e8383","unresolved":false,"context_lines":[{"line_number":147,"context_line":"been assigned to an instance. These considerations may involve querying and"},{"line_number":148,"context_line":"updating the Cyborg database, which should be done from the Cyborg conductor"},{"line_number":149,"context_line":"(to handle upgrades properly). This also calls for updating Placement directly"},{"line_number":150,"context_line":"from Cyborg."},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"Thirdly, the first option requires a definition of APIs and shared objects"},{"line_number":153,"context_line":"between virt drivers and Cyborg and thus introduces more touchpoints and"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_1818d373","line":150,"updated":"2018-09-20 07:27:58.000000000","message":"no it just calles for nova to query the conductor to get the updated from cyborg it does not require cyborg to update placement directly.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"f77b20a084f6cb9b70f46a8993fe54c546c540dd","unresolved":false,"context_lines":[{"line_number":147,"context_line":"been assigned to an instance. These considerations may involve querying and"},{"line_number":148,"context_line":"updating the Cyborg database, which should be done from the Cyborg conductor"},{"line_number":149,"context_line":"(to handle upgrades properly). This also calls for updating Placement directly"},{"line_number":150,"context_line":"from Cyborg."},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"Thirdly, the first option requires a definition of APIs and shared objects"},{"line_number":153,"context_line":"between virt drivers and Cyborg and thus introduces more touchpoints and"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_cd684a89","line":150,"in_reply_to":"3f79a3b5_1818d373","updated":"2018-09-28 13:21:33.000000000","message":"If a device turned unhealthy, why should Cyborg wait for the next poll from Nova? At the PTG, we discussed the possibility of Cyborg calling Placement to set reserved\u003dtotal, or to delete the RP if possible.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"89b671437e1988a49853aef7916d357bad20541a","unresolved":false,"context_lines":[{"line_number":147,"context_line":"been assigned to an instance. These considerations may involve querying and"},{"line_number":148,"context_line":"updating the Cyborg database, which should be done from the Cyborg conductor"},{"line_number":149,"context_line":"(to handle upgrades properly). This also calls for updating Placement directly"},{"line_number":150,"context_line":"from Cyborg."},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"Thirdly, the first option requires a definition of APIs and shared objects"},{"line_number":153,"context_line":"between virt drivers and Cyborg and thus introduces more touchpoints and"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_fdd1c9cb","line":150,"in_reply_to":"3f79a3b5_1818d373","updated":"2018-09-26 21:13:22.000000000","message":"We have previously agreed that whichever system \"owns\" the resource will be responsible for managing its inventory in Placement. So it does seem correct that if accelerators are managed by Cyborg, their inventory is also managed by Cyborg.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"92cdc8dd309b6998b9a097cacf5239dcb892e24c","unresolved":false,"context_lines":[{"line_number":147,"context_line":"been assigned to an instance. These considerations may involve querying and"},{"line_number":148,"context_line":"updating the Cyborg database, which should be done from the Cyborg conductor"},{"line_number":149,"context_line":"(to handle upgrades properly). This also calls for updating Placement directly"},{"line_number":150,"context_line":"from Cyborg."},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"Thirdly, the first option requires a definition of APIs and shared objects"},{"line_number":153,"context_line":"between virt drivers and Cyborg and thus introduces more touchpoints and"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_d51a3dc5","line":150,"in_reply_to":"3f79a3b5_fdd1c9cb","updated":"2018-10-02 04:44:23.000000000","message":"Ed Leafe: Yes.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5146079f94401dbf76d0ea5f6cf01f97b78e8383","unresolved":false,"context_lines":[{"line_number":149,"context_line":"(to handle upgrades properly). This also calls for updating Placement directly"},{"line_number":150,"context_line":"from Cyborg."},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"Thirdly, the first option requires a definition of APIs and shared objects"},{"line_number":153,"context_line":"between virt drivers and Cyborg and thus introduces more touchpoints and"},{"line_number":154,"context_line":"coupling between Nova and Cyborg. That can impede independent evolution of"},{"line_number":155,"context_line":"both sides."}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_38134f5b","line":152,"updated":"2018-09-20 07:27:58.000000000","message":"we will need a versions api between cyborg and nova in either cases for os-acc\nso this is not a valid reason in my view.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"f77b20a084f6cb9b70f46a8993fe54c546c540dd","unresolved":false,"context_lines":[{"line_number":149,"context_line":"(to handle upgrades properly). This also calls for updating Placement directly"},{"line_number":150,"context_line":"from Cyborg."},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"Thirdly, the first option requires a definition of APIs and shared objects"},{"line_number":153,"context_line":"between virt drivers and Cyborg and thus introduces more touchpoints and"},{"line_number":154,"context_line":"coupling between Nova and Cyborg. That can impede independent evolution of"},{"line_number":155,"context_line":"both sides."}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_2df3fee8","line":152,"in_reply_to":"3f79a3b5_38134f5b","updated":"2018-09-28 13:21:33.000000000","message":"If Nova calls Cyborg, Cyborg needs to provide a API for that. But Cyborg calling Placement is not an issue, as that API already exists. I don\u0027t see the symmetry between the two.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b40e9f3d0a255f28fde945e611ab7b4172e5fe06","unresolved":false,"context_lines":[{"line_number":150,"context_line":"from Cyborg."},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"Thirdly, the first option requires a definition of APIs and shared objects"},{"line_number":153,"context_line":"between virt drivers and Cyborg and thus introduces more touchpoints and"},{"line_number":154,"context_line":"coupling between Nova and Cyborg. That can impede independent evolution of"},{"line_number":155,"context_line":"both sides."},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"Cyborg may temporarily use the ``update_provider_tree`` method in Stein"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_74068888","line":154,"range":{"start_line":153,"start_character":52,"end_line":154,"end_character":8},"updated":"2018-09-21 22:07:08.000000000","message":"This is a strong, valid, and sufficient reason for favoring the #2 approach IMHO.\n\nThat said, I\u0027m not sure it\u0027s worth including this discussion in this spec. We\u0027ve already talked about it and decided on that approach. If you really want to mention #1, you can call it out briefly in the \"Alternatives\" section.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"f77b20a084f6cb9b70f46a8993fe54c546c540dd","unresolved":false,"context_lines":[{"line_number":150,"context_line":"from Cyborg."},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"Thirdly, the first option requires a definition of APIs and shared objects"},{"line_number":153,"context_line":"between virt drivers and Cyborg and thus introduces more touchpoints and"},{"line_number":154,"context_line":"coupling between Nova and Cyborg. That can impede independent evolution of"},{"line_number":155,"context_line":"both sides."},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"Cyborg may temporarily use the ``update_provider_tree`` method in Stein"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_e2d608c5","line":154,"range":{"start_line":153,"start_character":52,"end_line":154,"end_character":8},"in_reply_to":"3f79a3b5_74068888","updated":"2018-09-28 13:21:33.000000000","message":"\"already ... decided on that approach\" Great. I\u0027ll remove the discussion, and just document the  \n\nIs the RP \u0027ownership\u0027 (or whatever the right term is) going to be implemented in Stein?","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"89b671437e1988a49853aef7916d357bad20541a","unresolved":false,"context_lines":[{"line_number":150,"context_line":"from Cyborg."},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"Thirdly, the first option requires a definition of APIs and shared objects"},{"line_number":153,"context_line":"between virt drivers and Cyborg and thus introduces more touchpoints and"},{"line_number":154,"context_line":"coupling between Nova and Cyborg. That can impede independent evolution of"},{"line_number":155,"context_line":"both sides."},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"Cyborg may temporarily use the ``update_provider_tree`` method in Stein"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_fdfa2942","line":154,"range":{"start_line":153,"start_character":52,"end_line":154,"end_character":8},"in_reply_to":"3f79a3b5_74068888","updated":"2018-09-26 21:13:22.000000000","message":"Agreed. It does seem that #1 was sufficiently discussed and discarded as a viable option.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b40e9f3d0a255f28fde945e611ab7b4172e5fe06","unresolved":false,"context_lines":[{"line_number":154,"context_line":"coupling between Nova and Cyborg. That can impede independent evolution of"},{"line_number":155,"context_line":"both sides."},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"Cyborg may temporarily use the ``update_provider_tree`` method in Stein"},{"line_number":158,"context_line":"to populate Placement. But a direct Placement update is the desired outcome."},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"User requests"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_94eec4b3","line":157,"range":{"start_line":157,"start_character":0,"end_line":157,"end_character":71},"updated":"2018-09-21 22:07:08.000000000","message":"No way.\n\nupdate_provider_tree should touch all and only providers \"owned\" by nova. If update_provider_tree is managing providers \"owned\" by cyborg, they\u0027re not \"owned\" by cyborg. Like, by definition.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"89b671437e1988a49853aef7916d357bad20541a","unresolved":false,"context_lines":[{"line_number":154,"context_line":"coupling between Nova and Cyborg. That can impede independent evolution of"},{"line_number":155,"context_line":"both sides."},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"Cyborg may temporarily use the ``update_provider_tree`` method in Stein"},{"line_number":158,"context_line":"to populate Placement. But a direct Placement update is the desired outcome."},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"User requests"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_5d91ddf6","line":157,"range":{"start_line":157,"start_character":0,"end_line":157,"end_character":71},"in_reply_to":"3f79a3b5_94eec4b3","updated":"2018-09-26 21:13:22.000000000","message":"Exactly. This paragraph should be removed.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"f77b20a084f6cb9b70f46a8993fe54c546c540dd","unresolved":false,"context_lines":[{"line_number":154,"context_line":"coupling between Nova and Cyborg. That can impede independent evolution of"},{"line_number":155,"context_line":"both sides."},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"Cyborg may temporarily use the ``update_provider_tree`` method in Stein"},{"line_number":158,"context_line":"to populate Placement. But a direct Placement update is the desired outcome."},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"User requests"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_021c6479","line":157,"range":{"start_line":157,"start_character":0,"end_line":157,"end_character":71},"in_reply_to":"3f79a3b5_94eec4b3","updated":"2018-09-28 13:21:33.000000000","message":"OK. I thought this was an option that was bandied about in the PTG. I will remove this.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5146079f94401dbf76d0ea5f6cf01f97b78e8383","unresolved":false,"context_lines":[{"line_number":155,"context_line":"both sides."},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"Cyborg may temporarily use the ``update_provider_tree`` method in Stein"},{"line_number":158,"context_line":"to populate Placement. But a direct Placement update is the desired outcome."},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"User requests"},{"line_number":161,"context_line":"-------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_d827bbb5","line":158,"updated":"2018-09-20 07:27:58.000000000","message":"im not againtst cyborg updating placement directly but i dont think you have provided a solid technical argument for why it should with the previous 3 statements.\n\narchiturally if cyborg want to faciate consumtion of acclerator resouces in a standalone deployment such as via a kubernetes device pluggin in the furute i would be perferable for cyborg to not require nova to update placement. similarly if cyborg was used with a standalone ironic deployment to manage rsd it is desireable for cyborg to not require nova to update placement on its behalf for that usecase.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"f77b20a084f6cb9b70f46a8993fe54c546c540dd","unresolved":false,"context_lines":[{"line_number":155,"context_line":"both sides."},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"Cyborg may temporarily use the ``update_provider_tree`` method in Stein"},{"line_number":158,"context_line":"to populate Placement. But a direct Placement update is the desired outcome."},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"User requests"},{"line_number":161,"context_line":"-------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_adbe2ed1","line":158,"in_reply_to":"3f79a3b5_d827bbb5","updated":"2018-09-28 13:21:33.000000000","message":"\"I\u0027m not against Cyborg updating placement directly\" -- you seem to agree with the conclusion. \n\nAs for whether these arguments logically lead to this conclusion, other reviewers have found at least some of them persuasive. So, we could dispense with the arguments and just state the conclusion that we all agree upon.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b40e9f3d0a255f28fde945e611ab7b4172e5fe06","unresolved":false,"context_lines":[{"line_number":179,"context_line":""},{"line_number":180,"context_line":" openstack server create --flavor f ....  # instance-spawn"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"However, we cannot yet update a running instance with accelerators (hot"},{"line_number":183,"context_line":"assignment) in this phase, because we cannot feed a device profile to the Nova"},{"line_number":184,"context_line":"API for updating servers."},{"line_number":185,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_9471e410","line":182,"range":{"start_line":182,"start_character":32,"end_line":182,"end_character":39},"updated":"2018-09-21 22:07:08.000000000","message":"Did you specifically mean \"running\" (as in ACTIVE), or did you mean to encompass \"existing\" as in already-spawned? I would think it should be possible to do a \"late attach\" via \"cold resize\" to a flavor with a device profile.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"f77b20a084f6cb9b70f46a8993fe54c546c540dd","unresolved":false,"context_lines":[{"line_number":179,"context_line":""},{"line_number":180,"context_line":" openstack server create --flavor f ....  # instance-spawn"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"However, we cannot yet update a running instance with accelerators (hot"},{"line_number":183,"context_line":"assignment) in this phase, because we cannot feed a device profile to the Nova"},{"line_number":184,"context_line":"API for updating servers."},{"line_number":185,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_66a42ca4","line":182,"range":{"start_line":182,"start_character":32,"end_line":182,"end_character":39},"in_reply_to":"3f79a3b5_9471e410","updated":"2018-09-28 13:21:33.000000000","message":"I meant \u0027existing\u0027. Will update.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"f77b20a084f6cb9b70f46a8993fe54c546c540dd","unresolved":false,"context_lines":[{"line_number":179,"context_line":""},{"line_number":180,"context_line":" openstack server create --flavor f ....  # instance-spawn"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"However, we cannot yet update a running instance with accelerators (hot"},{"line_number":183,"context_line":"assignment) in this phase, because we cannot feed a device profile to the Nova"},{"line_number":184,"context_line":"API for updating servers."},{"line_number":185,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_5d01ddb4","line":182,"range":{"start_line":182,"start_character":32,"end_line":182,"end_character":39},"in_reply_to":"3f79a3b5_9471e410","updated":"2018-09-28 13:21:33.000000000","message":"I meant, \"existing instance\". Will update.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5146079f94401dbf76d0ea5f6cf01f97b78e8383","unresolved":false,"context_lines":[{"line_number":181,"context_line":""},{"line_number":182,"context_line":"However, we cannot yet update a running instance with accelerators (hot"},{"line_number":183,"context_line":"assignment) in this phase, because we cannot feed a device profile to the Nova"},{"line_number":184,"context_line":"API for updating servers."},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"In Phase 2, the Nova API ``POST /servers`` for instance creation is updated to"},{"line_number":187,"context_line":"accept a device profile. The operators need not fold a device profile into a"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_f82ab77b","line":184,"updated":"2018-09-20 07:27:58.000000000","message":"you could do a live resize if https://review.openstack.org/#/c/141219/ was approved for this usecase.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"f77b20a084f6cb9b70f46a8993fe54c546c540dd","unresolved":false,"context_lines":[{"line_number":181,"context_line":""},{"line_number":182,"context_line":"However, we cannot yet update a running instance with accelerators (hot"},{"line_number":183,"context_line":"assignment) in this phase, because we cannot feed a device profile to the Nova"},{"line_number":184,"context_line":"API for updating servers."},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"In Phase 2, the Nova API ``POST /servers`` for instance creation is updated to"},{"line_number":187,"context_line":"accept a device profile. The operators need not fold a device profile into a"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_0d03a243","line":184,"in_reply_to":"3f79a3b5_f82ab77b","updated":"2018-09-28 13:21:33.000000000","message":"Thanks for the pointer. Updated the text.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b40e9f3d0a255f28fde945e611ab7b4172e5fe06","unresolved":false,"context_lines":[{"line_number":181,"context_line":""},{"line_number":182,"context_line":"However, we cannot yet update a running instance with accelerators (hot"},{"line_number":183,"context_line":"assignment) in this phase, because we cannot feed a device profile to the Nova"},{"line_number":184,"context_line":"API for updating servers."},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"In Phase 2, the Nova API ``POST /servers`` for instance creation is updated to"},{"line_number":187,"context_line":"accept a device profile. The operators need not fold a device profile into a"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_545d8c7a","line":184,"in_reply_to":"3f79a3b5_f82ab77b","updated":"2018-09-21 22:07:08.000000000","message":"that too","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5146079f94401dbf76d0ea5f6cf01f97b78e8383","unresolved":false,"context_lines":[{"line_number":188,"context_line":"flavor anymore, but the folded flavors from Phase 1 will still be valid. An"},{"line_number":189,"context_line":"instance can be spawned as below::"},{"line_number":190,"context_line":""},{"line_number":191,"context_line":" openstack server create --flavor f --device-profile \u003cname\u003e ..."},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"Finally, in Phase 3, Nova API ``POST /servers/{server_id}/action`` will be"},{"line_number":194,"context_line":"enhanced to accept device profiles. This will enable hot attach via the API or"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_981dc363","line":191,"updated":"2018-09-20 07:27:58.000000000","message":"you missing a step 2.5 where we also accept a device profile instance\nrather then a profile to created. e.g. the difference between passing a\nnetwork to create a port on and pass an allready created port. this is a prequiresti for the hot attach as it likely if you are attach a second device you will want to frist update the device profile instance with info such as an image to flash if its an fpga which may not be in the exiting flavor or image.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":27458,"name":"Li Liu","email":"liliueecg@gmail.com","username":"liliu"},"change_message_id":"0151e19806f554c959e63c0cd3fa33a1d1470c75","unresolved":false,"context_lines":[{"line_number":188,"context_line":"flavor anymore, but the folded flavors from Phase 1 will still be valid. An"},{"line_number":189,"context_line":"instance can be spawned as below::"},{"line_number":190,"context_line":""},{"line_number":191,"context_line":" openstack server create --flavor f --device-profile \u003cname\u003e ..."},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"Finally, in Phase 3, Nova API ``POST /servers/{server_id}/action`` will be"},{"line_number":194,"context_line":"enhanced to accept device profiles. This will enable hot attach via the API or"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_125e7212","line":191,"in_reply_to":"3f79a3b5_6de8167a","updated":"2018-10-03 01:30:33.000000000","message":"Just a quick thought here, bitstream association could be carried within VARs but won\u0027t be burnt in FPGAs until the actual attachment happens.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"f77b20a084f6cb9b70f46a8993fe54c546c540dd","unresolved":false,"context_lines":[{"line_number":188,"context_line":"flavor anymore, but the folded flavors from Phase 1 will still be valid. An"},{"line_number":189,"context_line":"instance can be spawned as below::"},{"line_number":190,"context_line":""},{"line_number":191,"context_line":" openstack server create --flavor f --device-profile \u003cname\u003e ..."},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"Finally, in Phase 3, Nova API ``POST /servers/{server_id}/action`` will be"},{"line_number":194,"context_line":"enhanced to accept device profiles. This will enable hot attach via the API or"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_6de8167a","line":191,"in_reply_to":"3f79a3b5_981dc363","updated":"2018-09-28 13:21:33.000000000","message":"\u0027pass an already created port\u0027 -- the equiv would be to pass an already created unbound VAR. I think you are asking for a way to create VARs from the CLI (or API), etc., just as one can create ports.\n\nI believe operators may want to use device profiles for usage monitoring and billing (needs validation). If users can associate FPGA bitstreams with VARs directly, it is not clear to me what it means for the operator.\n\nCan we postpone this feature till we get clarity on operator\u0027s usage models?","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5146079f94401dbf76d0ea5f6cf01f97b78e8383","unresolved":false,"context_lines":[{"line_number":201,"context_line":"In each of the phases above, the instance creation workflow involves"},{"line_number":202,"context_line":"translation by Cyborg of the device profile into flavor extra specs format"},{"line_number":203,"context_line":"that Nova can process. Cyborg shall return the extra specs in granular request"},{"line_number":204,"context_line":"format."},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"The request groups in the extra specs returned by Cyborg will include an"},{"line_number":207,"context_line":"unnumbered one, and the rest (if any) will be numbered from 1. If there are"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_b820bf9b","line":204,"updated":"2018-09-20 07:27:58.000000000","message":"you are conflating two things here. cyborg should not be retruning flavor extra specs\nfor a given deivce profile. it should be providing resouce request and traits using a\nversiosned api endpoint that nova can query. nova will then append those resouce requetes and traits into the placemnt request the same way it will merge resouce requests form nueton ports for the bandwith based schudileing work.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"f77b20a084f6cb9b70f46a8993fe54c546c540dd","unresolved":false,"context_lines":[{"line_number":201,"context_line":"In each of the phases above, the instance creation workflow involves"},{"line_number":202,"context_line":"translation by Cyborg of the device profile into flavor extra specs format"},{"line_number":203,"context_line":"that Nova can process. Cyborg shall return the extra specs in granular request"},{"line_number":204,"context_line":"format."},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"The request groups in the extra specs returned by Cyborg will include an"},{"line_number":207,"context_line":"unnumbered one, and the rest (if any) will be numbered from 1. If there are"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_a619e423","line":204,"in_reply_to":"3f79a3b5_b820bf9b","updated":"2018-09-28 13:21:33.000000000","message":"This paragraph talks of returning the request fields in the device profile in the format of granular request syntax, so that Nova can fold that in. \n\nI looked at https://review.openstack.org/#/q/topic:bp/bandwidth-resource-provider . It probably needs some tweaks to fit the needs here.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5146079f94401dbf76d0ea5f6cf01f97b78e8383","unresolved":false,"context_lines":[{"line_number":206,"context_line":"The request groups in the extra specs returned by Cyborg will include an"},{"line_number":207,"context_line":"unnumbered one, and the rest (if any) will be numbered from 1. If there are"},{"line_number":208,"context_line":"request groups in the flavor outside of the device profile, os-acc has to take"},{"line_number":209,"context_line":"care of renumbering the device extra specs to fit with the flavor."},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"The device profile may contain Cyborg properties, prefixed with the keyword"},{"line_number":212,"context_line":"``accel:``, as explained in [#dev-prof]_. When this is translated into extra"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_583babcf","line":209,"updated":"2018-09-20 07:27:58.000000000","message":"when we discussed os-acc at the ptg we initally only dicussed it for use on the compute node. i suggested i could be used in the conductor also so we do not need a second cyborg client for the conductor. based on that are you suggesting that the nova conductor will use call os-acc passing in the instance flavor and os-acc will then call out to cyborg to retrive the device profile and update the flavor with the cyborg resouce requests.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"f77b20a084f6cb9b70f46a8993fe54c546c540dd","unresolved":false,"context_lines":[{"line_number":206,"context_line":"The request groups in the extra specs returned by Cyborg will include an"},{"line_number":207,"context_line":"unnumbered one, and the rest (if any) will be numbered from 1. If there are"},{"line_number":208,"context_line":"request groups in the flavor outside of the device profile, os-acc has to take"},{"line_number":209,"context_line":"care of renumbering the device extra specs to fit with the flavor."},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"The device profile may contain Cyborg properties, prefixed with the keyword"},{"line_number":212,"context_line":"``accel:``, as explained in [#dev-prof]_. When this is translated into extra"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_e6b11ce2","line":209,"in_reply_to":"3f79a3b5_583babcf","updated":"2018-09-28 13:21:33.000000000","message":"At the PTG, we talked of the need for some intermediary between Nova and Cyborg API. In some cases, the return values from the API may need to be massaged to fit into Nova data structures. That requires a shim layer. This paragraph calls that shim as os-acc. \nSo, Nova conductor calls a shim layer passing in the device profile (L293 and L370 below), and gets back the request groups.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5146079f94401dbf76d0ea5f6cf01f97b78e8383","unresolved":false,"context_lines":[{"line_number":211,"context_line":"The device profile may contain Cyborg properties, prefixed with the keyword"},{"line_number":212,"context_line":"``accel:``, as explained in [#dev-prof]_. When this is translated into extra"},{"line_number":213,"context_line":"specs format, in the granular request syntax [#gran-req]_, the keyword will"},{"line_number":214,"context_line":"include the request group number, such as ``accelN:``, to clearly indicate"},{"line_number":215,"context_line":"which request group it is associated with."},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"Virtual Accelerator Records"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_7836a7e9","line":214,"updated":"2018-09-20 07:27:58.000000000","message":"this would require a placement api change and since the placemnet api is frozen for stien\nto allow the extraction this would be a hard blocker for this spec so no you wont be able to do this.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"f77b20a084f6cb9b70f46a8993fe54c546c540dd","unresolved":false,"context_lines":[{"line_number":211,"context_line":"The device profile may contain Cyborg properties, prefixed with the keyword"},{"line_number":212,"context_line":"``accel:``, as explained in [#dev-prof]_. When this is translated into extra"},{"line_number":213,"context_line":"specs format, in the granular request syntax [#gran-req]_, the keyword will"},{"line_number":214,"context_line":"include the request group number, such as ``accelN:``, to clearly indicate"},{"line_number":215,"context_line":"which request group it is associated with."},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"Virtual Accelerator Records"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_440b1e2a","line":214,"in_reply_to":"3f79a3b5_349fb003","updated":"2018-09-28 13:21:33.000000000","message":"Yes, this does not affect placement. If the idea is to let Nova do the numbering (a la bandwidth provider), instead of Cyborg or os-acc, that is fine.\n\nWe need accel: for the Cyborg properties that Nova doesn\u0027t know/care about.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b40e9f3d0a255f28fde945e611ab7b4172e5fe06","unresolved":false,"context_lines":[{"line_number":211,"context_line":"The device profile may contain Cyborg properties, prefixed with the keyword"},{"line_number":212,"context_line":"``accel:``, as explained in [#dev-prof]_. When this is translated into extra"},{"line_number":213,"context_line":"specs format, in the granular request syntax [#gran-req]_, the keyword will"},{"line_number":214,"context_line":"include the request group number, such as ``accelN:``, to clearly indicate"},{"line_number":215,"context_line":"which request group it is associated with."},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"Virtual Accelerator Records"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_349fb003","line":214,"in_reply_to":"3f79a3b5_7836a7e9","updated":"2018-09-21 22:07:08.000000000","message":"I don\u0027t think Sundar is suggesting adding accelN to the placement query, just a naming convention to associate that device profile with a granular group for purposes of producing the resourcesN/requiredN pieces.\n\nThat said, even if I\u0027m right, I\u0027m not sure that\u0027s really necessary. As gibi did for the bandwidth deal, you\u0027re going to have to find an available N anyway.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5146079f94401dbf76d0ea5f6cf01f97b78e8383","unresolved":false,"context_lines":[{"line_number":215,"context_line":"which request group it is associated with."},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"Virtual Accelerator Records"},{"line_number":218,"context_line":"---------------------------"},{"line_number":219,"context_line":"The state of assignment of an accelerator to an instance is encapsulated in an"},{"line_number":220,"context_line":"Oslo version object, named the Virtual Accelerator Record (VAR). The creation"},{"line_number":221,"context_line":"and management of VARs are handled by Cyborg, and VARs are persisted in Cyborg"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_1831b3ed","line":218,"updated":"2018-09-20 07:27:58.000000000","message":"this is what is returuned form cyborg when we create an instance of a device profile correct.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"f77b20a084f6cb9b70f46a8993fe54c546c540dd","unresolved":false,"context_lines":[{"line_number":215,"context_line":"which request group it is associated with."},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"Virtual Accelerator Records"},{"line_number":218,"context_line":"---------------------------"},{"line_number":219,"context_line":"The state of assignment of an accelerator to an instance is encapsulated in an"},{"line_number":220,"context_line":"Oslo version object, named the Virtual Accelerator Record (VAR). The creation"},{"line_number":221,"context_line":"and management of VARs are handled by Cyborg, and VARs are persisted in Cyborg"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_a6f1e498","line":218,"in_reply_to":"3f79a3b5_1831b3ed","updated":"2018-09-28 13:21:33.000000000","message":"Yes, \u0027an instance of a device profile\u0027 is a VAR, in the sense that each VAR corresponds to one accelerator requested in the device profile. A dev prof may request more than one accelerator.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5146079f94401dbf76d0ea5f6cf01f97b78e8383","unresolved":false,"context_lines":[{"line_number":220,"context_line":"Oslo version object, named the Virtual Accelerator Record (VAR). The creation"},{"line_number":221,"context_line":"and management of VARs are handled by Cyborg, and VARs are persisted in Cyborg"},{"line_number":222,"context_line":"database. However, since VARs are passed back and forth between Cyborg and"},{"line_number":223,"context_line":"Nova, the os-acc defines the VAR (except for Cyborg-private fields)."},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"A VAR, by definition, represents a single accelerator resource. The device"},{"line_number":226,"context_line":"profile in the user request may ask for more than one accelerator; the number"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_382caf91","line":223,"updated":"2018-09-20 07:27:58.000000000","message":"you cannont have private fields on an ovo. os-acc should define the entire object but\nnova will ignore/not use the non public set.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"f77b20a084f6cb9b70f46a8993fe54c546c540dd","unresolved":false,"context_lines":[{"line_number":220,"context_line":"Oslo version object, named the Virtual Accelerator Record (VAR). The creation"},{"line_number":221,"context_line":"and management of VARs are handled by Cyborg, and VARs are persisted in Cyborg"},{"line_number":222,"context_line":"database. However, since VARs are passed back and forth between Cyborg and"},{"line_number":223,"context_line":"Nova, the os-acc defines the VAR (except for Cyborg-private fields)."},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"A VAR, by definition, represents a single accelerator resource. The device"},{"line_number":226,"context_line":"profile in the user request may ask for more than one accelerator; the number"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_262b94ea","line":223,"in_reply_to":"3f79a3b5_382caf91","updated":"2018-09-28 13:21:33.000000000","message":"Will rephrase.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b40e9f3d0a255f28fde945e611ab7b4172e5fe06","unresolved":false,"context_lines":[{"line_number":228,"context_line":"requested in the device profile."},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"Upon creation, the VAR contains only the reference to the request group within"},{"line_number":231,"context_line":"the device profile which specifies the accelerator resource class. Since it is"},{"line_number":232,"context_line":"not yet associated with any specific accelerator or device, it is said to be"},{"line_number":233,"context_line":"in an ``unbound`` state. After the Nova scheduler has picked a specific device"},{"line_number":234,"context_line":"RP, Cyborg is called to bind that VAR to a specific accelerator in that device"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_d7f43e8b","line":231,"range":{"start_line":231,"start_character":51,"end_line":231,"end_character":65},"updated":"2018-09-21 22:07:08.000000000","message":"and traits","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"f77b20a084f6cb9b70f46a8993fe54c546c540dd","unresolved":false,"context_lines":[{"line_number":228,"context_line":"requested in the device profile."},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"Upon creation, the VAR contains only the reference to the request group within"},{"line_number":231,"context_line":"the device profile which specifies the accelerator resource class. Since it is"},{"line_number":232,"context_line":"not yet associated with any specific accelerator or device, it is said to be"},{"line_number":233,"context_line":"in an ``unbound`` state. After the Nova scheduler has picked a specific device"},{"line_number":234,"context_line":"RP, Cyborg is called to bind that VAR to a specific accelerator in that device"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_e6827cc7","line":231,"range":{"start_line":231,"start_character":51,"end_line":231,"end_character":65},"in_reply_to":"3f79a3b5_d7f43e8b","updated":"2018-09-28 13:21:33.000000000","message":"Yes. The point is, the VAR corresponds to a single accelerator, and hence to one request group within the device profile that specifies the resource class for that accelerator.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"89b671437e1988a49853aef7916d357bad20541a","unresolved":false,"context_lines":[{"line_number":238,"context_line":"the instance. The workflow is presented in more detail in Section `Assignment"},{"line_number":239,"context_line":"workflow`_."},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"Accordingly, the top-level definition of a VAR can be documented as below::"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"  class VAR(ovo_base.VersionedObject):"},{"line_number":244,"context_line":"     OBJ_PROJECT_NAMESPACE \u003d \"os-acc\""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_889ad5c1","line":241,"range":{"start_line":241,"start_character":0,"end_line":241,"end_character":73},"updated":"2018-09-26 21:13:22.000000000","message":"This is a bit too much implementation detail for a spec like this. I would simply summarize which bits of data will be persisted here.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"92cdc8dd309b6998b9a097cacf5239dcb892e24c","unresolved":false,"context_lines":[{"line_number":238,"context_line":"the instance. The workflow is presented in more detail in Section `Assignment"},{"line_number":239,"context_line":"workflow`_."},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"Accordingly, the top-level definition of a VAR can be documented as below::"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"  class VAR(ovo_base.VersionedObject):"},{"line_number":244,"context_line":"     OBJ_PROJECT_NAMESPACE \u003d \"os-acc\""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_b57b01f2","line":241,"range":{"start_line":241,"start_character":0,"end_line":241,"end_character":73},"in_reply_to":"3f79a3b5_889ad5c1","updated":"2018-10-02 04:44:23.000000000","message":"If I don;t list at least the important fields, I am told that I am missing details :). The entire VAR is persisted in Cyborg db.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5146079f94401dbf76d0ea5f6cf01f97b78e8383","unresolved":false,"context_lines":[{"line_number":240,"context_line":""},{"line_number":241,"context_line":"Accordingly, the top-level definition of a VAR can be documented as below::"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"  class VAR(ovo_base.VersionedObject):"},{"line_number":244,"context_line":"     OBJ_PROJECT_NAMESPACE \u003d \"os-acc\""},{"line_number":245,"context_line":"     VERSION \u003d \"1.0\""},{"line_number":246,"context_line":"     fields \u003d {"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_d84c9b77","line":243,"updated":"2018-09-20 07:27:58.000000000","message":"lets use the full classname of VirtualAcceleratorRecord not VAR","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":27458,"name":"Li Liu","email":"liliueecg@gmail.com","username":"liliu"},"change_message_id":"0151e19806f554c959e63c0cd3fa33a1d1470c75","unresolved":false,"context_lines":[{"line_number":240,"context_line":""},{"line_number":241,"context_line":"Accordingly, the top-level definition of a VAR can be documented as below::"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"  class VAR(ovo_base.VersionedObject):"},{"line_number":244,"context_line":"     OBJ_PROJECT_NAMESPACE \u003d \"os-acc\""},{"line_number":245,"context_line":"     VERSION \u003d \"1.0\""},{"line_number":246,"context_line":"     fields \u003d {"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_d2db1a1e","line":243,"in_reply_to":"3f79a3b5_66dc2ce1","updated":"2018-10-03 01:30:33.000000000","message":"Agree with sean tho. We should name the class that does not confuse people in the future.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"67e70d80415b43e45708e03a8d92e8c31320734e","unresolved":false,"context_lines":[{"line_number":240,"context_line":""},{"line_number":241,"context_line":"Accordingly, the top-level definition of a VAR can be documented as below::"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"  class VAR(ovo_base.VersionedObject):"},{"line_number":244,"context_line":"     OBJ_PROJECT_NAMESPACE \u003d \"os-acc\""},{"line_number":245,"context_line":"     VERSION \u003d \"1.0\""},{"line_number":246,"context_line":"     fields \u003d {"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_7cfd226b","line":243,"in_reply_to":"3f79a3b5_d2db1a1e","updated":"2018-10-04 01:04:27.000000000","message":"If other reviewers also want a name change, sure.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"f77b20a084f6cb9b70f46a8993fe54c546c540dd","unresolved":false,"context_lines":[{"line_number":240,"context_line":""},{"line_number":241,"context_line":"Accordingly, the top-level definition of a VAR can be documented as below::"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"  class VAR(ovo_base.VersionedObject):"},{"line_number":244,"context_line":"     OBJ_PROJECT_NAMESPACE \u003d \"os-acc\""},{"line_number":245,"context_line":"     VERSION \u003d \"1.0\""},{"line_number":246,"context_line":"     fields \u003d {"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_66dc2ce1","line":243,"in_reply_to":"3f79a3b5_d84c9b77","updated":"2018-09-28 13:21:33.000000000","message":"Why? I see acronyms being used in other code: https://github.com/openstack/os-vif/blob/master/os_vif/objects/vif.py#L22","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5146079f94401dbf76d0ea5f6cf01f97b78e8383","unresolved":false,"context_lines":[{"line_number":246,"context_line":"     fields \u003d {"},{"line_number":247,"context_line":"        \u0027id\u0027: UUIDField(), # VAN ID"},{"line_number":248,"context_line":"        \u0027state\u0027: EnumField(),"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"        ### Fields set by Cyborg on creation: accelerator requirements"},{"line_number":251,"context_line":"        \u0027device_profile_name\u0027: StringField(),"},{"line_number":252,"context_line":"        \u0027request_group_index\u0027: IntegerField()"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_f84f1767","line":249,"updated":"2018-09-20 07:27:58.000000000","message":"you should add a host filed. when that is set to non it is unbound. nova will set it ot the selected hosts when it finish scduing the same way it bindis ports by setting the host","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"f77b20a084f6cb9b70f46a8993fe54c546c540dd","unresolved":false,"context_lines":[{"line_number":246,"context_line":"     fields \u003d {"},{"line_number":247,"context_line":"        \u0027id\u0027: UUIDField(), # VAN ID"},{"line_number":248,"context_line":"        \u0027state\u0027: EnumField(),"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"        ### Fields set by Cyborg on creation: accelerator requirements"},{"line_number":251,"context_line":"        \u0027device_profile_name\u0027: StringField(),"},{"line_number":252,"context_line":"        \u0027request_group_index\u0027: IntegerField()"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_e6e91c7f","line":249,"in_reply_to":"3f79a3b5_f84f1767","updated":"2018-09-28 13:21:33.000000000","message":"Sure. However, the state should be explicit. For example, the host field may be set but the bind may have failed, so the state would reflect that even if the host field is valid.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b40e9f3d0a255f28fde945e611ab7b4172e5fe06","unresolved":false,"context_lines":[{"line_number":248,"context_line":"        \u0027state\u0027: EnumField(),"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"        ### Fields set by Cyborg on creation: accelerator requirements"},{"line_number":251,"context_line":"        \u0027device_profile_name\u0027: StringField(),"},{"line_number":252,"context_line":"        \u0027request_group_index\u0027: IntegerField()"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"        ### Fields set by Nova, after scheduling before binding"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_17095683","line":251,"range":{"start_line":251,"start_character":8,"end_line":251,"end_character":29},"updated":"2018-09-21 22:07:08.000000000","message":"What is this used for? If it doesn\u0027t have a specific purpose, I would say we should get rid of it, as it could quickly lose meaning if the associated profile is renamed or deleted.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5146079f94401dbf76d0ea5f6cf01f97b78e8383","unresolved":false,"context_lines":[{"line_number":248,"context_line":"        \u0027state\u0027: EnumField(),"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"        ### Fields set by Cyborg on creation: accelerator requirements"},{"line_number":251,"context_line":"        \u0027device_profile_name\u0027: StringField(),"},{"line_number":252,"context_line":"        \u0027request_group_index\u0027: IntegerField()"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"        ### Fields set by Nova, after scheduling before binding"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_9852a311","line":251,"updated":"2018-09-20 07:27:58.000000000","message":"persumabley the device_profile_name would be set by nova when it posts to a /var endpoint\nand cyborg would set the rest. and return them in the responce.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"f77b20a084f6cb9b70f46a8993fe54c546c540dd","unresolved":false,"context_lines":[{"line_number":248,"context_line":"        \u0027state\u0027: EnumField(),"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"        ### Fields set by Cyborg on creation: accelerator requirements"},{"line_number":251,"context_line":"        \u0027device_profile_name\u0027: StringField(),"},{"line_number":252,"context_line":"        \u0027request_group_index\u0027: IntegerField()"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"        ### Fields set by Nova, after scheduling before binding"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_062e98aa","line":251,"range":{"start_line":251,"start_character":8,"end_line":251,"end_character":29},"in_reply_to":"3f79a3b5_17095683","updated":"2018-09-28 13:21:33.000000000","message":"The device profile name + request group index ties the VAR to a specific request group. That request group info is used later during the bind and possibly the attach phases.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":27458,"name":"Li Liu","email":"liliueecg@gmail.com","username":"liliu"},"change_message_id":"0151e19806f554c959e63c0cd3fa33a1d1470c75","unresolved":false,"context_lines":[{"line_number":248,"context_line":"        \u0027state\u0027: EnumField(),"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"        ### Fields set by Cyborg on creation: accelerator requirements"},{"line_number":251,"context_line":"        \u0027device_profile_name\u0027: StringField(),"},{"line_number":252,"context_line":"        \u0027request_group_index\u0027: IntegerField()"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"        ### Fields set by Nova, after scheduling before binding"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_b2e45ee0","line":251,"in_reply_to":"3f79a3b5_467d70b0","updated":"2018-10-03 01:30:33.000000000","message":"Does the bitstream related information tracked in this field? Or does it tracked in some other fields?","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"f77b20a084f6cb9b70f46a8993fe54c546c540dd","unresolved":false,"context_lines":[{"line_number":248,"context_line":"        \u0027state\u0027: EnumField(),"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"        ### Fields set by Cyborg on creation: accelerator requirements"},{"line_number":251,"context_line":"        \u0027device_profile_name\u0027: StringField(),"},{"line_number":252,"context_line":"        \u0027request_group_index\u0027: IntegerField()"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"        ### Fields set by Nova, after scheduling before binding"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_467d70b0","line":251,"in_reply_to":"3f79a3b5_9852a311","updated":"2018-09-28 13:21:33.000000000","message":"Close. Cyborg creates the VARs with the device profile name given by Nova, and returns them (L381).","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"67e70d80415b43e45708e03a8d92e8c31320734e","unresolved":false,"context_lines":[{"line_number":248,"context_line":"        \u0027state\u0027: EnumField(),"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"        ### Fields set by Cyborg on creation: accelerator requirements"},{"line_number":251,"context_line":"        \u0027device_profile_name\u0027: StringField(),"},{"line_number":252,"context_line":"        \u0027request_group_index\u0027: IntegerField()"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"        ### Fields set by Nova, after scheduling before binding"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_dced56b8","line":251,"in_reply_to":"3f79a3b5_b2e45ee0","updated":"2018-10-04 01:04:27.000000000","message":"The device profile referred by this name may have an \u0027accel:bitstream_id:3AFB\u003drequired\u0027 kind of field.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5146079f94401dbf76d0ea5f6cf01f97b78e8383","unresolved":false,"context_lines":[{"line_number":249,"context_line":""},{"line_number":250,"context_line":"        ### Fields set by Cyborg on creation: accelerator requirements"},{"line_number":251,"context_line":"        \u0027device_profile_name\u0027: StringField(),"},{"line_number":252,"context_line":"        \u0027request_group_index\u0027: IntegerField()"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"        ### Fields set by Nova, after scheduling before binding"},{"line_number":255,"context_line":"        \u0027nova_rp_uuid\u0027: UUIDField(),"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_b8551ffb","line":252,"updated":"2018-09-20 07:27:58.000000000","message":"what is this used for?","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b40e9f3d0a255f28fde945e611ab7b4172e5fe06","unresolved":false,"context_lines":[{"line_number":249,"context_line":""},{"line_number":250,"context_line":"        ### Fields set by Cyborg on creation: accelerator requirements"},{"line_number":251,"context_line":"        \u0027device_profile_name\u0027: StringField(),"},{"line_number":252,"context_line":"        \u0027request_group_index\u0027: IntegerField()"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"        ### Fields set by Nova, after scheduling before binding"},{"line_number":255,"context_line":"        \u0027nova_rp_uuid\u0027: UUIDField(),"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_b71982d2","line":252,"in_reply_to":"3f79a3b5_b8551ffb","updated":"2018-09-21 22:07:08.000000000","message":"IIUC, it\u0027s the suffix to be used for the granular request group when constructing the GET /allocation_candidates request. As stated above, I don\u0027t think we should include this here - that suffix needs to be computed dynamically at the very last moment as the GET /a_c request is being assembled from the flavor.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5146079f94401dbf76d0ea5f6cf01f97b78e8383","unresolved":false,"context_lines":[{"line_number":252,"context_line":"        \u0027request_group_index\u0027: IntegerField()"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"        ### Fields set by Nova, after scheduling before binding"},{"line_number":255,"context_line":"        \u0027nova_rp_uuid\u0027: UUIDField(),"},{"line_number":256,"context_line":"        \u0027instance_uuid\u0027: UUIDField(),"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"        ### Fields set by Cyborg after binding"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_58408b35","line":255,"updated":"2018-09-20 07:27:58.000000000","message":"placement_rp_uuid or just rp_uuid. placement was always intended to be a seperate service from nova and is currently being extracted so the nova prefix is incorrect.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"f77b20a084f6cb9b70f46a8993fe54c546c540dd","unresolved":false,"context_lines":[{"line_number":252,"context_line":"        \u0027request_group_index\u0027: IntegerField()"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"        ### Fields set by Nova, after scheduling before binding"},{"line_number":255,"context_line":"        \u0027nova_rp_uuid\u0027: UUIDField(),"},{"line_number":256,"context_line":"        \u0027instance_uuid\u0027: UUIDField(),"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"        ### Fields set by Cyborg after binding"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_a10a2e1b","line":255,"in_reply_to":"3f79a3b5_17b3969c","updated":"2018-09-28 13:21:33.000000000","message":"I meant the specific device RP UUID (nested within cnrp). Updated.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"f77b20a084f6cb9b70f46a8993fe54c546c540dd","unresolved":false,"context_lines":[{"line_number":252,"context_line":"        \u0027request_group_index\u0027: IntegerField()"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"        ### Fields set by Nova, after scheduling before binding"},{"line_number":255,"context_line":"        \u0027nova_rp_uuid\u0027: UUIDField(),"},{"line_number":256,"context_line":"        \u0027instance_uuid\u0027: UUIDField(),"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"        ### Fields set by Cyborg after binding"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_a6056417","line":255,"in_reply_to":"3f79a3b5_58408b35","updated":"2018-09-28 13:21:33.000000000","message":"Done","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b40e9f3d0a255f28fde945e611ab7b4172e5fe06","unresolved":false,"context_lines":[{"line_number":252,"context_line":"        \u0027request_group_index\u0027: IntegerField()"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"        ### Fields set by Nova, after scheduling before binding"},{"line_number":255,"context_line":"        \u0027nova_rp_uuid\u0027: UUIDField(),"},{"line_number":256,"context_line":"        \u0027instance_uuid\u0027: UUIDField(),"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"        ### Fields set by Cyborg after binding"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_17b3969c","line":255,"in_reply_to":"3f79a3b5_58408b35","updated":"2018-09-21 22:07:08.000000000","message":"I\u0027m guessing you\u0027re specifically referring to the nova compute host resource provider, in which case this is satisfying the \"host\" field Sean mentions above. However, I agree the name could be improved. How about host_provider_uuid?","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b40e9f3d0a255f28fde945e611ab7b4172e5fe06","unresolved":false,"context_lines":[{"line_number":256,"context_line":"        \u0027instance_uuid\u0027: UUIDField(),"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"        ### Fields set by Cyborg after binding"},{"line_number":259,"context_line":"        \u0027attach_info\u0027: ObjectField(),"},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"        ### Nulled by Cyborg before giving to Nova"},{"line_number":262,"context_line":"        \u0027cyborg-private\u0027: DictOfStringsField()"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_77be8a65","line":259,"range":{"start_line":259,"start_character":8,"end_line":259,"end_character":21},"updated":"2018-09-21 22:07:08.000000000","message":"Is this described somewhere? Or is it deliberately left wide open so it can be populated with arbitrary data in formats proprietary to platform/hypervisor/virt-specific cyborg drivers and their corresponding nova compute driver routines?\n\n[Later] Okay, I see it on L266-82. Agree with Sean, this should be defined as VARAttachBase, assuming OVO fields are allowed to be polymorphic like that.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5146079f94401dbf76d0ea5f6cf01f97b78e8383","unresolved":false,"context_lines":[{"line_number":256,"context_line":"        \u0027instance_uuid\u0027: UUIDField(),"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"        ### Fields set by Cyborg after binding"},{"line_number":259,"context_line":"        \u0027attach_info\u0027: ObjectField(),"},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"        ### Nulled by Cyborg before giving to Nova"},{"line_number":262,"context_line":"        \u0027cyborg-private\u0027: DictOfStringsField()"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_783b07c7","line":259,"updated":"2018-09-20 07:27:58.000000000","message":"this should be a subclass of VARATTACHBASE filed.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"f77b20a084f6cb9b70f46a8993fe54c546c540dd","unresolved":false,"context_lines":[{"line_number":256,"context_line":"        \u0027instance_uuid\u0027: UUIDField(),"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"        ### Fields set by Cyborg after binding"},{"line_number":259,"context_line":"        \u0027attach_info\u0027: ObjectField(),"},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"        ### Nulled by Cyborg before giving to Nova"},{"line_number":262,"context_line":"        \u0027cyborg-private\u0027: DictOfStringsField()"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_a18f8e74","line":259,"range":{"start_line":259,"start_character":8,"end_line":259,"end_character":21},"in_reply_to":"3f79a3b5_77be8a65","updated":"2018-09-28 13:21:33.000000000","message":"When Cyborg returns a bound VAR, this field is indeed set to some subclass of VARAttachBase. The caller can use  isInstance() and type() to determine the actual subclass. If this field is declared as VARAttachBase, I am not sure whether the casting from subclass to base class would cause issues.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5146079f94401dbf76d0ea5f6cf01f97b78e8383","unresolved":false,"context_lines":[{"line_number":259,"context_line":"        \u0027attach_info\u0027: ObjectField(),"},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"        ### Nulled by Cyborg before giving to Nova"},{"line_number":262,"context_line":"        \u0027cyborg-private\u0027: DictOfStringsField()"},{"line_number":263,"context_line":"        . . ."},{"line_number":264,"context_line":"     }"},{"line_number":265,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_18469351","line":262,"updated":"2018-09-20 07:27:58.000000000","message":"this feilds like a hack. first it should be a versioned object not a dict of stings,\nsecond it would be better to create a wrapping cyborg_internal_var ovo that contined a standard var as a filed and moving the private data to the cyborg_internal_var ovo.\nbut in general i also done see why you need to store cyber-privete filed in the ovo at all. it would be much cleaner to just have a second ovo that has the internal stuff. and use compostion rather then nulling stuff.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b40e9f3d0a255f28fde945e611ab7b4172e5fe06","unresolved":false,"context_lines":[{"line_number":259,"context_line":"        \u0027attach_info\u0027: ObjectField(),"},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"        ### Nulled by Cyborg before giving to Nova"},{"line_number":262,"context_line":"        \u0027cyborg-private\u0027: DictOfStringsField()"},{"line_number":263,"context_line":"        . . ."},{"line_number":264,"context_line":"     }"},{"line_number":265,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_3746d27d","line":262,"in_reply_to":"3f79a3b5_18469351","updated":"2018-09-21 22:07:08.000000000","message":"It seems weird to me that you would need this at all. I would think any cyborg-specific information would be communicated from the agent to the conductor via operations separate from the ones flinging whole VARs around, and associated (if necessary) with a VAR in the cyborg DB by UUID.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"f77b20a084f6cb9b70f46a8993fe54c546c540dd","unresolved":false,"context_lines":[{"line_number":259,"context_line":"        \u0027attach_info\u0027: ObjectField(),"},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"        ### Nulled by Cyborg before giving to Nova"},{"line_number":262,"context_line":"        \u0027cyborg-private\u0027: DictOfStringsField()"},{"line_number":263,"context_line":"        . . ."},{"line_number":264,"context_line":"     }"},{"line_number":265,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_01e6824b","line":262,"in_reply_to":"3f79a3b5_3746d27d","updated":"2018-09-28 13:21:33.000000000","message":"Will drop.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5146079f94401dbf76d0ea5f6cf01f97b78e8383","unresolved":false,"context_lines":[{"line_number":273,"context_line":""},{"line_number":274,"context_line":"  class VARAttachPCI(VARAttachBase):"},{"line_number":275,"context_line":"     fields \u003d {"},{"line_number":276,"context_line":"        \u0027pci_addr\u0027: PCIAddressField()"},{"line_number":277,"context_line":"     }"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"  class VARAttachMdev(VARAttachBase):"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_38410f37","line":276,"updated":"2018-09-20 07:27:58.000000000","message":"i assume this is just an examlpe as for powervm this will not be a pci address.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b40e9f3d0a255f28fde945e611ab7b4172e5fe06","unresolved":false,"context_lines":[{"line_number":273,"context_line":""},{"line_number":274,"context_line":"  class VARAttachPCI(VARAttachBase):"},{"line_number":275,"context_line":"     fields \u003d {"},{"line_number":276,"context_line":"        \u0027pci_addr\u0027: PCIAddressField()"},{"line_number":277,"context_line":"     }"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"  class VARAttachMdev(VARAttachBase):"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_9a17cd47","line":276,"in_reply_to":"3f79a3b5_38410f37","updated":"2018-09-21 22:07:08.000000000","message":"Right, PowerVM would have its own subclass of VARAttachBase, presumably containing DRC name and/or index.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"f77b20a084f6cb9b70f46a8993fe54c546c540dd","unresolved":false,"context_lines":[{"line_number":273,"context_line":""},{"line_number":274,"context_line":"  class VARAttachPCI(VARAttachBase):"},{"line_number":275,"context_line":"     fields \u003d {"},{"line_number":276,"context_line":"        \u0027pci_addr\u0027: PCIAddressField()"},{"line_number":277,"context_line":"     }"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"  class VARAttachMdev(VARAttachBase):"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_61de566b","line":276,"in_reply_to":"3f79a3b5_38410f37","updated":"2018-09-28 13:21:33.000000000","message":"Yes.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"f77b20a084f6cb9b70f46a8993fe54c546c540dd","unresolved":false,"context_lines":[{"line_number":273,"context_line":""},{"line_number":274,"context_line":"  class VARAttachPCI(VARAttachBase):"},{"line_number":275,"context_line":"     fields \u003d {"},{"line_number":276,"context_line":"        \u0027pci_addr\u0027: PCIAddressField()"},{"line_number":277,"context_line":"     }"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"  class VARAttachMdev(VARAttachBase):"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_21d29e5c","line":276,"in_reply_to":"3f79a3b5_9a17cd47","updated":"2018-09-28 13:21:33.000000000","message":"Yes.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5146079f94401dbf76d0ea5f6cf01f97b78e8383","unresolved":false,"context_lines":[{"line_number":291,"context_line":"   flavor that includes a device profile. It passes it to the Nova conductor."},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"#. The Nova conductor calls os-acc\u0027s ``create_unbound_vars_for_instance()``"},{"line_number":294,"context_line":"   method, which calls the Cyborg API ``POST /vars/unbound``"},{"line_number":295,"context_line":"   with the device profile and optionally the image UUID. It"},{"line_number":296,"context_line":"   gets back the extra specs for accelerators and a list of unbound VARs."},{"line_number":297,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_d8757b99","line":294,"updated":"2018-09-20 07:27:58.000000000","message":"it should just post to /vars  the unbound is redundant","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"f77b20a084f6cb9b70f46a8993fe54c546c540dd","unresolved":false,"context_lines":[{"line_number":291,"context_line":"   flavor that includes a device profile. It passes it to the Nova conductor."},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"#. The Nova conductor calls os-acc\u0027s ``create_unbound_vars_for_instance()``"},{"line_number":294,"context_line":"   method, which calls the Cyborg API ``POST /vars/unbound``"},{"line_number":295,"context_line":"   with the device profile and optionally the image UUID. It"},{"line_number":296,"context_line":"   gets back the extra specs for accelerators and a list of unbound VARs."},{"line_number":297,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_472240bc","line":294,"in_reply_to":"3f79a3b5_d8757b99","updated":"2018-09-28 13:21:33.000000000","message":"The notion of using only /vars as the URI has some issues. One may want to update an unbound VAR without binding it, so using PATCH /vars to mean binding is not advisable.\n\nI am thinking of updating this to model a binding as a sub-resource within a VAR, like this. That should address most of the comments below.\nGET /v1/vars [\u0026state\u003d{...} ] [\u0026instance\u003d{uuid}]\nPOST /v1/vars \n  Create unbound VARs\nPOST /v1/vars/bindings/1\n  Create bindings resource within the VARs. To allow for \n  shadow bindings for migration, this is named .../1.\nDELETE /v1/vars/bindings/1?{\u0026vars\u003dvar1,...|\u0026instance\u003d{uuid}}\n  Unbind the VAR\nDELETE /v1/vars\u0026vars\u003d[...]\n  Destroy the VAR","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5146079f94401dbf76d0ea5f6cf01f97b78e8383","unresolved":false,"context_lines":[{"line_number":293,"context_line":"#. The Nova conductor calls os-acc\u0027s ``create_unbound_vars_for_instance()``"},{"line_number":294,"context_line":"   method, which calls the Cyborg API ``POST /vars/unbound``"},{"line_number":295,"context_line":"   with the device profile and optionally the image UUID. It"},{"line_number":296,"context_line":"   gets back the extra specs for accelerators and a list of unbound VARs."},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"   NOTE: The image UUID is included so that Cyborg can query Glance for the"},{"line_number":299,"context_line":"   image traits and incorporate them. But it is not mandatory."}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_f878778f","line":296,"updated":"2018-09-20 07:27:58.000000000","message":"this is not a partaclly restful api. can you add request and respocne examples detailing the exact call with the request and responce  payload and the responce code on success and failure.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"f77b20a084f6cb9b70f46a8993fe54c546c540dd","unresolved":false,"context_lines":[{"line_number":293,"context_line":"#. The Nova conductor calls os-acc\u0027s ``create_unbound_vars_for_instance()``"},{"line_number":294,"context_line":"   method, which calls the Cyborg API ``POST /vars/unbound``"},{"line_number":295,"context_line":"   with the device profile and optionally the image UUID. It"},{"line_number":296,"context_line":"   gets back the extra specs for accelerators and a list of unbound VARs."},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"   NOTE: The image UUID is included so that Cyborg can query Glance for the"},{"line_number":299,"context_line":"   image traits and incorporate them. But it is not mandatory."}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_4a67a7eb","line":296,"in_reply_to":"3f79a3b5_f878778f","updated":"2018-09-28 13:21:33.000000000","message":"Please see the response to the comment on L294.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5146079f94401dbf76d0ea5f6cf01f97b78e8383","unresolved":false,"context_lines":[{"line_number":296,"context_line":"   gets back the extra specs for accelerators and a list of unbound VARs."},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"   NOTE: The image UUID is included so that Cyborg can query Glance for the"},{"line_number":299,"context_line":"   image traits and incorporate them. But it is not mandatory."},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"#. The Nova conductor folds the extra specs for accelerators into the flavor."},{"line_number":302,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_986b83b7","line":299,"updated":"2018-09-20 07:27:58.000000000","message":"this should not be passed as part of the var creation it should be passed as part of the var binding.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"67e70d80415b43e45708e03a8d92e8c31320734e","unresolved":false,"context_lines":[{"line_number":296,"context_line":"   gets back the extra specs for accelerators and a list of unbound VARs."},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"   NOTE: The image UUID is included so that Cyborg can query Glance for the"},{"line_number":299,"context_line":"   image traits and incorporate them. But it is not mandatory."},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"#. The Nova conductor folds the extra specs for accelerators into the flavor."},{"line_number":302,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_1c3d0e2b","line":299,"in_reply_to":"3f79a3b5_12d512e6","updated":"2018-10-04 01:04:27.000000000","message":"That is in the device profile.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b40e9f3d0a255f28fde945e611ab7b4172e5fe06","unresolved":false,"context_lines":[{"line_number":296,"context_line":"   gets back the extra specs for accelerators and a list of unbound VARs."},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"   NOTE: The image UUID is included so that Cyborg can query Glance for the"},{"line_number":299,"context_line":"   image traits and incorporate them. But it is not mandatory."},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"#. The Nova conductor folds the extra specs for accelerators into the flavor."},{"line_number":302,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_fa3841cc","line":299,"in_reply_to":"3f79a3b5_986b83b7","updated":"2018-09-21 22:07:08.000000000","message":"Disagree. The scheduling process (which precedes the binding) relies on having queried placement with all the right traits.\n\nThat said, are we talking about the instance boot image or an accelerator bitstream? If the former, I don\u0027t think we have defined a mechanism for the image to include traits for anything other than the unnumbered request group.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":27458,"name":"Li Liu","email":"liliueecg@gmail.com","username":"liliu"},"change_message_id":"0151e19806f554c959e63c0cd3fa33a1d1470c75","unresolved":false,"context_lines":[{"line_number":296,"context_line":"   gets back the extra specs for accelerators and a list of unbound VARs."},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"   NOTE: The image UUID is included so that Cyborg can query Glance for the"},{"line_number":299,"context_line":"   image traits and incorporate them. But it is not mandatory."},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"#. The Nova conductor folds the extra specs for accelerators into the flavor."},{"line_number":302,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_12d512e6","line":299,"in_reply_to":"3f79a3b5_eaa313b0","updated":"2018-10-03 01:30:33.000000000","message":"What about the bitstream image?","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"f77b20a084f6cb9b70f46a8993fe54c546c540dd","unresolved":false,"context_lines":[{"line_number":296,"context_line":"   gets back the extra specs for accelerators and a list of unbound VARs."},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"   NOTE: The image UUID is included so that Cyborg can query Glance for the"},{"line_number":299,"context_line":"   image traits and incorporate them. But it is not mandatory."},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"#. The Nova conductor folds the extra specs for accelerators into the flavor."},{"line_number":302,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_eaa313b0","line":299,"in_reply_to":"3f79a3b5_fa3841cc","updated":"2018-09-28 13:21:33.000000000","message":"This is the instance image. The image may have not only traits but also other properties of interest to Cyborg.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5146079f94401dbf76d0ea5f6cf01f97b78e8383","unresolved":false,"context_lines":[{"line_number":298,"context_line":"   NOTE: The image UUID is included so that Cyborg can query Glance for the"},{"line_number":299,"context_line":"   image traits and incorporate them. But it is not mandatory."},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"#. The Nova conductor folds the extra specs for accelerators into the flavor."},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"#. Nova invokes Placement and gets a list of allocation candidates. Nova"},{"line_number":304,"context_line":"   selects one of those candidates for each requested accelerator and makes"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_b86e7fc5","line":301,"updated":"2018-09-20 07:27:58.000000000","message":"this is a little ipersice it will append the resouce requests to the set form the flavor,image and ports but we likely dont want to upsted the embeded flavor in the\ninstance.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"f77b20a084f6cb9b70f46a8993fe54c546c540dd","unresolved":false,"context_lines":[{"line_number":298,"context_line":"   NOTE: The image UUID is included so that Cyborg can query Glance for the"},{"line_number":299,"context_line":"   image traits and incorporate them. But it is not mandatory."},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"#. The Nova conductor folds the extra specs for accelerators into the flavor."},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"#. Nova invokes Placement and gets a list of allocation candidates. Nova"},{"line_number":304,"context_line":"   selects one of those candidates for each requested accelerator and makes"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_aa82fbfd","line":301,"in_reply_to":"3f79a3b5_b86e7fc5","updated":"2018-09-28 13:21:33.000000000","message":"Will restate to say \u0027into the request spec\u0027.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5146079f94401dbf76d0ea5f6cf01f97b78e8383","unresolved":false,"context_lines":[{"line_number":302,"context_line":""},{"line_number":303,"context_line":"#. Nova invokes Placement and gets a list of allocation candidates. Nova"},{"line_number":304,"context_line":"   selects one of those candidates for each requested accelerator and makes"},{"line_number":305,"context_line":"   claim(s) in Placement. (This is done by the scheduler for instance spawn.)"},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"#. The Nova conductor updates each unbound VAR with its selected device RP."},{"line_number":308,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_58696bbb","line":305,"updated":"2018-09-20 07:27:58.000000000","message":"that is not quite how this works each allocation candate contines the set of allocation for all resouces requested for the instance. so we will select the first allocation candate and claim all the resouces in one go.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"f77b20a084f6cb9b70f46a8993fe54c546c540dd","unresolved":false,"context_lines":[{"line_number":302,"context_line":""},{"line_number":303,"context_line":"#. Nova invokes Placement and gets a list of allocation candidates. Nova"},{"line_number":304,"context_line":"   selects one of those candidates for each requested accelerator and makes"},{"line_number":305,"context_line":"   claim(s) in Placement. (This is done by the scheduler for instance spawn.)"},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"#. The Nova conductor updates each unbound VAR with its selected device RP."},{"line_number":308,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_2aea6b9f","line":305,"in_reply_to":"3f79a3b5_58696bbb","updated":"2018-09-28 13:21:33.000000000","message":"Yes. This seems to be a matter of wording. Will update.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5146079f94401dbf76d0ea5f6cf01f97b78e8383","unresolved":false,"context_lines":[{"line_number":304,"context_line":"   selects one of those candidates for each requested accelerator and makes"},{"line_number":305,"context_line":"   claim(s) in Placement. (This is done by the scheduler for instance spawn.)"},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"#. The Nova conductor updates each unbound VAR with its selected device RP."},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"#. The Nova conductor calls os-acc\u0027s ``bind_vars_for_instance()`` method,"},{"line_number":310,"context_line":"   which calls the Cyborg API ``POST /vars/bound`` with the instance UUID and"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_786467e5","line":307,"updated":"2018-09-20 07:27:58.000000000","message":"this may be tricky as i dont think we have a way to map from the allocation back to the indiviual resouce request groups. gibi or efried might be able to shed some light on how\nthis issue was addressed for the neutron ports as they have the same requirement.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b40e9f3d0a255f28fde945e611ab7b4172e5fe06","unresolved":false,"context_lines":[{"line_number":304,"context_line":"   selects one of those candidates for each requested accelerator and makes"},{"line_number":305,"context_line":"   claim(s) in Placement. (This is done by the scheduler for instance spawn.)"},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"#. The Nova conductor updates each unbound VAR with its selected device RP."},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"#. The Nova conductor calls os-acc\u0027s ``bind_vars_for_instance()`` method,"},{"line_number":310,"context_line":"   which calls the Cyborg API ``POST /vars/bound`` with the instance UUID and"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_7ae99117","line":307,"in_reply_to":"3f79a3b5_786467e5","updated":"2018-09-21 22:07:08.000000000","message":"Sean is right, but I can\u0027t shed any light, because without some variant of [1], we still don\u0027t have a way to map request groups to resource providers in the allocation.\n\nEven if we were able to match those up for you, cyborg would still have to do the work of figuring out which accelerator (there may be more than one in a single resource provider\u0027s inventory) it should bind.\n\nSo perhaps it would be best simply to send the allocations to cyborg and let it do all the reconciliation.\n\n[1] https://review.openstack.org/#/c/597601/","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5146079f94401dbf76d0ea5f6cf01f97b78e8383","unresolved":false,"context_lines":[{"line_number":307,"context_line":"#. The Nova conductor updates each unbound VAR with its selected device RP."},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"#. The Nova conductor calls os-acc\u0027s ``bind_vars_for_instance()`` method,"},{"line_number":310,"context_line":"   which calls the Cyborg API ``POST /vars/bound`` with the instance UUID and"},{"line_number":311,"context_line":"   the list of unbound VARs. (The device profile name and request group are"},{"line_number":312,"context_line":"   already in each unbound VAR.) This is an asynchronous call which initiates"},{"line_number":313,"context_line":"   binding in the background and returns immediately. (The binding may involve"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_185f730f","line":310,"updated":"2018-09-20 07:27:58.000000000","message":"this should not be a post it shoudl be a put or patch to /vars with the list of full or patal vars.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"f77b20a084f6cb9b70f46a8993fe54c546c540dd","unresolved":false,"context_lines":[{"line_number":307,"context_line":"#. The Nova conductor updates each unbound VAR with its selected device RP."},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"#. The Nova conductor calls os-acc\u0027s ``bind_vars_for_instance()`` method,"},{"line_number":310,"context_line":"   which calls the Cyborg API ``POST /vars/bound`` with the instance UUID and"},{"line_number":311,"context_line":"   the list of unbound VARs. (The device profile name and request group are"},{"line_number":312,"context_line":"   already in each unbound VAR.) This is an asynchronous call which initiates"},{"line_number":313,"context_line":"   binding in the background and returns immediately. (The binding may involve"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_6a39433d","line":310,"in_reply_to":"3f79a3b5_185f730f","updated":"2018-09-28 13:21:33.000000000","message":"Please see the response to the comment on L294.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5146079f94401dbf76d0ea5f6cf01f97b78e8383","unresolved":false,"context_lines":[{"line_number":314,"context_line":"   device configuration or reprogramming, which happens in the background.)"},{"line_number":315,"context_line":""},{"line_number":316,"context_line":"#. The Nova conductor calls the Nova compute manager via RPC with the list"},{"line_number":317,"context_line":"   of VAR objects."},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"#. Nova compute manager\u0027s ``build_and_run_instance()`` calls os-acc\u0027s"},{"line_number":320,"context_line":"   ``get_vars()`` API passing a list of VAR UUIDs, or the"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_385a6f1d","line":317,"updated":"2018-09-20 07:27:58.000000000","message":"i thinkthis section can be removed. im not sure why we would down call to the\ncompute at this point when we are about to down call to spawn. unless you are\nrefering to invoking build_and_run_instance e.g. the spawn request.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b40e9f3d0a255f28fde945e611ab7b4172e5fe06","unresolved":false,"context_lines":[{"line_number":314,"context_line":"   device configuration or reprogramming, which happens in the background.)"},{"line_number":315,"context_line":""},{"line_number":316,"context_line":"#. The Nova conductor calls the Nova compute manager via RPC with the list"},{"line_number":317,"context_line":"   of VAR objects."},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"#. Nova compute manager\u0027s ``build_and_run_instance()`` calls os-acc\u0027s"},{"line_number":320,"context_line":"   ``get_vars()`` API passing a list of VAR UUIDs, or the"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_5acdb5b8","line":317,"in_reply_to":"3f79a3b5_385a6f1d","updated":"2018-09-21 22:07:08.000000000","message":"\u003e unless you are\n \u003e refering to invoking build_and_run_instance e.g. the spawn request.\n\nThat\u0027s my understanding.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"f77b20a084f6cb9b70f46a8993fe54c546c540dd","unresolved":false,"context_lines":[{"line_number":314,"context_line":"   device configuration or reprogramming, which happens in the background.)"},{"line_number":315,"context_line":""},{"line_number":316,"context_line":"#. The Nova conductor calls the Nova compute manager via RPC with the list"},{"line_number":317,"context_line":"   of VAR objects."},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"#. Nova compute manager\u0027s ``build_and_run_instance()`` calls os-acc\u0027s"},{"line_number":320,"context_line":"   ``get_vars()`` API passing a list of VAR UUIDs, or the"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_0a420fad","line":317,"in_reply_to":"3f79a3b5_5acdb5b8","updated":"2018-09-28 13:21:33.000000000","message":"Yes, this is part of the spawn request. That\u0027s what we said at the PTG.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"89b671437e1988a49853aef7916d357bad20541a","unresolved":false,"context_lines":[{"line_number":317,"context_line":"   of VAR objects."},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"#. Nova compute manager\u0027s ``build_and_run_instance()`` calls os-acc\u0027s"},{"line_number":320,"context_line":"   ``get_vars()`` API passing a list of VAR UUIDs, or the"},{"line_number":321,"context_line":"   ``get_vars_for_instance()`` with the ``instance_uuid``. Both call the"},{"line_number":322,"context_line":"   Cyborg API ``GET /vars/bound``, the former with a list of VAR UUIDs, and"},{"line_number":323,"context_line":"   the latter with the instance uuid.  This is a blocking API call that"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_e86fc990","line":320,"range":{"start_line":320,"start_character":5,"end_line":320,"end_character":13},"updated":"2018-09-26 21:13:22.000000000","message":"After reading all of these references to \u0027vars\u0027, my brain keeps thinking \u0027variables\u0027, but I have to keep reminding myself that this refers to something completely different. I don\u0027t want to bikeshed, but it would be helpful to future generations of people working on this code to not choose such an easily-confused name. Maybe something as simple as upper-casing it would help: get_VARs()","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"67e70d80415b43e45708e03a8d92e8c31320734e","unresolved":false,"context_lines":[{"line_number":317,"context_line":"   of VAR objects."},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"#. Nova compute manager\u0027s ``build_and_run_instance()`` calls os-acc\u0027s"},{"line_number":320,"context_line":"   ``get_vars()`` API passing a list of VAR UUIDs, or the"},{"line_number":321,"context_line":"   ``get_vars_for_instance()`` with the ``instance_uuid``. Both call the"},{"line_number":322,"context_line":"   Cyborg API ``GET /vars/bound``, the former with a list of VAR UUIDs, and"},{"line_number":323,"context_line":"   the latter with the instance uuid.  This is a blocking API call that"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_9c127eb3","line":320,"range":{"start_line":320,"start_character":5,"end_line":320,"end_character":13},"in_reply_to":"3f79a3b5_12a67255","updated":"2018-10-04 01:04:27.000000000","message":"As before, if other reviewers also suggest a name change, sure, np. Trying not to thrash on names :)","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":27458,"name":"Li Liu","email":"liliueecg@gmail.com","username":"liliu"},"change_message_id":"0151e19806f554c959e63c0cd3fa33a1d1470c75","unresolved":false,"context_lines":[{"line_number":317,"context_line":"   of VAR objects."},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"#. Nova compute manager\u0027s ``build_and_run_instance()`` calls os-acc\u0027s"},{"line_number":320,"context_line":"   ``get_vars()`` API passing a list of VAR UUIDs, or the"},{"line_number":321,"context_line":"   ``get_vars_for_instance()`` with the ``instance_uuid``. Both call the"},{"line_number":322,"context_line":"   Cyborg API ``GET /vars/bound``, the former with a list of VAR UUIDs, and"},{"line_number":323,"context_line":"   the latter with the instance uuid.  This is a blocking API call that"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_12a67255","line":320,"range":{"start_line":320,"start_character":5,"end_line":320,"end_character":13},"in_reply_to":"3f79a3b5_55986d18","updated":"2018-10-03 01:30:33.000000000","message":"VAS sounds good to me :)","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"92cdc8dd309b6998b9a097cacf5239dcb892e24c","unresolved":false,"context_lines":[{"line_number":317,"context_line":"   of VAR objects."},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"#. Nova compute manager\u0027s ``build_and_run_instance()`` calls os-acc\u0027s"},{"line_number":320,"context_line":"   ``get_vars()`` API passing a list of VAR UUIDs, or the"},{"line_number":321,"context_line":"   ``get_vars_for_instance()`` with the ``instance_uuid``. Both call the"},{"line_number":322,"context_line":"   Cyborg API ``GET /vars/bound``, the former with a list of VAR UUIDs, and"},{"line_number":323,"context_line":"   the latter with the instance uuid.  This is a blocking API call that"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_55986d18","line":320,"range":{"start_line":320,"start_character":5,"end_line":320,"end_character":13},"in_reply_to":"3f79a3b5_e86fc990","updated":"2018-10-02 04:44:23.000000000","message":"I used to call this a Virtual Accelerator Nexus (VAN). I could instead call this a Cyborg Accelerator Record (CAR). Hey, you started the bikeshedding :) \n\nLeaving vehicle puns aside, I could call this a Virtual Accelerator Structure (VAS). BTW, VAS is Latin for vessel, not a bad name for something that holds data. I am trying to keep this pronounceable, while trying to avoid overloaded terms like context/block/descriptor/...","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5146079f94401dbf76d0ea5f6cf01f97b78e8383","unresolved":false,"context_lines":[{"line_number":319,"context_line":"#. Nova compute manager\u0027s ``build_and_run_instance()`` calls os-acc\u0027s"},{"line_number":320,"context_line":"   ``get_vars()`` API passing a list of VAR UUIDs, or the"},{"line_number":321,"context_line":"   ``get_vars_for_instance()`` with the ``instance_uuid``. Both call the"},{"line_number":322,"context_line":"   Cyborg API ``GET /vars/bound``, the former with a list of VAR UUIDs, and"},{"line_number":323,"context_line":"   the latter with the instance uuid.  This is a blocking API call that"},{"line_number":324,"context_line":"   returns a list of VARs that either got bound successfully or failed to"},{"line_number":325,"context_line":"   bind."}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_d89a5bc3","line":322,"updated":"2018-09-20 07:27:58.000000000","message":"again from a rest point of view this api enpoint seam inccorect.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"f77b20a084f6cb9b70f46a8993fe54c546c540dd","unresolved":false,"context_lines":[{"line_number":319,"context_line":"#. Nova compute manager\u0027s ``build_and_run_instance()`` calls os-acc\u0027s"},{"line_number":320,"context_line":"   ``get_vars()`` API passing a list of VAR UUIDs, or the"},{"line_number":321,"context_line":"   ``get_vars_for_instance()`` with the ``instance_uuid``. Both call the"},{"line_number":322,"context_line":"   Cyborg API ``GET /vars/bound``, the former with a list of VAR UUIDs, and"},{"line_number":323,"context_line":"   the latter with the instance uuid.  This is a blocking API call that"},{"line_number":324,"context_line":"   returns a list of VARs that either got bound successfully or failed to"},{"line_number":325,"context_line":"   bind."}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_ca1177b1","line":322,"in_reply_to":"3f79a3b5_d89a5bc3","updated":"2018-09-28 13:21:33.000000000","message":"Please see the response to the comment on L294.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5146079f94401dbf76d0ea5f6cf01f97b78e8383","unresolved":false,"context_lines":[{"line_number":320,"context_line":"   ``get_vars()`` API passing a list of VAR UUIDs, or the"},{"line_number":321,"context_line":"   ``get_vars_for_instance()`` with the ``instance_uuid``. Both call the"},{"line_number":322,"context_line":"   Cyborg API ``GET /vars/bound``, the former with a list of VAR UUIDs, and"},{"line_number":323,"context_line":"   the latter with the instance uuid.  This is a blocking API call that"},{"line_number":324,"context_line":"   returns a list of VARs that either got bound successfully or failed to"},{"line_number":325,"context_line":"   bind."},{"line_number":326,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_f89dd7ba","line":323,"updated":"2018-09-20 07:27:58.000000000","message":"what do you mean by blocking in this case. do you mean it will hit the database\nand return imideatly or do you mean it ill wait for the binding to fail or succeed\nbefore retruning. i think the former is fine but the latter will break\ndue to proxy,loadblance or webserver request timeouts.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"67e70d80415b43e45708e03a8d92e8c31320734e","unresolved":false,"context_lines":[{"line_number":320,"context_line":"   ``get_vars()`` API passing a list of VAR UUIDs, or the"},{"line_number":321,"context_line":"   ``get_vars_for_instance()`` with the ``instance_uuid``. Both call the"},{"line_number":322,"context_line":"   Cyborg API ``GET /vars/bound``, the former with a list of VAR UUIDs, and"},{"line_number":323,"context_line":"   the latter with the instance uuid.  This is a blocking API call that"},{"line_number":324,"context_line":"   returns a list of VARs that either got bound successfully or failed to"},{"line_number":325,"context_line":"   bind."},{"line_number":326,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_bc7adaec","line":323,"in_reply_to":"3f79a3b5_32a12e3b","updated":"2018-10-04 01:04:27.000000000","message":"Yes. The text says this is a synchronous (blocking) call. Sean says that won\u0027t work due to timeouts in various components. I have updated this to a poll from os-acc.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":27458,"name":"Li Liu","email":"liliueecg@gmail.com","username":"liliu"},"change_message_id":"0151e19806f554c959e63c0cd3fa33a1d1470c75","unresolved":false,"context_lines":[{"line_number":320,"context_line":"   ``get_vars()`` API passing a list of VAR UUIDs, or the"},{"line_number":321,"context_line":"   ``get_vars_for_instance()`` with the ``instance_uuid``. Both call the"},{"line_number":322,"context_line":"   Cyborg API ``GET /vars/bound``, the former with a list of VAR UUIDs, and"},{"line_number":323,"context_line":"   the latter with the instance uuid.  This is a blocking API call that"},{"line_number":324,"context_line":"   returns a list of VARs that either got bound successfully or failed to"},{"line_number":325,"context_line":"   bind."},{"line_number":326,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_32a12e3b","line":323,"in_reply_to":"3f79a3b5_f89dd7ba","updated":"2018-10-03 01:30:33.000000000","message":"I think this refers to sync vs async calls.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"f77b20a084f6cb9b70f46a8993fe54c546c540dd","unresolved":false,"context_lines":[{"line_number":320,"context_line":"   ``get_vars()`` API passing a list of VAR UUIDs, or the"},{"line_number":321,"context_line":"   ``get_vars_for_instance()`` with the ``instance_uuid``. Both call the"},{"line_number":322,"context_line":"   Cyborg API ``GET /vars/bound``, the former with a list of VAR UUIDs, and"},{"line_number":323,"context_line":"   the latter with the instance uuid.  This is a blocking API call that"},{"line_number":324,"context_line":"   returns a list of VARs that either got bound successfully or failed to"},{"line_number":325,"context_line":"   bind."},{"line_number":326,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_2aa26b40","line":323,"in_reply_to":"3f79a3b5_f89dd7ba","updated":"2018-09-28 13:21:33.000000000","message":"This may require a poll.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5146079f94401dbf76d0ea5f6cf01f97b78e8383","unresolved":false,"context_lines":[{"line_number":351,"context_line":""},{"line_number":352,"context_line":"* Nested RPs need to work for scheduling [#nRP]_."},{"line_number":353,"context_line":"* Nova conductor calls Cyborg REST API, via os-acc, to create unbound VARs."},{"line_number":354,"context_line":"* Nova conductor calls Cyborg REST API, via os-acc, to create bound VARs."},{"line_number":355,"context_line":"* Nova conductor calls nova compute passing the VARs over RPC."},{"line_number":356,"context_line":"* Nova compute manager calls os-acc for instance spawn and termination."},{"line_number":357,"context_line":"* Nova virt base driver methods are updated to include a var_info structure,"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_98a063f5","line":354,"updated":"2018-09-20 07:27:58.000000000","message":"technically its not created a new bound var its binding the var instace it already has\nwhich is not a create operation its an update.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5146079f94401dbf76d0ea5f6cf01f97b78e8383","unresolved":false,"context_lines":[{"line_number":358,"context_line":"  with list of VARs, as additional argument that defaults to None."},{"line_number":359,"context_line":"* Selected Nova virt drivers are updated to handle accelerators."},{"line_number":360,"context_line":""},{"line_number":361,"context_line":"Cyborg API signatures"},{"line_number":362,"context_line":"---------------------"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"The GET methods can be invoked by any tenant or the admin. The POST, PUT"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_b8a3dffe","line":361,"updated":"2018-09-20 07:27:58.000000000","message":"this should have be presented before teh assignment workflow. please move it there.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5146079f94401dbf76d0ea5f6cf01f97b78e8383","unresolved":false,"context_lines":[{"line_number":367,"context_line":"All methods return HTTP 200 on success, except as noted."},{"line_number":368,"context_line":""},{"line_number":369,"context_line":"::"},{"line_number":370,"context_line":" POST /vars/unbound"},{"line_number":371,"context_line":"    Create unbound VARs for a device profile. May apply RBAC checks for the"},{"line_number":372,"context_line":"    tenant."},{"line_number":373,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_58ae4be7","line":370,"updated":"2018-09-20 07:27:58.000000000","message":"/var/unbound -\u003e /var","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"04bdd386244655663a0b67a3fbc2ef47a15f5415","unresolved":false,"context_lines":[{"line_number":367,"context_line":"All methods return HTTP 200 on success, except as noted."},{"line_number":368,"context_line":""},{"line_number":369,"context_line":"::"},{"line_number":370,"context_line":" POST /vars/unbound"},{"line_number":371,"context_line":"    Create unbound VARs for a device profile. May apply RBAC checks for the"},{"line_number":372,"context_line":"    tenant."},{"line_number":373,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_1c72ee7c","line":370,"in_reply_to":"3f79a3b5_58ae4be7","updated":"2018-10-04 00:45:39.000000000","message":"Done","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b40e9f3d0a255f28fde945e611ab7b4172e5fe06","unresolved":false,"context_lines":[{"line_number":377,"context_line":"       }"},{"line_number":378,"context_line":""},{"line_number":379,"context_line":"    Returns:"},{"line_number":380,"context_line":"       { \u0027device_extra_specs\u0027: \u003cstring\u003e,"},{"line_number":381,"context_line":"         \u0027vars\u0027: [ \u003cserialized-var\u003e, \u003cserialized-var\u003e, ... ]"},{"line_number":382,"context_line":"       }"},{"line_number":383,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_9a4fcd34","line":380,"range":{"start_line":380,"start_character":17,"end_line":380,"end_character":28},"updated":"2018-09-21 22:07:08.000000000","message":"Agree this should not be called extra_specs. Sean\u0027s suggestion wfm.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5146079f94401dbf76d0ea5f6cf01f97b78e8383","unresolved":false,"context_lines":[{"line_number":377,"context_line":"       }"},{"line_number":378,"context_line":""},{"line_number":379,"context_line":"    Returns:"},{"line_number":380,"context_line":"       { \u0027device_extra_specs\u0027: \u003cstring\u003e,"},{"line_number":381,"context_line":"         \u0027vars\u0027: [ \u003cserialized-var\u003e, \u003cserialized-var\u003e, ... ]"},{"line_number":382,"context_line":"       }"},{"line_number":383,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_78a9c7da","line":380,"updated":"2018-09-20 07:27:58.000000000","message":"this shoudl proably be a list of resouce request + trrait tupples\ne.g.\ndevice_requests:[{resouces:[{\"resouce_class\":\"amount\"}], traits:[\"CUSTOM_TRAIT\"]},{...}]","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"04bdd386244655663a0b67a3fbc2ef47a15f5415","unresolved":false,"context_lines":[{"line_number":377,"context_line":"       }"},{"line_number":378,"context_line":""},{"line_number":379,"context_line":"    Returns:"},{"line_number":380,"context_line":"       { \u0027device_extra_specs\u0027: \u003cstring\u003e,"},{"line_number":381,"context_line":"         \u0027vars\u0027: [ \u003cserialized-var\u003e, \u003cserialized-var\u003e, ... ]"},{"line_number":382,"context_line":"       }"},{"line_number":383,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_fc6292a6","line":380,"range":{"start_line":380,"start_character":17,"end_line":380,"end_character":28},"in_reply_to":"3f79a3b5_9a4fcd34","updated":"2018-10-04 00:45:39.000000000","message":"Done","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5146079f94401dbf76d0ea5f6cf01f97b78e8383","unresolved":false,"context_lines":[{"line_number":381,"context_line":"         \u0027vars\u0027: [ \u003cserialized-var\u003e, \u003cserialized-var\u003e, ... ]"},{"line_number":382,"context_line":"       }"},{"line_number":383,"context_line":""},{"line_number":384,"context_line":" POST /vars/bound"},{"line_number":385,"context_line":"    Bind the specified VARs. Each VAR has been populated with the selected"},{"line_number":386,"context_line":"    device RP."},{"line_number":387,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_18b45335","line":384,"updated":"2018-09-20 07:27:58.000000000","message":"patch /vars/","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"04bdd386244655663a0b67a3fbc2ef47a15f5415","unresolved":false,"context_lines":[{"line_number":381,"context_line":"         \u0027vars\u0027: [ \u003cserialized-var\u003e, \u003cserialized-var\u003e, ... ]"},{"line_number":382,"context_line":"       }"},{"line_number":383,"context_line":""},{"line_number":384,"context_line":" POST /vars/bound"},{"line_number":385,"context_line":"    Bind the specified VARs. Each VAR has been populated with the selected"},{"line_number":386,"context_line":"    device RP."},{"line_number":387,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_7c5762ca","line":384,"in_reply_to":"3f79a3b5_18b45335","updated":"2018-10-04 00:45:39.000000000","message":"One may want to update an unbound VAR without binding it.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5146079f94401dbf76d0ea5f6cf01f97b78e8383","unresolved":false,"context_lines":[{"line_number":385,"context_line":"    Bind the specified VARs. Each VAR has been populated with the selected"},{"line_number":386,"context_line":"    device RP."},{"line_number":387,"context_line":""},{"line_number":388,"context_line":"    Request body:"},{"line_number":389,"context_line":"       { \u0027instance_uuid\u0027: \u003cuuid-string\u003e,"},{"line_number":390,"context_line":"         \u0027vars\u0027: [ \u003cvar with device-RP\u003e, ... ]"},{"line_number":391,"context_line":"       }"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_38afcfe0","line":388,"updated":"2018-09-20 07:27:58.000000000","message":"[{instance_uuid:\"uuid\", id:\"var uuid\"}, {...}, {...}]","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"f77b20a084f6cb9b70f46a8993fe54c546c540dd","unresolved":false,"context_lines":[{"line_number":385,"context_line":"    Bind the specified VARs. Each VAR has been populated with the selected"},{"line_number":386,"context_line":"    device RP."},{"line_number":387,"context_line":""},{"line_number":388,"context_line":"    Request body:"},{"line_number":389,"context_line":"       { \u0027instance_uuid\u0027: \u003cuuid-string\u003e,"},{"line_number":390,"context_line":"         \u0027vars\u0027: [ \u003cvar with device-RP\u003e, ... ]"},{"line_number":391,"context_line":"       }"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_614096a3","line":388,"in_reply_to":"3f79a3b5_38afcfe0","updated":"2018-09-28 13:21:33.000000000","message":"This implies that each VAR could be for a different instance. What is the use case for that?","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"04bdd386244655663a0b67a3fbc2ef47a15f5415","unresolved":false,"context_lines":[{"line_number":385,"context_line":"    Bind the specified VARs. Each VAR has been populated with the selected"},{"line_number":386,"context_line":"    device RP."},{"line_number":387,"context_line":""},{"line_number":388,"context_line":"    Request body:"},{"line_number":389,"context_line":"       { \u0027instance_uuid\u0027: \u003cuuid-string\u003e,"},{"line_number":390,"context_line":"         \u0027vars\u0027: [ \u003cvar with device-RP\u003e, ... ]"},{"line_number":391,"context_line":"       }"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_1c498e30","line":388,"in_reply_to":"3f79a3b5_614096a3","updated":"2018-10-04 00:45:39.000000000","message":"Done","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5146079f94401dbf76d0ea5f6cf01f97b78e8383","unresolved":false,"context_lines":[{"line_number":392,"context_line":""},{"line_number":393,"context_line":"    Returns:"},{"line_number":394,"context_line":"       HTTP 202 Accepted (indicates the operation is continuing)"},{"line_number":395,"context_line":"       HTTP 401 on failure in validation or RBAC checks."},{"line_number":396,"context_line":""},{"line_number":397,"context_line":"       No response body."},{"line_number":398,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_d8833b55","line":395,"updated":"2018-09-20 07:27:58.000000000","message":"it should retrun a 400 if the request was in valid or a 401 or 403 for rbac issues not a 401 for both.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"04bdd386244655663a0b67a3fbc2ef47a15f5415","unresolved":false,"context_lines":[{"line_number":392,"context_line":""},{"line_number":393,"context_line":"    Returns:"},{"line_number":394,"context_line":"       HTTP 202 Accepted (indicates the operation is continuing)"},{"line_number":395,"context_line":"       HTTP 401 on failure in validation or RBAC checks."},{"line_number":396,"context_line":""},{"line_number":397,"context_line":"       No response body."},{"line_number":398,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_fc49322e","line":395,"in_reply_to":"3f79a3b5_d8833b55","updated":"2018-10-04 00:45:39.000000000","message":"400 means \u0027Bad Syntax\u0027. RFC 4918 recommends 422.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5146079f94401dbf76d0ea5f6cf01f97b78e8383","unresolved":false,"context_lines":[{"line_number":396,"context_line":""},{"line_number":397,"context_line":"       No response body."},{"line_number":398,"context_line":""},{"line_number":399,"context_line":" GET /vars/bound"},{"line_number":400,"context_line":"    Get the specified VARs for which binding was initiated, whether they bound"},{"line_number":401,"context_line":"    successfully or failed. Blocks until each of the VARs has succeeded or"},{"line_number":402,"context_line":"    failed in binding."}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_f8863765","line":399,"updated":"2018-09-20 07:27:58.000000000","message":"get /vars\u0026instance_uuid\u003duuid to filter by instance uuid via a query sting or\nget /vars/\u003cvar uuid\u003e to retrive a singel var and /vars to list all vars you have rights to see.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"04bdd386244655663a0b67a3fbc2ef47a15f5415","unresolved":false,"context_lines":[{"line_number":396,"context_line":""},{"line_number":397,"context_line":"       No response body."},{"line_number":398,"context_line":""},{"line_number":399,"context_line":" GET /vars/bound"},{"line_number":400,"context_line":"    Get the specified VARs for which binding was initiated, whether they bound"},{"line_number":401,"context_line":"    successfully or failed. Blocks until each of the VARs has succeeded or"},{"line_number":402,"context_line":"    failed in binding."}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_9c9fde63","line":399,"in_reply_to":"3f79a3b5_f8863765","updated":"2018-10-04 00:45:39.000000000","message":"Please see the response to the comment on L294.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5146079f94401dbf76d0ea5f6cf01f97b78e8383","unresolved":false,"context_lines":[{"line_number":403,"context_line":"    There are two variations: one takes an instance UUID and returns all bound"},{"line_number":404,"context_line":"    VARs for that instance, and the other takes an explicit list of VARs."},{"line_number":405,"context_line":""},{"line_number":406,"context_line":"    Request body:"},{"line_number":407,"context_line":"       { \u0027vars\u0027: [ uuid1, uuid2, ... ] }"},{"line_number":408,"context_line":"       OR"},{"line_number":409,"context_line":"       { \u0027instance\u0027: uuid }"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_98794383","line":406,"updated":"2018-09-20 07:27:58.000000000","message":"while technically legal the http spec recommends that get request bodies should be ignore if present by the server. proxies and caches are allowed to drop them and caches are not required to consided gets with different bodies to be different. in other word this will break and we should not do it. in the most recent revion the semantics are explcitly undefiend https://tools.ietf.org/html/rfc7231#section-4.3.1","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"f77b20a084f6cb9b70f46a8993fe54c546c540dd","unresolved":false,"context_lines":[{"line_number":403,"context_line":"    There are two variations: one takes an instance UUID and returns all bound"},{"line_number":404,"context_line":"    VARs for that instance, and the other takes an explicit list of VARs."},{"line_number":405,"context_line":""},{"line_number":406,"context_line":"    Request body:"},{"line_number":407,"context_line":"       { \u0027vars\u0027: [ uuid1, uuid2, ... ] }"},{"line_number":408,"context_line":"       OR"},{"line_number":409,"context_line":"       { \u0027instance\u0027: uuid }"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_2a258bbf","line":406,"in_reply_to":"3f79a3b5_98794383","updated":"2018-09-28 13:21:33.000000000","message":"Please see the response to the comment on L294.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5146079f94401dbf76d0ea5f6cf01f97b78e8383","unresolved":false,"context_lines":[{"line_number":410,"context_line":""},{"line_number":411,"context_line":"    Returns: JSON with list of JSON-serialized VAR objects."},{"line_number":412,"context_line":""},{"line_number":413,"context_line":" DELETE /vars/bound"},{"line_number":414,"context_line":"    Unbind the specified VARs. May configure devices. Blocks till all VARs are"},{"line_number":415,"context_line":"    successfully unbound or fail to unbind."},{"line_number":416,"context_line":"    There are two variations: one takes an instance UUID and unbinds all bound"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_b87c3f71","line":413,"updated":"2018-09-20 07:27:58.000000000","message":"we should use a patch or put to update the var and just remove the host value\nso patch /vars  [{id:\"var id\",host:\"\"}] or a put with the full object.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5146079f94401dbf76d0ea5f6cf01f97b78e8383","unresolved":false,"context_lines":[{"line_number":416,"context_line":"    There are two variations: one takes an instance UUID and unbinds all bound"},{"line_number":417,"context_line":"    VARs for that instance, and the other takes an explicit list of VARs."},{"line_number":418,"context_line":""},{"line_number":419,"context_line":"    Request body:"},{"line_number":420,"context_line":"       { \u0027vars\u0027: [ uuid1, uuid2, ... ] }"},{"line_number":421,"context_line":"       OR"},{"line_number":422,"context_line":"       { \u0027instance\u0027: uuid }"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_58972b91","line":419,"updated":"2018-09-20 07:27:58.000000000","message":"a requst body in a delete is undefiended see https://tools.ietf.org/html/rfc7231#section-4.3.5","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"f77b20a084f6cb9b70f46a8993fe54c546c540dd","unresolved":false,"context_lines":[{"line_number":416,"context_line":"    There are two variations: one takes an instance UUID and unbinds all bound"},{"line_number":417,"context_line":"    VARs for that instance, and the other takes an explicit list of VARs."},{"line_number":418,"context_line":""},{"line_number":419,"context_line":"    Request body:"},{"line_number":420,"context_line":"       { \u0027vars\u0027: [ uuid1, uuid2, ... ] }"},{"line_number":421,"context_line":"       OR"},{"line_number":422,"context_line":"       { \u0027instance\u0027: uuid }"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_4d67c1eb","line":419,"in_reply_to":"3f79a3b5_58972b91","updated":"2018-09-28 13:21:33.000000000","message":"OK, will fix.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5146079f94401dbf76d0ea5f6cf01f97b78e8383","unresolved":false,"context_lines":[{"line_number":423,"context_line":""},{"line_number":424,"context_line":"    No response body."},{"line_number":425,"context_line":""},{"line_number":426,"context_line":" DELETE /vars/unbound"},{"line_number":427,"context_line":"    Delete the specified VARs."},{"line_number":428,"context_line":""},{"line_number":429,"context_line":"    Request body:"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_789227a1","line":426,"updated":"2018-09-20 07:27:58.000000000","message":"delete /vars/\u003cvar uuid\u003e or delete /vars\u0026instance_uuid","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"04bdd386244655663a0b67a3fbc2ef47a15f5415","unresolved":false,"context_lines":[{"line_number":423,"context_line":""},{"line_number":424,"context_line":"    No response body."},{"line_number":425,"context_line":""},{"line_number":426,"context_line":" DELETE /vars/unbound"},{"line_number":427,"context_line":"    Delete the specified VARs."},{"line_number":428,"context_line":""},{"line_number":429,"context_line":"    Request body:"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_5ca5c6b2","line":426,"in_reply_to":"3f79a3b5_789227a1","updated":"2018-10-04 00:45:39.000000000","message":"Done","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5146079f94401dbf76d0ea5f6cf01f97b78e8383","unresolved":false,"context_lines":[{"line_number":429,"context_line":"    Request body:"},{"line_number":430,"context_line":"       { \u0027vars\u0027: [ uuid1, uuid2, ... ] }"},{"line_number":431,"context_line":""},{"line_number":432,"context_line":"    No response body."},{"line_number":433,"context_line":""},{"line_number":434,"context_line":"Alternatives"},{"line_number":435,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_188d337b","line":432,"updated":"2018-09-20 07:27:58.000000000","message":"the respoce code should be 204 no content","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"04bdd386244655663a0b67a3fbc2ef47a15f5415","unresolved":false,"context_lines":[{"line_number":429,"context_line":"    Request body:"},{"line_number":430,"context_line":"       { \u0027vars\u0027: [ uuid1, uuid2, ... ] }"},{"line_number":431,"context_line":""},{"line_number":432,"context_line":"    No response body."},{"line_number":433,"context_line":""},{"line_number":434,"context_line":"Alternatives"},{"line_number":435,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_bca2daab","line":432,"in_reply_to":"3f79a3b5_188d337b","updated":"2018-10-04 00:45:39.000000000","message":"Done","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5146079f94401dbf76d0ea5f6cf01f97b78e8383","unresolved":false,"context_lines":[{"line_number":439,"context_line":"Data model impact"},{"line_number":440,"context_line":"-----------------"},{"line_number":441,"context_line":""},{"line_number":442,"context_line":"None"},{"line_number":443,"context_line":""},{"line_number":444,"context_line":"REST API impact"},{"line_number":445,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_38882f69","line":442,"updated":"2018-09-20 07:27:58.000000000","message":"a new flavor extra spec for device profiles will be added.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"04bdd386244655663a0b67a3fbc2ef47a15f5415","unresolved":false,"context_lines":[{"line_number":439,"context_line":"Data model impact"},{"line_number":440,"context_line":"-----------------"},{"line_number":441,"context_line":""},{"line_number":442,"context_line":"None"},{"line_number":443,"context_line":""},{"line_number":444,"context_line":"REST API impact"},{"line_number":445,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_7ca8c289","line":442,"in_reply_to":"3f79a3b5_38882f69","updated":"2018-10-04 00:45:39.000000000","message":"Done","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5146079f94401dbf76d0ea5f6cf01f97b78e8383","unresolved":false,"context_lines":[{"line_number":473,"context_line":"---------------------"},{"line_number":474,"context_line":""},{"line_number":475,"context_line":"The operator may need to run a tool after installing a Cyborg driver to see if"},{"line_number":476,"context_line":"the PCI devices that it detects are covered by the PCI whitelist."},{"line_number":477,"context_line":""},{"line_number":478,"context_line":"Developer impact"},{"line_number":479,"context_line":"----------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_d8e81b17","line":476,"updated":"2018-09-20 07:27:58.000000000","message":"this will change based on my previous comments.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"04bdd386244655663a0b67a3fbc2ef47a15f5415","unresolved":false,"context_lines":[{"line_number":473,"context_line":"---------------------"},{"line_number":474,"context_line":""},{"line_number":475,"context_line":"The operator may need to run a tool after installing a Cyborg driver to see if"},{"line_number":476,"context_line":"the PCI devices that it detects are covered by the PCI whitelist."},{"line_number":477,"context_line":""},{"line_number":478,"context_line":"Developer impact"},{"line_number":479,"context_line":"----------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_dc98f676","line":476,"in_reply_to":"3f79a3b5_d8e81b17","updated":"2018-10-04 00:45:39.000000000","message":"Done","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5146079f94401dbf76d0ea5f6cf01f97b78e8383","unresolved":false,"context_lines":[{"line_number":478,"context_line":"Developer impact"},{"line_number":479,"context_line":"----------------"},{"line_number":480,"context_line":""},{"line_number":481,"context_line":"Cyborg developers may provide a tool to detect conflicts between PCI IDs"},{"line_number":482,"context_line":"detected by Cyborg drivers and the PCI whitelist."},{"line_number":483,"context_line":""},{"line_number":484,"context_line":"Implementation"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_f8eb970e","line":481,"updated":"2018-09-20 07:27:58.000000000","message":"this is in the wrong section.\nits not a developer impact.","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"04bdd386244655663a0b67a3fbc2ef47a15f5415","unresolved":false,"context_lines":[{"line_number":478,"context_line":"Developer impact"},{"line_number":479,"context_line":"----------------"},{"line_number":480,"context_line":""},{"line_number":481,"context_line":"Cyborg developers may provide a tool to detect conflicts between PCI IDs"},{"line_number":482,"context_line":"detected by Cyborg drivers and the PCI whitelist."},{"line_number":483,"context_line":""},{"line_number":484,"context_line":"Implementation"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_3c8eca31","line":481,"in_reply_to":"3f79a3b5_f8eb970e","updated":"2018-10-04 00:45:39.000000000","message":"Done","commit_id":"c0737b343f7ff132d77873479780f0e9f9400d7e"},{"author":{"_account_id":25738,"name":"Xinran WANG","email":"xin-ran.wang@intel.com","username":"Xinran"},"change_message_id":"183de70c42ce57a829e94de555b8db7c1bb2ab05","unresolved":false,"context_lines":[{"line_number":101,"context_line":"Coexistence with PCI whitelists"},{"line_number":102,"context_line":"-------------------------------"},{"line_number":103,"context_line":"The operator tells Nova which PCI devices to claim and use by configuring the"},{"line_number":104,"context_line":"PCI Whitelists mechanism. In addition, the operator installs Cyborg drivers in"},{"line_number":105,"context_line":"compute nodes and configures/enables them. Those drivers may then discover and"},{"line_number":106,"context_line":"report some PCI devices. The operator must ensure that both configurations"},{"line_number":107,"context_line":"are compatible."},{"line_number":108,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_bccefe8c","line":105,"range":{"start_line":104,"start_character":26,"end_line":105,"end_character":41},"updated":"2018-10-09 08:40:07.000000000","message":"how does operator install these drivers?\nhttps://review.openstack.org/#/c/596691 in this patch, cyborg will load driver with stevedore. do you mean operator will modify cyborg\u0027s configuration file. How does operator know which driver should cyborg install?","commit_id":"7822f852b257b533c4082febb21ab19aac34c73b"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"2b94e871b71ba631c162f3b854343d74e6b032f4","unresolved":false,"context_lines":[{"line_number":101,"context_line":"Coexistence with PCI whitelists"},{"line_number":102,"context_line":"-------------------------------"},{"line_number":103,"context_line":"The operator tells Nova which PCI devices to claim and use by configuring the"},{"line_number":104,"context_line":"PCI Whitelists mechanism. In addition, the operator installs Cyborg drivers in"},{"line_number":105,"context_line":"compute nodes and configures/enables them. Those drivers may then discover and"},{"line_number":106,"context_line":"report some PCI devices. The operator must ensure that both configurations"},{"line_number":107,"context_line":"are compatible."},{"line_number":108,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_6f0411c6","line":105,"range":{"start_line":104,"start_character":26,"end_line":105,"end_character":41},"in_reply_to":"3f79a3b5_bccefe8c","updated":"2018-10-10 03:09:37.000000000","message":"The operator may use many ways to install drivers. In-tree drivers would come with Cyborg install, and out-of-tree drivers may be installed as a python package. The operator would state the needed drivers in Cyborg\u0027s conf file. Since the operator installs the physical hardware, he would know which drivers are needed for that hardware.","commit_id":"7822f852b257b533c4082febb21ab19aac34c73b"},{"author":{"_account_id":25738,"name":"Xinran WANG","email":"xin-ran.wang@intel.com","username":"Xinran"},"change_message_id":"183de70c42ce57a829e94de555b8db7c1bb2ab05","unresolved":false,"context_lines":[{"line_number":125,"context_line":"* Associate traits with RPs or remove such association."},{"line_number":126,"context_line":"* Update RP inventory."},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"This requires changes in Nova to enable use of nested resource providers. The"},{"line_number":129,"context_line":"exact list of changes is independent of Cyborg and is outside the scope of"},{"line_number":130,"context_line":"this spec."},{"line_number":131,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_f2933dfe","line":128,"range":{"start_line":128,"start_character":47,"end_line":128,"end_character":73},"updated":"2018-10-09 08:40:07.000000000","message":"does nova support NRP now?","commit_id":"7822f852b257b533c4082febb21ab19aac34c73b"},{"author":{"_account_id":25738,"name":"Xinran WANG","email":"xin-ran.wang@intel.com","username":"Xinran"},"change_message_id":"183de70c42ce57a829e94de555b8db7c1bb2ab05","unresolved":false,"context_lines":[{"line_number":144,"context_line":"In Phase 1, Nova API remains as today. The device profile is folded into the"},{"line_number":145,"context_line":"flavor as an extra spec manually by the operator, as below::"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":" openstack flavor set --property \u0027accel:device_profile\u003d\u003cprofile_name\u003e\u0027 flavor"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"Thus the standard Nova API can be used to spawn an instance with only the"},{"line_number":150,"context_line":"flavor (without device profiles), like this::"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_3250d52c","line":147,"range":{"start_line":147,"start_character":40,"end_line":147,"end_character":69},"updated":"2018-10-09 08:40:07.000000000","message":"it\u0027s better to elaborate where dev_profile stores, when one device_profile is created and who is responsible for it.","commit_id":"7822f852b257b533c4082febb21ab19aac34c73b"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"2b94e871b71ba631c162f3b854343d74e6b032f4","unresolved":false,"context_lines":[{"line_number":144,"context_line":"In Phase 1, Nova API remains as today. The device profile is folded into the"},{"line_number":145,"context_line":"flavor as an extra spec manually by the operator, as below::"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":" openstack flavor set --property \u0027accel:device_profile\u003d\u003cprofile_name\u003e\u0027 flavor"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"Thus the standard Nova API can be used to spawn an instance with only the"},{"line_number":150,"context_line":"flavor (without device profiles), like this::"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_2f27f965","line":147,"range":{"start_line":147,"start_character":40,"end_line":147,"end_character":69},"in_reply_to":"3f79a3b5_3250d52c","updated":"2018-10-10 03:09:37.000000000","message":"Please see https://review.openstack.org/602978. This Nova spec is the overarching spec, and referred to the device profile spec in L136 above, and to other specs as needed.","commit_id":"7822f852b257b533c4082febb21ab19aac34c73b"},{"author":{"_account_id":25738,"name":"Xinran WANG","email":"xin-ran.wang@intel.com","username":"Xinran"},"change_message_id":"183de70c42ce57a829e94de555b8db7c1bb2ab05","unresolved":false,"context_lines":[{"line_number":171,"context_line":"Updating the Request Spec"},{"line_number":172,"context_line":"-------------------------"},{"line_number":173,"context_line":"When the user submits a request to create an instance, in any of the ways"},{"line_number":174,"context_line":"described in Section `User requests`_, Nova needs to call a Cyborg API,"},{"line_number":175,"context_line":"through a shim layer, to get back the resource request groups in the device"},{"line_number":176,"context_line":"profile and merge them into the request spec."},{"line_number":177,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_32fe9506","line":174,"range":{"start_line":174,"start_character":58,"end_line":174,"end_character":71},"updated":"2018-10-09 08:40:07.000000000","message":"os-acc can provide this funciton, there is no need to call cyborg api.","commit_id":"7822f852b257b533c4082febb21ab19aac34c73b"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"58913e7b38ce4edf31e42837d928655a01d31845","unresolved":false,"context_lines":[{"line_number":171,"context_line":"Updating the Request Spec"},{"line_number":172,"context_line":"-------------------------"},{"line_number":173,"context_line":"When the user submits a request to create an instance, in any of the ways"},{"line_number":174,"context_line":"described in Section `User requests`_, Nova needs to call a Cyborg API,"},{"line_number":175,"context_line":"through a shim layer, to get back the resource request groups in the device"},{"line_number":176,"context_line":"profile and merge them into the request spec."},{"line_number":177,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_440a61d1","line":174,"range":{"start_line":174,"start_character":58,"end_line":174,"end_character":71},"in_reply_to":"3f79a3b5_32fe9506","updated":"2018-10-09 18:03:17.000000000","message":"The device profiles are in cyborg, which means some API needs to be called, AFAIK. Maybe you just mean that nova will call os-acc, which will call cyborg\u0027s API to return the resource groups? If so, the wording here is fine, IMHO. It\u0027s important to convey that the device-profile-to-placement-request operation happens in cyborg, at nova\u0027s request.","commit_id":"7822f852b257b533c4082febb21ab19aac34c73b"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"2b94e871b71ba631c162f3b854343d74e6b032f4","unresolved":false,"context_lines":[{"line_number":171,"context_line":"Updating the Request Spec"},{"line_number":172,"context_line":"-------------------------"},{"line_number":173,"context_line":"When the user submits a request to create an instance, in any of the ways"},{"line_number":174,"context_line":"described in Section `User requests`_, Nova needs to call a Cyborg API,"},{"line_number":175,"context_line":"through a shim layer, to get back the resource request groups in the device"},{"line_number":176,"context_line":"profile and merge them into the request spec."},{"line_number":177,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_afe7890f","line":174,"range":{"start_line":174,"start_character":58,"end_line":174,"end_character":71},"in_reply_to":"3f79a3b5_440a61d1","updated":"2018-10-10 03:09:37.000000000","message":"Yes, device profiles are in Cyborg db and so need a Cyborg API. The \u0027shim layer\u0027 mentioned in L175 is os-acc.","commit_id":"7822f852b257b533c4082febb21ab19aac34c73b"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"58913e7b38ce4edf31e42837d928655a01d31845","unresolved":false,"context_lines":[{"line_number":175,"context_line":"through a shim layer, to get back the resource request groups in the device"},{"line_number":176,"context_line":"profile and merge them into the request spec."},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"To elaborate further, a user request may ask for resources in three forms:"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"* The flavor in the request may contain multiple request groups in the"},{"line_number":181,"context_line":"  granular request syntax [#gran-req]_."},{"line_number":182,"context_line":"* Requests for other non-compute resources, such as network ports, may also"},{"line_number":183,"context_line":"  potentially result in additional request groups that need to be added to the"},{"line_number":184,"context_line":"  request spec, possibly along the lines of [#req-group]_."},{"line_number":185,"context_line":"* The device profile contains request groups for accelerators."},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"Request groups from each of these sources need to be merged into the request"},{"line_number":188,"context_line":"spec."}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_e4112dfa","line":185,"range":{"start_line":178,"start_character":0,"end_line":185,"end_character":62},"updated":"2018-10-09 18:03:17.000000000","message":"If I understand, this is basically re-stating most of nova, with a \"oh and, maybe accelerators too\" bullet at the end. I think you can just nuke this whole re-stating of a user request.","commit_id":"7822f852b257b533c4082febb21ab19aac34c73b"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"2b94e871b71ba631c162f3b854343d74e6b032f4","unresolved":false,"context_lines":[{"line_number":175,"context_line":"through a shim layer, to get back the resource request groups in the device"},{"line_number":176,"context_line":"profile and merge them into the request spec."},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"To elaborate further, a user request may ask for resources in three forms:"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"* The flavor in the request may contain multiple request groups in the"},{"line_number":181,"context_line":"  granular request syntax [#gran-req]_."},{"line_number":182,"context_line":"* Requests for other non-compute resources, such as network ports, may also"},{"line_number":183,"context_line":"  potentially result in additional request groups that need to be added to the"},{"line_number":184,"context_line":"  request spec, possibly along the lines of [#req-group]_."},{"line_number":185,"context_line":"* The device profile contains request groups for accelerators."},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"Request groups from each of these sources need to be merged into the request"},{"line_number":188,"context_line":"spec."}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_af6ea961","line":185,"range":{"start_line":178,"start_character":0,"end_line":185,"end_character":62},"in_reply_to":"3f79a3b5_e4112dfa","updated":"2018-10-10 03:09:37.000000000","message":"Done","commit_id":"7822f852b257b533c4082febb21ab19aac34c73b"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"58913e7b38ce4edf31e42837d928655a01d31845","unresolved":false,"context_lines":[{"line_number":195,"context_line":""},{"line_number":196,"context_line":"  { resources:CUSTOM_ACCELERATOR_FOO\u003d2,"},{"line_number":197,"context_line":"    trait:CUSTOM_TRAIT_BAR\u003drequired,"},{"line_number":198,"context_line":"    accel:bitstream_id:3AFB\u003drequired"},{"line_number":199,"context_line":"  }"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"Cyborg shall provide an API that takes a device profile and returns a JSON"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_e4e60d14","line":198,"range":{"start_line":198,"start_character":4,"end_line":198,"end_character":36},"updated":"2018-10-09 18:03:17.000000000","message":"I\u0027m missing why nova needs to know about this, or what it needs to do with it. I would expect the device profile to contain this and insulate nova from needing to know about it.","commit_id":"7822f852b257b533c4082febb21ab19aac34c73b"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"2b94e871b71ba631c162f3b854343d74e6b032f4","unresolved":false,"context_lines":[{"line_number":195,"context_line":""},{"line_number":196,"context_line":"  { resources:CUSTOM_ACCELERATOR_FOO\u003d2,"},{"line_number":197,"context_line":"    trait:CUSTOM_TRAIT_BAR\u003drequired,"},{"line_number":198,"context_line":"    accel:bitstream_id:3AFB\u003drequired"},{"line_number":199,"context_line":"  }"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"Cyborg shall provide an API that takes a device profile and returns a JSON"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_cfc76546","line":198,"range":{"start_line":198,"start_character":4,"end_line":198,"end_character":36},"in_reply_to":"3f79a3b5_e4e60d14","updated":"2018-10-10 03:09:37.000000000","message":"Nova does not need to process it in any way, but Cyborg needs it later in the flow. The device profile may have it, as stated here. Or the VM image in Glance may have this as an image property, in which case Cyborg needs some place to hold it -- but it cannot add that to the device profile in the db because that is common to multiple instance requests. So, we return an \u0027augmented device profile\u0027 (which contains such properties) but it is not persisted in the db.\n\nThe logical place to store such properties is in the request spec, as part of the appropriate request group.\n\nAll that Nova needs to do is to include this in the request group, as an un-interpreted opaque string, for Cyborg to use this later.","commit_id":"7822f852b257b533c4082febb21ab19aac34c73b"},{"author":{"_account_id":25738,"name":"Xinran WANG","email":"xin-ran.wang@intel.com","username":"Xinran"},"change_message_id":"183de70c42ce57a829e94de555b8db7c1bb2ab05","unresolved":false,"context_lines":[{"line_number":202,"context_line":"with resources, traits and ``accel`` properties listed for each group. See"},{"line_number":203,"context_line":"`cyborg-create`_ for the signature of this Cyborg API."},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"To enable Cyborg to be used in standalone scenarios, the return value of the"},{"line_number":206,"context_line":"Cyborg API is in a neutral format (JSON). However, Nova may represent the"},{"line_number":207,"context_line":"request group using some Nova-specific data structure, such as [#req-group]_."},{"line_number":208,"context_line":"So, we need a shim layer between Nova and Cyborg that does the data structure"},{"line_number":209,"context_line":"conversion. That shim layer is the os-acc library, which offers one"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_adf1ea02","line":206,"range":{"start_line":205,"start_character":0,"end_line":206,"end_character":42},"updated":"2018-10-09 08:40:07.000000000","message":"To enable cyborg to be used in standalone service, the input parameters of Cyborg API should not be nova-specific. I think the input and return value should both be JSON. It\u0027s os-acc who is in charge of convert data structure. (dev_profile -\u003e JSON), there is no need to call one Cyborg API to convert them.","commit_id":"7822f852b257b533c4082febb21ab19aac34c73b"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"2b94e871b71ba631c162f3b854343d74e6b032f4","unresolved":false,"context_lines":[{"line_number":202,"context_line":"with resources, traits and ``accel`` properties listed for each group. See"},{"line_number":203,"context_line":"`cyborg-create`_ for the signature of this Cyborg API."},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"To enable Cyborg to be used in standalone scenarios, the return value of the"},{"line_number":206,"context_line":"Cyborg API is in a neutral format (JSON). However, Nova may represent the"},{"line_number":207,"context_line":"request group using some Nova-specific data structure, such as [#req-group]_."},{"line_number":208,"context_line":"So, we need a shim layer between Nova and Cyborg that does the data structure"},{"line_number":209,"context_line":"conversion. That shim layer is the os-acc library, which offers one"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_0fe31dda","line":206,"range":{"start_line":205,"start_character":0,"end_line":206,"end_character":42},"in_reply_to":"3f79a3b5_adf1ea02","updated":"2018-10-10 03:09:37.000000000","message":"There is nothing Nova-specific in the call. The API takes a device profile name (string) as input. The output is in JSON. See L304-326.","commit_id":"7822f852b257b533c4082febb21ab19aac34c73b"},{"author":{"_account_id":25738,"name":"Xinran WANG","email":"xin-ran.wang@intel.com","username":"Xinran"},"change_message_id":"183de70c42ce57a829e94de555b8db7c1bb2ab05","unresolved":false,"context_lines":[{"line_number":228,"context_line":"Virtual Accelerator Requests"},{"line_number":229,"context_line":"----------------------------"},{"line_number":230,"context_line":"The state of assignment of an accelerator to an instance is encapsulated in an"},{"line_number":231,"context_line":"Oslo version object, named the Virtual Accelerator Request (VAR). The creation"},{"line_number":232,"context_line":"and management of VARs are handled by Cyborg, and VARs are persisted in Cyborg"},{"line_number":233,"context_line":"database. However, since VARs are passed back and forth between Cyborg and"},{"line_number":234,"context_line":"Nova, the os-acc defines the VAR."},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"A VAR, by definition, represents a single accelerator resource. The device"},{"line_number":237,"context_line":"profile in the user request may ask for more than one accelerator; the number"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_2d12bafe","line":234,"range":{"start_line":231,"start_character":66,"end_line":234,"end_character":33},"updated":"2018-10-09 08:40:07.000000000","message":"Is Cyborg the role to create VAR or OS-ACC? Why VAR is necessary, why don\u0027t we assign a proper deployable to an instance directly?","commit_id":"7822f852b257b533c4082febb21ab19aac34c73b"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"2b94e871b71ba631c162f3b854343d74e6b032f4","unresolved":false,"context_lines":[{"line_number":228,"context_line":"Virtual Accelerator Requests"},{"line_number":229,"context_line":"----------------------------"},{"line_number":230,"context_line":"The state of assignment of an accelerator to an instance is encapsulated in an"},{"line_number":231,"context_line":"Oslo version object, named the Virtual Accelerator Request (VAR). The creation"},{"line_number":232,"context_line":"and management of VARs are handled by Cyborg, and VARs are persisted in Cyborg"},{"line_number":233,"context_line":"database. However, since VARs are passed back and forth between Cyborg and"},{"line_number":234,"context_line":"Nova, the os-acc defines the VAR."},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"A VAR, by definition, represents a single accelerator resource. The device"},{"line_number":237,"context_line":"profile in the user request may ask for more than one accelerator; the number"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_6f2ad1e6","line":234,"range":{"start_line":231,"start_character":66,"end_line":234,"end_character":33},"in_reply_to":"3f79a3b5_2d12bafe","updated":"2018-10-10 03:09:37.000000000","message":"Os-acc is nothing more than a shim layer; it does not have any db. Cyborg stores VARs in its db and provides APIs to create/delete/get them.\n\nWhen a VAR is first created, there is no host or device selected yet, so there is no Cyborg deployable to assign.","commit_id":"7822f852b257b533c4082febb21ab19aac34c73b"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"861ca5f368cd580a2e9d3b571957dfe3362f21ff","unresolved":false,"context_lines":[{"line_number":228,"context_line":"Virtual Accelerator Requests"},{"line_number":229,"context_line":"----------------------------"},{"line_number":230,"context_line":"The state of assignment of an accelerator to an instance is encapsulated in an"},{"line_number":231,"context_line":"Oslo version object, named the Virtual Accelerator Request (VAR). The creation"},{"line_number":232,"context_line":"and management of VARs are handled by Cyborg, and VARs are persisted in Cyborg"},{"line_number":233,"context_line":"database. However, since VARs are passed back and forth between Cyborg and"},{"line_number":234,"context_line":"Nova, the os-acc defines the VAR."},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"A VAR, by definition, represents a single accelerator resource. The device"},{"line_number":237,"context_line":"profile in the user request may ask for more than one accelerator; the number"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_8fef18f9","line":234,"range":{"start_line":231,"start_character":66,"end_line":234,"end_character":33},"in_reply_to":"3f79a3b5_474b3985","updated":"2018-10-10 17:03:06.000000000","message":"After Nova does the scheduling, it needs to communicate the selected host and device RP to Cyborg. A device RP corresponds to a Deployable, so effectively a Deployable is assigned though Nova doesn\u0027t know Deployables. The VAR is the object through which the communication happens: \n* before the call, Nova fills in the host id in the VAR and os-acc fills in the device RP UUIDs; these are inputs to Cyborg.\n* Cyborg fills in the binding info (attach handle etc.) and returns it back to Nova compute, which uses that to do the attachment.","commit_id":"7822f852b257b533c4082febb21ab19aac34c73b"},{"author":{"_account_id":25738,"name":"Xinran WANG","email":"xin-ran.wang@intel.com","username":"Xinran"},"change_message_id":"5c3efb6920b608e03dce1ad78e6fbd53ffa92904","unresolved":false,"context_lines":[{"line_number":228,"context_line":"Virtual Accelerator Requests"},{"line_number":229,"context_line":"----------------------------"},{"line_number":230,"context_line":"The state of assignment of an accelerator to an instance is encapsulated in an"},{"line_number":231,"context_line":"Oslo version object, named the Virtual Accelerator Request (VAR). The creation"},{"line_number":232,"context_line":"and management of VARs are handled by Cyborg, and VARs are persisted in Cyborg"},{"line_number":233,"context_line":"database. However, since VARs are passed back and forth between Cyborg and"},{"line_number":234,"context_line":"Nova, the os-acc defines the VAR."},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"A VAR, by definition, represents a single accelerator resource. The device"},{"line_number":237,"context_line":"profile in the user request may ask for more than one accelerator; the number"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_474b3985","line":234,"range":{"start_line":231,"start_character":66,"end_line":234,"end_character":33},"in_reply_to":"3f79a3b5_6f2ad1e6","updated":"2018-10-10 06:22:24.000000000","message":"I am missing why VAR here is necessary. Why don\u0027t we assign a deployable directly after scheduler?","commit_id":"7822f852b257b533c4082febb21ab19aac34c73b"},{"author":{"_account_id":25738,"name":"Xinran WANG","email":"xin-ran.wang@intel.com","username":"Xinran"},"change_message_id":"183de70c42ce57a829e94de555b8db7c1bb2ab05","unresolved":false,"context_lines":[{"line_number":243,"context_line":"not yet associated with any specific accelerator or device, it is said to be"},{"line_number":244,"context_line":"in an ``unbound`` state. After the Nova scheduler has picked a specific device"},{"line_number":245,"context_line":"RP, Cyborg is called to bind that VAR to a specific accelerator in that device"},{"line_number":246,"context_line":"RP, which may involve device configuration. The result is a ``bound`` VAR,"},{"line_number":247,"context_line":"which is associated with an attach handle (such as a PCI function or mediated"},{"line_number":248,"context_line":"device UUID). Subsequently, the Nova virt driver can attach the accelerator to"},{"line_number":249,"context_line":"the instance. The workflow is presented in more detail in Section `Assignment"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_0d033e12","line":246,"range":{"start_line":246,"start_character":3,"end_line":246,"end_character":42},"updated":"2018-10-09 08:40:07.000000000","message":"what do you mean device configuration here?","commit_id":"7822f852b257b533c4082febb21ab19aac34c73b"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"2b94e871b71ba631c162f3b854343d74e6b032f4","unresolved":false,"context_lines":[{"line_number":243,"context_line":"not yet associated with any specific accelerator or device, it is said to be"},{"line_number":244,"context_line":"in an ``unbound`` state. After the Nova scheduler has picked a specific device"},{"line_number":245,"context_line":"RP, Cyborg is called to bind that VAR to a specific accelerator in that device"},{"line_number":246,"context_line":"RP, which may involve device configuration. The result is a ``bound`` VAR,"},{"line_number":247,"context_line":"which is associated with an attach handle (such as a PCI function or mediated"},{"line_number":248,"context_line":"device UUID). Subsequently, the Nova virt driver can attach the accelerator to"},{"line_number":249,"context_line":"the instance. The workflow is presented in more detail in Section `Assignment"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_0f31dd59","line":246,"range":{"start_line":246,"start_character":3,"end_line":246,"end_character":42},"in_reply_to":"3f79a3b5_0d033e12","updated":"2018-10-10 03:09:37.000000000","message":"Manipulation or updating of the device in some form.","commit_id":"7822f852b257b533c4082febb21ab19aac34c73b"},{"author":{"_account_id":25738,"name":"Xinran WANG","email":"xin-ran.wang@intel.com","username":"Xinran"},"change_message_id":"183de70c42ce57a829e94de555b8db7c1bb2ab05","unresolved":false,"context_lines":[{"line_number":244,"context_line":"in an ``unbound`` state. After the Nova scheduler has picked a specific device"},{"line_number":245,"context_line":"RP, Cyborg is called to bind that VAR to a specific accelerator in that device"},{"line_number":246,"context_line":"RP, which may involve device configuration. The result is a ``bound`` VAR,"},{"line_number":247,"context_line":"which is associated with an attach handle (such as a PCI function or mediated"},{"line_number":248,"context_line":"device UUID). Subsequently, the Nova virt driver can attach the accelerator to"},{"line_number":249,"context_line":"the instance. The workflow is presented in more detail in Section `Assignment"},{"line_number":250,"context_line":"workflow`_."}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_881dfc63","line":247,"range":{"start_line":247,"start_character":25,"end_line":247,"end_character":42},"updated":"2018-10-09 08:40:07.000000000","message":"what\u0027s the difference between attach handle and accelerator you mentioned in line 245? which is exactly associated with the VAR?","commit_id":"7822f852b257b533c4082febb21ab19aac34c73b"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"2b94e871b71ba631c162f3b854343d74e6b032f4","unresolved":false,"context_lines":[{"line_number":244,"context_line":"in an ``unbound`` state. After the Nova scheduler has picked a specific device"},{"line_number":245,"context_line":"RP, Cyborg is called to bind that VAR to a specific accelerator in that device"},{"line_number":246,"context_line":"RP, which may involve device configuration. The result is a ``bound`` VAR,"},{"line_number":247,"context_line":"which is associated with an attach handle (such as a PCI function or mediated"},{"line_number":248,"context_line":"device UUID). Subsequently, the Nova virt driver can attach the accelerator to"},{"line_number":249,"context_line":"the instance. The workflow is presented in more detail in Section `Assignment"},{"line_number":250,"context_line":"workflow`_."}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_8fe08d99","line":247,"range":{"start_line":247,"start_character":25,"end_line":247,"end_character":42},"in_reply_to":"3f79a3b5_881dfc63","updated":"2018-10-10 03:09:37.000000000","message":"It is good to read the specs in tandem to get the terminology. An accelerator is a logical resource, represented in Placement as an RC inventory. An attach handle is what is used to connect an accelerator to an instance, such as a PCI VF. When a VAR is bound to a specific accelerator in a device, the attach handle ID needs to be stored in the VAR.","commit_id":"7822f852b257b533c4082febb21ab19aac34c73b"},{"author":{"_account_id":25738,"name":"Xinran WANG","email":"xin-ran.wang@intel.com","username":"Xinran"},"change_message_id":"183de70c42ce57a829e94de555b8db7c1bb2ab05","unresolved":false,"context_lines":[{"line_number":260,"context_line":""},{"line_number":261,"context_line":"        ### Fields set by Cyborg on creation: accelerator requirements"},{"line_number":262,"context_line":"        \u0027device_profile_name\u0027: StringField(),"},{"line_number":263,"context_line":"        \u0027device_profile_group_index\u0027: IntegerField()"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"        ### Fields set by Nova, after request spec update before scheduling"},{"line_number":266,"context_line":"        \u0027request_group_index\u0027: IntegerField(),"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_0869ec8a","line":263,"range":{"start_line":263,"start_character":7,"end_line":263,"end_character":52},"updated":"2018-10-09 08:40:07.000000000","message":"what is this used for? Better to add a comment here.","commit_id":"7822f852b257b533c4082febb21ab19aac34c73b"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"2b94e871b71ba631c162f3b854343d74e6b032f4","unresolved":false,"context_lines":[{"line_number":260,"context_line":""},{"line_number":261,"context_line":"        ### Fields set by Cyborg on creation: accelerator requirements"},{"line_number":262,"context_line":"        \u0027device_profile_name\u0027: StringField(),"},{"line_number":263,"context_line":"        \u0027device_profile_group_index\u0027: IntegerField()"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"        ### Fields set by Nova, after request spec update before scheduling"},{"line_number":266,"context_line":"        \u0027request_group_index\u0027: IntegerField(),"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_4f5fd54c","line":263,"range":{"start_line":263,"start_character":7,"end_line":263,"end_character":52},"in_reply_to":"3f79a3b5_0869ec8a","updated":"2018-10-10 03:09:37.000000000","message":"A device profile may have multiple groups, as noted in dev prof spec. This field is the index of the group which specifies the accelerator for which this VAR is created.","commit_id":"7822f852b257b533c4082febb21ab19aac34c73b"},{"author":{"_account_id":25738,"name":"Xinran WANG","email":"xin-ran.wang@intel.com","username":"Xinran"},"change_message_id":"183de70c42ce57a829e94de555b8db7c1bb2ab05","unresolved":false,"context_lines":[{"line_number":275,"context_line":""},{"line_number":276,"context_line":"        . . ."},{"line_number":277,"context_line":"     }"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"The ``attach_info`` field is itself an object that encapsulates the attach"},{"line_number":280,"context_line":"handle.  The different types of attach handles can be modeled as subclasses of"},{"line_number":281,"context_line":"a base class, as below::"},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"  class VARAttachBase(ovo_base.VersionedObject):"},{"line_number":284,"context_line":"     OBJ_PROJECT_NAMESPACE \u003d \"os-acc\""}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_48904450","line":281,"range":{"start_line":278,"start_character":0,"end_line":281,"end_character":23},"updated":"2018-10-09 08:40:07.000000000","message":"this field is used to pass the proper info to libvirt to lanuch an VM right?","commit_id":"7822f852b257b533c4082febb21ab19aac34c73b"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"2b94e871b71ba631c162f3b854343d74e6b032f4","unresolved":false,"context_lines":[{"line_number":275,"context_line":""},{"line_number":276,"context_line":"        . . ."},{"line_number":277,"context_line":"     }"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"The ``attach_info`` field is itself an object that encapsulates the attach"},{"line_number":280,"context_line":"handle.  The different types of attach handles can be modeled as subclasses of"},{"line_number":281,"context_line":"a base class, as below::"},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"  class VARAttachBase(ovo_base.VersionedObject):"},{"line_number":284,"context_line":"     OBJ_PROJECT_NAMESPACE \u003d \"os-acc\""}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_8f7c0db7","line":281,"range":{"start_line":278,"start_character":0,"end_line":281,"end_character":23},"in_reply_to":"3f79a3b5_48904450","updated":"2018-10-10 03:09:37.000000000","message":"Yes","commit_id":"7822f852b257b533c4082febb21ab19aac34c73b"},{"author":{"_account_id":25738,"name":"Xinran WANG","email":"xin-ran.wang@intel.com","username":"Xinran"},"change_message_id":"183de70c42ce57a829e94de555b8db7c1bb2ab05","unresolved":false,"context_lines":[{"line_number":294,"context_line":"        \u0027mdev_uuid\u0027: UUIDField()"},{"line_number":295,"context_line":"     }"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"Cyborg API signatures"},{"line_number":298,"context_line":"---------------------"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"The Cyborg APIs invoked by Nova are listed below. They are all invoked with"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_c890d4f6","line":297,"range":{"start_line":297,"start_character":0,"end_line":297,"end_character":21},"updated":"2018-10-09 08:40:07.000000000","message":"1. Is it necessary to use a VAR in place of binding or unbinding a deployable directly? what\u0027s the difference? As you said, VAR is stored in cyborg DB, I think it is still cyborg internal.\n2. As you said, VAR will be associated with an attach handle, I didn\u0027t see any implementation about it in cyborg, plz let me know if I missed something.\n3. As the following, for example, Nova conductor calls os-acc\u0027s `create_unbound_VARs_for_instance()` method, which calls the Cyborg API `POST /v1/vars`, what will os-acc do something else except calling Cyborg API?","commit_id":"7822f852b257b533c4082febb21ab19aac34c73b"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"861ca5f368cd580a2e9d3b571957dfe3362f21ff","unresolved":false,"context_lines":[{"line_number":294,"context_line":"        \u0027mdev_uuid\u0027: UUIDField()"},{"line_number":295,"context_line":"     }"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"Cyborg API signatures"},{"line_number":298,"context_line":"---------------------"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"The Cyborg APIs invoked by Nova are listed below. They are all invoked with"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_ef9c8c71","line":297,"range":{"start_line":297,"start_character":0,"end_line":297,"end_character":21},"in_reply_to":"3f79a3b5_6af95c4c","updated":"2018-10-10 17:03:06.000000000","message":"1. Hope previous comments and today\u0027s discussion at the Cyborg weekly helped.\n2. No. The term \u0027VAN\u0027 is obsolete. We need to implement VARs, as described in this spec.\n3. There are several Cyborg APIs listed below. The first one, create API, takes a dev profile name and returns a JSOn with list of request groups within that profile. os-acc converts that JSON into a form that Nova expects.","commit_id":"7822f852b257b533c4082febb21ab19aac34c73b"},{"author":{"_account_id":25738,"name":"Xinran WANG","email":"xin-ran.wang@intel.com","username":"Xinran"},"change_message_id":"5c3efb6920b608e03dce1ad78e6fbd53ffa92904","unresolved":false,"context_lines":[{"line_number":294,"context_line":"        \u0027mdev_uuid\u0027: UUIDField()"},{"line_number":295,"context_line":"     }"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"Cyborg API signatures"},{"line_number":298,"context_line":"---------------------"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"The Cyborg APIs invoked by Nova are listed below. They are all invoked with"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_6af95c4c","line":297,"range":{"start_line":297,"start_character":0,"end_line":297,"end_character":21},"in_reply_to":"3f79a3b5_7a4ccd74","updated":"2018-10-10 06:22:24.000000000","message":"1. Yes, I understood the workflow you described. My question is that ‘is VAR necessary’? why don\u0027t we assign a deployable directly after having selected a host and a RP. \n2. I mean the VAN implementation, did anyone working on VAN implementation?\n3. So my understanding is, os-acc will call cyborg API with dev-profile-name to get an dev-profile object, and os-acc will parse this object into JSON and return it to Nova. It this what you mean \"To call Cyborg API\"? Please let me know if I misunderstood.","commit_id":"7822f852b257b533c4082febb21ab19aac34c73b"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"2b94e871b71ba631c162f3b854343d74e6b032f4","unresolved":false,"context_lines":[{"line_number":294,"context_line":"        \u0027mdev_uuid\u0027: UUIDField()"},{"line_number":295,"context_line":"     }"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"Cyborg API signatures"},{"line_number":298,"context_line":"---------------------"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"The Cyborg APIs invoked by Nova are listed below. They are all invoked with"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_7a4ccd74","line":297,"range":{"start_line":297,"start_character":0,"end_line":297,"end_character":21},"in_reply_to":"3f79a3b5_c890d4f6","updated":"2018-10-10 03:09:37.000000000","message":"1. As I said above, a VAR is created in an unbound state first, before any host or device has been selected for binding. A deployable loosely corresponds to a RP in Placement, but no device RP has been chosen yet when a VAR is created.\n2. The whole implementation of VARs in Cyborg is yet to begin.\n3. As noted in L437-438, it converts the JSON for device profile groups into request groups (which will be) defined by Nova, in the return path. In general, it converts Cyborg-specific or neutral data structures into Nova-specific structures, and vice versa.","commit_id":"7822f852b257b533c4082febb21ab19aac34c73b"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"58913e7b38ce4edf31e42837d928655a01d31845","unresolved":false,"context_lines":[{"line_number":573,"context_line":""},{"line_number":574,"context_line":"* Nested RPs need to work for scheduling [#nRP]_."},{"line_number":575,"context_line":"* A new flavor extra spec for device profiles should be added."},{"line_number":576,"context_line":"* The request groups in the request spec must allow for ``accel:`` keyword."},{"line_number":577,"context_line":"* Nova conductor must call os-acc to create unbound VARs."},{"line_number":578,"context_line":"* Nova conductor must call os-acc to create bound VARs."},{"line_number":579,"context_line":"* Nova compute manager must call os-acc for instance spawn and termination."}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_0490e94e","line":576,"range":{"start_line":576,"start_character":2,"end_line":576,"end_character":75},"updated":"2018-10-09 18:03:17.000000000","message":"Again, I\u0027m missing what this is. If it\u0027s just an extra spec in the flavor that nova ignores, then.. okay. Otherwise I\u0027d expect nothing in the flavor other than the device profile reference. Or is this the profile link itself? The above use of accel: shows a bitstream id, etc and I would expect a device profile identifier to be a uuid and nothing more.","commit_id":"7822f852b257b533c4082febb21ab19aac34c73b"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"2b94e871b71ba631c162f3b854343d74e6b032f4","unresolved":false,"context_lines":[{"line_number":573,"context_line":""},{"line_number":574,"context_line":"* Nested RPs need to work for scheduling [#nRP]_."},{"line_number":575,"context_line":"* A new flavor extra spec for device profiles should be added."},{"line_number":576,"context_line":"* The request groups in the request spec must allow for ``accel:`` keyword."},{"line_number":577,"context_line":"* Nova conductor must call os-acc to create unbound VARs."},{"line_number":578,"context_line":"* Nova conductor must call os-acc to create bound VARs."},{"line_number":579,"context_line":"* Nova compute manager must call os-acc for instance spawn and termination."}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_da65e1e3","line":576,"range":{"start_line":576,"start_character":2,"end_line":576,"end_character":75},"in_reply_to":"3f79a3b5_0490e94e","updated":"2018-10-10 03:09:37.000000000","message":"Yes, it is an extra spec, except I was asked not to call it an extra spec since it is not in the flavor. It is just an opaque string to Nova; Nova need only keep it in the right request group in the request spec so that Cyborg can refer to it.","commit_id":"7822f852b257b533c4082febb21ab19aac34c73b"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"c8045fdd39d6f0416874b54879cb575e14d3435c","unresolved":false,"context_lines":[{"line_number":573,"context_line":""},{"line_number":574,"context_line":"* Nested RPs need to work for scheduling [#nRP]_."},{"line_number":575,"context_line":"* A new flavor extra spec for device profiles should be added."},{"line_number":576,"context_line":"* The request groups in the request spec must allow for ``accel:`` keyword."},{"line_number":577,"context_line":"* Nova conductor must call os-acc to create unbound VARs."},{"line_number":578,"context_line":"* Nova conductor must call os-acc to create bound VARs."},{"line_number":579,"context_line":"* Nova compute manager must call os-acc for instance spawn and termination."}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_42af209c","line":576,"range":{"start_line":576,"start_character":2,"end_line":576,"end_character":75},"in_reply_to":"3f79a3b5_1ced6b8d","updated":"2018-10-16 15:26:50.000000000","message":"OK. I updated the spec to remove references to storing accel properties in the request spec.","commit_id":"7822f852b257b533c4082febb21ab19aac34c73b"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"177f3d44d0b2562ab42b565cbaa70cc962b233b0","unresolved":false,"context_lines":[{"line_number":573,"context_line":""},{"line_number":574,"context_line":"* Nested RPs need to work for scheduling [#nRP]_."},{"line_number":575,"context_line":"* A new flavor extra spec for device profiles should be added."},{"line_number":576,"context_line":"* The request groups in the request spec must allow for ``accel:`` keyword."},{"line_number":577,"context_line":"* Nova conductor must call os-acc to create unbound VARs."},{"line_number":578,"context_line":"* Nova conductor must call os-acc to create bound VARs."},{"line_number":579,"context_line":"* Nova compute manager must call os-acc for instance spawn and termination."}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_0d2790b7","line":576,"range":{"start_line":576,"start_character":2,"end_line":576,"end_character":75},"in_reply_to":"3f79a3b5_72ccdf61","updated":"2018-10-10 18:11:47.000000000","message":"Right, what I\u0027m trying to drive to is determine what these will look like. Because of the comment I made on L198, I\u0027m concerned that the intent here is to encode lots of details into the extra_specs that I think should be encapsulated into the device profile and living on the cyborg side.\n\nThe further confusion is that Sundar said this:\n\n \u003e Yes, it is an extra spec, except I was asked not to call it an\n \u003e extra spec since it is not in the flavor. It is just an opaque\n \u003e string to Nova; Nova need only keep it in the right request group\n \u003e in the request spec so that Cyborg can refer to it.\n\nand I want to know if this is adding new things to RequestSpec, or just flavor (as we discussed in Denver). Right now \"the right request group in the request spec\" does not describe something in the request spec, that I know of.","commit_id":"7822f852b257b533c4082febb21ab19aac34c73b"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"3317133679961f1221416457820a440ca0cf99bb","unresolved":false,"context_lines":[{"line_number":573,"context_line":""},{"line_number":574,"context_line":"* Nested RPs need to work for scheduling [#nRP]_."},{"line_number":575,"context_line":"* A new flavor extra spec for device profiles should be added."},{"line_number":576,"context_line":"* The request groups in the request spec must allow for ``accel:`` keyword."},{"line_number":577,"context_line":"* Nova conductor must call os-acc to create unbound VARs."},{"line_number":578,"context_line":"* Nova conductor must call os-acc to create bound VARs."},{"line_number":579,"context_line":"* Nova compute manager must call os-acc for instance spawn and termination."}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_72ccdf61","line":576,"range":{"start_line":576,"start_character":2,"end_line":576,"end_character":75},"in_reply_to":"3f79a3b5_8f4cf8c9","updated":"2018-10-10 17:56:34.000000000","message":"I think this might just be confusion over nova terminology.\n\nLooking at the etherpad from our last PTG session [1], \"accel:\" is referring to the common prefix we\u0027re going to use for cyborg-specific fields in extra specs e.g. \"accel:device_profile\u003d\u003cprofile uuid\u003e\".\n\nI think this sentence could be changed to something like, \"The extra spec will use prefix ``accel:`` to indicate that it is related to accelerators and the same prefix will be used for future extra specs related to accelerators\" or something like that. What do you think, Dan?\n\n[1] L29 https://etherpad.openstack.org/p/stein-ptg.cyborg-nova-new","commit_id":"7822f852b257b533c4082febb21ab19aac34c73b"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"30818beae61a095049543d8b358168f270245576","unresolved":false,"context_lines":[{"line_number":573,"context_line":""},{"line_number":574,"context_line":"* Nested RPs need to work for scheduling [#nRP]_."},{"line_number":575,"context_line":"* A new flavor extra spec for device profiles should be added."},{"line_number":576,"context_line":"* The request groups in the request spec must allow for ``accel:`` keyword."},{"line_number":577,"context_line":"* Nova conductor must call os-acc to create unbound VARs."},{"line_number":578,"context_line":"* Nova conductor must call os-acc to create bound VARs."},{"line_number":579,"context_line":"* Nova compute manager must call os-acc for instance spawn and termination."}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_1ced6b8d","line":576,"range":{"start_line":576,"start_character":2,"end_line":576,"end_character":75},"in_reply_to":"3f79a3b5_9e917d48","updated":"2018-10-11 14:33:47.000000000","message":"\u003e There is a proposal to add request groups into the request spec:\n \u003e https://review.openstack.org/#/c/568840/ This is a part of\n \u003e bandwidth-based scheduling (https://review.openstack.org/#/q/topic:bp/bandwidth-resource-provider).\n \u003e This was referred to in L183-184 above.\n\nOkay, I see. Gibi\u0027s request group patch should probably be a dependency here, not just a reference so it\u0027s clear.\n\nJust to be clear, it looks to me like the request we made to placement will be persisted in the reqspec, but that\u0027s it, so none of the accel: keys themselves will make it into the reqspec, just the things we ended up asking placement for as a result. Thus your line originally quoted by my first comment here doesn\u0027t make sense as \"the request groups in the request spec\" would not \"allow for the ``accel:`` keyword.\"\n\nSee my confusion?","commit_id":"7822f852b257b533c4082febb21ab19aac34c73b"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"f8f441f74aca7dded426617cc18a221b676cd26b","unresolved":false,"context_lines":[{"line_number":573,"context_line":""},{"line_number":574,"context_line":"* Nested RPs need to work for scheduling [#nRP]_."},{"line_number":575,"context_line":"* A new flavor extra spec for device profiles should be added."},{"line_number":576,"context_line":"* The request groups in the request spec must allow for ``accel:`` keyword."},{"line_number":577,"context_line":"* Nova conductor must call os-acc to create unbound VARs."},{"line_number":578,"context_line":"* Nova conductor must call os-acc to create bound VARs."},{"line_number":579,"context_line":"* Nova compute manager must call os-acc for instance spawn and termination."}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_9e917d48","line":576,"range":{"start_line":576,"start_character":2,"end_line":576,"end_character":75},"in_reply_to":"3f79a3b5_ad1d3c63","updated":"2018-10-11 05:08:03.000000000","message":"Let me clarify. (Please also see my response to the comment on L198.)\n\nAs the spec states, Cyborg-specific properties will be expressed in the form \u0027accel:key\u003dvalue\u0027. They will be either a part of the device profile or an image property in the VM image. They are not in the flavor, so we don\u0027t use the term \u0027extra spec\u0027 though it is in the same spirit as extra specs. \n\nThe reason to keep them in the request spec is as stated in my comments on L198.\n\nThere is a proposal to add request groups into the request spec: https://review.openstack.org/#/c/568840/ This is a part of bandwidth-based scheduling (https://review.openstack.org/#/q/topic:bp/bandwidth-resource-provider). This was referred to in L183-184 above.\n\nIt has been suggested that Cyborg should adopt a similar model, and hence these references. I don\u0027t mind how it is done as long as there is some way to carry these properties in the request spec as opaque strings.","commit_id":"7822f852b257b533c4082febb21ab19aac34c73b"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"177f3d44d0b2562ab42b565cbaa70cc962b233b0","unresolved":false,"context_lines":[{"line_number":573,"context_line":""},{"line_number":574,"context_line":"* Nested RPs need to work for scheduling [#nRP]_."},{"line_number":575,"context_line":"* A new flavor extra spec for device profiles should be added."},{"line_number":576,"context_line":"* The request groups in the request spec must allow for ``accel:`` keyword."},{"line_number":577,"context_line":"* Nova conductor must call os-acc to create unbound VARs."},{"line_number":578,"context_line":"* Nova conductor must call os-acc to create bound VARs."},{"line_number":579,"context_line":"* Nova compute manager must call os-acc for instance spawn and termination."}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_ad1d3c63","line":576,"range":{"start_line":576,"start_character":2,"end_line":576,"end_character":75},"in_reply_to":"3f79a3b5_da65e1e3","updated":"2018-10-10 18:11:47.000000000","message":"\u003e Yes, it is an extra spec, except I was asked not to call it an\n \u003e extra spec since it is not in the flavor. It is just an opaque\n \u003e string to Nova; Nova need only keep it in the right request group\n \u003e in the request spec so that Cyborg can refer to it.","commit_id":"7822f852b257b533c4082febb21ab19aac34c73b"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"5236025e3e564e04ae3dc8fc7db029b7041d9830","unresolved":false,"context_lines":[{"line_number":573,"context_line":""},{"line_number":574,"context_line":"* Nested RPs need to work for scheduling [#nRP]_."},{"line_number":575,"context_line":"* A new flavor extra spec for device profiles should be added."},{"line_number":576,"context_line":"* The request groups in the request spec must allow for ``accel:`` keyword."},{"line_number":577,"context_line":"* Nova conductor must call os-acc to create unbound VARs."},{"line_number":578,"context_line":"* Nova conductor must call os-acc to create bound VARs."},{"line_number":579,"context_line":"* Nova compute manager must call os-acc for instance spawn and termination."}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_8f4cf8c9","line":576,"range":{"start_line":576,"start_character":2,"end_line":576,"end_character":75},"in_reply_to":"3f79a3b5_da65e1e3","updated":"2018-10-10 17:16:17.000000000","message":"These words don\u0027t make sense to me.\n\nIf it\u0027s in the flavor, then it\u0027s an extra_spec. If not, then it\u0027s something else. Are you proposing that this is a new field in our RequestSpec, and we store this when we get it back from cyborg at some point after we show the device profile?\n\nAgain, I\u0027m not sure why nova ever needs to track this (anywhere) if it\u0027s in the device profile and we\u0027ve stored the identifier of the profile.","commit_id":"7822f852b257b533c4082febb21ab19aac34c73b"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"be6378786caf8039ce420c4f2a3dff11f0dbeaeb","unresolved":false,"context_lines":[{"line_number":174,"context_line":"profile and merge them into the request spec."},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"To recap from the device profiles specification [#dev-prof]_, the device"},{"line_number":177,"context_line":"profile contains one or more device profile groups, each containing requests"},{"line_number":178,"context_line":"for one or more resource classes, zero or more traits, and zero or more"},{"line_number":179,"context_line":"additional properties. An example request group in a device profile may look"},{"line_number":180,"context_line":"like this::"},{"line_number":181,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"3f79a3b5_b69359a4","line":178,"range":{"start_line":177,"start_character":17,"end_line":178,"end_character":54},"updated":"2018-10-10 08:50:05.000000000","message":"Why one device profile can map to multiple devices?","commit_id":"b6080be405b2c396b6626389e6d9b715859ca59e"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"d9cfd0c9e4ee26444810758619069025b78838cc","unresolved":false,"context_lines":[{"line_number":174,"context_line":"profile and merge them into the request spec."},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"To recap from the device profiles specification [#dev-prof]_, the device"},{"line_number":177,"context_line":"profile contains one or more device profile groups, each containing requests"},{"line_number":178,"context_line":"for one or more resource classes, zero or more traits, and zero or more"},{"line_number":179,"context_line":"additional properties. An example request group in a device profile may look"},{"line_number":180,"context_line":"like this::"},{"line_number":181,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"3f79a3b5_1c8ee425","line":178,"range":{"start_line":177,"start_character":17,"end_line":178,"end_character":54},"in_reply_to":"3f79a3b5_b69359a4","updated":"2018-10-10 16:46:44.000000000","message":"A device profile is like a \u0027flavor for devices\u0027. Just as a flavor can ask for multiple resources, a device profile asks for multiple resources. From another angle, if an operator is creating a dev prof for ML, she may ask for several GPUs or several FPGAs to be assigned to one VM.","commit_id":"b6080be405b2c396b6626389e6d9b715859ca59e"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"be6378786caf8039ce420c4f2a3dff11f0dbeaeb","unresolved":false,"context_lines":[{"line_number":184,"context_line":"    accel:bitstream_id\u003d3AFB"},{"line_number":185,"context_line":"  }"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"Cyborg shall provide an API that takes a device profile and returns a JSON"},{"line_number":188,"context_line":"with resources, traits and ``accel`` properties listed for each group. See"},{"line_number":189,"context_line":"`cyborg-create`_ for the signature of this Cyborg API."},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"To enable Cyborg to be used in standalone scenarios, the return value of the"},{"line_number":192,"context_line":"Cyborg API is in a neutral format (JSON). However, Nova may represent the"}],"source_content_type":"text/x-rst","patch_set":4,"id":"3f79a3b5_b6903951","line":189,"range":{"start_line":187,"start_character":0,"end_line":189,"end_character":54},"updated":"2018-10-10 08:50:05.000000000","message":"So we should call that Cyborg API is `device create` API, right?\n\nAs my understand, when nova boots the instance, the nova will call the cyborg API `cyborg-create` to create a new device from the device profile. \n\nThen at that time, the cyborg-create-device API can return fail if the request reach some mistake, like quota limit.\n\nSo the cyborg-create-device API returns the resource class and traits.","commit_id":"b6080be405b2c396b6626389e6d9b715859ca59e"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"d9cfd0c9e4ee26444810758619069025b78838cc","unresolved":false,"context_lines":[{"line_number":184,"context_line":"    accel:bitstream_id\u003d3AFB"},{"line_number":185,"context_line":"  }"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"Cyborg shall provide an API that takes a device profile and returns a JSON"},{"line_number":188,"context_line":"with resources, traits and ``accel`` properties listed for each group. See"},{"line_number":189,"context_line":"`cyborg-create`_ for the signature of this Cyborg API."},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"To enable Cyborg to be used in standalone scenarios, the return value of the"},{"line_number":192,"context_line":"Cyborg API is in a neutral format (JSON). However, Nova may represent the"}],"source_content_type":"text/x-rst","patch_set":4,"id":"3f79a3b5_fc01a86e","line":189,"range":{"start_line":187,"start_character":0,"end_line":189,"end_character":54},"in_reply_to":"3f79a3b5_b6903951","updated":"2018-10-10 16:46:44.000000000","message":"What is getting created is a virtual accelerator request (VAR). The devices are physical hardware that already exist, and they provide accelerators, which are resources. Please see the \u0027Assignment Workflow\u0027 section.","commit_id":"b6080be405b2c396b6626389e6d9b715859ca59e"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"be6378786caf8039ce420c4f2a3dff11f0dbeaeb","unresolved":false,"context_lines":[{"line_number":190,"context_line":""},{"line_number":191,"context_line":"To enable Cyborg to be used in standalone scenarios, the return value of the"},{"line_number":192,"context_line":"Cyborg API is in a neutral format (JSON). However, Nova may represent the"},{"line_number":193,"context_line":"request group using some Nova-specific data structure, such as [#req-group]_."},{"line_number":194,"context_line":"So, we need a shim layer between Nova and Cyborg that does the data structure"},{"line_number":195,"context_line":"conversion. That shim layer is the os-acc library, which offers one"},{"line_number":196,"context_line":"set of APIs to Nova in the controller and another set in the compute node."},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"The os-acc API that Nova calls to get device profile groups is documented in"}],"source_content_type":"text/x-rst","patch_set":4,"id":"3f79a3b5_16ffad66","line":195,"range":{"start_line":193,"start_character":55,"end_line":195,"end_character":12},"updated":"2018-10-10 08:50:05.000000000","message":"so we should put that VAR obj into the RequestSpec obj. And when we generate the request group, we just call this method https://github.com/openstack/nova/blob/c6218428e9b29a2c52808ec7d27b4b21aadc0299/nova/scheduler/utils.py#L391\n\nAnd in this method, probably we will call ResourceRequest.from_var(), then to merge the cyborg RC and traits into the other resource groups.","commit_id":"b6080be405b2c396b6626389e6d9b715859ca59e"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"d9cfd0c9e4ee26444810758619069025b78838cc","unresolved":false,"context_lines":[{"line_number":190,"context_line":""},{"line_number":191,"context_line":"To enable Cyborg to be used in standalone scenarios, the return value of the"},{"line_number":192,"context_line":"Cyborg API is in a neutral format (JSON). However, Nova may represent the"},{"line_number":193,"context_line":"request group using some Nova-specific data structure, such as [#req-group]_."},{"line_number":194,"context_line":"So, we need a shim layer between Nova and Cyborg that does the data structure"},{"line_number":195,"context_line":"conversion. That shim layer is the os-acc library, which offers one"},{"line_number":196,"context_line":"set of APIs to Nova in the controller and another set in the compute node."},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"The os-acc API that Nova calls to get device profile groups is documented in"}],"source_content_type":"text/x-rst","patch_set":4,"id":"3f79a3b5_9c7f54bb","line":195,"range":{"start_line":193,"start_character":55,"end_line":195,"end_character":12},"in_reply_to":"3f79a3b5_16ffad66","updated":"2018-10-10 16:46:44.000000000","message":"The Cyborg create-vars API returns not only VARs but also the request groups from the device profile. Those dev prof request groups are added to the request spec.","commit_id":"b6080be405b2c396b6626389e6d9b715859ca59e"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"be6378786caf8039ce420c4f2a3dff11f0dbeaeb","unresolved":false,"context_lines":[{"line_number":296,"context_line":""},{"line_number":297,"context_line":"::"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":" URL: /v1/vars"},{"line_number":300,"context_line":" Method: POST"},{"line_number":301,"context_line":" Request body:"},{"line_number":302,"context_line":"   { \u0027device-profile-name\u0027: \u003cstring\u003e, # required"}],"source_content_type":"text/x-rst","patch_set":4,"id":"3f79a3b5_3610a9ab","line":299,"range":{"start_line":299,"start_character":10,"end_line":299,"end_character":14},"updated":"2018-10-10 08:50:05.000000000","message":"my understand, VAR is just a obj used in os-acc lib. why we code it into the API?\n\nI thought the API at here is for device create. The API may looks like \u0027POST /v1/devices`","commit_id":"b6080be405b2c396b6626389e6d9b715859ca59e"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"d9cfd0c9e4ee26444810758619069025b78838cc","unresolved":false,"context_lines":[{"line_number":296,"context_line":""},{"line_number":297,"context_line":"::"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":" URL: /v1/vars"},{"line_number":300,"context_line":" Method: POST"},{"line_number":301,"context_line":" Request body:"},{"line_number":302,"context_line":"   { \u0027device-profile-name\u0027: \u003cstring\u003e, # required"}],"source_content_type":"text/x-rst","patch_set":4,"id":"3f79a3b5_5c50dc2c","line":299,"range":{"start_line":299,"start_character":10,"end_line":299,"end_character":14},"in_reply_to":"3f79a3b5_3610a9ab","updated":"2018-10-10 16:46:44.000000000","message":"The VAR is the object that represents the request for an  accelerator. It is shared across Nova, Cyborg and os-acc. This API takes a device profile name and returns 2 things: a list of request groups from that dev prof, and a list of VARs (one for each accelerator requested in the dev prof).","commit_id":"b6080be405b2c396b6626389e6d9b715859ca59e"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"be6378786caf8039ce420c4f2a3dff11f0dbeaeb","unresolved":false,"context_lines":[{"line_number":300,"context_line":" Method: POST"},{"line_number":301,"context_line":" Request body:"},{"line_number":302,"context_line":"   { \u0027device-profile-name\u0027: \u003cstring\u003e, # required"},{"line_number":303,"context_line":"     \u0027image-uuid\u0027: \u003cglance-image-UUID\u003e, #optional"},{"line_number":304,"context_line":"   }"},{"line_number":305,"context_line":" Normal response code and body:"},{"line_number":306,"context_line":"    200"}],"source_content_type":"text/x-rst","patch_set":4,"id":"3f79a3b5_36750901","line":303,"range":{"start_line":303,"start_character":5,"end_line":303,"end_character":49},"updated":"2018-10-10 08:50:05.000000000","message":"we already have bit-stream in the device-profile, what is this image for?","commit_id":"b6080be405b2c396b6626389e6d9b715859ca59e"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"d9cfd0c9e4ee26444810758619069025b78838cc","unresolved":false,"context_lines":[{"line_number":300,"context_line":" Method: POST"},{"line_number":301,"context_line":" Request body:"},{"line_number":302,"context_line":"   { \u0027device-profile-name\u0027: \u003cstring\u003e, # required"},{"line_number":303,"context_line":"     \u0027image-uuid\u0027: \u003cglance-image-UUID\u003e, #optional"},{"line_number":304,"context_line":"   }"},{"line_number":305,"context_line":" Normal response code and body:"},{"line_number":306,"context_line":"    200"}],"source_content_type":"text/x-rst","patch_set":4,"id":"3f79a3b5_9c1bd482","line":303,"range":{"start_line":303,"start_character":5,"end_line":303,"end_character":49},"in_reply_to":"3f79a3b5_36750901","updated":"2018-10-10 16:46:44.000000000","message":"This is the VM image UUID, in case the operator has set image properties on the VM image that refer to accelerators.","commit_id":"b6080be405b2c396b6626389e6d9b715859ca59e"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"be6378786caf8039ce420c4f2a3dff11f0dbeaeb","unresolved":false,"context_lines":[{"line_number":304,"context_line":"   }"},{"line_number":305,"context_line":" Normal response code and body:"},{"line_number":306,"context_line":"    200"},{"line_number":307,"context_line":"    { \u0027groups\u0027: [ \u003cJSON-serialized-request-group\u003e, ... ]"},{"line_number":308,"context_line":"      \u0027vars\u0027: [ \u003cJSON-serialized-var\u003e, ... ]"},{"line_number":309,"context_line":"    }"},{"line_number":310,"context_line":" Error response codes and body:"},{"line_number":311,"context_line":"    401 (Unauthorized): RBAC check failed"}],"source_content_type":"text/x-rst","patch_set":4,"id":"3f79a3b5_d6637544","line":308,"range":{"start_line":307,"start_character":6,"end_line":308,"end_character":44},"updated":"2018-10-10 08:50:05.000000000","message":"I\u0027m thinking this is normal device info, also embed with device profile info.","commit_id":"b6080be405b2c396b6626389e6d9b715859ca59e"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"d9cfd0c9e4ee26444810758619069025b78838cc","unresolved":false,"context_lines":[{"line_number":304,"context_line":"   }"},{"line_number":305,"context_line":" Normal response code and body:"},{"line_number":306,"context_line":"    200"},{"line_number":307,"context_line":"    { \u0027groups\u0027: [ \u003cJSON-serialized-request-group\u003e, ... ]"},{"line_number":308,"context_line":"      \u0027vars\u0027: [ \u003cJSON-serialized-var\u003e, ... ]"},{"line_number":309,"context_line":"    }"},{"line_number":310,"context_line":" Error response codes and body:"},{"line_number":311,"context_line":"    401 (Unauthorized): RBAC check failed"}],"source_content_type":"text/x-rst","patch_set":4,"id":"3f79a3b5_6f3cfcbf","line":308,"range":{"start_line":307,"start_character":6,"end_line":308,"end_character":44},"in_reply_to":"3f79a3b5_d6637544","updated":"2018-10-10 16:46:44.000000000","message":"I don\u0027t understand. There are no devices involved yet; no host or device RP has been selected at this point.","commit_id":"b6080be405b2c396b6626389e6d9b715859ca59e"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0c662ec0d5e4d7ebe7939a8db9b28a230e3ff89a","unresolved":false,"context_lines":[{"line_number":44,"context_line":"  respectively. Cyborg-specific details of device discovery and update are"},{"line_number":45,"context_line":"  specified by [#dev-disc]_."},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"* User requests for accelerators: Users usually request resources via flavors."},{"line_number":48,"context_line":"  However, since the requests for devices may be highly varied, placing them"},{"line_number":49,"context_line":"  in flavors may result in flavor explosion. To avoid that, the device"},{"line_number":50,"context_line":"  profiles specification [#dev-prof]_ introduces the notion of a device"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f79a3b5_d52acf95","line":47,"range":{"start_line":47,"start_character":34,"end_line":47,"end_character":78},"updated":"2018-10-19 13:03:59.000000000","message":"and via cinder volumes and via neutron ports.","commit_id":"f23cdb2c9061b86f694dd4323649938a49b0e507"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"e26a8791973be759264ce48778d1662c49c29e70","unresolved":false,"context_lines":[{"line_number":44,"context_line":"  respectively. Cyborg-specific details of device discovery and update are"},{"line_number":45,"context_line":"  specified by [#dev-disc]_."},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"* User requests for accelerators: Users usually request resources via flavors."},{"line_number":48,"context_line":"  However, since the requests for devices may be highly varied, placing them"},{"line_number":49,"context_line":"  in flavors may result in flavor explosion. To avoid that, the device"},{"line_number":50,"context_line":"  profiles specification [#dev-prof]_ introduces the notion of a device"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f79a3b5_b8402306","line":47,"range":{"start_line":47,"start_character":34,"end_line":47,"end_character":78},"in_reply_to":"3f79a3b5_d52acf95","updated":"2018-10-23 18:26:26.000000000","message":"Yes.","commit_id":"f23cdb2c9061b86f694dd4323649938a49b0e507"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0c662ec0d5e4d7ebe7939a8db9b28a230e3ff89a","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"* User requests for accelerators: Users usually request resources via flavors."},{"line_number":48,"context_line":"  However, since the requests for devices may be highly varied, placing them"},{"line_number":49,"context_line":"  in flavors may result in flavor explosion. To avoid that, the device"},{"line_number":50,"context_line":"  profiles specification [#dev-prof]_ introduces the notion of a device"},{"line_number":51,"context_line":"  profile."},{"line_number":52,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f79a3b5_352543c0","line":49,"updated":"2018-10-19 13:03:59.000000000","message":"I think this is one of the reasons why neutron ports expressing their own resource needs independently of the flavor.","commit_id":"f23cdb2c9061b86f694dd4323649938a49b0e507"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"e26a8791973be759264ce48778d1662c49c29e70","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"* User requests for accelerators: Users usually request resources via flavors."},{"line_number":48,"context_line":"  However, since the requests for devices may be highly varied, placing them"},{"line_number":49,"context_line":"  in flavors may result in flavor explosion. To avoid that, the device"},{"line_number":50,"context_line":"  profiles specification [#dev-prof]_ introduces the notion of a device"},{"line_number":51,"context_line":"  profile."},{"line_number":52,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f79a3b5_185b57f9","line":49,"in_reply_to":"3f79a3b5_352543c0","updated":"2018-10-23 18:26:26.000000000","message":"Ok.","commit_id":"f23cdb2c9061b86f694dd4323649938a49b0e507"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0c662ec0d5e4d7ebe7939a8db9b28a230e3ff89a","unresolved":false,"context_lines":[{"line_number":53,"context_line":"  The relationship between device profiles and flavors is explored in Section"},{"line_number":54,"context_line":"  `User requests`_."},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"  When an instance spawn request is made, the contents of a device profile"},{"line_number":57,"context_line":"  shall be translated to request groups in the request spec; the syntax in"},{"line_number":58,"context_line":"  request groups is covered in Section `Updating the Request Spec`_."},{"line_number":59,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f79a3b5_75041b1a","line":56,"range":{"start_line":56,"start_character":10,"end_line":56,"end_character":24},"updated":"2018-10-19 13:03:59.000000000","message":"spawn terminology tend to be used only down the virt layer. On nova api it is instance boot or server create.","commit_id":"f23cdb2c9061b86f694dd4323649938a49b0e507"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"e26a8791973be759264ce48778d1662c49c29e70","unresolved":false,"context_lines":[{"line_number":53,"context_line":"  The relationship between device profiles and flavors is explored in Section"},{"line_number":54,"context_line":"  `User requests`_."},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"  When an instance spawn request is made, the contents of a device profile"},{"line_number":57,"context_line":"  shall be translated to request groups in the request spec; the syntax in"},{"line_number":58,"context_line":"  request groups is covered in Section `Updating the Request Spec`_."},{"line_number":59,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f79a3b5_385e53e8","line":56,"range":{"start_line":56,"start_character":10,"end_line":56,"end_character":24},"in_reply_to":"3f79a3b5_75041b1a","updated":"2018-10-23 18:26:26.000000000","message":"Done","commit_id":"f23cdb2c9061b86f694dd4323649938a49b0e507"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0c662ec0d5e4d7ebe7939a8db9b28a230e3ff89a","unresolved":false,"context_lines":[{"line_number":53,"context_line":"  The relationship between device profiles and flavors is explored in Section"},{"line_number":54,"context_line":"  `User requests`_."},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"  When an instance spawn request is made, the contents of a device profile"},{"line_number":57,"context_line":"  shall be translated to request groups in the request spec; the syntax in"},{"line_number":58,"context_line":"  request groups is covered in Section `Updating the Request Spec`_."},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"* Instance scheduling: Nova shall use the Placement data populated by Cyborg"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f79a3b5_98024e08","line":57,"range":{"start_line":56,"start_character":46,"end_line":57,"end_character":60},"updated":"2018-10-19 13:03:59.000000000","message":"+1 (this was one of my comments in the [#cy-nova-place]_ spec. I\u0027m glad that you clarified it here.","commit_id":"f23cdb2c9061b86f694dd4323649938a49b0e507"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0c662ec0d5e4d7ebe7939a8db9b28a230e3ff89a","unresolved":false,"context_lines":[{"line_number":67,"context_line":"  `Assignment workflow`_. The details of the Cyborg API implementation for"},{"line_number":68,"context_line":"  this workflow is covered in Cyborg specs ([#cy-api-impl]_) and not here."},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"* Instance operations: The behavior with respect to accelerators for all"},{"line_number":71,"context_line":"  standard instance operations are defined in [#inst-ops]_."},{"line_number":72,"context_line":"  This spec does not dwell on this topic."},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"In addition to the above, this spec defines the Virtual Accelerator Request"},{"line_number":75,"context_line":"objects in Section `Virtual Accelerator Requests`_, lists the os-acc methods"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f79a3b5_783732dd","line":72,"range":{"start_line":70,"start_character":2,"end_line":72,"end_character":41},"updated":"2018-10-19 13:03:59.000000000","message":"if those instance operations needs new behavior from nova (e.g. binding a new accelerator during migration) then we need to discuss that nova impact in a nova spec.","commit_id":"f23cdb2c9061b86f694dd4323649938a49b0e507"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2e437f3e41813834e7628dc5f2ab94e603fbfc85","unresolved":false,"context_lines":[{"line_number":67,"context_line":"  `Assignment workflow`_. The details of the Cyborg API implementation for"},{"line_number":68,"context_line":"  this workflow is covered in Cyborg specs ([#cy-api-impl]_) and not here."},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"* Instance operations: The behavior with respect to accelerators for all"},{"line_number":71,"context_line":"  standard instance operations are defined in [#inst-ops]_."},{"line_number":72,"context_line":"  This spec does not dwell on this topic."},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"In addition to the above, this spec defines the Virtual Accelerator Request"},{"line_number":75,"context_line":"objects in Section `Virtual Accelerator Requests`_, lists the os-acc methods"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f79a3b5_b7dc3b17","line":72,"range":{"start_line":70,"start_character":2,"end_line":72,"end_character":41},"in_reply_to":"3f79a3b5_5868ef86","updated":"2018-10-29 09:28:39.000000000","message":"Yeah, that spec is a good addition. I suggest to move that spec to the nova-specs repo as well.","commit_id":"f23cdb2c9061b86f694dd4323649938a49b0e507"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"e26a8791973be759264ce48778d1662c49c29e70","unresolved":false,"context_lines":[{"line_number":67,"context_line":"  `Assignment workflow`_. The details of the Cyborg API implementation for"},{"line_number":68,"context_line":"  this workflow is covered in Cyborg specs ([#cy-api-impl]_) and not here."},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"* Instance operations: The behavior with respect to accelerators for all"},{"line_number":71,"context_line":"  standard instance operations are defined in [#inst-ops]_."},{"line_number":72,"context_line":"  This spec does not dwell on this topic."},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"In addition to the above, this spec defines the Virtual Accelerator Request"},{"line_number":75,"context_line":"objects in Section `Virtual Accelerator Requests`_, lists the os-acc methods"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f79a3b5_5868ef86","line":72,"range":{"start_line":70,"start_character":2,"end_line":72,"end_character":41},"in_reply_to":"3f79a3b5_783732dd","updated":"2018-10-23 18:26:26.000000000","message":"Live migration is not covered for now. Thanks for reviewing the Instance ops spec :). I will respond there.","commit_id":"f23cdb2c9061b86f694dd4323649938a49b0e507"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0c662ec0d5e4d7ebe7939a8db9b28a230e3ff89a","unresolved":false,"context_lines":[{"line_number":82,"context_line":""},{"line_number":83,"context_line":"* A user requests an instance with one or more accelerators of different"},{"line_number":84,"context_line":"  types assigned to it."},{"line_number":85,"context_line":"* A user subjects an instance with assigned accelerators to any standard"},{"line_number":86,"context_line":"  instance operation, such as deletion or suspension."},{"line_number":87,"context_line":"* An operator may provide users with both Device as a Service or"},{"line_number":88,"context_line":"  Accelerated Function as a Service in the same cluster (see"},{"line_number":89,"context_line":"  [#cy-nova-place]_)."}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f79a3b5_aa66c255","line":86,"range":{"start_line":85,"start_character":1,"end_line":86,"end_character":53},"updated":"2018-10-19 13:03:59.000000000","message":"I cannot parse this. Is it about attaching a new accelerator for a running nova server? Or is it about doing nova server lifecycle operations (delete, stop, migrate...) on server that has an accelerator attached?","commit_id":"f23cdb2c9061b86f694dd4323649938a49b0e507"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"e26a8791973be759264ce48778d1662c49c29e70","unresolved":false,"context_lines":[{"line_number":82,"context_line":""},{"line_number":83,"context_line":"* A user requests an instance with one or more accelerators of different"},{"line_number":84,"context_line":"  types assigned to it."},{"line_number":85,"context_line":"* A user subjects an instance with assigned accelerators to any standard"},{"line_number":86,"context_line":"  instance operation, such as deletion or suspension."},{"line_number":87,"context_line":"* An operator may provide users with both Device as a Service or"},{"line_number":88,"context_line":"  Accelerated Function as a Service in the same cluster (see"},{"line_number":89,"context_line":"  [#cy-nova-place]_)."}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f79a3b5_b8eee3fb","line":86,"range":{"start_line":85,"start_character":1,"end_line":86,"end_character":53},"in_reply_to":"3f79a3b5_aa66c255","updated":"2018-10-23 18:26:26.000000000","message":"Latter. The former (hot add) is of interest, but listed below in L94 as outside the scope of Stein.","commit_id":"f23cdb2c9061b86f694dd4323649938a49b0e507"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2e437f3e41813834e7628dc5f2ab94e603fbfc85","unresolved":false,"context_lines":[{"line_number":82,"context_line":""},{"line_number":83,"context_line":"* A user requests an instance with one or more accelerators of different"},{"line_number":84,"context_line":"  types assigned to it."},{"line_number":85,"context_line":"* A user subjects an instance with assigned accelerators to any standard"},{"line_number":86,"context_line":"  instance operation, such as deletion or suspension."},{"line_number":87,"context_line":"* An operator may provide users with both Device as a Service or"},{"line_number":88,"context_line":"  Accelerated Function as a Service in the same cluster (see"},{"line_number":89,"context_line":"  [#cy-nova-place]_)."}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f79a3b5_77e223d5","line":86,"range":{"start_line":85,"start_character":1,"end_line":86,"end_character":53},"in_reply_to":"3f79a3b5_b8eee3fb","updated":"2018-10-29 09:28:39.000000000","message":"OK, thanks.","commit_id":"f23cdb2c9061b86f694dd4323649938a49b0e507"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0c662ec0d5e4d7ebe7939a8db9b28a230e3ff89a","unresolved":false,"context_lines":[{"line_number":102,"context_line":"The operator tells Nova which PCI devices to claim and use by configuring the"},{"line_number":103,"context_line":"PCI Whitelists mechanism. In addition, the operator installs Cyborg drivers in"},{"line_number":104,"context_line":"compute nodes and configures/enables them. Those drivers may then discover and"},{"line_number":105,"context_line":"report some PCI devices. The operator must ensure that both configurations"},{"line_number":106,"context_line":"are compatible."},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"Ideally, there should be a single way for the operator to identify which PCI"},{"line_number":109,"context_line":"devices should be claimed by Nova and which by Cyborg. This could be along the"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f79a3b5_ea559a53","line":106,"range":{"start_line":105,"start_character":25,"end_line":106,"end_character":15},"updated":"2018-10-19 13:03:59.000000000","message":"+1","commit_id":"f23cdb2c9061b86f694dd4323649938a49b0e507"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0c662ec0d5e4d7ebe7939a8db9b28a230e3ff89a","unresolved":false,"context_lines":[{"line_number":110,"context_line":"lines suggested in [#generic-dev-disc]_ or [#kosamara]_. If such a mechanism"},{"line_number":111,"context_line":"could be agreed upon by all stakeholders, Cyborg could adopt it."},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"Until that point, the operator tells Cyborg which devices to claim by"},{"line_number":114,"context_line":"using Cyborg\u0027s configuration file. The operator must ensure that this is"},{"line_number":115,"context_line":"compatible with the PCI whitelists configured in Nova."},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"Placement update"},{"line_number":118,"context_line":"----------------"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f79a3b5_0a5b3686","line":115,"range":{"start_line":113,"start_character":0,"end_line":115,"end_character":54},"updated":"2018-10-19 13:03:59.000000000","message":"+1","commit_id":"f23cdb2c9061b86f694dd4323649938a49b0e507"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0c662ec0d5e4d7ebe7939a8db9b28a230e3ff89a","unresolved":false,"context_lines":[{"line_number":120,"context_line":"accelerators. Some of the intended use cases for the API invocation are:"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"* Create or delete child RPs under the compute node RP."},{"line_number":123,"context_line":"* Create or delete RCs and traits."},{"line_number":124,"context_line":"* Associate traits with RPs or remove such association."},{"line_number":125,"context_line":"* Update RP inventory."},{"line_number":126,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f79a3b5_4ac60e18","line":123,"range":{"start_line":123,"start_character":19,"end_line":123,"end_character":33},"updated":"2018-10-19 13:03:59.000000000","message":"nit: custom RCs and custom traits","commit_id":"f23cdb2c9061b86f694dd4323649938a49b0e507"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"e26a8791973be759264ce48778d1662c49c29e70","unresolved":false,"context_lines":[{"line_number":120,"context_line":"accelerators. Some of the intended use cases for the API invocation are:"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"* Create or delete child RPs under the compute node RP."},{"line_number":123,"context_line":"* Create or delete RCs and traits."},{"line_number":124,"context_line":"* Associate traits with RPs or remove such association."},{"line_number":125,"context_line":"* Update RP inventory."},{"line_number":126,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f79a3b5_18291739","line":123,"range":{"start_line":123,"start_character":19,"end_line":123,"end_character":33},"in_reply_to":"3f79a3b5_4ac60e18","updated":"2018-10-23 18:26:26.000000000","message":"Done","commit_id":"f23cdb2c9061b86f694dd4323649938a49b0e507"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0c662ec0d5e4d7ebe7939a8db9b28a230e3ff89a","unresolved":false,"context_lines":[{"line_number":135,"context_line":"[#dev-prof]_."},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"A device profile may be viewed as a \u0027flavor for devices\u0027. Accordingly, the"},{"line_number":138,"context_line":"instance request should include both a flavor and a device profile. However,"},{"line_number":139,"context_line":"that requires a change to the Nova API for instance creation. To mitigate the"},{"line_number":140,"context_line":"impact of such changes on users and operators, we propose to do this"},{"line_number":141,"context_line":"incrementally in three phases."}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f79a3b5_aafd623d","line":138,"range":{"start_line":138,"start_character":50,"end_line":138,"end_character":67},"updated":"2018-10-19 13:03:59.000000000","message":"Is it always a single device profile per instance or there can be more than one device profile attached to an instance at boot? I mean \na) a device profile included in the nova server create request presents a single accelerator for that server and if the owner wants more than one accelerator then she needs to list more than one device profile in a server create.\nb) a device profile included in the nova server create request presents one or more device for that server and therefore the nova server create request only need maximum one device profile.","commit_id":"f23cdb2c9061b86f694dd4323649938a49b0e507"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2e437f3e41813834e7628dc5f2ab94e603fbfc85","unresolved":false,"context_lines":[{"line_number":135,"context_line":"[#dev-prof]_."},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"A device profile may be viewed as a \u0027flavor for devices\u0027. Accordingly, the"},{"line_number":138,"context_line":"instance request should include both a flavor and a device profile. However,"},{"line_number":139,"context_line":"that requires a change to the Nova API for instance creation. To mitigate the"},{"line_number":140,"context_line":"impact of such changes on users and operators, we propose to do this"},{"line_number":141,"context_line":"incrementally in three phases."}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f79a3b5_b7051b7b","line":138,"range":{"start_line":138,"start_character":50,"end_line":138,"end_character":67},"in_reply_to":"3f79a3b5_988f672e","updated":"2018-10-29 09:28:39.000000000","message":"Thanks.","commit_id":"f23cdb2c9061b86f694dd4323649938a49b0e507"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"e26a8791973be759264ce48778d1662c49c29e70","unresolved":false,"context_lines":[{"line_number":135,"context_line":"[#dev-prof]_."},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"A device profile may be viewed as a \u0027flavor for devices\u0027. Accordingly, the"},{"line_number":138,"context_line":"instance request should include both a flavor and a device profile. However,"},{"line_number":139,"context_line":"that requires a change to the Nova API for instance creation. To mitigate the"},{"line_number":140,"context_line":"impact of such changes on users and operators, we propose to do this"},{"line_number":141,"context_line":"incrementally in three phases."}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f79a3b5_988f672e","line":138,"range":{"start_line":138,"start_character":50,"end_line":138,"end_character":67},"in_reply_to":"3f79a3b5_aafd623d","updated":"2018-10-23 18:26:26.000000000","message":"Latter: one device profile per request, but it can request multiple accelerators, possibly in different request groups. The rationale is that, the user may want different semantics:\n\n- the accelerators to come from the same resource provider: \n  then put them in same req group if possible.\n- the accelerators to come from different providers: put them \n  in different req groups, with group policy \u0027isolate\u0027 in \n  flavor.\n\nIf the accelerators are in different request groups in the device profile, the group policy (\u0027isolate\u0027 or \u0027none\u0027) in the flavor dictates the semantics.\n\nWhen it comes to hot-add/delete, the device profile may be mentioned without the flavor. Then we need a group policy in the device profile. I have missed specifying this interaction. I am adding a new section `Mapping request groups to resource providers\u0027 in the next draft.","commit_id":"f23cdb2c9061b86f694dd4323649938a49b0e507"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0c662ec0d5e4d7ebe7939a8db9b28a230e3ff89a","unresolved":false,"context_lines":[{"line_number":143,"context_line":"In Phase 1, Nova API remains as today. The device profile is folded into the"},{"line_number":144,"context_line":"flavor as an extra spec manually by the operator, as below::"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":" openstack flavor set --property \u0027accel:device_profile\u003d\u003cprofile_name\u003e\u0027 flavor"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"Thus the standard Nova API can be used to spawn an instance with only the"},{"line_number":149,"context_line":"flavor (without device profiles), like this::"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f79a3b5_4a94cee7","line":146,"range":{"start_line":146,"start_character":33,"end_line":146,"end_character":70},"updated":"2018-10-19 13:03:59.000000000","message":"So one single new accel:device_profile key will be added to the flavor. How can the user ask for two accelerators for a server? (see my comment at L138 too)","commit_id":"f23cdb2c9061b86f694dd4323649938a49b0e507"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"e26a8791973be759264ce48778d1662c49c29e70","unresolved":false,"context_lines":[{"line_number":143,"context_line":"In Phase 1, Nova API remains as today. The device profile is folded into the"},{"line_number":144,"context_line":"flavor as an extra spec manually by the operator, as below::"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":" openstack flavor set --property \u0027accel:device_profile\u003d\u003cprofile_name\u003e\u0027 flavor"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"Thus the standard Nova API can be used to spawn an instance with only the"},{"line_number":149,"context_line":"flavor (without device profiles), like this::"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f79a3b5_58722f4c","line":146,"range":{"start_line":146,"start_character":33,"end_line":146,"end_character":70},"in_reply_to":"3f79a3b5_4a94cee7","updated":"2018-10-23 18:26:26.000000000","message":"By using multiple request groups in the same device profile. Please see https://review.openstack.org/602978 .","commit_id":"f23cdb2c9061b86f694dd4323649938a49b0e507"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0c662ec0d5e4d7ebe7939a8db9b28a230e3ff89a","unresolved":false,"context_lines":[{"line_number":171,"context_line":"-------------------------"},{"line_number":172,"context_line":"When the user submits a request to create an instance, in any of the ways"},{"line_number":173,"context_line":"described in Section `User requests`_, Nova needs to call a Cyborg API,"},{"line_number":174,"context_line":"through a shim layer named os-acc, to get back the resource request groups in"},{"line_number":175,"context_line":"the device profile and merge them into the request spec."},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"To recap from the device profiles specification [#dev-prof]_, the device"},{"line_number":178,"context_line":"profile contains one or more device profile groups, each containing requests"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f79a3b5_ca7f7eba","line":175,"range":{"start_line":174,"start_character":34,"end_line":175,"end_character":56},"updated":"2018-10-19 13:03:59.000000000","message":"+1 this is similar how nova reads the neutron resource request from the neutron API and merges that into the request spec","commit_id":"f23cdb2c9061b86f694dd4323649938a49b0e507"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"e26a8791973be759264ce48778d1662c49c29e70","unresolved":false,"context_lines":[{"line_number":171,"context_line":"-------------------------"},{"line_number":172,"context_line":"When the user submits a request to create an instance, in any of the ways"},{"line_number":173,"context_line":"described in Section `User requests`_, Nova needs to call a Cyborg API,"},{"line_number":174,"context_line":"through a shim layer named os-acc, to get back the resource request groups in"},{"line_number":175,"context_line":"the device profile and merge them into the request spec."},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"To recap from the device profiles specification [#dev-prof]_, the device"},{"line_number":178,"context_line":"profile contains one or more device profile groups, each containing requests"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f79a3b5_38b653dd","line":175,"range":{"start_line":174,"start_character":34,"end_line":175,"end_character":56},"in_reply_to":"3f79a3b5_ca7f7eba","updated":"2018-10-23 18:26:26.000000000","message":":) This is not an accident: I read your spec https://review.openstack.org/#/c/567267/. It was cited in an earlier draft but it got removed in the edits. I will put it back.","commit_id":"f23cdb2c9061b86f694dd4323649938a49b0e507"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0c662ec0d5e4d7ebe7939a8db9b28a230e3ff89a","unresolved":false,"context_lines":[{"line_number":180,"context_line":"additional properties. An example request group in a device profile may look"},{"line_number":181,"context_line":"like this::"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"  { resources:CUSTOM_ACCELERATOR_FOO\u003d2,"},{"line_number":184,"context_line":"    trait:CUSTOM_TRAIT_BAR\u003drequired,"},{"line_number":185,"context_line":"    accel:bitstream_id\u003d3AFB"},{"line_number":186,"context_line":"  }"},{"line_number":187,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f79a3b5_ca1bfe81","line":184,"range":{"start_line":183,"start_character":0,"end_line":184,"end_character":36},"updated":"2018-10-19 13:03:59.000000000","message":"Neutron uses a bit different format but I have no preference\n\nresource_request \u003d {\n  \"required\": [\n    \"CUSTOM_PHYSNET_PHYSNET0\",\n    \"CUSTOM_VNIC_TYPE_NORMAL\"\n  ], \n  \"resources\": {\n    \"NET_BANDWIDTH_EGRESS_KILOBITS_PER_SECOND\": 1000, \n    \"NET_BANDWIDTH_INGRESS_KILOBITS_PER_SECOND\": 1000\n  }\n}\n\nAlso in neutron a single port\u0027s resource_request always mapped to a single placement resource request group that allows some simplification.","commit_id":"f23cdb2c9061b86f694dd4323649938a49b0e507"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2e437f3e41813834e7628dc5f2ab94e603fbfc85","unresolved":false,"context_lines":[{"line_number":180,"context_line":"additional properties. An example request group in a device profile may look"},{"line_number":181,"context_line":"like this::"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"  { resources:CUSTOM_ACCELERATOR_FOO\u003d2,"},{"line_number":184,"context_line":"    trait:CUSTOM_TRAIT_BAR\u003drequired,"},{"line_number":185,"context_line":"    accel:bitstream_id\u003d3AFB"},{"line_number":186,"context_line":"  }"},{"line_number":187,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f79a3b5_d7ebf7a1","line":184,"range":{"start_line":183,"start_character":0,"end_line":184,"end_character":36},"in_reply_to":"3f79a3b5_1826f723","updated":"2018-10-29 09:28:39.000000000","message":"True. Thanks.","commit_id":"f23cdb2c9061b86f694dd4323649938a49b0e507"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"e26a8791973be759264ce48778d1662c49c29e70","unresolved":false,"context_lines":[{"line_number":180,"context_line":"additional properties. An example request group in a device profile may look"},{"line_number":181,"context_line":"like this::"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"  { resources:CUSTOM_ACCELERATOR_FOO\u003d2,"},{"line_number":184,"context_line":"    trait:CUSTOM_TRAIT_BAR\u003drequired,"},{"line_number":185,"context_line":"    accel:bitstream_id\u003d3AFB"},{"line_number":186,"context_line":"  }"},{"line_number":187,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f79a3b5_1826f723","line":184,"range":{"start_line":183,"start_character":0,"end_line":184,"end_character":36},"in_reply_to":"3f79a3b5_ca1bfe81","updated":"2018-10-23 18:26:26.000000000","message":"This format works for Neutron because you are asking for one port\u0027s worth of request at a time. For Cyborg, multiple accelerators may be requested together; so, this syntax can cause ambiguity on which traits (\"required\") are associated with which resources (accelerators).","commit_id":"f23cdb2c9061b86f694dd4323649938a49b0e507"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0c662ec0d5e4d7ebe7939a8db9b28a230e3ff89a","unresolved":false,"context_lines":[{"line_number":188,"context_line":"Also, the operator may associate accelerator-related properties with the"},{"line_number":189,"context_line":"instance image (such as which bitstreams are required for that workload)."},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"Cyborg shall provide an API that takes a device profile and returns a JSON"},{"line_number":192,"context_line":"with resources and traits and listed for each group, but without the ``accel``"},{"line_number":193,"context_line":"properties. (The ``accel`` properties from the device profiles or from the"},{"line_number":194,"context_line":"instance image are tracked by Cyborg; see `Virtual Accelerator"},{"line_number":195,"context_line":"Requests`_ below). See `cyborg-create`_ for the signature of this Cyborg API."},{"line_number":196,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f79a3b5_aa07a21e","line":193,"range":{"start_line":191,"start_character":0,"end_line":193,"end_character":11},"updated":"2018-10-19 13:03:59.000000000","message":"+1, in neutron the neutron port has GET /ports/{port_uuid} response body has the above mentioned resource_request field but cyborg\u0027s approach seems valid to me as well.","commit_id":"f23cdb2c9061b86f694dd4323649938a49b0e507"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"e26a8791973be759264ce48778d1662c49c29e70","unresolved":false,"context_lines":[{"line_number":188,"context_line":"Also, the operator may associate accelerator-related properties with the"},{"line_number":189,"context_line":"instance image (such as which bitstreams are required for that workload)."},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"Cyborg shall provide an API that takes a device profile and returns a JSON"},{"line_number":192,"context_line":"with resources and traits and listed for each group, but without the ``accel``"},{"line_number":193,"context_line":"properties. (The ``accel`` properties from the device profiles or from the"},{"line_number":194,"context_line":"instance image are tracked by Cyborg; see `Virtual Accelerator"},{"line_number":195,"context_line":"Requests`_ below). See `cyborg-create`_ for the signature of this Cyborg API."},{"line_number":196,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f79a3b5_b834a348","line":193,"range":{"start_line":191,"start_character":0,"end_line":193,"end_character":11},"in_reply_to":"3f79a3b5_aa07a21e","updated":"2018-10-23 18:26:26.000000000","message":"Cyborg\u0027s VAR is designed to be an equivalent of Neutron\u0027s port and VIF; so this is no accident.","commit_id":"f23cdb2c9061b86f694dd4323649938a49b0e507"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0c662ec0d5e4d7ebe7939a8db9b28a230e3ff89a","unresolved":false,"context_lines":[{"line_number":194,"context_line":"instance image are tracked by Cyborg; see `Virtual Accelerator"},{"line_number":195,"context_line":"Requests`_ below). See `cyborg-create`_ for the signature of this Cyborg API."},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"To enable Cyborg to be used in standalone scenarios, the return value of the"},{"line_number":198,"context_line":"Cyborg API is in a neutral format (JSON). However, Nova may represent the"},{"line_number":199,"context_line":"request group using some Nova-specific data structure, such as [#req-group]_."},{"line_number":200,"context_line":"So, we need a shim layer between Nova and Cyborg that does the data structure"},{"line_number":201,"context_line":"conversion. That shim layer is the os-acc library, which offers one"},{"line_number":202,"context_line":"set of APIs to Nova in the controller and another set in the compute node."},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"The os-acc API that Nova calls to get device profile groups is documented in"},{"line_number":205,"context_line":"os-acc-create_. Note that this API takes the image UUID as an optional"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f79a3b5_e502ab08","line":202,"range":{"start_line":197,"start_character":0,"end_line":202,"end_character":74},"updated":"2018-10-19 13:03:59.000000000","message":"the specific case when nova needs to include the resource request from cyborg into the nova internal RequestSpec object can be simply done in the RequesSpec object layer. But if the proposed shim needs to be use in more than one place then I agree that it is better to abstract it to os-acc","commit_id":"f23cdb2c9061b86f694dd4323649938a49b0e507"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"e26a8791973be759264ce48778d1662c49c29e70","unresolved":false,"context_lines":[{"line_number":194,"context_line":"instance image are tracked by Cyborg; see `Virtual Accelerator"},{"line_number":195,"context_line":"Requests`_ below). See `cyborg-create`_ for the signature of this Cyborg API."},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"To enable Cyborg to be used in standalone scenarios, the return value of the"},{"line_number":198,"context_line":"Cyborg API is in a neutral format (JSON). However, Nova may represent the"},{"line_number":199,"context_line":"request group using some Nova-specific data structure, such as [#req-group]_."},{"line_number":200,"context_line":"So, we need a shim layer between Nova and Cyborg that does the data structure"},{"line_number":201,"context_line":"conversion. That shim layer is the os-acc library, which offers one"},{"line_number":202,"context_line":"set of APIs to Nova in the controller and another set in the compute node."},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"The os-acc API that Nova calls to get device profile groups is documented in"},{"line_number":205,"context_line":"os-acc-create_. Note that this API takes the image UUID as an optional"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f79a3b5_3893b301","line":202,"range":{"start_line":197,"start_character":0,"end_line":202,"end_character":74},"in_reply_to":"3f79a3b5_e502ab08","updated":"2018-10-23 18:26:26.000000000","message":"Yes, os-acc is used for both creating and binding VARs in the controller, and for polling for bound VARs in the compute node.","commit_id":"f23cdb2c9061b86f694dd4323649938a49b0e507"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0c662ec0d5e4d7ebe7939a8db9b28a230e3ff89a","unresolved":false,"context_lines":[{"line_number":201,"context_line":"conversion. That shim layer is the os-acc library, which offers one"},{"line_number":202,"context_line":"set of APIs to Nova in the controller and another set in the compute node."},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"The os-acc API that Nova calls to get device profile groups is documented in"},{"line_number":205,"context_line":"os-acc-create_. Note that this API takes the image UUID as an optional"},{"line_number":206,"context_line":"parameter and passes it to Cyborg API, to handle accelerator properties"},{"line_number":207,"context_line":"associated with the instance image."},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"The groups in the device profile are numbered by Cyborg. The request groups"},{"line_number":210,"context_line":"that are merged into the request spec are numbered by Nova. These numberings"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f79a3b5_c509af29","line":207,"range":{"start_line":204,"start_character":0,"end_line":207,"end_character":35},"updated":"2018-10-19 13:03:59.000000000","message":"OK, then I see why you need os-acc. Make sense to hide this complexity from nova.","commit_id":"f23cdb2c9061b86f694dd4323649938a49b0e507"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0c662ec0d5e4d7ebe7939a8db9b28a230e3ff89a","unresolved":false,"context_lines":[{"line_number":209,"context_line":"The groups in the device profile are numbered by Cyborg. The request groups"},{"line_number":210,"context_line":"that are merged into the request spec are numbered by Nova. These numberings"},{"line_number":211,"context_line":"would not be the same in general, i.e., the N-th device profile group may not"},{"line_number":212,"context_line":"correspond to the N-th request group in the request spec."},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"Virtual Accelerator Requests"},{"line_number":215,"context_line":"----------------------------"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f79a3b5_4527dfb6","line":212,"updated":"2018-10-19 13:03:59.000000000","message":"Good point. The translation between the numbering can be done in os-acc I guess.","commit_id":"f23cdb2c9061b86f694dd4323649938a49b0e507"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0c662ec0d5e4d7ebe7939a8db9b28a230e3ff89a","unresolved":false,"context_lines":[{"line_number":222,"context_line":"A VAR, by definition, represents a single accelerator resource. The device"},{"line_number":223,"context_line":"profile in the user request may ask for more than one accelerator; the number"},{"line_number":224,"context_line":"of VARs created from one device profile will equal the number of accelerators"},{"line_number":225,"context_line":"requested in the device profile."},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"Upon creation, the VAR contains only the reference to the request group within"},{"line_number":228,"context_line":"the device profile which specifies the accelerator resource class (as"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f79a3b5_652f7b89","line":225,"updated":"2018-10-19 13:03:59.000000000","message":"OK, this answers some of my above questions (at L138)","commit_id":"f23cdb2c9061b86f694dd4323649938a49b0e507"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0c662ec0d5e4d7ebe7939a8db9b28a230e3ff89a","unresolved":false,"context_lines":[{"line_number":247,"context_line":""},{"line_number":248,"context_line":"        ### Fields set by Cyborg on creation: accelerator requirements"},{"line_number":249,"context_line":"          # Cyborg sets the state to Initial on creation."},{"line_number":250,"context_line":"        \u0027device_profile_name\u0027: StringField(),"},{"line_number":251,"context_line":"        \u0027device_profile_group_index\u0027: IntegerField()"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"        ### Fields set by Nova, after request spec update before scheduling"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f79a3b5_454cbf74","line":250,"range":{"start_line":250,"start_character":9,"end_line":250,"end_character":28},"updated":"2018-10-19 13:03:59.000000000","message":"I guess this means that device_prodile_name needs to be unique in the system.","commit_id":"f23cdb2c9061b86f694dd4323649938a49b0e507"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"e26a8791973be759264ce48778d1662c49c29e70","unresolved":false,"context_lines":[{"line_number":247,"context_line":""},{"line_number":248,"context_line":"        ### Fields set by Cyborg on creation: accelerator requirements"},{"line_number":249,"context_line":"          # Cyborg sets the state to Initial on creation."},{"line_number":250,"context_line":"        \u0027device_profile_name\u0027: StringField(),"},{"line_number":251,"context_line":"        \u0027device_profile_group_index\u0027: IntegerField()"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"        ### Fields set by Nova, after request spec update before scheduling"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f79a3b5_f89c5b0e","line":250,"range":{"start_line":250,"start_character":9,"end_line":250,"end_character":28},"in_reply_to":"3f79a3b5_454cbf74","updated":"2018-10-23 18:26:26.000000000","message":"Yes.","commit_id":"f23cdb2c9061b86f694dd4323649938a49b0e507"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0c662ec0d5e4d7ebe7939a8db9b28a230e3ff89a","unresolved":false,"context_lines":[{"line_number":257,"context_line":""},{"line_number":258,"context_line":"        ### Fields set by Nova, after scheduling before binding"},{"line_number":259,"context_line":"          # Nova sets the state to ReadyToBind after setting this"},{"line_number":260,"context_line":"        \u0027host_name\u0027: StringField(),"},{"line_number":261,"context_line":"        \u0027device_rp_uuid\u0027: UUIDField(),"},{"line_number":262,"context_line":"        \u0027instance_uuid\u0027: UUIDField(),"},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"        ### Fields set by Cyborg after binding"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f79a3b5_7b4b9a27","line":261,"range":{"start_line":260,"start_character":0,"end_line":261,"end_character":38},"updated":"2018-10-19 13:03:59.000000000","message":"The device_rp_uuid makes it clear which host the device is bind to but if cyborg want to spare some placement query to walk the RP tree from device_rp_uuid to the root RP that is the compute host then passing the host_name could make sense","commit_id":"f23cdb2c9061b86f694dd4323649938a49b0e507"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"e26a8791973be759264ce48778d1662c49c29e70","unresolved":false,"context_lines":[{"line_number":257,"context_line":""},{"line_number":258,"context_line":"        ### Fields set by Nova, after scheduling before binding"},{"line_number":259,"context_line":"          # Nova sets the state to ReadyToBind after setting this"},{"line_number":260,"context_line":"        \u0027host_name\u0027: StringField(),"},{"line_number":261,"context_line":"        \u0027device_rp_uuid\u0027: UUIDField(),"},{"line_number":262,"context_line":"        \u0027instance_uuid\u0027: UUIDField(),"},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"        ### Fields set by Cyborg after binding"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f79a3b5_b87ee3bd","line":261,"range":{"start_line":260,"start_character":0,"end_line":261,"end_character":38},"in_reply_to":"3f79a3b5_7b4b9a27","updated":"2018-10-23 18:26:26.000000000","message":"Yes, we want to minimize the number of API crossings. Wherever Nova already has the relevant info, it makes sense to pass that info along.","commit_id":"f23cdb2c9061b86f694dd4323649938a49b0e507"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2e437f3e41813834e7628dc5f2ab94e603fbfc85","unresolved":false,"context_lines":[{"line_number":257,"context_line":""},{"line_number":258,"context_line":"        ### Fields set by Nova, after scheduling before binding"},{"line_number":259,"context_line":"          # Nova sets the state to ReadyToBind after setting this"},{"line_number":260,"context_line":"        \u0027host_name\u0027: StringField(),"},{"line_number":261,"context_line":"        \u0027device_rp_uuid\u0027: UUIDField(),"},{"line_number":262,"context_line":"        \u0027instance_uuid\u0027: UUIDField(),"},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"        ### Fields set by Cyborg after binding"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f79a3b5_7730e354","line":261,"range":{"start_line":260,"start_character":0,"end_line":261,"end_character":38},"in_reply_to":"3f79a3b5_b87ee3bd","updated":"2018-10-29 09:28:39.000000000","message":"OK. Make sense.","commit_id":"f23cdb2c9061b86f694dd4323649938a49b0e507"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0c662ec0d5e4d7ebe7939a8db9b28a230e3ff89a","unresolved":false,"context_lines":[{"line_number":310,"context_line":"   }"},{"line_number":311,"context_line":" Error response codes and body:"},{"line_number":312,"context_line":"   401 (Unauthorized): RBAC check failed"},{"line_number":313,"context_line":"   422 (Unprocessable): Some input parameter is invalid"},{"line_number":314,"context_line":"   { \u0027error\u0027: \u003cerror-string\u003e }"},{"line_number":315,"context_line":" Notes: This API does the following:"},{"line_number":316,"context_line":"   * Create and return unbound VARs for a device profile."}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f79a3b5_5b533e3b","line":313,"range":{"start_line":313,"start_character":3,"end_line":313,"end_character":55},"updated":"2018-10-19 13:03:59.000000000","message":"Could this be simply 400 Bad Request? The relevant API WG guideline: https://specs.openstack.org/openstack/api-wg/guidelines/http/response-codes.html#failure-code-clarifications","commit_id":"f23cdb2c9061b86f694dd4323649938a49b0e507"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"e26a8791973be759264ce48778d1662c49c29e70","unresolved":false,"context_lines":[{"line_number":310,"context_line":"   }"},{"line_number":311,"context_line":" Error response codes and body:"},{"line_number":312,"context_line":"   401 (Unauthorized): RBAC check failed"},{"line_number":313,"context_line":"   422 (Unprocessable): Some input parameter is invalid"},{"line_number":314,"context_line":"   { \u0027error\u0027: \u003cerror-string\u003e }"},{"line_number":315,"context_line":" Notes: This API does the following:"},{"line_number":316,"context_line":"   * Create and return unbound VARs for a device profile."}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f79a3b5_46e1f02a","line":313,"range":{"start_line":313,"start_character":3,"end_line":313,"end_character":55},"in_reply_to":"3f79a3b5_5b533e3b","updated":"2018-10-23 18:26:26.000000000","message":"Yes. Thanks.","commit_id":"f23cdb2c9061b86f694dd4323649938a49b0e507"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0c662ec0d5e4d7ebe7939a8db9b28a230e3ff89a","unresolved":false,"context_lines":[{"line_number":324,"context_line":""},{"line_number":325,"context_line":"::"},{"line_number":326,"context_line":""},{"line_number":327,"context_line":" URL: /v1/vars?uuid\u003duuid1,...,uuidN"},{"line_number":328,"context_line":" Method: DELETE"},{"line_number":329,"context_line":" Request body: None"},{"line_number":330,"context_line":" Parameters: uuid is required."},{"line_number":331,"context_line":" Normal response code and body:"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f79a3b5_1647db54","line":328,"range":{"start_line":327,"start_character":0,"end_line":328,"end_character":15},"updated":"2018-10-19 13:03:59.000000000","message":"This feels weird.\nA bunch of\n\n  DELETE /v1/vars/{var_uuid}\n\ncall would be a lot more RESTful","commit_id":"f23cdb2c9061b86f694dd4323649938a49b0e507"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"e26a8791973be759264ce48778d1662c49c29e70","unresolved":false,"context_lines":[{"line_number":324,"context_line":""},{"line_number":325,"context_line":"::"},{"line_number":326,"context_line":""},{"line_number":327,"context_line":" URL: /v1/vars?uuid\u003duuid1,...,uuidN"},{"line_number":328,"context_line":" Method: DELETE"},{"line_number":329,"context_line":" Request body: None"},{"line_number":330,"context_line":" Parameters: uuid is required."},{"line_number":331,"context_line":" Normal response code and body:"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f79a3b5_bb733d4f","line":328,"range":{"start_line":327,"start_character":0,"end_line":328,"end_character":15},"in_reply_to":"3f79a3b5_1647db54","updated":"2018-10-23 18:26:26.000000000","message":"I understand the reaction, but how would we do batch deletions? I am trying to minimize API crossings to improve scalability (each call has an overhead).\n\n* https://stackoverflow.com/questions/34939484/in-rest-api-can-delete-methods-have-parameters says using query parameters with DELETE is not non-REST-ful.\n\n* Using query parameters with DELETE is not ruled out by: https://specs.openstack.org/openstack/api-wg/guidelines/http/methods.html\n\n* Example: This IBM database REST API uses query parameters to specify a subset to delete: https://www.ibm.com/support/knowledgecenter/en/SSGU8G_12.1.0/com.ibm.json.doc/ids_json_051.htm","commit_id":"f23cdb2c9061b86f694dd4323649938a49b0e507"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2e437f3e41813834e7628dc5f2ab94e603fbfc85","unresolved":false,"context_lines":[{"line_number":324,"context_line":""},{"line_number":325,"context_line":"::"},{"line_number":326,"context_line":""},{"line_number":327,"context_line":" URL: /v1/vars?uuid\u003duuid1,...,uuidN"},{"line_number":328,"context_line":" Method: DELETE"},{"line_number":329,"context_line":" Request body: None"},{"line_number":330,"context_line":" Parameters: uuid is required."},{"line_number":331,"context_line":" Normal response code and body:"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f79a3b5_d740d7a5","line":328,"range":{"start_line":327,"start_character":0,"end_line":328,"end_character":15},"in_reply_to":"3f79a3b5_bb733d4f","updated":"2018-10-29 09:28:39.000000000","message":"I would like to see some opinion from Chris or Ed from the API WG. I think they has a lot better knowledge about REST than I have.","commit_id":"f23cdb2c9061b86f694dd4323649938a49b0e507"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0c662ec0d5e4d7ebe7939a8db9b28a230e3ff89a","unresolved":false,"context_lines":[{"line_number":333,"context_line":"    No response body"},{"line_number":334,"context_line":" Error response codes and body:"},{"line_number":335,"context_line":"    401 (Unauthorized): RBAC check failed"},{"line_number":336,"context_line":"    422 (Unprocessable): Some input parameter is invalid"},{"line_number":337,"context_line":"    { \u0027error\u0027: \u003cerror-string\u003e }"},{"line_number":338,"context_line":" Notes:"},{"line_number":339,"context_line":"    Delete the specified VARs. If any VAR is in bound state, unbind it"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f79a3b5_b63707dc","line":336,"range":{"start_line":336,"start_character":4,"end_line":336,"end_character":7},"updated":"2018-10-19 13:03:59.000000000","message":"Suggest to use 400 BadRequest","commit_id":"f23cdb2c9061b86f694dd4323649938a49b0e507"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"e26a8791973be759264ce48778d1662c49c29e70","unresolved":false,"context_lines":[{"line_number":333,"context_line":"    No response body"},{"line_number":334,"context_line":" Error response codes and body:"},{"line_number":335,"context_line":"    401 (Unauthorized): RBAC check failed"},{"line_number":336,"context_line":"    422 (Unprocessable): Some input parameter is invalid"},{"line_number":337,"context_line":"    { \u0027error\u0027: \u003cerror-string\u003e }"},{"line_number":338,"context_line":" Notes:"},{"line_number":339,"context_line":"    Delete the specified VARs. If any VAR is in bound state, unbind it"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f79a3b5_5b72294c","line":336,"range":{"start_line":336,"start_character":4,"end_line":336,"end_character":7},"in_reply_to":"3f79a3b5_b63707dc","updated":"2018-10-23 18:26:26.000000000","message":"Done","commit_id":"f23cdb2c9061b86f694dd4323649938a49b0e507"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0c662ec0d5e4d7ebe7939a8db9b28a230e3ff89a","unresolved":false,"context_lines":[{"line_number":343,"context_line":""},{"line_number":344,"context_line":"::"},{"line_number":345,"context_line":""},{"line_number":346,"context_line":" URL: /v1/vars/bindings/1"},{"line_number":347,"context_line":" Method: POST"},{"line_number":348,"context_line":" Request body:"},{"line_number":349,"context_line":"    { \u0027instance_uuid\u0027: \u003cuuid-string\u003e,"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f79a3b5_f66edfc6","line":346,"range":{"start_line":346,"start_character":0,"end_line":346,"end_character":25},"updated":"2018-10-19 13:03:59.000000000","message":"/v1/vars/{var_uuid}/bindings would be more RESTful in my eyes","commit_id":"f23cdb2c9061b86f694dd4323649938a49b0e507"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"e26a8791973be759264ce48778d1662c49c29e70","unresolved":false,"context_lines":[{"line_number":343,"context_line":""},{"line_number":344,"context_line":"::"},{"line_number":345,"context_line":""},{"line_number":346,"context_line":" URL: /v1/vars/bindings/1"},{"line_number":347,"context_line":" Method: POST"},{"line_number":348,"context_line":" Request body:"},{"line_number":349,"context_line":"    { \u0027instance_uuid\u0027: \u003cuuid-string\u003e,"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f79a3b5_5ba789a9","line":346,"range":{"start_line":346,"start_character":0,"end_line":346,"end_character":25},"in_reply_to":"3f79a3b5_f66edfc6","updated":"2018-10-23 18:26:26.000000000","message":"Again, how would you do batch bindings? Binding is a potentially expensive operation, and we do want batch semantics. Further, we want to specify the instance ID in some cases and the list of VARs in other cases.\n\nThe VAR binding is treated as a sub-resource of the VAR resource. The POST ../vars/bindings/... creates the bindings and DELETE ../vars/bindings/.. unbinds the VARs by removing those bindings.","commit_id":"f23cdb2c9061b86f694dd4323649938a49b0e507"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0c662ec0d5e4d7ebe7939a8db9b28a230e3ff89a","unresolved":false,"context_lines":[{"line_number":358,"context_line":"    No response body"},{"line_number":359,"context_line":" Error response codes and body:"},{"line_number":360,"context_line":"    401 (Unauthorized): RBAC check failed"},{"line_number":361,"context_line":"    422 (Unprocessable): Some input parameter is invalid"},{"line_number":362,"context_line":"    { \u0027error\u0027: \u003cerror-string\u003e }"},{"line_number":363,"context_line":" Notes:"},{"line_number":364,"context_line":"    Bind the specified VARs. This is an asynchronous call. It may result in"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f79a3b5_565d5314","line":361,"range":{"start_line":361,"start_character":4,"end_line":361,"end_character":7},"updated":"2018-10-19 13:03:59.000000000","message":"400 BadRequest","commit_id":"f23cdb2c9061b86f694dd4323649938a49b0e507"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"e26a8791973be759264ce48778d1662c49c29e70","unresolved":false,"context_lines":[{"line_number":358,"context_line":"    No response body"},{"line_number":359,"context_line":" Error response codes and body:"},{"line_number":360,"context_line":"    401 (Unauthorized): RBAC check failed"},{"line_number":361,"context_line":"    422 (Unprocessable): Some input parameter is invalid"},{"line_number":362,"context_line":"    { \u0027error\u0027: \u003cerror-string\u003e }"},{"line_number":363,"context_line":" Notes:"},{"line_number":364,"context_line":"    Bind the specified VARs. This is an asynchronous call. It may result in"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f79a3b5_7ba28599","line":361,"range":{"start_line":361,"start_character":4,"end_line":361,"end_character":7},"in_reply_to":"3f79a3b5_565d5314","updated":"2018-10-23 18:26:26.000000000","message":"Done","commit_id":"f23cdb2c9061b86f694dd4323649938a49b0e507"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0c662ec0d5e4d7ebe7939a8db9b28a230e3ff89a","unresolved":false,"context_lines":[{"line_number":368,"context_line":"    to enable live migration in the future.)"},{"line_number":369,"context_line":""},{"line_number":370,"context_line":".. _cyborg-unbind:"},{"line_number":371,"context_line":""},{"line_number":372,"context_line":"::"},{"line_number":373,"context_line":""},{"line_number":374,"context_line":" URL: /v1/vars/bindings/1?{uuid\u003duuid1,...,uuidN | instance\u003duuid}"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f79a3b5_96a8cbda","line":371,"updated":"2018-10-19 13:03:59.000000000","message":"I skipped reading the rest of the API code as I\u0027m pretty confused by now about the API model","commit_id":"f23cdb2c9061b86f694dd4323649938a49b0e507"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"e26a8791973be759264ce48778d1662c49c29e70","unresolved":false,"context_lines":[{"line_number":368,"context_line":"    to enable live migration in the future.)"},{"line_number":369,"context_line":""},{"line_number":370,"context_line":".. _cyborg-unbind:"},{"line_number":371,"context_line":""},{"line_number":372,"context_line":"::"},{"line_number":373,"context_line":""},{"line_number":374,"context_line":" URL: /v1/vars/bindings/1?{uuid\u003duuid1,...,uuidN | instance\u003duuid}"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f79a3b5_bbc1fd32","line":371,"in_reply_to":"3f79a3b5_96a8cbda","updated":"2018-10-23 18:26:26.000000000","message":"Please see previous responses: bindings are sub-resources of VAR resources, and DELETE can take query parameters.","commit_id":"f23cdb2c9061b86f694dd4323649938a49b0e507"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0c662ec0d5e4d7ebe7939a8db9b28a230e3ff89a","unresolved":false,"context_lines":[{"line_number":520,"context_line":"   selects one of those candidates and makes claim(s) in Placement."},{"line_number":521,"context_line":""},{"line_number":522,"context_line":"#. The Nova conductor calls os-acc\u0027s ``bind_VARs_for_instance()`` method."},{"line_number":523,"context_line":"   That method figures out which device RP in the allocated candidate"},{"line_number":524,"context_line":"   corresponds to each request group, and then updates each VAR with the"},{"line_number":525,"context_line":"   appropriate device RP. Then it calls the Cyborg API ``POST"},{"line_number":526,"context_line":"   /v1/vars/bindings/1`` with the instance UUID and the list of unbound VARs."},{"line_number":527,"context_line":"   This is an asynchronous call which initiates binding in the background and"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f79a3b5_16311bbc","line":524,"range":{"start_line":523,"start_character":43,"end_line":524,"end_character":36},"updated":"2018-10-19 13:03:59.000000000","message":"That could be hard in some cases, see the spec with a possible solution\n https://review.openstack.org/#/c/597601/","commit_id":"f23cdb2c9061b86f694dd4323649938a49b0e507"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"e26a8791973be759264ce48778d1662c49c29e70","unresolved":false,"context_lines":[{"line_number":520,"context_line":"   selects one of those candidates and makes claim(s) in Placement."},{"line_number":521,"context_line":""},{"line_number":522,"context_line":"#. The Nova conductor calls os-acc\u0027s ``bind_VARs_for_instance()`` method."},{"line_number":523,"context_line":"   That method figures out which device RP in the allocated candidate"},{"line_number":524,"context_line":"   corresponds to each request group, and then updates each VAR with the"},{"line_number":525,"context_line":"   appropriate device RP. Then it calls the Cyborg API ``POST"},{"line_number":526,"context_line":"   /v1/vars/bindings/1`` with the instance UUID and the list of unbound VARs."},{"line_number":527,"context_line":"   This is an asynchronous call which initiates binding in the background and"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f79a3b5_db99591e","line":524,"range":{"start_line":523,"start_character":43,"end_line":524,"end_character":36},"in_reply_to":"3f79a3b5_16311bbc","updated":"2018-10-23 18:26:26.000000000","message":"Thanks, will cite it.","commit_id":"f23cdb2c9061b86f694dd4323649938a49b0e507"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0c662ec0d5e4d7ebe7939a8db9b28a230e3ff89a","unresolved":false,"context_lines":[{"line_number":539,"context_line":"   returns a special code if any VAR is still in the process of binding. The"},{"line_number":540,"context_line":"   os-acc call repeatedly polls the Cyborg API till all VAR bindings are"},{"line_number":541,"context_line":"   resolved (successfully or otherwise), or some configured timeout period"},{"line_number":542,"context_line":"   lapses. In the happy path, the os-acc call returns a list of resolved VARs."},{"line_number":543,"context_line":""},{"line_number":544,"context_line":"#. The Nova compute manager calls the virt driver with the list of VARs, and"},{"line_number":545,"context_line":"   the latter attaches the accelerator to the spawning instance."}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f79a3b5_165a7bf4","line":542,"updated":"2018-10-19 13:03:59.000000000","message":"This could be improved in the future by Cyborg calling /os-server-external-events API to send notification when the binding was finished.\n\nhttps://developer.openstack.org/api-ref/compute/?expanded\u003drun-events-detail#run-events","commit_id":"f23cdb2c9061b86f694dd4323649938a49b0e507"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"e26a8791973be759264ce48778d1662c49c29e70","unresolved":false,"context_lines":[{"line_number":539,"context_line":"   returns a special code if any VAR is still in the process of binding. The"},{"line_number":540,"context_line":"   os-acc call repeatedly polls the Cyborg API till all VAR bindings are"},{"line_number":541,"context_line":"   resolved (successfully or otherwise), or some configured timeout period"},{"line_number":542,"context_line":"   lapses. In the happy path, the os-acc call returns a list of resolved VARs."},{"line_number":543,"context_line":""},{"line_number":544,"context_line":"#. The Nova compute manager calls the virt driver with the list of VARs, and"},{"line_number":545,"context_line":"   the latter attaches the accelerator to the spawning instance."}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f79a3b5_26e71448","line":542,"in_reply_to":"3f79a3b5_165a7bf4","updated":"2018-10-23 18:26:26.000000000","message":"Thanks for the pointer. How will os-acc consume this event?","commit_id":"f23cdb2c9061b86f694dd4323649938a49b0e507"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2e437f3e41813834e7628dc5f2ab94e603fbfc85","unresolved":false,"context_lines":[{"line_number":539,"context_line":"   returns a special code if any VAR is still in the process of binding. The"},{"line_number":540,"context_line":"   os-acc call repeatedly polls the Cyborg API till all VAR bindings are"},{"line_number":541,"context_line":"   resolved (successfully or otherwise), or some configured timeout period"},{"line_number":542,"context_line":"   lapses. In the happy path, the os-acc call returns a list of resolved VARs."},{"line_number":543,"context_line":""},{"line_number":544,"context_line":"#. The Nova compute manager calls the virt driver with the list of VARs, and"},{"line_number":545,"context_line":"   the latter attaches the accelerator to the spawning instance."}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f79a3b5_7709c380","line":542,"in_reply_to":"3f79a3b5_26e71448","updated":"2018-10-29 09:28:39.000000000","message":"Today nova routes these events from nova-api to the relevant nova-compute service so in theory nova-compute can pass it forward to os-acc. But this is just for future improvement so we don\u0027t have to figure it out now.","commit_id":"f23cdb2c9061b86f694dd4323649938a49b0e507"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0c662ec0d5e4d7ebe7939a8db9b28a230e3ff89a","unresolved":false,"context_lines":[{"line_number":585,"context_line":"-----------------"},{"line_number":586,"context_line":""},{"line_number":587,"context_line":"A new flavor extra spec for device profiles should be added."},{"line_number":588,"context_line":"The request groups in the request spec must allow for ``accel:`` keyword."},{"line_number":589,"context_line":""},{"line_number":590,"context_line":"REST API impact"},{"line_number":591,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f79a3b5_566793b9","line":588,"range":{"start_line":588,"start_character":0,"end_line":588,"end_character":38},"updated":"2018-10-19 13:03:59.000000000","message":"Which field this affects in the RequestSpec nova object?","commit_id":"f23cdb2c9061b86f694dd4323649938a49b0e507"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"e26a8791973be759264ce48778d1662c49c29e70","unresolved":false,"context_lines":[{"line_number":585,"context_line":"-----------------"},{"line_number":586,"context_line":""},{"line_number":587,"context_line":"A new flavor extra spec for device profiles should be added."},{"line_number":588,"context_line":"The request groups in the request spec must allow for ``accel:`` keyword."},{"line_number":589,"context_line":""},{"line_number":590,"context_line":"REST API impact"},{"line_number":591,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f79a3b5_7b4fe58b","line":588,"range":{"start_line":588,"start_character":0,"end_line":588,"end_character":38},"in_reply_to":"3f79a3b5_566793b9","updated":"2018-10-23 18:26:26.000000000","message":"This is outdated; I removed it in the next draft.","commit_id":"f23cdb2c9061b86f694dd4323649938a49b0e507"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0c662ec0d5e4d7ebe7939a8db9b28a230e3ff89a","unresolved":false,"context_lines":[{"line_number":600,"context_line":"Notifications impact"},{"line_number":601,"context_line":"--------------------"},{"line_number":602,"context_line":""},{"line_number":603,"context_line":"Nova may choose to add additional notifications relating to os-acc"},{"line_number":604,"context_line":"invocation."},{"line_number":605,"context_line":""},{"line_number":606,"context_line":"Other end user impact"},{"line_number":607,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f79a3b5_36d21735","line":604,"range":{"start_line":603,"start_character":0,"end_line":604,"end_character":11},"updated":"2018-10-19 13:03:59.000000000","message":"flavor is in the today\u0027s instance notifications so in phase 1 the device_profile name will be part of the instance notifications automatically through the flavor extra_specs. Later when nova introduce a new API field for the device profile then instance notification payloads needs to be extended","commit_id":"f23cdb2c9061b86f694dd4323649938a49b0e507"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"e26a8791973be759264ce48778d1662c49c29e70","unresolved":false,"context_lines":[{"line_number":600,"context_line":"Notifications impact"},{"line_number":601,"context_line":"--------------------"},{"line_number":602,"context_line":""},{"line_number":603,"context_line":"Nova may choose to add additional notifications relating to os-acc"},{"line_number":604,"context_line":"invocation."},{"line_number":605,"context_line":""},{"line_number":606,"context_line":"Other end user impact"},{"line_number":607,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f79a3b5_e606fc1b","line":604,"range":{"start_line":603,"start_character":0,"end_line":604,"end_character":11},"in_reply_to":"3f79a3b5_16d7dbf6","updated":"2018-10-23 18:26:26.000000000","message":"Agreed to both.","commit_id":"f23cdb2c9061b86f694dd4323649938a49b0e507"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b11f050aa0ab63b7daf3be3ca08a3d7542501e50","unresolved":false,"context_lines":[{"line_number":600,"context_line":"Notifications impact"},{"line_number":601,"context_line":"--------------------"},{"line_number":602,"context_line":""},{"line_number":603,"context_line":"Nova may choose to add additional notifications relating to os-acc"},{"line_number":604,"context_line":"invocation."},{"line_number":605,"context_line":""},{"line_number":606,"context_line":"Other end user impact"},{"line_number":607,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f79a3b5_16d7dbf6","line":604,"range":{"start_line":603,"start_character":0,"end_line":604,"end_character":11},"in_reply_to":"3f79a3b5_36d21735","updated":"2018-10-19 13:08:10.000000000","message":"On a second thought. If a notification consumer what to know not just the device_profile name but also want to know which vars are attached to the instance then such consumer can query cyborg api with the instance uuid.","commit_id":"f23cdb2c9061b86f694dd4323649938a49b0e507"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0c662ec0d5e4d7ebe7939a8db9b28a230e3ff89a","unresolved":false,"context_lines":[{"line_number":613,"context_line":""},{"line_number":614,"context_line":"The extra calls to Cyborg REST API may potentially impact Nova"},{"line_number":615,"context_line":"conductor/scheduler throughput. This has been mitigated by making some"},{"line_number":616,"context_line":"critical Cyborg operations as asynchronous tasks."},{"line_number":617,"context_line":""},{"line_number":618,"context_line":"Other deployer impact"},{"line_number":619,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f79a3b5_56ea33d9","line":616,"updated":"2018-10-19 13:03:59.000000000","message":"If the binding is slow then as os-acc polls cyborg the nova calling os-acc will be blocked on that polling.","commit_id":"f23cdb2c9061b86f694dd4323649938a49b0e507"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"e26a8791973be759264ce48778d1662c49c29e70","unresolved":false,"context_lines":[{"line_number":613,"context_line":""},{"line_number":614,"context_line":"The extra calls to Cyborg REST API may potentially impact Nova"},{"line_number":615,"context_line":"conductor/scheduler throughput. This has been mitigated by making some"},{"line_number":616,"context_line":"critical Cyborg operations as asynchronous tasks."},{"line_number":617,"context_line":""},{"line_number":618,"context_line":"Other deployer impact"},{"line_number":619,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f79a3b5_a631e4f0","line":616,"in_reply_to":"3f79a3b5_56ea33d9","updated":"2018-10-23 18:26:26.000000000","message":"Yes. This is partly mitigated by the fact the polling happens on compute nodes, so that the scheduler throughput impact is minimized.","commit_id":"f23cdb2c9061b86f694dd4323649938a49b0e507"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0c662ec0d5e4d7ebe7939a8db9b28a230e3ff89a","unresolved":false,"context_lines":[{"line_number":636,"context_line":"Assignee(s)"},{"line_number":637,"context_line":"-----------"},{"line_number":638,"context_line":""},{"line_number":639,"context_line":"None"},{"line_number":640,"context_line":""},{"line_number":641,"context_line":"Work Items"},{"line_number":642,"context_line":"----------"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f79a3b5_d6af239b","line":639,"range":{"start_line":639,"start_character":0,"end_line":639,"end_character":4},"updated":"2018-10-19 13:03:59.000000000","message":"If nobody willing to implementing the changes in nova then we have a problem here :)","commit_id":"f23cdb2c9061b86f694dd4323649938a49b0e507"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"e26a8791973be759264ce48778d1662c49c29e70","unresolved":false,"context_lines":[{"line_number":636,"context_line":"Assignee(s)"},{"line_number":637,"context_line":"-----------"},{"line_number":638,"context_line":""},{"line_number":639,"context_line":"None"},{"line_number":640,"context_line":""},{"line_number":641,"context_line":"Work Items"},{"line_number":642,"context_line":"----------"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f79a3b5_863b88c7","line":639,"range":{"start_line":639,"start_character":0,"end_line":639,"end_character":4},"in_reply_to":"3f79a3b5_d6af239b","updated":"2018-10-23 18:26:26.000000000","message":":) Some of these are being addressed already by Nova developers. I will put my name for now.","commit_id":"f23cdb2c9061b86f694dd4323649938a49b0e507"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"a8f50bb030c0cdaacd56934ce452d82d05031f08","unresolved":false,"context_lines":[{"line_number":87,"context_line":"* An operator may provide users with both Device as a Service or"},{"line_number":88,"context_line":"  Accelerated Function as a Service in the same cluster (see"},{"line_number":89,"context_line":"  [#cy-nova-place]_)."},{"line_number":90,"context_line":"* A request may entail provisioning an accelerator but not attaching it to a"},{"line_number":91,"context_line":"  VM. This can arise in two scenarios:"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"  * Infrastructure offload: Some part of the compute host infrastructure, such"},{"line_number":94,"context_line":"    as Open Vswitch flow processing, may need to be offloaded to an"},{"line_number":95,"context_line":"    accelerator. This does not involve Nova, and hence is outside the scope of"},{"line_number":96,"context_line":"    this spec."},{"line_number":97,"context_line":"  * Indirect accelerator access: An offload device may couple a network or a"},{"line_number":98,"context_line":"    storage device with an accelerator, such as an FPGA. The VM using the"},{"line_number":99,"context_line":"    offload is connected to the network or storage device, but not directly"},{"line_number":100,"context_line":"    to the FPGA. Rather, the FPGA acts as a bump-in-the-wire for the network"},{"line_number":101,"context_line":"    packets or I/O blocks. See Section `Indirect accelerator access`_."},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"The following use cases are not addressed in Stein but are of long term"},{"line_number":104,"context_line":"interest:"}],"source_content_type":"text/x-rst","patch_set":7,"id":"3f79a3b5_92d74651","line":101,"range":{"start_line":90,"start_character":1,"end_line":101,"end_character":70},"updated":"2018-10-23 01:01:24.000000000","message":"both of these usecase are by there own defintion not related to nova as such i think they should likelky be remvoed form the nova cyborg interaction spec.","commit_id":"341ee872e993dd84903a2f5eeb97099cd7490eb7"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"5badb95dd49e4a2ba9db13ad0669eb487a197d7b","unresolved":false,"context_lines":[{"line_number":87,"context_line":"* An operator may provide users with both Device as a Service or"},{"line_number":88,"context_line":"  Accelerated Function as a Service in the same cluster (see"},{"line_number":89,"context_line":"  [#cy-nova-place]_)."},{"line_number":90,"context_line":"* A request may entail provisioning an accelerator but not attaching it to a"},{"line_number":91,"context_line":"  VM. This can arise in two scenarios:"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"  * Infrastructure offload: Some part of the compute host infrastructure, such"},{"line_number":94,"context_line":"    as Open Vswitch flow processing, may need to be offloaded to an"},{"line_number":95,"context_line":"    accelerator. This does not involve Nova, and hence is outside the scope of"},{"line_number":96,"context_line":"    this spec."},{"line_number":97,"context_line":"  * Indirect accelerator access: An offload device may couple a network or a"},{"line_number":98,"context_line":"    storage device with an accelerator, such as an FPGA. The VM using the"},{"line_number":99,"context_line":"    offload is connected to the network or storage device, but not directly"},{"line_number":100,"context_line":"    to the FPGA. Rather, the FPGA acts as a bump-in-the-wire for the network"},{"line_number":101,"context_line":"    packets or I/O blocks. See Section `Indirect accelerator access`_."},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"The following use cases are not addressed in Stein but are of long term"},{"line_number":104,"context_line":"interest:"}],"source_content_type":"text/x-rst","patch_set":7,"id":"3f79a3b5_5393dea4","line":101,"range":{"start_line":90,"start_character":1,"end_line":101,"end_character":70},"in_reply_to":"3f79a3b5_92d74651","updated":"2018-10-23 18:35:16.000000000","message":"Nova scheduler and Placement are still involved. Also, it may have implications for how Nova virt drivers handle VARs with no attach handles.","commit_id":"341ee872e993dd84903a2f5eeb97099cd7490eb7"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"a8f50bb030c0cdaacd56934ce452d82d05031f08","unresolved":false,"context_lines":[{"line_number":566,"context_line":"must unbind the relevant VARs by calling Cyborg API. It may then retry on"},{"line_number":567,"context_line":"another host or delete the (unbound) VARs for the instance."},{"line_number":568,"context_line":""},{"line_number":569,"context_line":"Indirect accelerator access"},{"line_number":570,"context_line":"---------------------------"},{"line_number":571,"context_line":"As mentioned in Section `Use cases`_, there are scenarios where the"},{"line_number":572,"context_line":"accelerator needs to be provisioned but not attached to the VM. One of them"}],"source_content_type":"text/x-rst","patch_set":7,"id":"3f79a3b5_b2404206","line":569,"range":{"start_line":569,"start_character":0,"end_line":569,"end_character":27},"updated":"2018-10-23 01:01:24.000000000","message":"as i said above im not sure this should be included in this spec. nova will not be responcible for attaching these devices to the vm/compute context in any way so this fell like an abuse of the the nova boot api to include the request for these non compute resoces as part of the instance request.\n\ni think allocating indirct acclorators should likely be done via cyborg directly instead.","commit_id":"341ee872e993dd84903a2f5eeb97099cd7490eb7"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"5badb95dd49e4a2ba9db13ad0669eb487a197d7b","unresolved":false,"context_lines":[{"line_number":566,"context_line":"must unbind the relevant VARs by calling Cyborg API. It may then retry on"},{"line_number":567,"context_line":"another host or delete the (unbound) VARs for the instance."},{"line_number":568,"context_line":""},{"line_number":569,"context_line":"Indirect accelerator access"},{"line_number":570,"context_line":"---------------------------"},{"line_number":571,"context_line":"As mentioned in Section `Use cases`_, there are scenarios where the"},{"line_number":572,"context_line":"accelerator needs to be provisioned but not attached to the VM. One of them"}],"source_content_type":"text/x-rst","patch_set":7,"id":"3f79a3b5_73437a12","line":569,"range":{"start_line":569,"start_character":0,"end_line":569,"end_character":27},"in_reply_to":"3f79a3b5_b2404206","updated":"2018-10-23 18:35:16.000000000","message":"Nova scheduler and Placement are still involved. While Nova virt drivers will not attach such resources, they may need to be aware of handling VARs with attach_handle field set to None.","commit_id":"341ee872e993dd84903a2f5eeb97099cd7490eb7"},{"author":{"_account_id":25738,"name":"Xinran WANG","email":"xin-ran.wang@intel.com","username":"Xinran"},"change_message_id":"421f1edbab66b4a00e609050e5f7f079ec8000db","unresolved":false,"context_lines":[{"line_number":32,"context_line":"* Representation: Cyborg shall represent devices as nested resource providers\r"},{"line_number":33,"context_line":"  under the compute node (except possibly for disaggregated servers),\r"},{"line_number":34,"context_line":"  accelerator types as resource classes and accelerators as inventory in\r"},{"line_number":35,"context_line":"  Placement. The properties needed for scheduling are represented as traits.\r"},{"line_number":36,"context_line":"  This is specified by [#cy-nova-place]_. This spec does not\r"},{"line_number":37,"context_line":"  dwell on this topic.\r"},{"line_number":38,"context_line":"\r"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3f79a3b5_f70e33d6","line":35,"range":{"start_line":35,"start_character":69,"end_line":35,"end_character":75},"updated":"2018-10-31 09:51:29.000000000","message":"also resource classes.","commit_id":"e5cb89565834b3ec1f34c4a55f4df7ecd6ee4e0b"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"fe73cef10f8c392bb119b663212c262786b78fee","unresolved":false,"context_lines":[{"line_number":32,"context_line":"* Representation: Cyborg shall represent devices as nested resource providers\r"},{"line_number":33,"context_line":"  under the compute node (except possibly for disaggregated servers),\r"},{"line_number":34,"context_line":"  accelerator types as resource classes and accelerators as inventory in\r"},{"line_number":35,"context_line":"  Placement. The properties needed for scheduling are represented as traits.\r"},{"line_number":36,"context_line":"  This is specified by [#cy-nova-place]_. This spec does not\r"},{"line_number":37,"context_line":"  dwell on this topic.\r"},{"line_number":38,"context_line":"\r"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3f79a3b5_bbcfbd24","line":35,"range":{"start_line":35,"start_character":69,"end_line":35,"end_character":75},"in_reply_to":"3f79a3b5_f70e33d6","updated":"2018-11-05 14:15:37.000000000","message":"The resource classes are the things being requested. The properties to guide/constrain the scheduling are traits.","commit_id":"e5cb89565834b3ec1f34c4a55f4df7ecd6ee4e0b"},{"author":{"_account_id":25738,"name":"Xinran WANG","email":"xin-ran.wang@intel.com","username":"Xinran"},"change_message_id":"421f1edbab66b4a00e609050e5f7f079ec8000db","unresolved":false,"context_lines":[{"line_number":168,"context_line":"\r"},{"line_number":169,"context_line":"In Phase 2, the Nova API ``POST /servers`` for instance creation is updated to\r"},{"line_number":170,"context_line":"accept a device profile. The operators need not fold a device profile into a\r"},{"line_number":171,"context_line":"flavor anymore, but the folded flavors from Phase 1 will still be valid. An\r"},{"line_number":172,"context_line":"instance can be created as below::\r"},{"line_number":173,"context_line":"\r"},{"line_number":174,"context_line":" openstack server create --flavor f --device-profile \u003cname\u003e ...\r"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3f79a3b5_ba78a2f6","line":171,"range":{"start_line":171,"start_character":16,"end_line":171,"end_character":71},"updated":"2018-10-31 09:51:29.000000000","message":"why the flavor from phase will still be valid. I think it\u0027s better to avoid pass dev-profile in two ways. If the previous implementation is still valid, we should check \nboth device-profile and flavor.accel, there is even more complex than Step 1.","commit_id":"e5cb89565834b3ec1f34c4a55f4df7ecd6ee4e0b"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"fe73cef10f8c392bb119b663212c262786b78fee","unresolved":false,"context_lines":[{"line_number":168,"context_line":"\r"},{"line_number":169,"context_line":"In Phase 2, the Nova API ``POST /servers`` for instance creation is updated to\r"},{"line_number":170,"context_line":"accept a device profile. The operators need not fold a device profile into a\r"},{"line_number":171,"context_line":"flavor anymore, but the folded flavors from Phase 1 will still be valid. An\r"},{"line_number":172,"context_line":"instance can be created as below::\r"},{"line_number":173,"context_line":"\r"},{"line_number":174,"context_line":" openstack server create --flavor f --device-profile \u003cname\u003e ...\r"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3f79a3b5_3b608d0c","line":171,"range":{"start_line":171,"start_character":16,"end_line":171,"end_character":71},"in_reply_to":"3f79a3b5_ba78a2f6","updated":"2018-11-05 14:15:37.000000000","message":"An operator may combine Nova from Stein release with Cyborg from T release. So, Cyborg should be able to work with older versions of Nova. Also, Cyborg API remains the same; it takes a device profile by name, whether that device profile is part of the flavor (Phase 1) or not (Phase 2/3).","commit_id":"e5cb89565834b3ec1f34c4a55f4df7ecd6ee4e0b"},{"author":{"_account_id":25738,"name":"Xinran WANG","email":"xin-ran.wang@intel.com","username":"Xinran"},"change_message_id":"421f1edbab66b4a00e609050e5f7f079ec8000db","unresolved":false,"context_lines":[{"line_number":193,"context_line":"additional properties. An example request group in a device profile may look\r"},{"line_number":194,"context_line":"like this::\r"},{"line_number":195,"context_line":"\r"},{"line_number":196,"context_line":"  { resources:CUSTOM_ACCELERATOR_FOO\u003d2,\r"},{"line_number":197,"context_line":"    trait:CUSTOM_TRAIT_BAR\u003drequired,\r"},{"line_number":198,"context_line":"    accel:bitstream_id\u003d3AFB\r"},{"line_number":199,"context_line":"  }\r"},{"line_number":200,"context_line":"\r"},{"line_number":201,"context_line":"Also, the operator may associate accelerator-related properties with the\r"},{"line_number":202,"context_line":"instance image (such as which bitstreams are required for that workload).\r"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3f79a3b5_735f81e3","line":199,"range":{"start_line":196,"start_character":0,"end_line":199,"end_character":3},"updated":"2018-10-31 09:51:29.000000000","message":"If we got:\n  { resources:CUSTOM_ACCELERATOR_A\u003d2,\n    resources:CUSTOM_ACCELERATOR_B\u003d1,\n    trait:CUSTOM_TRAIT_C\u003drequired,\n    trait:CUSTOM_TRAIT_D\u003drequired,\n    accel:bitstream_id\u003d3AFB\n  }\nhow can we map these resources and traits. In other words, how do we know trait C belongs to resource A or B if A and B both have the possibility to have C property.","commit_id":"e5cb89565834b3ec1f34c4a55f4df7ecd6ee4e0b"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2cb5b1f1b8b14e35bc26b6ca55a3949b753d2296","unresolved":false,"context_lines":[{"line_number":193,"context_line":"additional properties. An example request group in a device profile may look\r"},{"line_number":194,"context_line":"like this::\r"},{"line_number":195,"context_line":"\r"},{"line_number":196,"context_line":"  { resources:CUSTOM_ACCELERATOR_FOO\u003d2,\r"},{"line_number":197,"context_line":"    trait:CUSTOM_TRAIT_BAR\u003drequired,\r"},{"line_number":198,"context_line":"    accel:bitstream_id\u003d3AFB\r"},{"line_number":199,"context_line":"  }\r"},{"line_number":200,"context_line":"\r"},{"line_number":201,"context_line":"Also, the operator may associate accelerator-related properties with the\r"},{"line_number":202,"context_line":"instance image (such as which bitstreams are required for that workload).\r"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3f79a3b5_e35f2772","line":199,"range":{"start_line":196,"start_character":0,"end_line":199,"end_character":3},"in_reply_to":"3f79a3b5_735f81e3","updated":"2018-10-31 12:08:39.000000000","message":"you cant in its current form\nwhen i first suggested a syntax for resuces in patch set 1 i suggested \n\ndevice_requests:[{resouces:[{\"resouce_class\":\"amount\"}], traits:[\"CUSTOM_TRAIT\"]},{...}]\n\nwhich i was implying should be encapulated  in an outer object that carried global request specific info such as the bitstream_id\n\nso i was envisioning something more like this.\n\n{   accel:bitstream_id\u003d3AFB,\n    resources:[{ resource_class:CUSTOM_ACCELERATOR_A\u003d2,\n                trait:CUSTOM_TRAIT_D\u003drequired,\n               },\n               {resource_class:CUSTOM_ACCELERATOR_B\u003d1,\n                trait:CUSTOM_TRAIT_C\u003drequired,}]\n}\n\naccel:bitstream_id is not part of a resouce request so i dont think its correct to group it with one.","commit_id":"e5cb89565834b3ec1f34c4a55f4df7ecd6ee4e0b"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"fe73cef10f8c392bb119b663212c262786b78fee","unresolved":false,"context_lines":[{"line_number":193,"context_line":"additional properties. An example request group in a device profile may look\r"},{"line_number":194,"context_line":"like this::\r"},{"line_number":195,"context_line":"\r"},{"line_number":196,"context_line":"  { resources:CUSTOM_ACCELERATOR_FOO\u003d2,\r"},{"line_number":197,"context_line":"    trait:CUSTOM_TRAIT_BAR\u003drequired,\r"},{"line_number":198,"context_line":"    accel:bitstream_id\u003d3AFB\r"},{"line_number":199,"context_line":"  }\r"},{"line_number":200,"context_line":"\r"},{"line_number":201,"context_line":"Also, the operator may associate accelerator-related properties with the\r"},{"line_number":202,"context_line":"instance image (such as which bitstreams are required for that workload).\r"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3f79a3b5_c66980c0","line":199,"range":{"start_line":196,"start_character":0,"end_line":199,"end_character":3},"in_reply_to":"3f79a3b5_e35f2772","updated":"2018-11-05 14:15:37.000000000","message":"The device profile can have multiple request groups (similar to flavors). If we need to apply different traits to different resource classes, we would place them in different request groups.\n\nSean, having \u0027accel\u0027 properties as common to all resources will not work in general, because we may want to tie them to specific resources. If you move them into the individual request groups, we would get the current device profile proposal.","commit_id":"e5cb89565834b3ec1f34c4a55f4df7ecd6ee4e0b"},{"author":{"_account_id":25738,"name":"Xinran WANG","email":"xin-ran.wang@intel.com","username":"Xinran"},"change_message_id":"421f1edbab66b4a00e609050e5f7f079ec8000db","unresolved":false,"context_lines":[{"line_number":199,"context_line":"  }\r"},{"line_number":200,"context_line":"\r"},{"line_number":201,"context_line":"Also, the operator may associate accelerator-related properties with the\r"},{"line_number":202,"context_line":"instance image (such as which bitstreams are required for that workload).\r"},{"line_number":203,"context_line":"\r"},{"line_number":204,"context_line":"Cyborg shall provide an API that takes a device profile and returns a JSON\r"},{"line_number":205,"context_line":"with resources and traits and listed for each group, but without the ``accel``\r"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3f79a3b5_9b87bd0b","line":202,"range":{"start_line":202,"start_character":0,"end_line":202,"end_character":14},"updated":"2018-10-31 09:51:29.000000000","message":"what does the instance image mean here. Is this the image will be programmed on FPGA or the OS image of VM.","commit_id":"e5cb89565834b3ec1f34c4a55f4df7ecd6ee4e0b"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2cb5b1f1b8b14e35bc26b6ca55a3949b753d2296","unresolved":false,"context_lines":[{"line_number":199,"context_line":"  }\r"},{"line_number":200,"context_line":"\r"},{"line_number":201,"context_line":"Also, the operator may associate accelerator-related properties with the\r"},{"line_number":202,"context_line":"instance image (such as which bitstreams are required for that workload).\r"},{"line_number":203,"context_line":"\r"},{"line_number":204,"context_line":"Cyborg shall provide an API that takes a device profile and returns a JSON\r"},{"line_number":205,"context_line":"with resources and traits and listed for each group, but without the ``accel``\r"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3f79a3b5_c3bf8b77","line":202,"range":{"start_line":202,"start_character":0,"end_line":202,"end_character":14},"in_reply_to":"3f79a3b5_9b87bd0b","updated":"2018-10-31 12:08:39.000000000","message":"instance image i would assume refers to the vm image not the device image. if device image was intended it should be renamed.","commit_id":"e5cb89565834b3ec1f34c4a55f4df7ecd6ee4e0b"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"fe73cef10f8c392bb119b663212c262786b78fee","unresolved":false,"context_lines":[{"line_number":199,"context_line":"  }\r"},{"line_number":200,"context_line":"\r"},{"line_number":201,"context_line":"Also, the operator may associate accelerator-related properties with the\r"},{"line_number":202,"context_line":"instance image (such as which bitstreams are required for that workload).\r"},{"line_number":203,"context_line":"\r"},{"line_number":204,"context_line":"Cyborg shall provide an API that takes a device profile and returns a JSON\r"},{"line_number":205,"context_line":"with resources and traits and listed for each group, but without the ``accel``\r"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3f79a3b5_6658ac24","line":202,"range":{"start_line":202,"start_character":0,"end_line":202,"end_character":14},"in_reply_to":"3f79a3b5_c3bf8b77","updated":"2018-11-05 14:15:37.000000000","message":"Yes, instance image \u003d\u003d VM image.","commit_id":"e5cb89565834b3ec1f34c4a55f4df7ecd6ee4e0b"},{"author":{"_account_id":25738,"name":"Xinran WANG","email":"xin-ran.wang@intel.com","username":"Xinran"},"change_message_id":"421f1edbab66b4a00e609050e5f7f079ec8000db","unresolved":false,"context_lines":[{"line_number":255,"context_line":"Nova, the os-acc defines the ARQ.\r"},{"line_number":256,"context_line":"\r"},{"line_number":257,"context_line":"A ARQ, by definition, represents a request for a single accelerator. The\r"},{"line_number":258,"context_line":"device profile in the user request may ask for more than one accelerator; the\r"},{"line_number":259,"context_line":"number of ARQs created from one device profile will equal the number of\r"},{"line_number":260,"context_line":"accelerators requested in the device profile.\r"},{"line_number":261,"context_line":"\r"},{"line_number":262,"context_line":"Upon creation, the ARQ contains only the reference to the request group within\r"},{"line_number":263,"context_line":"the device profile which specifies the accelerator resource class (as\r"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3f79a3b5_bb5f1973","line":260,"range":{"start_line":258,"start_character":74,"end_line":260,"end_character":45},"updated":"2018-10-31 09:51:29.000000000","message":"Does it mean os-acc should create ARQ one by one accrording to dev-profile? Is it possible to create only one ARQ when user requests more than one same accelerators?","commit_id":"e5cb89565834b3ec1f34c4a55f4df7ecd6ee4e0b"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"fe73cef10f8c392bb119b663212c262786b78fee","unresolved":false,"context_lines":[{"line_number":255,"context_line":"Nova, the os-acc defines the ARQ.\r"},{"line_number":256,"context_line":"\r"},{"line_number":257,"context_line":"A ARQ, by definition, represents a request for a single accelerator. The\r"},{"line_number":258,"context_line":"device profile in the user request may ask for more than one accelerator; the\r"},{"line_number":259,"context_line":"number of ARQs created from one device profile will equal the number of\r"},{"line_number":260,"context_line":"accelerators requested in the device profile.\r"},{"line_number":261,"context_line":"\r"},{"line_number":262,"context_line":"Upon creation, the ARQ contains only the reference to the request group within\r"},{"line_number":263,"context_line":"the device profile which specifies the accelerator resource class (as\r"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3f79a3b5_464ed039","line":260,"range":{"start_line":258,"start_character":74,"end_line":260,"end_character":45},"in_reply_to":"3f79a3b5_bb5f1973","updated":"2018-11-05 14:15:37.000000000","message":"There is one ARQ for each requested accelerator. So, if the dev prof ask for 3 accelerators, 3 ARQs get created. Bunching several accelerator requests in one ARQ will cause complications and I don\u0027t see any benefits from that.","commit_id":"e5cb89565834b3ec1f34c4a55f4df7ecd6ee4e0b"},{"author":{"_account_id":25738,"name":"Xinran WANG","email":"xin-ran.wang@intel.com","username":"Xinran"},"change_message_id":"421f1edbab66b4a00e609050e5f7f079ec8000db","unresolved":false,"context_lines":[{"line_number":283,"context_line":"        ### Fields set by Cyborg on creation: accelerator requirements\r"},{"line_number":284,"context_line":"          # Cyborg sets the state to Initial on creation.\r"},{"line_number":285,"context_line":"        \u0027device_profile_name\u0027: StringField(),\r"},{"line_number":286,"context_line":"        \u0027device_profile_group_index\u0027: IntegerField()\r"},{"line_number":287,"context_line":"\r"},{"line_number":288,"context_line":"        ### Fields set by Nova, after request spec update before scheduling\r"},{"line_number":289,"context_line":"          # Nova sets the state to ReqGroupAssigned after setting this\r"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3f79a3b5_2d40b032","line":286,"range":{"start_line":286,"start_character":8,"end_line":286,"end_character":52},"updated":"2018-10-31 09:51:29.000000000","message":"why don\u0027t set resource class directly? why ARQ should have this field, will this field be used after?","commit_id":"e5cb89565834b3ec1f34c4a55f4df7ecd6ee4e0b"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"fe73cef10f8c392bb119b663212c262786b78fee","unresolved":false,"context_lines":[{"line_number":283,"context_line":"        ### Fields set by Cyborg on creation: accelerator requirements\r"},{"line_number":284,"context_line":"          # Cyborg sets the state to Initial on creation.\r"},{"line_number":285,"context_line":"        \u0027device_profile_name\u0027: StringField(),\r"},{"line_number":286,"context_line":"        \u0027device_profile_group_index\u0027: IntegerField()\r"},{"line_number":287,"context_line":"\r"},{"line_number":288,"context_line":"        ### Fields set by Nova, after request spec update before scheduling\r"},{"line_number":289,"context_line":"          # Nova sets the state to ReqGroupAssigned after setting this\r"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3f79a3b5_0628d833","line":286,"range":{"start_line":286,"start_character":8,"end_line":286,"end_character":52},"in_reply_to":"3f79a3b5_2d40b032","updated":"2018-11-05 14:15:37.000000000","message":"The group in the dev prof includes not only the resource class but also the traits. We need both. We could copy all of them into the ARQ but that seems redundant.","commit_id":"e5cb89565834b3ec1f34c4a55f4df7ecd6ee4e0b"},{"author":{"_account_id":25738,"name":"Xinran WANG","email":"xin-ran.wang@intel.com","username":"Xinran"},"change_message_id":"421f1edbab66b4a00e609050e5f7f079ec8000db","unresolved":false,"context_lines":[{"line_number":288,"context_line":"        ### Fields set by Nova, after request spec update before scheduling\r"},{"line_number":289,"context_line":"          # Nova sets the state to ReqGroupAssigned after setting this\r"},{"line_number":290,"context_line":"          # This is used by os-acc; see `os-acc-bind`_ API.\r"},{"line_number":291,"context_line":"        \u0027request_group_index\u0027: IntegerField(),\r"},{"line_number":292,"context_line":"\r"},{"line_number":293,"context_line":"        ### Fields set by Nova, after scheduling before binding\r"},{"line_number":294,"context_line":"          # Nova sets the state to ReadyToBind after setting this\r"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3f79a3b5_cd6edcca","line":291,"range":{"start_line":291,"start_character":8,"end_line":291,"end_character":45},"updated":"2018-10-31 09:51:29.000000000","message":"why ARQ should have this field, will this field be used after?","commit_id":"e5cb89565834b3ec1f34c4a55f4df7ecd6ee4e0b"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"fe73cef10f8c392bb119b663212c262786b78fee","unresolved":false,"context_lines":[{"line_number":288,"context_line":"        ### Fields set by Nova, after request spec update before scheduling\r"},{"line_number":289,"context_line":"          # Nova sets the state to ReqGroupAssigned after setting this\r"},{"line_number":290,"context_line":"          # This is used by os-acc; see `os-acc-bind`_ API.\r"},{"line_number":291,"context_line":"        \u0027request_group_index\u0027: IntegerField(),\r"},{"line_number":292,"context_line":"\r"},{"line_number":293,"context_line":"        ### Fields set by Nova, after scheduling before binding\r"},{"line_number":294,"context_line":"          # Nova sets the state to ReadyToBind after setting this\r"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3f79a3b5_66be6ccf","line":291,"range":{"start_line":291,"start_character":8,"end_line":291,"end_character":45},"in_reply_to":"3f79a3b5_cd6edcca","updated":"2018-11-05 14:15:37.000000000","message":"Without this field, Cyborg will not know which request group within the request spec corresponds to a device profile request group.","commit_id":"e5cb89565834b3ec1f34c4a55f4df7ecd6ee4e0b"},{"author":{"_account_id":25738,"name":"Xinran WANG","email":"xin-ran.wang@intel.com","username":"Xinran"},"change_message_id":"421f1edbab66b4a00e609050e5f7f079ec8000db","unresolved":false,"context_lines":[{"line_number":331,"context_line":"\r"},{"line_number":332,"context_line":"::\r"},{"line_number":333,"context_line":"\r"},{"line_number":334,"context_line":" URL: /v1/vars\r"},{"line_number":335,"context_line":" Method: POST\r"},{"line_number":336,"context_line":" Request body:\r"},{"line_number":337,"context_line":"   { \u0027device-profile-name\u0027: \u003cstring\u003e, # required\r"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3f79a3b5_6da46806","line":334,"range":{"start_line":334,"start_character":10,"end_line":334,"end_character":14},"updated":"2018-10-31 09:51:29.000000000","message":"s/vars/arqs ?","commit_id":"e5cb89565834b3ec1f34c4a55f4df7ecd6ee4e0b"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"fe73cef10f8c392bb119b663212c262786b78fee","unresolved":false,"context_lines":[{"line_number":331,"context_line":"\r"},{"line_number":332,"context_line":"::\r"},{"line_number":333,"context_line":"\r"},{"line_number":334,"context_line":" URL: /v1/vars\r"},{"line_number":335,"context_line":" Method: POST\r"},{"line_number":336,"context_line":" Request body:\r"},{"line_number":337,"context_line":"   { \u0027device-profile-name\u0027: \u003cstring\u003e, # required\r"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3f79a3b5_069bf878","line":334,"range":{"start_line":334,"start_character":10,"end_line":334,"end_character":14},"in_reply_to":"3f79a3b5_6da46806","updated":"2018-11-05 14:15:37.000000000","message":"Done","commit_id":"e5cb89565834b3ec1f34c4a55f4df7ecd6ee4e0b"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"3fcfb8aa64ce0f028f0d8f6a187b8ad9e7a46312","unresolved":false,"context_lines":[{"line_number":343,"context_line":"     \u0027vars\u0027: [ \u003cJSON-serialized-var\u003e, ... ]\r"},{"line_number":344,"context_line":"   }\r"},{"line_number":345,"context_line":" Error response codes and body:\r"},{"line_number":346,"context_line":"   401 (Unauthorized): RBAC check failed\r"},{"line_number":347,"context_line":"   400 (Bad request): Some input parameter is invalid\r"},{"line_number":348,"context_line":"   { \u0027error\u0027: \u003cerror-string\u003e }\r"},{"line_number":349,"context_line":" Notes: This API does the following:\r"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3f79a3b5_fcf05262","line":346,"updated":"2018-10-29 16:10:34.000000000","message":"401 should be used when there is either no keystone token or the token is invalid. 403 should be used when the token is valid, but the user it identifies is not allowed to do the thing requested.\n\nTherefore for \"RBAC check failed\" you want 403. This applies throughout the API.","commit_id":"e5cb89565834b3ec1f34c4a55f4df7ecd6ee4e0b"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"257ffbf5dff7f8eb849f4e5aff331b2d930f11eb","unresolved":false,"context_lines":[{"line_number":343,"context_line":"     \u0027vars\u0027: [ \u003cJSON-serialized-var\u003e, ... ]\r"},{"line_number":344,"context_line":"   }\r"},{"line_number":345,"context_line":" Error response codes and body:\r"},{"line_number":346,"context_line":"   401 (Unauthorized): RBAC check failed\r"},{"line_number":347,"context_line":"   400 (Bad request): Some input parameter is invalid\r"},{"line_number":348,"context_line":"   { \u0027error\u0027: \u003cerror-string\u003e }\r"},{"line_number":349,"context_line":" Notes: This API does the following:\r"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3f79a3b5_1b2271a7","line":346,"in_reply_to":"3f79a3b5_fcf05262","updated":"2018-11-05 13:51:53.000000000","message":"Done","commit_id":"e5cb89565834b3ec1f34c4a55f4df7ecd6ee4e0b"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"3fcfb8aa64ce0f028f0d8f6a187b8ad9e7a46312","unresolved":false,"context_lines":[{"line_number":345,"context_line":" Error response codes and body:\r"},{"line_number":346,"context_line":"   401 (Unauthorized): RBAC check failed\r"},{"line_number":347,"context_line":"   400 (Bad request): Some input parameter is invalid\r"},{"line_number":348,"context_line":"   { \u0027error\u0027: \u003cerror-string\u003e }\r"},{"line_number":349,"context_line":" Notes: This API does the following:\r"},{"line_number":350,"context_line":"   * Create and return unbound ARQs for a device profile.\r"},{"line_number":351,"context_line":"   * Create and return the request groups from the device profile. Note that\r"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3f79a3b5_1c850eae","line":348,"updated":"2018-10-29 16:10:34.000000000","message":"Consider following the errors guideline: http://specs.openstack.org/openstack/api-sig/guidelines/errors.html","commit_id":"e5cb89565834b3ec1f34c4a55f4df7ecd6ee4e0b"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"5b202ead3bc27f69bcac8bb7a03c968fe763e4ad","unresolved":false,"context_lines":[{"line_number":345,"context_line":" Error response codes and body:\r"},{"line_number":346,"context_line":"   401 (Unauthorized): RBAC check failed\r"},{"line_number":347,"context_line":"   400 (Bad request): Some input parameter is invalid\r"},{"line_number":348,"context_line":"   { \u0027error\u0027: \u003cerror-string\u003e }\r"},{"line_number":349,"context_line":" Notes: This API does the following:\r"},{"line_number":350,"context_line":"   * Create and return unbound ARQs for a device profile.\r"},{"line_number":351,"context_line":"   * Create and return the request groups from the device profile. Note that\r"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3f79a3b5_232aff77","line":348,"in_reply_to":"3f79a3b5_1b7031a7","updated":"2018-11-14 09:13:39.000000000","message":"Placement is using this format for returning errors, and where no error code has been defined, it uses a default. See: https://git.openstack.org/cgit/openstack/placement/tree/placement/util.py#n100","commit_id":"e5cb89565834b3ec1f34c4a55f4df7ecd6ee4e0b"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"257ffbf5dff7f8eb849f4e5aff331b2d930f11eb","unresolved":false,"context_lines":[{"line_number":345,"context_line":" Error response codes and body:\r"},{"line_number":346,"context_line":"   401 (Unauthorized): RBAC check failed\r"},{"line_number":347,"context_line":"   400 (Bad request): Some input parameter is invalid\r"},{"line_number":348,"context_line":"   { \u0027error\u0027: \u003cerror-string\u003e }\r"},{"line_number":349,"context_line":" Notes: This API does the following:\r"},{"line_number":350,"context_line":"   * Create and return unbound ARQs for a device profile.\r"},{"line_number":351,"context_line":"   * Create and return the request groups from the device profile. Note that\r"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3f79a3b5_1b7031a7","line":348,"in_reply_to":"3f79a3b5_1c850eae","updated":"2018-11-05 13:51:53.000000000","message":"OK. I am a bit concerned that a change of code in the future is considered backwards incompatible. \n1. Are there precedents of services following this schema?\n2. What if we implement fields other than code for now? (I understand code is a mandatory field.)","commit_id":"e5cb89565834b3ec1f34c4a55f4df7ecd6ee4e0b"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"3fcfb8aa64ce0f028f0d8f6a187b8ad9e7a46312","unresolved":false,"context_lines":[{"line_number":371,"context_line":"    { \u0027error\u0027: \u003cerror-string\u003e }\r"},{"line_number":372,"context_line":" Notes:\r"},{"line_number":373,"context_line":"    Delete the specified ARQs. If any ARQ is in bound state, unbind it\r"},{"line_number":374,"context_line":"    first before deleting.\r"},{"line_number":375,"context_line":"\r"},{"line_number":376,"context_line":".. _cyborg-bind:\r"},{"line_number":377,"context_line":"\r"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3f79a3b5_3c1c8a79","line":374,"updated":"2018-10-29 16:10:34.000000000","message":"Is there, or will there ever be, a case where you want to be able to GET /v1/vars/\u003csome uuid\u003e to retrieve a representation of a single VAR?\n\nIf so, then DELETE to that URI should also work and in fact is probably better.\n\nAlso if /v1/vars/\u003csome uuid\u003e can exist then \u0027bindings\u0027 (as below) in the same space of the URL is not a great idea.","commit_id":"e5cb89565834b3ec1f34c4a55f4df7ecd6ee4e0b"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"257ffbf5dff7f8eb849f4e5aff331b2d930f11eb","unresolved":false,"context_lines":[{"line_number":371,"context_line":"    { \u0027error\u0027: \u003cerror-string\u003e }\r"},{"line_number":372,"context_line":" Notes:\r"},{"line_number":373,"context_line":"    Delete the specified ARQs. If any ARQ is in bound state, unbind it\r"},{"line_number":374,"context_line":"    first before deleting.\r"},{"line_number":375,"context_line":"\r"},{"line_number":376,"context_line":".. _cyborg-bind:\r"},{"line_number":377,"context_line":"\r"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3f79a3b5_3b2bad32","line":374,"in_reply_to":"3f79a3b5_3c1c8a79","updated":"2018-11-05 13:51:53.000000000","message":"We may have GET /v1/vars?vars\u003d{uuid1,...}, in keeping with the spirit of a collections-based API. However, our intention here is to do bulk deletion. These APIs act on collections of resources to avoid possible scaling issues.\n\nBTW, Virtual Accelerator Requests (VARs) have been renamed as Accelerator Requests (ARQs) based on a poll. So, the URIs will change in the next draft.\n\nAs for bindings, the API design treats bindings as sub-resources of VARs (now ARQs). IOW, a binding for an ARQ is a resource within that ARQ for this purpose. It is a bit like having GET /books?books\u003d{uuid1,...} and GET /books/titles?books\u003d{uuid1,...}","commit_id":"e5cb89565834b3ec1f34c4a55f4df7ecd6ee4e0b"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"3fcfb8aa64ce0f028f0d8f6a187b8ad9e7a46312","unresolved":false,"context_lines":[{"line_number":377,"context_line":"\r"},{"line_number":378,"context_line":"::\r"},{"line_number":379,"context_line":"\r"},{"line_number":380,"context_line":" URL: /v1/vars/bindings/1\r"},{"line_number":381,"context_line":" Method: POST\r"},{"line_number":382,"context_line":" Request body:\r"},{"line_number":383,"context_line":"    { \u0027instance_uuid\u0027: \u003cuuid-string\u003e,\r"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3f79a3b5_82fbf812","line":380,"range":{"start_line":380,"start_character":23,"end_line":380,"end_character":25},"updated":"2018-10-29 16:10:34.000000000","message":"Is there a better way to distinguish this from the other potential binding types than a number? It doesn\u0027t have much meaning.\n\nWould it make more sense to put this distinction in the body of the POST?","commit_id":"e5cb89565834b3ec1f34c4a55f4df7ecd6ee4e0b"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"257ffbf5dff7f8eb849f4e5aff331b2d930f11eb","unresolved":false,"context_lines":[{"line_number":377,"context_line":"\r"},{"line_number":378,"context_line":"::\r"},{"line_number":379,"context_line":"\r"},{"line_number":380,"context_line":" URL: /v1/vars/bindings/1\r"},{"line_number":381,"context_line":" Method: POST\r"},{"line_number":382,"context_line":" Request body:\r"},{"line_number":383,"context_line":"    { \u0027instance_uuid\u0027: \u003cuuid-string\u003e,\r"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3f79a3b5_dbd63927","line":380,"range":{"start_line":380,"start_character":23,"end_line":380,"end_character":25},"in_reply_to":"3f79a3b5_82fbf812","updated":"2018-11-05 13:51:53.000000000","message":"Sure. We could drop the \u00271\u0027 for now. If/when we need multiple bindings, we could give them a different name.","commit_id":"e5cb89565834b3ec1f34c4a55f4df7ecd6ee4e0b"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"3fcfb8aa64ce0f028f0d8f6a187b8ad9e7a46312","unresolved":false,"context_lines":[{"line_number":407,"context_line":"\r"},{"line_number":408,"context_line":" URL: /v1/vars/bindings/1?{uuid\u003duuid1,...,uuidN | instance\u003duuid}\r"},{"line_number":409,"context_line":" Method: DELETE\r"},{"line_number":410,"context_line":" Parameters: Exactly one among uuid and instance is required.\r"},{"line_number":411,"context_line":" Request body: None\r"},{"line_number":412,"context_line":" Normal response code and body:\r"},{"line_number":413,"context_line":"    204 (No content)\r"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3f79a3b5_223304f9","line":410,"updated":"2018-10-29 16:10:34.000000000","message":"As above, doing DELETE based on query parameters rather than the path part of the URI suggests that there\u0027s something odd about the way the API is representing the things that matter in the system. \n\nIt _may_ be right, as is, because of the way more than one uuid is involved, but even then it is still weird: you have a thing named \"uuid\" which has a value which is a uuid and another thing named \"instance\" which also have a value which is a uuid. This suggests that the thing named \"uuid\" should have a different name.","commit_id":"e5cb89565834b3ec1f34c4a55f4df7ecd6ee4e0b"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"257ffbf5dff7f8eb849f4e5aff331b2d930f11eb","unresolved":false,"context_lines":[{"line_number":407,"context_line":"\r"},{"line_number":408,"context_line":" URL: /v1/vars/bindings/1?{uuid\u003duuid1,...,uuidN | instance\u003duuid}\r"},{"line_number":409,"context_line":" Method: DELETE\r"},{"line_number":410,"context_line":" Parameters: Exactly one among uuid and instance is required.\r"},{"line_number":411,"context_line":" Request body: None\r"},{"line_number":412,"context_line":" Normal response code and body:\r"},{"line_number":413,"context_line":"    204 (No content)\r"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3f79a3b5_db7dd91e","line":410,"in_reply_to":"3f79a3b5_223304f9","updated":"2018-11-05 13:51:53.000000000","message":"We are trying to batch actions together wherever possible, to help scaling. Here we are trying to batch the requests for multiple un-bindings, since they may involve messages from Cyborg conductor to the agent on the compute node. Is there a better way than using query parameters on a collection?\n\nI will rename the query parameter from \u0027uuid\u003d...\u0027 to \u0027arq\u003d...\u0027.","commit_id":"e5cb89565834b3ec1f34c4a55f4df7ecd6ee4e0b"},{"author":{"_account_id":25738,"name":"Xinran WANG","email":"xin-ran.wang@intel.com","username":"Xinran"},"change_message_id":"421f1edbab66b4a00e609050e5f7f079ec8000db","unresolved":false,"context_lines":[{"line_number":427,"context_line":"\r"},{"line_number":428,"context_line":"::\r"},{"line_number":429,"context_line":"\r"},{"line_number":430,"context_line":" URL: /v1/vars/instance/{uuid}?state\u003dresolved\r"},{"line_number":431,"context_line":" Method: GET\r"},{"line_number":432,"context_line":" Query string parameters: Required when called from Nova/os-acc\r"},{"line_number":433,"context_line":" Normal response code and body:\r"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3f79a3b5_ad3e0088","line":430,"range":{"start_line":430,"start_character":6,"end_line":430,"end_character":45},"updated":"2018-10-31 09:51:29.000000000","message":"Could you please introduce the states of ARQ in this spec? I have noticed there are bound, unbound, resolved until now. It will be more clear if we introduce them first.","commit_id":"e5cb89565834b3ec1f34c4a55f4df7ecd6ee4e0b"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"fe73cef10f8c392bb119b663212c262786b78fee","unresolved":false,"context_lines":[{"line_number":427,"context_line":"\r"},{"line_number":428,"context_line":"::\r"},{"line_number":429,"context_line":"\r"},{"line_number":430,"context_line":" URL: /v1/vars/instance/{uuid}?state\u003dresolved\r"},{"line_number":431,"context_line":" Method: GET\r"},{"line_number":432,"context_line":" Query string parameters: Required when called from Nova/os-acc\r"},{"line_number":433,"context_line":" Normal response code and body:\r"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3f79a3b5_c67d001f","line":430,"range":{"start_line":430,"start_character":6,"end_line":430,"end_character":45},"in_reply_to":"3f79a3b5_ad3e0088","updated":"2018-11-05 14:15:37.000000000","message":"OK. They are mentioned in Lines 284, 289, 294 and 300. I will call them out explicitly.","commit_id":"e5cb89565834b3ec1f34c4a55f4df7ecd6ee4e0b"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"d6fc181c0b1f380a9a7df893a32710c42d3d49e7","unresolved":false,"context_lines":[{"line_number":427,"context_line":"\r"},{"line_number":428,"context_line":"::\r"},{"line_number":429,"context_line":"\r"},{"line_number":430,"context_line":" URL: /v1/vars/instance/{uuid}?state\u003dresolved\r"},{"line_number":431,"context_line":" Method: GET\r"},{"line_number":432,"context_line":" Query string parameters: Required when called from Nova/os-acc\r"},{"line_number":433,"context_line":" Normal response code and body:\r"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3f79a3b5_c36c07d1","line":430,"range":{"start_line":430,"start_character":6,"end_line":430,"end_character":45},"in_reply_to":"3f79a3b5_c67d001f","updated":"2018-11-05 20:27:53.000000000","message":"Chris Dent and all, should this URI be:\n   /v1/arqs?instance\u003duuid\u0026state\u003dresolved  ?","commit_id":"e5cb89565834b3ec1f34c4a55f4df7ecd6ee4e0b"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"48f8cde9f7e30141d7420a32ad64bbef038ea7a6","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"* User requests for accelerators: Users usually request compute resources via"},{"line_number":48,"context_line":"  flavors. However, since the requests for devices may be highly varied,"},{"line_number":49,"context_line":"  placing them in flavors may result in flavor explosion. To avoid that, the"},{"line_number":50,"context_line":"  device profiles specification [#dev-prof]_ introduces the notion of a device"},{"line_number":51,"context_line":"  profile."},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"  The relationship between device profiles and flavors is explored in Section"},{"line_number":54,"context_line":"  `User requests`_."}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_37d235d2","line":51,"range":{"start_line":49,"start_character":73,"end_line":51,"end_character":10},"updated":"2018-11-14 14:21:29.000000000","message":"This sentence doesn\u0027t add anything other than a place to provide a link. Maybe change this to \"the device profiles specification [link] introduces a data model to encompass a device type and some amount of configuration into a single element that can be referenced by users or operators.\"\n\nJust..something like that. \"An apple is an apple\" doesn\u0027t really define what an apple is, unless you have some pre-existing notion.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"8c8de486e92a3e6b8795936ef8418da8a7334b35","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"* User requests for accelerators: Users usually request compute resources via"},{"line_number":48,"context_line":"  flavors. However, since the requests for devices may be highly varied,"},{"line_number":49,"context_line":"  placing them in flavors may result in flavor explosion. To avoid that, the"},{"line_number":50,"context_line":"  device profiles specification [#dev-prof]_ introduces the notion of a device"},{"line_number":51,"context_line":"  profile."},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"  The relationship between device profiles and flavors is explored in Section"},{"line_number":54,"context_line":"  `User requests`_."}],"source_content_type":"text/x-rst","patch_set":10,"id":"5fc1f717_9f55d552","line":51,"range":{"start_line":49,"start_character":73,"end_line":51,"end_character":10},"in_reply_to":"3f79a3b5_37d235d2","updated":"2019-04-08 04:16:23.000000000","message":"Will rephrase.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"48f8cde9f7e30141d7420a32ad64bbef038ea7a6","unresolved":false,"context_lines":[{"line_number":80,"context_line":"Use Cases"},{"line_number":81,"context_line":"---------"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"* A user requests an instance with one or more accelerators of different"},{"line_number":84,"context_line":"  types assigned to it."},{"line_number":85,"context_line":"* A user subjects an instance with assigned accelerators to any standard"},{"line_number":86,"context_line":"  instance operation, such as deletion or suspension."},{"line_number":87,"context_line":"* An operator may provide users with both Device as a Service or"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_773d0de5","line":84,"range":{"start_line":83,"start_character":0,"end_line":84,"end_character":23},"updated":"2018-11-14 14:21:29.000000000","message":"TBH, this is the only use case in here that really matters I think. \"Instances\" implies \"doing things with instances\" and the rest of the bullets here are just overly verbose, IMHO.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"8c8de486e92a3e6b8795936ef8418da8a7334b35","unresolved":false,"context_lines":[{"line_number":80,"context_line":"Use Cases"},{"line_number":81,"context_line":"---------"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"* A user requests an instance with one or more accelerators of different"},{"line_number":84,"context_line":"  types assigned to it."},{"line_number":85,"context_line":"* A user subjects an instance with assigned accelerators to any standard"},{"line_number":86,"context_line":"  instance operation, such as deletion or suspension."},{"line_number":87,"context_line":"* An operator may provide users with both Device as a Service or"}],"source_content_type":"text/x-rst","patch_set":10,"id":"5fc1f717_5f4bedaf","line":84,"range":{"start_line":83,"start_character":0,"end_line":84,"end_character":23},"in_reply_to":"3f79a3b5_773d0de5","updated":"2019-04-08 04:16:23.000000000","message":"The 3rd bullet, providing DaaS and AFaaS in *the same cluster*, is important and also influences our use of traits, etc. So, I\u0027ll keep that and drop the rest.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"008306342bfba08a10e7d313f4e52b219b04f686","unresolved":false,"context_lines":[{"line_number":84,"context_line":"  types assigned to it."},{"line_number":85,"context_line":"* A user subjects an instance with assigned accelerators to any standard"},{"line_number":86,"context_line":"  instance operation, such as deletion or suspension."},{"line_number":87,"context_line":"* An operator may provide users with both Device as a Service or"},{"line_number":88,"context_line":"  Accelerated Function as a Service in the same cluster (see"},{"line_number":89,"context_line":"  [#cy-nova-place]_)."},{"line_number":90,"context_line":"* A request may entail provisioning an accelerator but not attaching it to a"},{"line_number":91,"context_line":"  VM. This can arise in two scenarios:"},{"line_number":92,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_f8810dff","line":89,"range":{"start_line":87,"start_character":0,"end_line":89,"end_character":21},"updated":"2018-11-14 22:16:49.000000000","message":"For the Device-as-a-Service or Accelerated Function-as-a-Service use cases, is a VM involved? if not, recommend removing it from this particular spec.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"a74eca14b8f5b8f0075f08a944623e169e1fc3e6","unresolved":false,"context_lines":[{"line_number":84,"context_line":"  types assigned to it."},{"line_number":85,"context_line":"* A user subjects an instance with assigned accelerators to any standard"},{"line_number":86,"context_line":"  instance operation, such as deletion or suspension."},{"line_number":87,"context_line":"* An operator may provide users with both Device as a Service or"},{"line_number":88,"context_line":"  Accelerated Function as a Service in the same cluster (see"},{"line_number":89,"context_line":"  [#cy-nova-place]_)."},{"line_number":90,"context_line":"* A request may entail provisioning an accelerator but not attaching it to a"},{"line_number":91,"context_line":"  VM. This can arise in two scenarios:"},{"line_number":92,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_71b088e0","line":89,"range":{"start_line":87,"start_character":0,"end_line":89,"end_character":21},"in_reply_to":"3f79a3b5_f8810dff","updated":"2018-11-19 09:15:18.000000000","message":"Yes, the user wants an accelerator to be assigned to the VM, along with CPU/memory/etc.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"008306342bfba08a10e7d313f4e52b219b04f686","unresolved":false,"context_lines":[{"line_number":87,"context_line":"* An operator may provide users with both Device as a Service or"},{"line_number":88,"context_line":"  Accelerated Function as a Service in the same cluster (see"},{"line_number":89,"context_line":"  [#cy-nova-place]_)."},{"line_number":90,"context_line":"* A request may entail provisioning an accelerator but not attaching it to a"},{"line_number":91,"context_line":"  VM. This can arise in two scenarios:"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"  * Infrastructure offload: Some part of the compute host infrastructure, such"},{"line_number":94,"context_line":"    as Open Vswitch flow processing, may need to be offloaded to an"},{"line_number":95,"context_line":"    accelerator. This does not involve Nova, and hence is outside the scope of"},{"line_number":96,"context_line":"    this spec."},{"line_number":97,"context_line":"  * Indirect accelerator access: An offload device may couple a network or a"},{"line_number":98,"context_line":"    storage device with an accelerator, such as an FPGA. The VM using the"},{"line_number":99,"context_line":"    offload is connected to the network or storage device, but not directly"},{"line_number":100,"context_line":"    to the FPGA. Rather, the FPGA acts as a bump-in-the-wire for the network"},{"line_number":101,"context_line":"    packets or I/O blocks. See Section `Indirect accelerator access`_."},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"The following use cases are not addressed in Stein but are of long term"},{"line_number":104,"context_line":"interest:"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_d8a771bb","line":101,"range":{"start_line":90,"start_character":0,"end_line":101,"end_character":70},"updated":"2018-11-14 22:16:49.000000000","message":"This is just noise in this spec, IMHO. If neither of these scenarios touches a VM -- and hence Nova -- then they don\u0027t belong in a spec called nova-cyborg-interaction.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2e3e6dda8bc8723b90faef30c4705cc553d53413","unresolved":false,"context_lines":[{"line_number":87,"context_line":"* An operator may provide users with both Device as a Service or"},{"line_number":88,"context_line":"  Accelerated Function as a Service in the same cluster (see"},{"line_number":89,"context_line":"  [#cy-nova-place]_)."},{"line_number":90,"context_line":"* A request may entail provisioning an accelerator but not attaching it to a"},{"line_number":91,"context_line":"  VM. This can arise in two scenarios:"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"  * Infrastructure offload: Some part of the compute host infrastructure, such"},{"line_number":94,"context_line":"    as Open Vswitch flow processing, may need to be offloaded to an"},{"line_number":95,"context_line":"    accelerator. This does not involve Nova, and hence is outside the scope of"},{"line_number":96,"context_line":"    this spec."},{"line_number":97,"context_line":"  * Indirect accelerator access: An offload device may couple a network or a"},{"line_number":98,"context_line":"    storage device with an accelerator, such as an FPGA. The VM using the"},{"line_number":99,"context_line":"    offload is connected to the network or storage device, but not directly"},{"line_number":100,"context_line":"    to the FPGA. Rather, the FPGA acts as a bump-in-the-wire for the network"},{"line_number":101,"context_line":"    packets or I/O blocks. See Section `Indirect accelerator access`_."},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"The following use cases are not addressed in Stein but are of long term"},{"line_number":104,"context_line":"interest:"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_7cd4141f","line":101,"range":{"start_line":90,"start_character":1,"end_line":101,"end_character":70},"updated":"2018-11-14 15:45:12.000000000","message":"nit this is not really phased in the form of a use case but rather you are descibing to different problem statements that you want to enable but i get what you wanted to say.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"a74eca14b8f5b8f0075f08a944623e169e1fc3e6","unresolved":false,"context_lines":[{"line_number":87,"context_line":"* An operator may provide users with both Device as a Service or"},{"line_number":88,"context_line":"  Accelerated Function as a Service in the same cluster (see"},{"line_number":89,"context_line":"  [#cy-nova-place]_)."},{"line_number":90,"context_line":"* A request may entail provisioning an accelerator but not attaching it to a"},{"line_number":91,"context_line":"  VM. This can arise in two scenarios:"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"  * Infrastructure offload: Some part of the compute host infrastructure, such"},{"line_number":94,"context_line":"    as Open Vswitch flow processing, may need to be offloaded to an"},{"line_number":95,"context_line":"    accelerator. This does not involve Nova, and hence is outside the scope of"},{"line_number":96,"context_line":"    this spec."},{"line_number":97,"context_line":"  * Indirect accelerator access: An offload device may couple a network or a"},{"line_number":98,"context_line":"    storage device with an accelerator, such as an FPGA. The VM using the"},{"line_number":99,"context_line":"    offload is connected to the network or storage device, but not directly"},{"line_number":100,"context_line":"    to the FPGA. Rather, the FPGA acts as a bump-in-the-wire for the network"},{"line_number":101,"context_line":"    packets or I/O blocks. See Section `Indirect accelerator access`_."},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"The following use cases are not addressed in Stein but are of long term"},{"line_number":104,"context_line":"interest:"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_f4a9e625","line":101,"range":{"start_line":90,"start_character":1,"end_line":101,"end_character":70},"in_reply_to":"3f79a3b5_7cd4141f","updated":"2018-11-19 09:15:18.000000000","message":"Sean: will try to rephrase.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"8c8de486e92a3e6b8795936ef8418da8a7334b35","unresolved":false,"context_lines":[{"line_number":87,"context_line":"* An operator may provide users with both Device as a Service or"},{"line_number":88,"context_line":"  Accelerated Function as a Service in the same cluster (see"},{"line_number":89,"context_line":"  [#cy-nova-place]_)."},{"line_number":90,"context_line":"* A request may entail provisioning an accelerator but not attaching it to a"},{"line_number":91,"context_line":"  VM. This can arise in two scenarios:"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"  * Infrastructure offload: Some part of the compute host infrastructure, such"},{"line_number":94,"context_line":"    as Open Vswitch flow processing, may need to be offloaded to an"},{"line_number":95,"context_line":"    accelerator. This does not involve Nova, and hence is outside the scope of"},{"line_number":96,"context_line":"    this spec."},{"line_number":97,"context_line":"  * Indirect accelerator access: An offload device may couple a network or a"},{"line_number":98,"context_line":"    storage device with an accelerator, such as an FPGA. The VM using the"},{"line_number":99,"context_line":"    offload is connected to the network or storage device, but not directly"},{"line_number":100,"context_line":"    to the FPGA. Rather, the FPGA acts as a bump-in-the-wire for the network"},{"line_number":101,"context_line":"    packets or I/O blocks. See Section `Indirect accelerator access`_."},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"The following use cases are not addressed in Stein but are of long term"},{"line_number":104,"context_line":"interest:"}],"source_content_type":"text/x-rst","patch_set":10,"id":"5fc1f717_7f4829b2","line":101,"range":{"start_line":90,"start_character":0,"end_line":101,"end_character":70},"in_reply_to":"3f79a3b5_ce51b233","updated":"2019-04-08 04:16:23.000000000","message":"Ok","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"a74eca14b8f5b8f0075f08a944623e169e1fc3e6","unresolved":false,"context_lines":[{"line_number":87,"context_line":"* An operator may provide users with both Device as a Service or"},{"line_number":88,"context_line":"  Accelerated Function as a Service in the same cluster (see"},{"line_number":89,"context_line":"  [#cy-nova-place]_)."},{"line_number":90,"context_line":"* A request may entail provisioning an accelerator but not attaching it to a"},{"line_number":91,"context_line":"  VM. This can arise in two scenarios:"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"  * Infrastructure offload: Some part of the compute host infrastructure, such"},{"line_number":94,"context_line":"    as Open Vswitch flow processing, may need to be offloaded to an"},{"line_number":95,"context_line":"    accelerator. This does not involve Nova, and hence is outside the scope of"},{"line_number":96,"context_line":"    this spec."},{"line_number":97,"context_line":"  * Indirect accelerator access: An offload device may couple a network or a"},{"line_number":98,"context_line":"    storage device with an accelerator, such as an FPGA. The VM using the"},{"line_number":99,"context_line":"    offload is connected to the network or storage device, but not directly"},{"line_number":100,"context_line":"    to the FPGA. Rather, the FPGA acts as a bump-in-the-wire for the network"},{"line_number":101,"context_line":"    packets or I/O blocks. See Section `Indirect accelerator access`_."},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"The following use cases are not addressed in Stein but are of long term"},{"line_number":104,"context_line":"interest:"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_f71fa8b6","line":101,"range":{"start_line":90,"start_character":0,"end_line":101,"end_character":70},"in_reply_to":"3f79a3b5_d8a771bb","updated":"2018-11-19 09:15:18.000000000","message":"In these use cases, the device RPs and accelerators are still registered with Placement (as always), and the user still asks for an accelerator resource. So, Nova sees that request and calls Cyborg APIs -- as with other use cases and as detailed in this spec. The only variation is that the attach handle returned by Cyborg may have type None, rest all stays the same.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"ff649544558254a6b8210eaafed45724d2ce35da","unresolved":false,"context_lines":[{"line_number":87,"context_line":"* An operator may provide users with both Device as a Service or"},{"line_number":88,"context_line":"  Accelerated Function as a Service in the same cluster (see"},{"line_number":89,"context_line":"  [#cy-nova-place]_)."},{"line_number":90,"context_line":"* A request may entail provisioning an accelerator but not attaching it to a"},{"line_number":91,"context_line":"  VM. This can arise in two scenarios:"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"  * Infrastructure offload: Some part of the compute host infrastructure, such"},{"line_number":94,"context_line":"    as Open Vswitch flow processing, may need to be offloaded to an"},{"line_number":95,"context_line":"    accelerator. This does not involve Nova, and hence is outside the scope of"},{"line_number":96,"context_line":"    this spec."},{"line_number":97,"context_line":"  * Indirect accelerator access: An offload device may couple a network or a"},{"line_number":98,"context_line":"    storage device with an accelerator, such as an FPGA. The VM using the"},{"line_number":99,"context_line":"    offload is connected to the network or storage device, but not directly"},{"line_number":100,"context_line":"    to the FPGA. Rather, the FPGA acts as a bump-in-the-wire for the network"},{"line_number":101,"context_line":"    packets or I/O blocks. See Section `Indirect accelerator access`_."},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"The following use cases are not addressed in Stein but are of long term"},{"line_number":104,"context_line":"interest:"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_ce51b233","line":101,"range":{"start_line":90,"start_character":0,"end_line":101,"end_character":70},"in_reply_to":"3f79a3b5_f71fa8b6","updated":"2018-11-19 17:24:34.000000000","message":"just because something exist in placement doe not mean nova is involved. \n\nneutron create resources for routed netwroks in placement which it claims without nova interaction.\n\ni agree with jay on this point i dont think this sure be in the spec but i have said that in the past iterations of this spec so if it is not remved i would prefer it to be rephsased. but to be clear i think this should be declared out of scope of the nova cyborg interaction and removed form the spec.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2e3e6dda8bc8723b90faef30c4705cc553d53413","unresolved":false,"context_lines":[{"line_number":112,"context_line":"Coexistence with PCI whitelists"},{"line_number":113,"context_line":"-------------------------------"},{"line_number":114,"context_line":"The operator tells Nova which PCI devices to claim and use by configuring the"},{"line_number":115,"context_line":"PCI Whitelists mechanism. In addition, the operator installs Cyborg drivers in"},{"line_number":116,"context_line":"compute nodes and configures/enables them. Those drivers may then discover and"},{"line_number":117,"context_line":"report some PCI devices. The operator must ensure that both configurations"},{"line_number":118,"context_line":"are compatible."}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_3cc77c69","line":115,"range":{"start_line":115,"start_character":68,"end_line":115,"end_character":75},"updated":"2018-11-14 15:45:12.000000000","message":"drivers or agent.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"a74eca14b8f5b8f0075f08a944623e169e1fc3e6","unresolved":false,"context_lines":[{"line_number":112,"context_line":"Coexistence with PCI whitelists"},{"line_number":113,"context_line":"-------------------------------"},{"line_number":114,"context_line":"The operator tells Nova which PCI devices to claim and use by configuring the"},{"line_number":115,"context_line":"PCI Whitelists mechanism. In addition, the operator installs Cyborg drivers in"},{"line_number":116,"context_line":"compute nodes and configures/enables them. Those drivers may then discover and"},{"line_number":117,"context_line":"report some PCI devices. The operator must ensure that both configurations"},{"line_number":118,"context_line":"are compatible."}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_5468daf1","line":115,"range":{"start_line":115,"start_character":68,"end_line":115,"end_character":75},"in_reply_to":"3f79a3b5_3cc77c69","updated":"2018-11-19 09:15:18.000000000","message":"It is drivers and agent. For discovery, drivers alone matter.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"008306342bfba08a10e7d313f4e52b219b04f686","unresolved":false,"context_lines":[{"line_number":112,"context_line":"Coexistence with PCI whitelists"},{"line_number":113,"context_line":"-------------------------------"},{"line_number":114,"context_line":"The operator tells Nova which PCI devices to claim and use by configuring the"},{"line_number":115,"context_line":"PCI Whitelists mechanism. In addition, the operator installs Cyborg drivers in"},{"line_number":116,"context_line":"compute nodes and configures/enables them. Those drivers may then discover and"},{"line_number":117,"context_line":"report some PCI devices. The operator must ensure that both configurations"},{"line_number":118,"context_line":"are compatible."},{"line_number":119,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_bb538f6e","line":116,"range":{"start_line":115,"start_character":26,"end_line":116,"end_character":42},"updated":"2018-11-14 22:16:49.000000000","message":"is this describing existing, working code?","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"8c8de486e92a3e6b8795936ef8418da8a7334b35","unresolved":false,"context_lines":[{"line_number":112,"context_line":"Coexistence with PCI whitelists"},{"line_number":113,"context_line":"-------------------------------"},{"line_number":114,"context_line":"The operator tells Nova which PCI devices to claim and use by configuring the"},{"line_number":115,"context_line":"PCI Whitelists mechanism. In addition, the operator installs Cyborg drivers in"},{"line_number":116,"context_line":"compute nodes and configures/enables them. Those drivers may then discover and"},{"line_number":117,"context_line":"report some PCI devices. The operator must ensure that both configurations"},{"line_number":118,"context_line":"are compatible."},{"line_number":119,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"5fc1f717_3fcce133","line":116,"range":{"start_line":115,"start_character":26,"end_line":116,"end_character":42},"in_reply_to":"3f79a3b5_519a2c12","updated":"2019-04-08 04:16:23.000000000","message":"The configure/enable part is required as of Stein. See::\n\nhttps://review.openstack.org/#/c/596691/12/cyborg/conf/agent.py","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"a74eca14b8f5b8f0075f08a944623e169e1fc3e6","unresolved":false,"context_lines":[{"line_number":112,"context_line":"Coexistence with PCI whitelists"},{"line_number":113,"context_line":"-------------------------------"},{"line_number":114,"context_line":"The operator tells Nova which PCI devices to claim and use by configuring the"},{"line_number":115,"context_line":"PCI Whitelists mechanism. In addition, the operator installs Cyborg drivers in"},{"line_number":116,"context_line":"compute nodes and configures/enables them. Those drivers may then discover and"},{"line_number":117,"context_line":"report some PCI devices. The operator must ensure that both configurations"},{"line_number":118,"context_line":"are compatible."},{"line_number":119,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_519a2c12","line":116,"range":{"start_line":115,"start_character":26,"end_line":116,"end_character":42},"in_reply_to":"3f79a3b5_bb538f6e","updated":"2018-11-19 09:15:18.000000000","message":"Currently, we install in-tree drivers via devstack: no configuration required. In the course of Stein release, we may add more in-tree drivers and there may be some need to configure them.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"008306342bfba08a10e7d313f4e52b219b04f686","unresolved":false,"context_lines":[{"line_number":123,"context_line":"could be agreed upon by all stakeholders, Cyborg could adopt it."},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"Until that point, the operator tells Cyborg which devices to claim by"},{"line_number":126,"context_line":"using Cyborg\u0027s configuration file. The operator must ensure that this is"},{"line_number":127,"context_line":"compatible with the PCI whitelists configured in Nova."},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"Placement update"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_7b4df7c4","line":126,"range":{"start_line":126,"start_character":6,"end_line":126,"end_character":33},"updated":"2018-11-14 22:16:49.000000000","message":"might be good to include a link to Cyborg\u0027s configuration file, though when I checked https://docs.openstack.org/cyborg/latest/configuration/config-options.html, all I see is copy-pasted stuff from nova... I don\u0027t see any Cyborg-specific configuration anywhere.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"8c8de486e92a3e6b8795936ef8418da8a7334b35","unresolved":false,"context_lines":[{"line_number":123,"context_line":"could be agreed upon by all stakeholders, Cyborg could adopt it."},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"Until that point, the operator tells Cyborg which devices to claim by"},{"line_number":126,"context_line":"using Cyborg\u0027s configuration file. The operator must ensure that this is"},{"line_number":127,"context_line":"compatible with the PCI whitelists configured in Nova."},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"Placement update"}],"source_content_type":"text/x-rst","patch_set":10,"id":"5fc1f717_5fe0cd97","line":126,"range":{"start_line":126,"start_character":6,"end_line":126,"end_character":33},"in_reply_to":"3f79a3b5_5479ba7e","updated":"2019-04-08 04:16:23.000000000","message":"The agent configuration is as per this code:\nhttps://review.openstack.org/#/c/596691/12/cyborg/conf/agent.py","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"a74eca14b8f5b8f0075f08a944623e169e1fc3e6","unresolved":false,"context_lines":[{"line_number":123,"context_line":"could be agreed upon by all stakeholders, Cyborg could adopt it."},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"Until that point, the operator tells Cyborg which devices to claim by"},{"line_number":126,"context_line":"using Cyborg\u0027s configuration file. The operator must ensure that this is"},{"line_number":127,"context_line":"compatible with the PCI whitelists configured in Nova."},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"Placement update"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_5479ba7e","line":126,"range":{"start_line":126,"start_character":6,"end_line":126,"end_character":33},"in_reply_to":"3f79a3b5_7b4df7c4","updated":"2018-11-19 09:15:18.000000000","message":"You are right: the doc needs to be cleaned up, and there is no explicit configuration of any type now.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2e3e6dda8bc8723b90faef30c4705cc553d53413","unresolved":false,"context_lines":[{"line_number":133,"context_line":""},{"line_number":134,"context_line":"* Create or delete child RPs under the compute node RP."},{"line_number":135,"context_line":"* Create or delete custom RCs and custom traits."},{"line_number":136,"context_line":"* Associate traits with RPs or remove such association."},{"line_number":137,"context_line":"* Update RP inventory."},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"This requires changes in Nova to enable use of nested resource providers. The"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_fc95843f","line":136,"range":{"start_line":136,"start_character":0,"end_line":136,"end_character":55},"updated":"2018-11-14 15:45:12.000000000","message":"nit: with RPs created by cyborg.\n\ncyborge will not modify any RPs created by nova\neven by adding or removing traits.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"a74eca14b8f5b8f0075f08a944623e169e1fc3e6","unresolved":false,"context_lines":[{"line_number":133,"context_line":""},{"line_number":134,"context_line":"* Create or delete child RPs under the compute node RP."},{"line_number":135,"context_line":"* Create or delete custom RCs and custom traits."},{"line_number":136,"context_line":"* Associate traits with RPs or remove such association."},{"line_number":137,"context_line":"* Update RP inventory."},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"This requires changes in Nova to enable use of nested resource providers. The"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_b4784ec2","line":136,"range":{"start_line":136,"start_character":0,"end_line":136,"end_character":55},"in_reply_to":"3f79a3b5_fc95843f","updated":"2018-11-19 09:15:18.000000000","message":"Agreed.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"48f8cde9f7e30141d7420a32ad64bbef038ea7a6","unresolved":false,"context_lines":[{"line_number":128,"context_line":""},{"line_number":129,"context_line":"Placement update"},{"line_number":130,"context_line":"----------------"},{"line_number":131,"context_line":"Cyborg shall call Placement API directly to represent devices and"},{"line_number":132,"context_line":"accelerators. Some of the intended use cases for the API invocation are:"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"* Create or delete child RPs under the compute node RP."},{"line_number":135,"context_line":"* Create or delete custom RCs and custom traits."},{"line_number":136,"context_line":"* Associate traits with RPs or remove such association."},{"line_number":137,"context_line":"* Update RP inventory."},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"This requires changes in Nova to enable use of nested resource providers. The"},{"line_number":140,"context_line":"exact list of changes is independent of Cyborg and is outside the scope of"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_b7116562","line":137,"range":{"start_line":131,"start_character":0,"end_line":137,"end_character":21},"updated":"2018-11-14 14:21:29.000000000","message":"Personally, this doesn\u0027t add much to the spec, IMHO. Obviously cyborg will need to do these things if it is managing placement modeling of the resources. I\u0027d rather know what those look like (or have a link to them) here than to know that it\u0027ll have to do these low-level operations.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"008306342bfba08a10e7d313f4e52b219b04f686","unresolved":false,"context_lines":[{"line_number":136,"context_line":"* Associate traits with RPs or remove such association."},{"line_number":137,"context_line":"* Update RP inventory."},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"This requires changes in Nova to enable use of nested resource providers. The"},{"line_number":140,"context_line":"exact list of changes is independent of Cyborg and is outside the scope of"},{"line_number":141,"context_line":"this spec."},{"line_number":142,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_db9beb13","line":139,"range":{"start_line":139,"start_character":0,"end_line":139,"end_character":73},"updated":"2018-11-14 22:16:49.000000000","message":"what changes exactly? Are you referring to the virt drivers supporting the provider tree stuff? or something else?","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"8c8de486e92a3e6b8795936ef8418da8a7334b35","unresolved":false,"context_lines":[{"line_number":136,"context_line":"* Associate traits with RPs or remove such association."},{"line_number":137,"context_line":"* Update RP inventory."},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"This requires changes in Nova to enable use of nested resource providers. The"},{"line_number":140,"context_line":"exact list of changes is independent of Cyborg and is outside the scope of"},{"line_number":141,"context_line":"this spec."},{"line_number":142,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"5fc1f717_9f039542","line":139,"range":{"start_line":139,"start_character":0,"end_line":139,"end_character":73},"in_reply_to":"3f79a3b5_74cab6a3","updated":"2019-04-08 04:16:23.000000000","message":"I think these have been addressed since the time I wrote this. So I will remove this part.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"a74eca14b8f5b8f0075f08a944623e169e1fc3e6","unresolved":false,"context_lines":[{"line_number":136,"context_line":"* Associate traits with RPs or remove such association."},{"line_number":137,"context_line":"* Update RP inventory."},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"This requires changes in Nova to enable use of nested resource providers. The"},{"line_number":140,"context_line":"exact list of changes is independent of Cyborg and is outside the scope of"},{"line_number":141,"context_line":"this spec."},{"line_number":142,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_74cab6a3","line":139,"range":{"start_line":139,"start_character":0,"end_line":139,"end_character":73},"in_reply_to":"3f79a3b5_db9beb13","updated":"2018-11-19 09:15:18.000000000","message":"The virt drivers overwrite the nested RPs that others create. Minimally, this needs to change.\n\nMy understanding is, the Placement side for nested RPs is (mostly) done, but the Nova scheduler/conductor need to be enhanced to use the tree that Placement returns, and virt drivers need to be updated to not stomp on nested RPs. This part is better articulated by Nova experts like yourself or Eric Fried. I am only stating the dependency.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"48f8cde9f7e30141d7420a32ad64bbef038ea7a6","unresolved":false,"context_lines":[{"line_number":136,"context_line":"* Associate traits with RPs or remove such association."},{"line_number":137,"context_line":"* Update RP inventory."},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"This requires changes in Nova to enable use of nested resource providers. The"},{"line_number":140,"context_line":"exact list of changes is independent of Cyborg and is outside the scope of"},{"line_number":141,"context_line":"this spec."},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"User requests"},{"line_number":144,"context_line":"-------------"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_f7259dc1","line":141,"range":{"start_line":139,"start_character":0,"end_line":141,"end_character":10},"updated":"2018-11-14 14:21:29.000000000","message":"Seems like this is a pretty critical piece and not \"outside the scope\" of this document.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"8c8de486e92a3e6b8795936ef8418da8a7334b35","unresolved":false,"context_lines":[{"line_number":136,"context_line":"* Associate traits with RPs or remove such association."},{"line_number":137,"context_line":"* Update RP inventory."},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"This requires changes in Nova to enable use of nested resource providers. The"},{"line_number":140,"context_line":"exact list of changes is independent of Cyborg and is outside the scope of"},{"line_number":141,"context_line":"this spec."},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"User requests"},{"line_number":144,"context_line":"-------------"}],"source_content_type":"text/x-rst","patch_set":10,"id":"5fc1f717_bf00d135","line":141,"range":{"start_line":139,"start_character":0,"end_line":141,"end_character":10},"in_reply_to":"3f79a3b5_f7259dc1","updated":"2019-04-08 04:16:23.000000000","message":"I think these have been addressed since the time I wrote this. So I will remove this part.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2e3e6dda8bc8723b90faef30c4705cc553d53413","unresolved":false,"context_lines":[{"line_number":140,"context_line":"exact list of changes is independent of Cyborg and is outside the scope of"},{"line_number":141,"context_line":"this spec."},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"User requests"},{"line_number":144,"context_line":"-------------"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"The user request for accelerators is encapsulated in a device profile"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_3c80dc9d","line":143,"range":{"start_line":143,"start_character":0,"end_line":143,"end_character":4},"updated":"2018-11-14 15:45:12.000000000","message":"nit accelerator","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"a74eca14b8f5b8f0075f08a944623e169e1fc3e6","unresolved":false,"context_lines":[{"line_number":140,"context_line":"exact list of changes is independent of Cyborg and is outside the scope of"},{"line_number":141,"context_line":"this spec."},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"User requests"},{"line_number":144,"context_line":"-------------"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"The user request for accelerators is encapsulated in a device profile"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_1453423d","line":143,"range":{"start_line":143,"start_character":0,"end_line":143,"end_character":4},"in_reply_to":"3f79a3b5_3c80dc9d","updated":"2018-11-19 09:15:18.000000000","message":"This section deals with user requests for accelerators.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"48f8cde9f7e30141d7420a32ad64bbef038ea7a6","unresolved":false,"context_lines":[{"line_number":146,"context_line":"The user request for accelerators is encapsulated in a device profile"},{"line_number":147,"context_line":"[#dev-prof]_."},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"A device profile may be viewed as a \u0027flavor for devices\u0027. Accordingly, the"},{"line_number":150,"context_line":"instance request should include both a flavor and a device profile. However,"},{"line_number":151,"context_line":"that requires a change to the Nova API for instance creation. To mitigate the"},{"line_number":152,"context_line":"impact of such changes on users and operators, we propose to do this"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_9710e95a","line":149,"range":{"start_line":149,"start_character":0,"end_line":149,"end_character":56},"updated":"2018-11-14 14:21:29.000000000","message":"This is a perfect thing to say above where I complain about defining device profile as \"a device profile\"","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"48f8cde9f7e30141d7420a32ad64bbef038ea7a6","unresolved":false,"context_lines":[{"line_number":166,"context_line":"assignment) in this phase, because we cannot feed a device profile to the Nova"},{"line_number":167,"context_line":"API for updating servers (unless live resize [#live-resize]_ is implemented)."},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"In Phase 2, the Nova API ``POST /servers`` for instance creation is updated to"},{"line_number":170,"context_line":"accept a device profile. The operators need not fold a device profile into a"},{"line_number":171,"context_line":"flavor anymore, but the folded flavors from Phase 1 will still be valid. An"},{"line_number":172,"context_line":"instance can be created as below::"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_92055712","line":169,"range":{"start_line":169,"start_character":0,"end_line":169,"end_character":10},"updated":"2018-11-14 14:21:29.000000000","message":"If you want to cut down on the words in this spec, I think you could collapse the following paragraphs on phases into a single sentence of \"In the future, we\u0027ll support hot-attach, etc\".","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2e3e6dda8bc8723b90faef30c4705cc553d53413","unresolved":false,"context_lines":[{"line_number":166,"context_line":"assignment) in this phase, because we cannot feed a device profile to the Nova"},{"line_number":167,"context_line":"API for updating servers (unless live resize [#live-resize]_ is implemented)."},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"In Phase 2, the Nova API ``POST /servers`` for instance creation is updated to"},{"line_number":170,"context_line":"accept a device profile. The operators need not fold a device profile into a"},{"line_number":171,"context_line":"flavor anymore, but the folded flavors from Phase 1 will still be valid. An"},{"line_number":172,"context_line":"instance can be created as below::"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_dc5f684a","line":169,"range":{"start_line":169,"start_character":65,"end_line":169,"end_character":67},"updated":"2018-11-14 15:45:12.000000000","message":"nit: will be","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"8c8de486e92a3e6b8795936ef8418da8a7334b35","unresolved":false,"context_lines":[{"line_number":166,"context_line":"assignment) in this phase, because we cannot feed a device profile to the Nova"},{"line_number":167,"context_line":"API for updating servers (unless live resize [#live-resize]_ is implemented)."},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"In Phase 2, the Nova API ``POST /servers`` for instance creation is updated to"},{"line_number":170,"context_line":"accept a device profile. The operators need not fold a device profile into a"},{"line_number":171,"context_line":"flavor anymore, but the folded flavors from Phase 1 will still be valid. An"},{"line_number":172,"context_line":"instance can be created as below::"}],"source_content_type":"text/x-rst","patch_set":10,"id":"5fc1f717_5ff9ad4b","line":169,"range":{"start_line":169,"start_character":0,"end_line":169,"end_character":10},"in_reply_to":"3f79a3b5_92055712","updated":"2019-04-08 04:16:23.000000000","message":"Done","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"008306342bfba08a10e7d313f4e52b219b04f686","unresolved":false,"context_lines":[{"line_number":167,"context_line":"API for updating servers (unless live resize [#live-resize]_ is implemented)."},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"In Phase 2, the Nova API ``POST /servers`` for instance creation is updated to"},{"line_number":170,"context_line":"accept a device profile. The operators need not fold a device profile into a"},{"line_number":171,"context_line":"flavor anymore, but the folded flavors from Phase 1 will still be valid. An"},{"line_number":172,"context_line":"instance can be created as below::"},{"line_number":173,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_9ba6d355","line":170,"range":{"start_line":170,"start_character":7,"end_line":170,"end_character":24},"updated":"2018-11-14 22:16:49.000000000","message":"just one? what if the instance needs/wants \u003e1 accelerator?","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"ff649544558254a6b8210eaafed45724d2ce35da","unresolved":false,"context_lines":[{"line_number":167,"context_line":"API for updating servers (unless live resize [#live-resize]_ is implemented)."},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"In Phase 2, the Nova API ``POST /servers`` for instance creation is updated to"},{"line_number":170,"context_line":"accept a device profile. The operators need not fold a device profile into a"},{"line_number":171,"context_line":"flavor anymore, but the folded flavors from Phase 1 will still be valid. An"},{"line_number":172,"context_line":"instance can be created as below::"},{"line_number":173,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_2e186685","line":170,"range":{"start_line":170,"start_character":7,"end_line":170,"end_character":24},"in_reply_to":"3f79a3b5_14b90216","updated":"2018-11-19 17:24:34.000000000","message":"i belive i mention this sowhere ese but i would prefer to use multiple device profiles to request multiple acceleraters. initially at the ptg when we discussed this i was envisioung one device profile per aclerator but that device profile could reques request multple resouces\n\ne.g. 1 VF + 256mb of device memory + 1 crypto engine  + custom_ipsec_offload trait\u003d 1 device profile for an ipsec accelerator device.\n\nso each device profile could consume multiple different resouce but you would have 1 per device that is exposed to the guest.\n\nif you wanted to expose 5 devices you would have five device profiles in the flavor.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"8c8de486e92a3e6b8795936ef8418da8a7334b35","unresolved":false,"context_lines":[{"line_number":167,"context_line":"API for updating servers (unless live resize [#live-resize]_ is implemented)."},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"In Phase 2, the Nova API ``POST /servers`` for instance creation is updated to"},{"line_number":170,"context_line":"accept a device profile. The operators need not fold a device profile into a"},{"line_number":171,"context_line":"flavor anymore, but the folded flavors from Phase 1 will still be valid. An"},{"line_number":172,"context_line":"instance can be created as below::"},{"line_number":173,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"5fc1f717_1fbec564","line":170,"range":{"start_line":170,"start_character":7,"end_line":170,"end_character":24},"in_reply_to":"3f79a3b5_2e186685","updated":"2019-04-08 04:16:23.000000000","message":"Certainly one request group could specify multiple resources, including N accelerators, local memory, etc.\n\nHowever, an application or workload may require more than one accelerator, e.g. 2 FPGAs, or FPGA + QuickAssist. From the operator\u0027s POV, that is best encapsulated in a single device profile for the following reasons:\n* S/he can give it a suitable name -- either a configuration-based name like f1.2-fpgas or an application-based name like image-recognition.resnet-50. This is how existing clouds like AWS do it.\n* Just as a flavor is used for accounting/billing, I\u0027d expect device profiles (\u0027flavor for devices\u0027) to be used for that too. It is simpler to have fewer device profiles that are tied to config/workload.\n* It is more operator-friendly and less error-prone to set just one device profile per flavor. \n* Since a device profile is described as \u0027flavor for devices\u0027, operators would expect it to specify all needed resources, just as flavors do.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"a74eca14b8f5b8f0075f08a944623e169e1fc3e6","unresolved":false,"context_lines":[{"line_number":167,"context_line":"API for updating servers (unless live resize [#live-resize]_ is implemented)."},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"In Phase 2, the Nova API ``POST /servers`` for instance creation is updated to"},{"line_number":170,"context_line":"accept a device profile. The operators need not fold a device profile into a"},{"line_number":171,"context_line":"flavor anymore, but the folded flavors from Phase 1 will still be valid. An"},{"line_number":172,"context_line":"instance can be created as below::"},{"line_number":173,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_14b90216","line":170,"range":{"start_line":170,"start_character":7,"end_line":170,"end_character":24},"in_reply_to":"3f79a3b5_9ba6d355","updated":"2018-11-19 09:15:18.000000000","message":"A device profile has multiple request groups, since it is essentially a \u0027flavor for devices.\u0027 Each request group can ask for 1 or more resources. Please see https://review.openstack.org/#/c/602978/.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"48f8cde9f7e30141d7420a32ad64bbef038ea7a6","unresolved":false,"context_lines":[{"line_number":187,"context_line":"the device profile and merge them into the request spec. (This is along the"},{"line_number":188,"context_line":"lines of the scheme proposed for Neutron [#req-spec-groups]_.)"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"To recap from the device profiles specification [#dev-prof]_, the device"},{"line_number":191,"context_line":"profile contains one or more device profile groups, each containing requests"},{"line_number":192,"context_line":"for one or more resource classes, zero or more traits, and zero or more"},{"line_number":193,"context_line":"additional properties. An example request group in a device profile may look"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_724e7b6e","line":190,"range":{"start_line":190,"start_character":0,"end_line":190,"end_character":47},"updated":"2018-11-14 14:21:29.000000000","message":"I wouldn\u0027t do this. Just say \"os-acc will give us back a list of resource classes and traits that we include in the request to placement.\" and that\u0027s enough. If they want to know how, they can go read #dev-prof.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"8c8de486e92a3e6b8795936ef8418da8a7334b35","unresolved":false,"context_lines":[{"line_number":187,"context_line":"the device profile and merge them into the request spec. (This is along the"},{"line_number":188,"context_line":"lines of the scheme proposed for Neutron [#req-spec-groups]_.)"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"To recap from the device profiles specification [#dev-prof]_, the device"},{"line_number":191,"context_line":"profile contains one or more device profile groups, each containing requests"},{"line_number":192,"context_line":"for one or more resource classes, zero or more traits, and zero or more"},{"line_number":193,"context_line":"additional properties. An example request group in a device profile may look"}],"source_content_type":"text/x-rst","patch_set":10,"id":"5fc1f717_bfae912b","line":190,"range":{"start_line":190,"start_character":0,"end_line":190,"end_character":47},"in_reply_to":"3f79a3b5_724e7b6e","updated":"2019-04-08 04:16:23.000000000","message":"Dropped this section.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"008306342bfba08a10e7d313f4e52b219b04f686","unresolved":false,"context_lines":[{"line_number":195,"context_line":""},{"line_number":196,"context_line":"  { resources:CUSTOM_ACCELERATOR_FOO\u003d2,"},{"line_number":197,"context_line":"    trait:CUSTOM_TRAIT_BAR\u003drequired,"},{"line_number":198,"context_line":"    accel:bitstream_id\u003d3AFB"},{"line_number":199,"context_line":"  }"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"Also, the operator may associate accelerator-related properties with the"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_7e6ba586","line":198,"range":{"start_line":198,"start_character":4,"end_line":198,"end_character":27},"updated":"2018-11-14 22:16:49.000000000","message":"what is this? is this something that nova/placement cares about? is it supposed to be a trait?","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"a74eca14b8f5b8f0075f08a944623e169e1fc3e6","unresolved":false,"context_lines":[{"line_number":195,"context_line":""},{"line_number":196,"context_line":"  { resources:CUSTOM_ACCELERATOR_FOO\u003d2,"},{"line_number":197,"context_line":"    trait:CUSTOM_TRAIT_BAR\u003drequired,"},{"line_number":198,"context_line":"    accel:bitstream_id\u003d3AFB"},{"line_number":199,"context_line":"  }"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"Also, the operator may associate accelerator-related properties with the"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_f442460e","line":198,"range":{"start_line":198,"start_character":4,"end_line":198,"end_character":27},"in_reply_to":"3f79a3b5_7e6ba586","updated":"2018-11-19 09:15:18.000000000","message":"It is a Cyborg property, not a trait and not something that Nova/Placement cares about. It is included as an example. I will remove this, as other comments also consider this to be extraneous.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"8c8de486e92a3e6b8795936ef8418da8a7334b35","unresolved":false,"context_lines":[{"line_number":195,"context_line":""},{"line_number":196,"context_line":"  { resources:CUSTOM_ACCELERATOR_FOO\u003d2,"},{"line_number":197,"context_line":"    trait:CUSTOM_TRAIT_BAR\u003drequired,"},{"line_number":198,"context_line":"    accel:bitstream_id\u003d3AFB"},{"line_number":199,"context_line":"  }"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"Also, the operator may associate accelerator-related properties with the"}],"source_content_type":"text/x-rst","patch_set":10,"id":"5fc1f717_5fa76d51","line":198,"range":{"start_line":198,"start_character":4,"end_line":198,"end_character":27},"in_reply_to":"3f79a3b5_f442460e","updated":"2019-04-08 04:16:23.000000000","message":"Dropped this section.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"008306342bfba08a10e7d313f4e52b219b04f686","unresolved":false,"context_lines":[{"line_number":196,"context_line":"  { resources:CUSTOM_ACCELERATOR_FOO\u003d2,"},{"line_number":197,"context_line":"    trait:CUSTOM_TRAIT_BAR\u003drequired,"},{"line_number":198,"context_line":"    accel:bitstream_id\u003d3AFB"},{"line_number":199,"context_line":"  }"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"Also, the operator may associate accelerator-related properties with the"},{"line_number":202,"context_line":"instance image (such as which bitstreams are required for that workload)."}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_dec8b9a8","line":199,"updated":"2018-11-14 22:16:49.000000000","message":"Big -1 on this approach (of tightly coupling the set of request groups into this Device Profile object).\n\nYou will note that for Neutron ports, it is *nova* that constructs the request groups that it sends to the placement service for scheduling:\n\nhttps://review.openstack.org/#/c/567268/\n\nNova asks Neutron for information about each individual port involved in the nova boot request (identified by the --net port_id\u003d\u003cUUID\u003e CLI args). Neutron sends the resource request for that *particular port* back to nova (e.g. some amount of ingress bandwidth for a provider that is associated with some physical network).\n\nIt is then *nova* that constructs the resource groups that are passed to the request spec.\n\nWhat you are proposing here is that *Cyborg* constructs the set of resource groups for one or more devices in the Device Profile and just sends those resource request groups as-is to nova. That isn\u0027t appropriate, IMHO. It\u0027s too tight coupling. Nova is the thing that needs to do scheduling/placement and therefore should be the thing that constructs the resource request groups that it sends to the GET /allocation_candidates placement REST API endpoint.\n\nFurthermore, keeping a DeviceProfile object specific to a single device is a good thing. We can always pass multiple --device-profile arguments to the nova boot command in the future if the user wants to associate multiple accelerators with a VM.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"a74eca14b8f5b8f0075f08a944623e169e1fc3e6","unresolved":false,"context_lines":[{"line_number":196,"context_line":"  { resources:CUSTOM_ACCELERATOR_FOO\u003d2,"},{"line_number":197,"context_line":"    trait:CUSTOM_TRAIT_BAR\u003drequired,"},{"line_number":198,"context_line":"    accel:bitstream_id\u003d3AFB"},{"line_number":199,"context_line":"  }"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"Also, the operator may associate accelerator-related properties with the"},{"line_number":202,"context_line":"instance image (such as which bitstreams are required for that workload)."}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_14eca203","line":199,"in_reply_to":"3f79a3b5_dec8b9a8","updated":"2018-11-19 09:15:18.000000000","message":"Jay, agreed and that\u0027s what I am proposing! Nova queries Cyborg for the set of request groups (without the Cyborg properties) and then folds them into the request spec however it wants to. Please see the os-acc create call (Line 452) and its usage (Line 547).","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"008306342bfba08a10e7d313f4e52b219b04f686","unresolved":false,"context_lines":[{"line_number":198,"context_line":"    accel:bitstream_id\u003d3AFB"},{"line_number":199,"context_line":"  }"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"Also, the operator may associate accelerator-related properties with the"},{"line_number":202,"context_line":"instance image (such as which bitstreams are required for that workload)."},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"Cyborg shall provide an API that takes a device profile and returns a JSON"},{"line_number":205,"context_line":"with resources and traits and listed for each group, but without the ``accel``"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_5ef7c9d2","line":202,"range":{"start_line":201,"start_character":0,"end_line":202,"end_character":73},"updated":"2018-11-14 22:16:49.000000000","message":"what does this have to do with Nova, though? this should just be image properties associated with the image in Glance, right?","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"a74eca14b8f5b8f0075f08a944623e169e1fc3e6","unresolved":false,"context_lines":[{"line_number":198,"context_line":"    accel:bitstream_id\u003d3AFB"},{"line_number":199,"context_line":"  }"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"Also, the operator may associate accelerator-related properties with the"},{"line_number":202,"context_line":"instance image (such as which bitstreams are required for that workload)."},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"Cyborg shall provide an API that takes a device profile and returns a JSON"},{"line_number":205,"context_line":"with resources and traits and listed for each group, but without the ``accel``"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_34ae7ea1","line":202,"range":{"start_line":201,"start_character":0,"end_line":202,"end_character":73},"in_reply_to":"3f79a3b5_5ef7c9d2","updated":"2018-11-19 09:15:18.000000000","message":"Nova needs to pass the instance image UUID to os-acc, so that Glance can be queried. There is no other implication.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2e3e6dda8bc8723b90faef30c4705cc553d53413","unresolved":false,"context_lines":[{"line_number":201,"context_line":"Also, the operator may associate accelerator-related properties with the"},{"line_number":202,"context_line":"instance image (such as which bitstreams are required for that workload)."},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"Cyborg shall provide an API that takes a device profile and returns a JSON"},{"line_number":205,"context_line":"with resources and traits and listed for each group, but without the ``accel``"},{"line_number":206,"context_line":"properties. (The ``accel`` properties from the device profiles or from the"},{"line_number":207,"context_line":"instance image are tracked by Cyborg; see `Accelerator"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_d7fbc111","line":204,"range":{"start_line":204,"start_character":68,"end_line":204,"end_character":74},"updated":"2018-11-14 15:45:12.000000000","message":"a JSON blob or a JSON object\n\na JSON is not a thing","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"a74eca14b8f5b8f0075f08a944623e169e1fc3e6","unresolved":false,"context_lines":[{"line_number":201,"context_line":"Also, the operator may associate accelerator-related properties with the"},{"line_number":202,"context_line":"instance image (such as which bitstreams are required for that workload)."},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"Cyborg shall provide an API that takes a device profile and returns a JSON"},{"line_number":205,"context_line":"with resources and traits and listed for each group, but without the ``accel``"},{"line_number":206,"context_line":"properties. (The ``accel`` properties from the device profiles or from the"},{"line_number":207,"context_line":"instance image are tracked by Cyborg; see `Accelerator"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_9415124e","line":204,"range":{"start_line":204,"start_character":68,"end_line":204,"end_character":74},"in_reply_to":"3f79a3b5_d7fbc111","updated":"2018-11-19 09:15:18.000000000","message":"Will rephrase.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"008306342bfba08a10e7d313f4e52b219b04f686","unresolved":false,"context_lines":[{"line_number":210,"context_line":"To enable Cyborg to be used in standalone scenarios, the return value of the"},{"line_number":211,"context_line":"Cyborg API is in a neutral format (JSON). However, Nova may represent the"},{"line_number":212,"context_line":"request group using some Nova-specific data structure, such as [#req-group]_."},{"line_number":213,"context_line":"So, we need a shim layer between Nova and Cyborg that does the data structure"},{"line_number":214,"context_line":"conversion. That shim layer is the os-acc library, which offers one"},{"line_number":215,"context_line":"set of APIs to Nova in the controller and another set in the compute node."},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"The os-acc API that Nova calls to get device profile groups is documented in"},{"line_number":218,"context_line":"os-acc-create_. Note that this API takes the image UUID as an optional"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_4114cc42","line":215,"range":{"start_line":213,"start_character":0,"end_line":215,"end_character":74},"updated":"2018-11-14 22:16:49.000000000","message":"os-acc doesn\u0027t really do anything at all at the moment. And it\u0027s not clear whether it should be anything other than an os-vif-like library which is purely focused on the plug/unplug interfaces (for network devices).\n\nMy advice is to keep os-acc focused on the actual device initialization/attachment/bringup activities and not on REST API stuff...","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2e3e6dda8bc8723b90faef30c4705cc553d53413","unresolved":false,"context_lines":[{"line_number":207,"context_line":"instance image are tracked by Cyborg; see `Accelerator"},{"line_number":208,"context_line":"Requests`_ below). See `cyborg-create`_ for the signature of this Cyborg API."},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"To enable Cyborg to be used in standalone scenarios, the return value of the"},{"line_number":211,"context_line":"Cyborg API is in a neutral format (JSON). However, Nova may represent the"},{"line_number":212,"context_line":"request group using some Nova-specific data structure, such as [#req-group]_."},{"line_number":213,"context_line":"So, we need a shim layer between Nova and Cyborg that does the data structure"},{"line_number":214,"context_line":"conversion. That shim layer is the os-acc library, which offers one"},{"line_number":215,"context_line":"set of APIs to Nova in the controller and another set in the compute node."},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"The os-acc API that Nova calls to get device profile groups is documented in"},{"line_number":218,"context_line":"os-acc-create_. Note that this API takes the image UUID as an optional"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_57ba510c","line":215,"range":{"start_line":210,"start_character":0,"end_line":215,"end_character":74},"updated":"2018-11-14 15:45:12.000000000","message":"this paragraph seems to be trying to carve out an escape route to allow cyborg to change its api as it sees fit without thinking about its consumers or backwards compatibility.\n\nos-acc can provide a layer of indirection but we will still need to be careful to ensure that any backwards incompatibly api chages are accompinated by os-acc chagne so that we dont get into a case where cyborg diverges form what os-acc supports and nova requires.\n\n\nalso on the compute vs controler api. the api endpoints that get called may be different form each but if a function\nis invoked on the controler node and the compute it should have the same behavior. The phraseing that \"That shim layer is the os-acc library, which offers one\nset of APIs to Nova in the controller and another set in the compute node.\" is kind of clunk and missleading.\n\nos-acc will privovide a single api to nova but different parts of that api will be invoke by different part or nova and perhaps other services like ironic.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"a74eca14b8f5b8f0075f08a944623e169e1fc3e6","unresolved":false,"context_lines":[{"line_number":210,"context_line":"To enable Cyborg to be used in standalone scenarios, the return value of the"},{"line_number":211,"context_line":"Cyborg API is in a neutral format (JSON). However, Nova may represent the"},{"line_number":212,"context_line":"request group using some Nova-specific data structure, such as [#req-group]_."},{"line_number":213,"context_line":"So, we need a shim layer between Nova and Cyborg that does the data structure"},{"line_number":214,"context_line":"conversion. That shim layer is the os-acc library, which offers one"},{"line_number":215,"context_line":"set of APIs to Nova in the controller and another set in the compute node."},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"The os-acc API that Nova calls to get device profile groups is documented in"},{"line_number":218,"context_line":"os-acc-create_. Note that this API takes the image UUID as an optional"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_9485120c","line":215,"range":{"start_line":213,"start_character":0,"end_line":215,"end_character":74},"in_reply_to":"3f79a3b5_4114cc42","updated":"2018-11-19 09:15:18.000000000","message":"Jay, Cyborg handles the devices per se, via its drivers. Device init/attach etc. require db query/update, and os-acc doesn\u0027t have a db, so it is better to leave them to Cyborg. \n\nAlso, at the Stein PTG, it was explicitly said that Nova will not call Cyborg directly, but only through os-acc.\n\nThe main use of os-acc is to do things that don\u0027t fit in Nova or Cyborg, e.g. figure out the device RP for each request group (Line 495).","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"a74eca14b8f5b8f0075f08a944623e169e1fc3e6","unresolved":false,"context_lines":[{"line_number":207,"context_line":"instance image are tracked by Cyborg; see `Accelerator"},{"line_number":208,"context_line":"Requests`_ below). See `cyborg-create`_ for the signature of this Cyborg API."},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"To enable Cyborg to be used in standalone scenarios, the return value of the"},{"line_number":211,"context_line":"Cyborg API is in a neutral format (JSON). However, Nova may represent the"},{"line_number":212,"context_line":"request group using some Nova-specific data structure, such as [#req-group]_."},{"line_number":213,"context_line":"So, we need a shim layer between Nova and Cyborg that does the data structure"},{"line_number":214,"context_line":"conversion. That shim layer is the os-acc library, which offers one"},{"line_number":215,"context_line":"set of APIs to Nova in the controller and another set in the compute node."},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"The os-acc API that Nova calls to get device profile groups is documented in"},{"line_number":218,"context_line":"os-acc-create_. Note that this API takes the image UUID as an optional"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_172fc48a","line":215,"range":{"start_line":210,"start_character":0,"end_line":215,"end_character":74},"in_reply_to":"3f79a3b5_57ba510c","updated":"2018-11-19 09:15:18.000000000","message":"Sean: You may have noticed the versioning in the API URLs. Not clear where these suspicions about backwards compatibility come from.\n\nRe. os-acc, would we not have 2 separate packages, one to be installed in the controller and one in the compute node? They would be providing different entry points.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"008306342bfba08a10e7d313f4e52b219b04f686","unresolved":false,"context_lines":[{"line_number":215,"context_line":"set of APIs to Nova in the controller and another set in the compute node."},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"The os-acc API that Nova calls to get device profile groups is documented in"},{"line_number":218,"context_line":"os-acc-create_. Note that this API takes the image UUID as an optional"},{"line_number":219,"context_line":"parameter and passes it to Cyborg API, to handle accelerator properties"},{"line_number":220,"context_line":"associated with the instance image."},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"The groups in the device profile are numbered by Cyborg. The request groups"},{"line_number":223,"context_line":"that are merged into the request spec are numbered by Nova. These numberings"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_c119bc76","line":220,"range":{"start_line":218,"start_character":16,"end_line":220,"end_character":35},"updated":"2018-11-14 22:16:49.000000000","message":"so you\u0027re going to include the glance client in os-acc? Since glance is the thing storing image properties, right?\n\nyou could simplify things a lot by having the os-acc interfaces accept a dict of image properties and having the caller pass that information... in the case of nova, we already have the glance client code in nova and if nova-compute or the virt driver is the thing that is going to be calling os-acc, we can ask glance to get us image properties for the accelerator image and pass that to os-acc.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"a74eca14b8f5b8f0075f08a944623e169e1fc3e6","unresolved":false,"context_lines":[{"line_number":215,"context_line":"set of APIs to Nova in the controller and another set in the compute node."},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"The os-acc API that Nova calls to get device profile groups is documented in"},{"line_number":218,"context_line":"os-acc-create_. Note that this API takes the image UUID as an optional"},{"line_number":219,"context_line":"parameter and passes it to Cyborg API, to handle accelerator properties"},{"line_number":220,"context_line":"associated with the instance image."},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"The groups in the device profile are numbered by Cyborg. The request groups"},{"line_number":223,"context_line":"that are merged into the request spec are numbered by Nova. These numberings"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_74b076e0","line":220,"range":{"start_line":218,"start_character":16,"end_line":220,"end_character":35},"in_reply_to":"3f79a3b5_c119bc76","updated":"2018-11-19 09:15:18.000000000","message":"The current plan is to have Cyborg query Glance, so the glance client will be in the Cyborg conductor. IIUC, Nova deals with image traits but not all image properties. Thus, if the image has properties like \u0027accel:key\u003dvalue\u0027, that is not of interest to Nova. Would it not be an imposition to ask Nova to fetch them and pass them to Cyborg?","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"008306342bfba08a10e7d313f4e52b219b04f686","unresolved":false,"context_lines":[{"line_number":219,"context_line":"parameter and passes it to Cyborg API, to handle accelerator properties"},{"line_number":220,"context_line":"associated with the instance image."},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"The groups in the device profile are numbered by Cyborg. The request groups"},{"line_number":223,"context_line":"that are merged into the request spec are numbered by Nova. These numberings"},{"line_number":224,"context_line":"would not be the same in general, i.e., the N-th device profile group may not"},{"line_number":225,"context_line":"correspond to the N-th request group in the request spec."},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"Mapping request groups to resource providers"},{"line_number":228,"context_line":"--------------------------------------------"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_e1539814","line":225,"range":{"start_line":222,"start_character":0,"end_line":225,"end_character":57},"updated":"2018-11-14 22:16:49.000000000","message":"this specifically is why I think it\u0027s a bad idea to have Cyborg return a list of resource request groups for a device profile, instead of having a device profile simply return a single resource request group.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"a74eca14b8f5b8f0075f08a944623e169e1fc3e6","unresolved":false,"context_lines":[{"line_number":219,"context_line":"parameter and passes it to Cyborg API, to handle accelerator properties"},{"line_number":220,"context_line":"associated with the instance image."},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"The groups in the device profile are numbered by Cyborg. The request groups"},{"line_number":223,"context_line":"that are merged into the request spec are numbered by Nova. These numberings"},{"line_number":224,"context_line":"would not be the same in general, i.e., the N-th device profile group may not"},{"line_number":225,"context_line":"correspond to the N-th request group in the request spec."},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"Mapping request groups to resource providers"},{"line_number":228,"context_line":"--------------------------------------------"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_b447eea4","line":225,"range":{"start_line":222,"start_character":0,"end_line":225,"end_character":57},"in_reply_to":"3f79a3b5_e1539814","updated":"2018-11-19 09:15:18.000000000","message":"IIUC, you are saying that each device profile should correspond to a single request group, and an instance request may contain multiple device profiles ( to allow for multiple accelerators). If so, it is not clear how I can express co-location. E.g.\n  resources1:CUSTOM_ACCELERATOR_A\u003d1\n  traits1:CUSTOM_TRAIT_A\u003drequired\n  resources1:CUSTOM_ACCELERATOR_B\u003d1\n  traits1:CUSTOM_TRAIT_B\u003drequired\nbut the RPs that provide both must come from the same device.\n\nI understand that Placement does not have guarantee this today. If two resources are in the same request group, they come from the same RP. If they are in different request groups (as in this example), the group policy of \u0027None\u0027 only says they may or may not come from same RP (while \u0027\u0027isolate\u0027 ensures they come from different RPs).\n\nBy having a grouping within a device profile, I could potentially write a Cyborg filter and/or weigher (out of Nova tree) that select among the RP trees that Placement returns.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2e3e6dda8bc8723b90faef30c4705cc553d53413","unresolved":false,"context_lines":[{"line_number":238,"context_line":"It is proposed that the request group semantics for device profile be aligned"},{"line_number":239,"context_line":"with the corresponding semantics for the flavor as below:"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"1. The device profile will have its own ``group_policy``, with the same"},{"line_number":242,"context_line":"   definition as the one in the flavor."},{"line_number":243,"context_line":"2. The request groups in the device profile will have the same semantics as"},{"line_number":244,"context_line":"   those in the flavor, including the ``group_policy`` setting."},{"line_number":245,"context_line":"3. The flavor\u0027s ``group_policy`` will override the device profile\u0027s"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_97b22905","line":242,"range":{"start_line":241,"start_character":1,"end_line":242,"end_character":39},"updated":"2018-11-14 15:45:12.000000000","message":"not to reviewers\n\nsince cyborg can not create inventories in RPs owned by nova and nova similarly cant modify inventories in cyborg\u0027s rps,\nallocation for cyborg resouces will always come form a resouce provider that is different form the compute resouces.\n\nso regardless of if this is set to isolate or none the cyborge devices will never share a RP with the compute resouces.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2e3e6dda8bc8723b90faef30c4705cc553d53413","unresolved":false,"context_lines":[{"line_number":242,"context_line":"   definition as the one in the flavor."},{"line_number":243,"context_line":"2. The request groups in the device profile will have the same semantics as"},{"line_number":244,"context_line":"   those in the flavor, including the ``group_policy`` setting."},{"line_number":245,"context_line":"3. The flavor\u0027s ``group_policy`` will override the device profile\u0027s"},{"line_number":246,"context_line":"   ``group_policy`` if both are present (which is the case in Phases 1 and 2);"},{"line_number":247,"context_line":"   otherwise, the device profile\u0027s ``group_policy`` takes effect (Phase 3)."},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"Accelerator Requests"},{"line_number":250,"context_line":"--------------------"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_379a3561","line":247,"range":{"start_line":245,"start_character":0,"end_line":247,"end_character":75},"updated":"2018-11-14 15:45:12.000000000","message":"this breaks the behavior we have for when a image metadata\nvalue conflicts with a flavor extra spec.\n\ni think we would be better off raising and exception and failing to boot in this case.\n\nfor the cyborg resoure requests to be able to have a different policy then the compute resouces we will need to\nenhance the placement api to allow groups of resource groups. \ne.g. we need to be able to say isolate 3 and 4 and none policy for 1 and 2\n\nthis is unrelated to the phases described before as the timeline for the placement feature will likely be separate from its use in nova and its extension to the cyborg integration.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"008306342bfba08a10e7d313f4e52b219b04f686","unresolved":false,"context_lines":[{"line_number":235,"context_line":"the same or different RPs, but if it is ``isolate``, they will come from"},{"line_number":236,"context_line":"different RPs."},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"It is proposed that the request group semantics for device profile be aligned"},{"line_number":239,"context_line":"with the corresponding semantics for the flavor as below:"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"1. The device profile will have its own ``group_policy``, with the same"},{"line_number":242,"context_line":"   definition as the one in the flavor."},{"line_number":243,"context_line":"2. The request groups in the device profile will have the same semantics as"},{"line_number":244,"context_line":"   those in the flavor, including the ``group_policy`` setting."},{"line_number":245,"context_line":"3. The flavor\u0027s ``group_policy`` will override the device profile\u0027s"},{"line_number":246,"context_line":"   ``group_policy`` if both are present (which is the case in Phases 1 and 2);"},{"line_number":247,"context_line":"   otherwise, the device profile\u0027s ``group_policy`` takes effect (Phase 3)."},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"Accelerator Requests"},{"line_number":250,"context_line":"--------------------"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_2d3421ab","line":247,"range":{"start_line":238,"start_character":0,"end_line":247,"end_character":75},"updated":"2018-11-14 22:16:49.000000000","message":"yet another reason I don\u0027t believe device profile should represent \u003e1 request group.\n\nJust making the device profile request a single group of related resources. Handle more complex requests only in nova.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"a74eca14b8f5b8f0075f08a944623e169e1fc3e6","unresolved":false,"context_lines":[{"line_number":235,"context_line":"the same or different RPs, but if it is ``isolate``, they will come from"},{"line_number":236,"context_line":"different RPs."},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"It is proposed that the request group semantics for device profile be aligned"},{"line_number":239,"context_line":"with the corresponding semantics for the flavor as below:"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"1. The device profile will have its own ``group_policy``, with the same"},{"line_number":242,"context_line":"   definition as the one in the flavor."},{"line_number":243,"context_line":"2. The request groups in the device profile will have the same semantics as"},{"line_number":244,"context_line":"   those in the flavor, including the ``group_policy`` setting."},{"line_number":245,"context_line":"3. The flavor\u0027s ``group_policy`` will override the device profile\u0027s"},{"line_number":246,"context_line":"   ``group_policy`` if both are present (which is the case in Phases 1 and 2);"},{"line_number":247,"context_line":"   otherwise, the device profile\u0027s ``group_policy`` takes effect (Phase 3)."},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"Accelerator Requests"},{"line_number":250,"context_line":"--------------------"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_b75b7021","line":247,"range":{"start_line":238,"start_character":0,"end_line":247,"end_character":75},"in_reply_to":"3f79a3b5_2d3421ab","updated":"2018-11-19 09:15:18.000000000","message":"Jay, please see my response to your comment on Line 225.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"a74eca14b8f5b8f0075f08a944623e169e1fc3e6","unresolved":false,"context_lines":[{"line_number":242,"context_line":"   definition as the one in the flavor."},{"line_number":243,"context_line":"2. The request groups in the device profile will have the same semantics as"},{"line_number":244,"context_line":"   those in the flavor, including the ``group_policy`` setting."},{"line_number":245,"context_line":"3. The flavor\u0027s ``group_policy`` will override the device profile\u0027s"},{"line_number":246,"context_line":"   ``group_policy`` if both are present (which is the case in Phases 1 and 2);"},{"line_number":247,"context_line":"   otherwise, the device profile\u0027s ``group_policy`` takes effect (Phase 3)."},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"Accelerator Requests"},{"line_number":250,"context_line":"--------------------"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_977194ad","line":247,"range":{"start_line":245,"start_character":0,"end_line":247,"end_character":75},"in_reply_to":"3f79a3b5_379a3561","updated":"2018-11-19 09:15:18.000000000","message":"Sean: I am not thinking of asking further enhancements of Placement. Rather, there could be Cyborg filters and/or weighers that can select from the RP trees returned by placement based on what the device profile says.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2e3e6dda8bc8723b90faef30c4705cc553d53413","unresolved":false,"context_lines":[{"line_number":248,"context_line":""},{"line_number":249,"context_line":"Accelerator Requests"},{"line_number":250,"context_line":"--------------------"},{"line_number":251,"context_line":"The state of assignment of an accelerator to an instance is encapsulated in an"},{"line_number":252,"context_line":"Oslo version object, named the Accelerator Request (ARQ). The creation"},{"line_number":253,"context_line":"and management of ARQs are handled by Cyborg, and ARQs are persisted in Cyborg"},{"line_number":254,"context_line":"database. However, since ARQs are passed back and forth between Cyborg and"},{"line_number":255,"context_line":"Nova, the os-acc defines the ARQ."},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"A ARQ, by definition, represents a request for a single accelerator. The"},{"line_number":258,"context_line":"device profile in the user request may ask for more than one accelerator; the"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_772c2d00","line":255,"range":{"start_line":251,"start_character":1,"end_line":255,"end_character":33},"updated":"2018-11-14 15:45:12.000000000","message":"this is not strictly correct. the creation of the ARQ would be done by nova invoking the cyborg api via os-acc.\n\nso cyborg is not the entity creating the ARQ even if it is the entity storing it to the db the client is in this case nova via os-acc.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"a74eca14b8f5b8f0075f08a944623e169e1fc3e6","unresolved":false,"context_lines":[{"line_number":248,"context_line":""},{"line_number":249,"context_line":"Accelerator Requests"},{"line_number":250,"context_line":"--------------------"},{"line_number":251,"context_line":"The state of assignment of an accelerator to an instance is encapsulated in an"},{"line_number":252,"context_line":"Oslo version object, named the Accelerator Request (ARQ). The creation"},{"line_number":253,"context_line":"and management of ARQs are handled by Cyborg, and ARQs are persisted in Cyborg"},{"line_number":254,"context_line":"database. However, since ARQs are passed back and forth between Cyborg and"},{"line_number":255,"context_line":"Nova, the os-acc defines the ARQ."},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"A ARQ, by definition, represents a request for a single accelerator. The"},{"line_number":258,"context_line":"device profile in the user request may ask for more than one accelerator; the"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_57a0dcf2","line":255,"range":{"start_line":251,"start_character":1,"end_line":255,"end_character":33},"in_reply_to":"3f79a3b5_772c2d00","updated":"2018-11-19 09:15:18.000000000","message":"Responded to your next comment.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"008306342bfba08a10e7d313f4e52b219b04f686","unresolved":false,"context_lines":[{"line_number":254,"context_line":"database. However, since ARQs are passed back and forth between Cyborg and"},{"line_number":255,"context_line":"Nova, the os-acc defines the ARQ."},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"A ARQ, by definition, represents a request for a single accelerator. The"},{"line_number":258,"context_line":"device profile in the user request may ask for more than one accelerator; the"},{"line_number":259,"context_line":"number of ARQs created from one device profile will equal the number of"},{"line_number":260,"context_line":"accelerators requested in the device profile."}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_ad3fd182","line":257,"range":{"start_line":257,"start_character":0,"end_line":257,"end_character":5},"updated":"2018-11-14 22:16:49.000000000","message":"An ARQ","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"a74eca14b8f5b8f0075f08a944623e169e1fc3e6","unresolved":false,"context_lines":[{"line_number":254,"context_line":"database. However, since ARQs are passed back and forth between Cyborg and"},{"line_number":255,"context_line":"Nova, the os-acc defines the ARQ."},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"A ARQ, by definition, represents a request for a single accelerator. The"},{"line_number":258,"context_line":"device profile in the user request may ask for more than one accelerator; the"},{"line_number":259,"context_line":"number of ARQs created from one device profile will equal the number of"},{"line_number":260,"context_line":"accelerators requested in the device profile."}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_d7562cfa","line":257,"range":{"start_line":257,"start_character":0,"end_line":257,"end_character":5},"in_reply_to":"3f79a3b5_ad3fd182","updated":"2018-11-19 09:15:18.000000000","message":"Done","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"008306342bfba08a10e7d313f4e52b219b04f686","unresolved":false,"context_lines":[{"line_number":255,"context_line":"Nova, the os-acc defines the ARQ."},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"A ARQ, by definition, represents a request for a single accelerator. The"},{"line_number":258,"context_line":"device profile in the user request may ask for more than one accelerator; the"},{"line_number":259,"context_line":"number of ARQs created from one device profile will equal the number of"},{"line_number":260,"context_line":"accelerators requested in the device profile."},{"line_number":261,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_cd06cdcd","line":258,"range":{"start_line":258,"start_character":34,"end_line":258,"end_character":72},"updated":"2018-11-14 22:16:49.000000000","message":"see above... I would recommend *not* doing that.\n\nAlso, if a device profile has a *request* for resources in it, why is it not called an ARQ? The ARQ isn\u0027t actually a request for resources, but rather, it\u0027s an attachment/connection information context (which is what I said on the Google docs spreadsheet poll about the naming of ARQ...)","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2e3e6dda8bc8723b90faef30c4705cc553d53413","unresolved":false,"context_lines":[{"line_number":254,"context_line":"database. However, since ARQs are passed back and forth between Cyborg and"},{"line_number":255,"context_line":"Nova, the os-acc defines the ARQ."},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"A ARQ, by definition, represents a request for a single accelerator. The"},{"line_number":258,"context_line":"device profile in the user request may ask for more than one accelerator; the"},{"line_number":259,"context_line":"number of ARQs created from one device profile will equal the number of"},{"line_number":260,"context_line":"accelerators requested in the device profile."},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"Upon creation, the ARQ contains only the reference to the request group within"},{"line_number":263,"context_line":"the device profile which specifies the accelerator resource class (as"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_97b46983","line":260,"range":{"start_line":257,"start_character":0,"end_line":260,"end_character":45},"updated":"2018-11-14 15:45:12.000000000","message":"i may have to rephrase the comment i left on 251 however this should be the first paragrpah in this section.\ne.g. we should define what an accelerator request is before we say how it can be used.\n\nthe multiplexing of accelerator to device profiles also makes me somewhat uncomfortable. I am ok with multiple accelerators in a device profile if all the accelerator are allocated from a single physical device and the set of attachments.\n\ne.g. a device profile that requests one compression engine and one symmetric crypto engine from a single QAT device that is exposed as a single virtual function I think is  fine \n\nbut if the two engines were exposed as two different VFs\nthen i would prefer to see that expressed as two different device_profiles in the flavor instead of one.\n\ni think if we get into things like numa affinity in the future allowing accelerators in one device profile to come from multiple physical devices would make that very difficult to support so i don\u0027t want us to paint ourselves into a corner by allowing any combination of accelerators to be requested in a device_profile.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"a74eca14b8f5b8f0075f08a944623e169e1fc3e6","unresolved":false,"context_lines":[{"line_number":254,"context_line":"database. However, since ARQs are passed back and forth between Cyborg and"},{"line_number":255,"context_line":"Nova, the os-acc defines the ARQ."},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"A ARQ, by definition, represents a request for a single accelerator. The"},{"line_number":258,"context_line":"device profile in the user request may ask for more than one accelerator; the"},{"line_number":259,"context_line":"number of ARQs created from one device profile will equal the number of"},{"line_number":260,"context_line":"accelerators requested in the device profile."},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"Upon creation, the ARQ contains only the reference to the request group within"},{"line_number":263,"context_line":"the device profile which specifies the accelerator resource class (as"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_b7de1069","line":260,"range":{"start_line":257,"start_character":0,"end_line":260,"end_character":45},"in_reply_to":"3f79a3b5_97b46983","updated":"2018-11-19 09:15:18.000000000","message":"Consider a QAT-like device where each function (compression, crypto) is associated with separate VFs. The user wants both functions from the same device, so she can chain them together. If the device profile asks for both together, a Cyborg filter and/or weigher (out of Nova tree) can select among the allocation candidates returned by Placement. Otherwise, it is unclear how we will get colocation.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"ff649544558254a6b8210eaafed45724d2ce35da","unresolved":false,"context_lines":[{"line_number":254,"context_line":"database. However, since ARQs are passed back and forth between Cyborg and"},{"line_number":255,"context_line":"Nova, the os-acc defines the ARQ."},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"A ARQ, by definition, represents a request for a single accelerator. The"},{"line_number":258,"context_line":"device profile in the user request may ask for more than one accelerator; the"},{"line_number":259,"context_line":"number of ARQs created from one device profile will equal the number of"},{"line_number":260,"context_line":"accelerators requested in the device profile."},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"Upon creation, the ARQ contains only the reference to the request group within"},{"line_number":263,"context_line":"the device profile which specifies the accelerator resource class (as"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_2934e0d6","line":260,"range":{"start_line":257,"start_character":0,"end_line":260,"end_character":45},"in_reply_to":"3f79a3b5_b7de1069","updated":"2018-11-19 17:24:34.000000000","message":"the filters today do not have acess to the allocation candidates. they operate over host_state objects and the the instance request spec.\n\nit is possibel that the instance request spec may have the potinal allcoation candiates embeded but currently none of the exsiting filter use the allocation candiates as far as i am aware.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"48f8cde9f7e30141d7420a32ad64bbef038ea7a6","unresolved":false,"context_lines":[{"line_number":259,"context_line":"number of ARQs created from one device profile will equal the number of"},{"line_number":260,"context_line":"accelerators requested in the device profile."},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"Upon creation, the ARQ contains only the reference to the request group within"},{"line_number":263,"context_line":"the device profile which specifies the accelerator resource class (as"},{"line_number":264,"context_line":"``device_profile_group_index`` field; see below). Since it is"},{"line_number":265,"context_line":"not yet associated with any specific accelerator or device, it is said to be"},{"line_number":266,"context_line":"in an ``unbound`` state. After the Nova scheduler has picked a specific device"},{"line_number":267,"context_line":"RP, Cyborg is called to bind that ARQ to a specific accelerator in that device"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_528c9f80","line":264,"range":{"start_line":262,"start_character":23,"end_line":264,"end_character":36},"updated":"2018-11-14 14:21:29.000000000","message":"I really don\u0027t understand why we need to know a group index...","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2e3e6dda8bc8723b90faef30c4705cc553d53413","unresolved":false,"context_lines":[{"line_number":263,"context_line":"the device profile which specifies the accelerator resource class (as"},{"line_number":264,"context_line":"``device_profile_group_index`` field; see below). Since it is"},{"line_number":265,"context_line":"not yet associated with any specific accelerator or device, it is said to be"},{"line_number":266,"context_line":"in an ``unbound`` state. After the Nova scheduler has picked a specific device"},{"line_number":267,"context_line":"RP, Cyborg is called to bind that ARQ to a specific accelerator in that device"},{"line_number":268,"context_line":"RP, which may involve device configuration. The result is a ``bound`` ARQ,"},{"line_number":269,"context_line":"which is associated with an attach handle (such as a PCI function or mediated"},{"line_number":270,"context_line":"device UUID). Subsequently, the Nova virt driver can attach the accelerator to"},{"line_number":271,"context_line":"the instance. The workflow is presented in more detail in Section `Assignment"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_376eb5ff","line":268,"range":{"start_line":266,"start_character":25,"end_line":268,"end_character":42},"updated":"2018-11-14 15:45:12.000000000","message":"the RP is selected by placement\nnova selects an allocation candidate for the entire instance from the set of allocation candidates returned by placement.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"a74eca14b8f5b8f0075f08a944623e169e1fc3e6","unresolved":false,"context_lines":[{"line_number":263,"context_line":"the device profile which specifies the accelerator resource class (as"},{"line_number":264,"context_line":"``device_profile_group_index`` field; see below). Since it is"},{"line_number":265,"context_line":"not yet associated with any specific accelerator or device, it is said to be"},{"line_number":266,"context_line":"in an ``unbound`` state. After the Nova scheduler has picked a specific device"},{"line_number":267,"context_line":"RP, Cyborg is called to bind that ARQ to a specific accelerator in that device"},{"line_number":268,"context_line":"RP, which may involve device configuration. The result is a ``bound`` ARQ,"},{"line_number":269,"context_line":"which is associated with an attach handle (such as a PCI function or mediated"},{"line_number":270,"context_line":"device UUID). Subsequently, the Nova virt driver can attach the accelerator to"},{"line_number":271,"context_line":"the instance. The workflow is presented in more detail in Section `Assignment"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_17b90416","line":268,"range":{"start_line":266,"start_character":25,"end_line":268,"end_character":42},"in_reply_to":"3f79a3b5_376eb5ff","updated":"2018-11-19 09:15:18.000000000","message":"May be word slicing but ... Placement returns a list of RP trees (allocation candidates), and Nova scheduler selects one. Yes, n-sch selects an entire alloc cand and therefore implicitly selects the specific device RP within that tree.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2e3e6dda8bc8723b90faef30c4705cc553d53413","unresolved":false,"context_lines":[{"line_number":277,"context_line":"     OBJ_PROJECT_NAMESPACE \u003d \"os-acc\""},{"line_number":278,"context_line":"     VERSION \u003d \"1.0\""},{"line_number":279,"context_line":"     fields \u003d {"},{"line_number":280,"context_line":"        \u0027id\u0027: UUIDField(), # VAN ID"},{"line_number":281,"context_line":"        \u0027state\u0027: EnumField(), # see below"},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"        ### Fields set by Cyborg on creation: accelerator requirements"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_973789fe","line":280,"range":{"start_line":280,"start_character":29,"end_line":280,"end_character":32},"updated":"2018-11-14 15:45:12.000000000","message":"ARQ","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"008306342bfba08a10e7d313f4e52b219b04f686","unresolved":false,"context_lines":[{"line_number":277,"context_line":"     OBJ_PROJECT_NAMESPACE \u003d \"os-acc\""},{"line_number":278,"context_line":"     VERSION \u003d \"1.0\""},{"line_number":279,"context_line":"     fields \u003d {"},{"line_number":280,"context_line":"        \u0027id\u0027: UUIDField(), # VAN ID"},{"line_number":281,"context_line":"        \u0027state\u0027: EnumField(), # see below"},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"        ### Fields set by Cyborg on creation: accelerator requirements"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_4dfabdbb","line":280,"range":{"start_line":280,"start_character":29,"end_line":280,"end_character":32},"updated":"2018-11-14 22:16:49.000000000","message":"VAN?","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"ff649544558254a6b8210eaafed45724d2ce35da","unresolved":false,"context_lines":[{"line_number":277,"context_line":"     OBJ_PROJECT_NAMESPACE \u003d \"os-acc\""},{"line_number":278,"context_line":"     VERSION \u003d \"1.0\""},{"line_number":279,"context_line":"     fields \u003d {"},{"line_number":280,"context_line":"        \u0027id\u0027: UUIDField(), # VAN ID"},{"line_number":281,"context_line":"        \u0027state\u0027: EnumField(), # see below"},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"        ### Fields set by Cyborg on creation: accelerator requirements"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_49683cbb","line":280,"range":{"start_line":280,"start_character":29,"end_line":280,"end_character":32},"in_reply_to":"3f79a3b5_4dfabdbb","updated":"2018-11-19 17:24:34.000000000","message":"@jay VAN was the old term we all said we disliked at the PTG.\n\nit was Virtual Accelerator Nexus which was deeply confusing.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"a74eca14b8f5b8f0075f08a944623e169e1fc3e6","unresolved":false,"context_lines":[{"line_number":277,"context_line":"     OBJ_PROJECT_NAMESPACE \u003d \"os-acc\""},{"line_number":278,"context_line":"     VERSION \u003d \"1.0\""},{"line_number":279,"context_line":"     fields \u003d {"},{"line_number":280,"context_line":"        \u0027id\u0027: UUIDField(), # VAN ID"},{"line_number":281,"context_line":"        \u0027state\u0027: EnumField(), # see below"},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"        ### Fields set by Cyborg on creation: accelerator requirements"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_d7b2ac31","line":280,"range":{"start_line":280,"start_character":29,"end_line":280,"end_character":32},"in_reply_to":"3f79a3b5_4dfabdbb","updated":"2018-11-19 09:15:18.000000000","message":"Done","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"a74eca14b8f5b8f0075f08a944623e169e1fc3e6","unresolved":false,"context_lines":[{"line_number":277,"context_line":"     OBJ_PROJECT_NAMESPACE \u003d \"os-acc\""},{"line_number":278,"context_line":"     VERSION \u003d \"1.0\""},{"line_number":279,"context_line":"     fields \u003d {"},{"line_number":280,"context_line":"        \u0027id\u0027: UUIDField(), # VAN ID"},{"line_number":281,"context_line":"        \u0027state\u0027: EnumField(), # see below"},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"        ### Fields set by Cyborg on creation: accelerator requirements"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_b7b7f022","line":280,"range":{"start_line":280,"start_character":29,"end_line":280,"end_character":32},"in_reply_to":"3f79a3b5_973789fe","updated":"2018-11-19 09:15:18.000000000","message":"Done","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2e3e6dda8bc8723b90faef30c4705cc553d53413","unresolved":false,"context_lines":[{"line_number":282,"context_line":""},{"line_number":283,"context_line":"        ### Fields set by Cyborg on creation: accelerator requirements"},{"line_number":284,"context_line":"          # Cyborg sets the state to Initial on creation."},{"line_number":285,"context_line":"        \u0027device_profile_name\u0027: StringField(),"},{"line_number":286,"context_line":"        \u0027device_profile_group_index\u0027: IntegerField()"},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"        ### Fields set by Nova, after request spec update before scheduling"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_f24b6b26","line":285,"range":{"start_line":285,"start_character":8,"end_line":285,"end_character":45},"updated":"2018-11-14 15:45:12.000000000","message":"if the device_profile is a first class resource in the cyborg api i would strongly prefer to use its uuid here and not a name so that we can have non unique names.\n\nsimilarly i would prefer to use the uuid in the flavor.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"ff649544558254a6b8210eaafed45724d2ce35da","unresolved":false,"context_lines":[{"line_number":282,"context_line":""},{"line_number":283,"context_line":"        ### Fields set by Cyborg on creation: accelerator requirements"},{"line_number":284,"context_line":"          # Cyborg sets the state to Initial on creation."},{"line_number":285,"context_line":"        \u0027device_profile_name\u0027: StringField(),"},{"line_number":286,"context_line":"        \u0027device_profile_group_index\u0027: IntegerField()"},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"        ### Fields set by Nova, after request spec update before scheduling"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_c95bec20","line":285,"range":{"start_line":285,"start_character":8,"end_line":285,"end_character":45},"in_reply_to":"3f79a3b5_d7470c1b","updated":"2018-11-19 17:24:34.000000000","message":"if we use the name here it will require cyborg to guarentee that names are globally unique across the entire cloud.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"a74eca14b8f5b8f0075f08a944623e169e1fc3e6","unresolved":false,"context_lines":[{"line_number":282,"context_line":""},{"line_number":283,"context_line":"        ### Fields set by Cyborg on creation: accelerator requirements"},{"line_number":284,"context_line":"          # Cyborg sets the state to Initial on creation."},{"line_number":285,"context_line":"        \u0027device_profile_name\u0027: StringField(),"},{"line_number":286,"context_line":"        \u0027device_profile_group_index\u0027: IntegerField()"},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"        ### Fields set by Nova, after request spec update before scheduling"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_d7470c1b","line":285,"range":{"start_line":285,"start_character":8,"end_line":285,"end_character":45},"in_reply_to":"3f79a3b5_f24b6b26","updated":"2018-11-19 09:15:18.000000000","message":"It would be a burden for the user to use UUIDs where names are possible. (There are parts of Cyborg where we use IDs mainly because it is not easy to define name-ID mappings, but that\u0027s another story.) If Cyborg ensures device profile names are unique and (in the future) allows renaming, does that address the concern?","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"48f8cde9f7e30141d7420a32ad64bbef038ea7a6","unresolved":false,"context_lines":[{"line_number":287,"context_line":""},{"line_number":288,"context_line":"        ### Fields set by Nova, after request spec update before scheduling"},{"line_number":289,"context_line":"          # Nova sets the state to ReqGroupAssigned after setting this"},{"line_number":290,"context_line":"          # This is used by os-acc; see `os-acc-bind`_ API."},{"line_number":291,"context_line":"        \u0027request_group_index\u0027: IntegerField(),"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"        ### Fields set by Nova, after scheduling before binding"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_12adc7e6","line":290,"updated":"2018-11-14 14:21:29.000000000","message":"I totally don\u0027t understand why this is something nova needs to pass back to cyborg.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2e3e6dda8bc8723b90faef30c4705cc553d53413","unresolved":false,"context_lines":[{"line_number":284,"context_line":"          # Cyborg sets the state to Initial on creation."},{"line_number":285,"context_line":"        \u0027device_profile_name\u0027: StringField(),"},{"line_number":286,"context_line":"        \u0027device_profile_group_index\u0027: IntegerField()"},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"        ### Fields set by Nova, after request spec update before scheduling"},{"line_number":289,"context_line":"          # Nova sets the state to ReqGroupAssigned after setting this"},{"line_number":290,"context_line":"          # This is used by os-acc; see `os-acc-bind`_ API."},{"line_number":291,"context_line":"        \u0027request_group_index\u0027: IntegerField(),"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"        ### Fields set by Nova, after scheduling before binding"},{"line_number":294,"context_line":"          # Nova sets the state to ReadyToBind after setting this"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_f2f92bc6","line":291,"range":{"start_line":287,"start_character":0,"end_line":291,"end_character":46},"updated":"2018-11-14 15:45:12.000000000","message":"nova may of may not be able to determin this in a 1:1 manner\n\nthe allocation candiates retured form placement today do not encode how each allocation maps to the request string.\n\nnova proably shoudl not have the logic to do this in its code base but it might be able to pass the placemetn request and the allocation candiatae to os-acc to figure this out.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"a74eca14b8f5b8f0075f08a944623e169e1fc3e6","unresolved":false,"context_lines":[{"line_number":284,"context_line":"          # Cyborg sets the state to Initial on creation."},{"line_number":285,"context_line":"        \u0027device_profile_name\u0027: StringField(),"},{"line_number":286,"context_line":"        \u0027device_profile_group_index\u0027: IntegerField()"},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"        ### Fields set by Nova, after request spec update before scheduling"},{"line_number":289,"context_line":"          # Nova sets the state to ReqGroupAssigned after setting this"},{"line_number":290,"context_line":"          # This is used by os-acc; see `os-acc-bind`_ API."},{"line_number":291,"context_line":"        \u0027request_group_index\u0027: IntegerField(),"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"        ### Fields set by Nova, after scheduling before binding"},{"line_number":294,"context_line":"          # Nova sets the state to ReadyToBind after setting this"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_1767c4bb","line":291,"range":{"start_line":287,"start_character":0,"end_line":291,"end_character":46},"in_reply_to":"3f79a3b5_f2f92bc6","updated":"2018-11-19 09:15:18.000000000","message":"Please see Line 495. This logic lies in os-acc.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"008306342bfba08a10e7d313f4e52b219b04f686","unresolved":false,"context_lines":[{"line_number":292,"context_line":""},{"line_number":293,"context_line":"        ### Fields set by Nova, after scheduling before binding"},{"line_number":294,"context_line":"          # Nova sets the state to ReadyToBind after setting this"},{"line_number":295,"context_line":"        \u0027host_name\u0027: StringField(),"},{"line_number":296,"context_line":"        \u0027device_rp_uuid\u0027: UUIDField(),"},{"line_number":297,"context_line":"        \u0027instance_uuid\u0027: UUIDField(),"},{"line_number":298,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_cdad6da5","line":295,"range":{"start_line":295,"start_character":8,"end_line":295,"end_character":35},"updated":"2018-11-14 22:16:49.000000000","message":"you don\u0027t need a \"state\" field if you just say that an ARQ that has a null host_name is unbound. For the record, this is how Neutron port binding works: if the host_id field of the port binding is empty, then the port binding isn\u0027t bound yet...\n\nhttps://developer.openstack.org/api-ref/network/v2/?expanded\u003dshow-port-details-detail#ports","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"a74eca14b8f5b8f0075f08a944623e169e1fc3e6","unresolved":false,"context_lines":[{"line_number":292,"context_line":""},{"line_number":293,"context_line":"        ### Fields set by Nova, after scheduling before binding"},{"line_number":294,"context_line":"          # Nova sets the state to ReadyToBind after setting this"},{"line_number":295,"context_line":"        \u0027host_name\u0027: StringField(),"},{"line_number":296,"context_line":"        \u0027device_rp_uuid\u0027: UUIDField(),"},{"line_number":297,"context_line":"        \u0027instance_uuid\u0027: UUIDField(),"},{"line_number":298,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_17eca403","line":295,"range":{"start_line":295,"start_character":8,"end_line":295,"end_character":35},"in_reply_to":"3f79a3b5_cdad6da5","updated":"2018-11-19 09:15:18.000000000","message":"After the Nova has set a host name, there is still a window where Cyborg has not yet bound the ARQ. Further, the binding process may fail. So, it seems unclean to rely implicitly on the host name field to indicate that the ARQ is bound.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2e3e6dda8bc8723b90faef30c4705cc553d53413","unresolved":false,"context_lines":[{"line_number":290,"context_line":"          # This is used by os-acc; see `os-acc-bind`_ API."},{"line_number":291,"context_line":"        \u0027request_group_index\u0027: IntegerField(),"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"        ### Fields set by Nova, after scheduling before binding"},{"line_number":294,"context_line":"          # Nova sets the state to ReadyToBind after setting this"},{"line_number":295,"context_line":"        \u0027host_name\u0027: StringField(),"},{"line_number":296,"context_line":"        \u0027device_rp_uuid\u0027: UUIDField(),"},{"line_number":297,"context_line":"        \u0027instance_uuid\u0027: UUIDField(),"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"        ### Fields set by Cyborg after binding"},{"line_number":300,"context_line":"          # Cyborg sets the state to Bound or BindFailed."}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_721f5b0b","line":297,"range":{"start_line":293,"start_character":7,"end_line":297,"end_character":37},"updated":"2018-11-14 15:45:12.000000000","message":"similary to the above this might be somethign nova could do but perhapes its something os-acc should do.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"a74eca14b8f5b8f0075f08a944623e169e1fc3e6","unresolved":false,"context_lines":[{"line_number":290,"context_line":"          # This is used by os-acc; see `os-acc-bind`_ API."},{"line_number":291,"context_line":"        \u0027request_group_index\u0027: IntegerField(),"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"        ### Fields set by Nova, after scheduling before binding"},{"line_number":294,"context_line":"          # Nova sets the state to ReadyToBind after setting this"},{"line_number":295,"context_line":"        \u0027host_name\u0027: StringField(),"},{"line_number":296,"context_line":"        \u0027device_rp_uuid\u0027: UUIDField(),"},{"line_number":297,"context_line":"        \u0027instance_uuid\u0027: UUIDField(),"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"        ### Fields set by Cyborg after binding"},{"line_number":300,"context_line":"          # Cyborg sets the state to Bound or BindFailed."}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_7726386d","line":297,"range":{"start_line":293,"start_character":7,"end_line":297,"end_character":37},"in_reply_to":"3f79a3b5_721f5b0b","updated":"2018-11-19 09:15:18.000000000","message":"Setting \u0027device_rp_uuid\u0027 is indeed by os-acc (Line 495). Will clarify.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"008306342bfba08a10e7d313f4e52b219b04f686","unresolved":false,"context_lines":[{"line_number":298,"context_line":""},{"line_number":299,"context_line":"        ### Fields set by Cyborg after binding"},{"line_number":300,"context_line":"          # Cyborg sets the state to Bound or BindFailed."},{"line_number":301,"context_line":"        \u0027attach_info\u0027: ObjectField(), # subclass of ARQAttachBase; see below"},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"        . . ."},{"line_number":304,"context_line":"     }"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_4dc15d4f","line":301,"range":{"start_line":301,"start_character":8,"end_line":301,"end_character":21},"updated":"2018-11-14 22:16:49.000000000","message":"further supporting evidence that this object should be called a DeviceAttachment or similar, and not ARQ.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"a74eca14b8f5b8f0075f08a944623e169e1fc3e6","unresolved":false,"context_lines":[{"line_number":298,"context_line":""},{"line_number":299,"context_line":"        ### Fields set by Cyborg after binding"},{"line_number":300,"context_line":"          # Cyborg sets the state to Bound or BindFailed."},{"line_number":301,"context_line":"        \u0027attach_info\u0027: ObjectField(), # subclass of ARQAttachBase; see below"},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"        . . ."},{"line_number":304,"context_line":"     }"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_77cb987e","line":301,"range":{"start_line":301,"start_character":8,"end_line":301,"end_character":21},"in_reply_to":"3f79a3b5_4dc15d4f","updated":"2018-11-19 09:15:18.000000000","message":"The attach-info is only one part of this object. When the ARQ is in unbound state, there is no attach-info.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"48f8cde9f7e30141d7420a32ad64bbef038ea7a6","unresolved":false,"context_lines":[{"line_number":321,"context_line":"        \u0027mdev_uuid\u0027: UUIDField()"},{"line_number":322,"context_line":"     }"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"Cyborg API signatures"},{"line_number":325,"context_line":"---------------------"},{"line_number":326,"context_line":""},{"line_number":327,"context_line":"The Cyborg APIs invoked by Nova are listed below. They are all invoked with"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_12db877a","line":324,"updated":"2018-11-14 14:21:29.000000000","message":"I don\u0027t think we need to document these in so much detail in the spec, do we? Maybe show the calls we make into os-acc for this, but otherwise we don\u0027t need to care AFAIK.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2e3e6dda8bc8723b90faef30c4705cc553d53413","unresolved":false,"context_lines":[{"line_number":321,"context_line":"        \u0027mdev_uuid\u0027: UUIDField()"},{"line_number":322,"context_line":"     }"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"Cyborg API signatures"},{"line_number":325,"context_line":"---------------------"},{"line_number":326,"context_line":""},{"line_number":327,"context_line":"The Cyborg APIs invoked by Nova are listed below. They are all invoked with"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_38130505","line":324,"range":{"start_line":324,"start_character":0,"end_line":324,"end_character":21},"updated":"2018-11-14 15:45:12.000000000","message":"can we add the signatures for the device_profile endpoint also","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"a74eca14b8f5b8f0075f08a944623e169e1fc3e6","unresolved":false,"context_lines":[{"line_number":321,"context_line":"        \u0027mdev_uuid\u0027: UUIDField()"},{"line_number":322,"context_line":"     }"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"Cyborg API signatures"},{"line_number":325,"context_line":"---------------------"},{"line_number":326,"context_line":""},{"line_number":327,"context_line":"The Cyborg APIs invoked by Nova are listed below. They are all invoked with"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_d7e38c02","line":324,"range":{"start_line":324,"start_character":0,"end_line":324,"end_character":21},"in_reply_to":"3f79a3b5_38130505","updated":"2018-11-19 09:15:18.000000000","message":"Should I be removing existing signatures or adding new ones? The comments are contradictory.\n\nSean, please see https://review.openstack.org/#/c/602978/ for device profile APIs.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"5e84d73bd0efd6ffaa6f710705bbdf6302b05882","unresolved":false,"context_lines":[{"line_number":321,"context_line":"        \u0027mdev_uuid\u0027: UUIDField()"},{"line_number":322,"context_line":"     }"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"Cyborg API signatures"},{"line_number":325,"context_line":"---------------------"},{"line_number":326,"context_line":""},{"line_number":327,"context_line":"The Cyborg APIs invoked by Nova are listed below. They are all invoked with"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_69d89850","line":324,"range":{"start_line":324,"start_character":0,"end_line":324,"end_character":21},"in_reply_to":"3f79a3b5_a97f9066","updated":"2018-11-19 17:29:51.000000000","message":"That is correct, Sean. I\u0027d like to only see the os-acc interfaces that Nova (the virt drivers) would call that plugs/unplugs a device to/from a VM. No REST API.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"ff649544558254a6b8210eaafed45724d2ce35da","unresolved":false,"context_lines":[{"line_number":321,"context_line":"        \u0027mdev_uuid\u0027: UUIDField()"},{"line_number":322,"context_line":"     }"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"Cyborg API signatures"},{"line_number":325,"context_line":"---------------------"},{"line_number":326,"context_line":""},{"line_number":327,"context_line":"The Cyborg APIs invoked by Nova are listed below. They are all invoked with"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_a97f9066","line":324,"range":{"start_line":324,"start_character":0,"end_line":324,"end_character":21},"in_reply_to":"3f79a3b5_d7e38c02","updated":"2018-11-19 17:24:34.000000000","message":"i am ok with either removing all cyborg rest apis form the doc as dan suggested or documenting all of them.\n\nwhen discussing it with jay and dan breifly on irc we all seam to be leaning towards removing them as nova will only interact with os-acc so nova shoud not need to no the internal of the cyborg api.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"136d0d01f2405412689f52e855cd7469b7b2ae4e","unresolved":false,"context_lines":[{"line_number":371,"context_line":"    { \u0027error\u0027: \u003cerror-string\u003e }"},{"line_number":372,"context_line":" Notes:"},{"line_number":373,"context_line":"    Delete the specified ARQs. If any ARQ is in bound state, unbind it"},{"line_number":374,"context_line":"    first before deleting."},{"line_number":375,"context_line":""},{"line_number":376,"context_line":".. _cyborg-bind:"},{"line_number":377,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_43c7fb67","line":374,"updated":"2018-11-14 09:37:47.000000000","message":"You may wish to make it clear here that if one or more of the uuids is already deleted, the call still works and returns 204, see https://review.openstack.org/#/c/616610/ for a bit more info on that","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"008306342bfba08a10e7d313f4e52b219b04f686","unresolved":false,"context_lines":[{"line_number":377,"context_line":""},{"line_number":378,"context_line":"::"},{"line_number":379,"context_line":""},{"line_number":380,"context_line":" URL: /v1/arqs/bindings"},{"line_number":381,"context_line":" Method: POST"},{"line_number":382,"context_line":" Request body:"},{"line_number":383,"context_line":"    { \u0027instance_uuid\u0027: \u003cuuid-string\u003e,"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_8dc3f53a","line":380,"range":{"start_line":380,"start_character":6,"end_line":380,"end_character":23},"updated":"2018-11-14 22:16:49.000000000","message":"This seems to me like this API should be:\n\n GET /devices/{device_uuid}/bindings\n\nI don\u0027t see how an ARQ (or even a device attachment object) should list bindings.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"a74eca14b8f5b8f0075f08a944623e169e1fc3e6","unresolved":false,"context_lines":[{"line_number":377,"context_line":""},{"line_number":378,"context_line":"::"},{"line_number":379,"context_line":""},{"line_number":380,"context_line":" URL: /v1/arqs/bindings"},{"line_number":381,"context_line":" Method: POST"},{"line_number":382,"context_line":" Request body:"},{"line_number":383,"context_line":"    { \u0027instance_uuid\u0027: \u003cuuid-string\u003e,"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_d7bcecd6","line":380,"range":{"start_line":380,"start_character":6,"end_line":380,"end_character":23},"in_reply_to":"3f79a3b5_8dc3f53a","updated":"2018-11-19 09:15:18.000000000","message":"May be we have a disconnect on the device model. A device (physical hardware, like PCI card) may have multiple resource providers (e.g. GPU chips or FPGA regions), and each of those RPs may have multiple accelerators. An ARQ tracks the request for a specific accelerator and therefore contains the bindings for that accelerator alone.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"136d0d01f2405412689f52e855cd7469b7b2ae4e","unresolved":false,"context_lines":[{"line_number":439,"context_line":" Note:"},{"line_number":440,"context_line":"    Returns list of ARQs for that instance if they are all resolved (have"},{"line_number":441,"context_line":"    either successfully bound or failed to bind). If any ARQ is still in the"},{"line_number":442,"context_line":"    process of being bound, error 423 is returned."},{"line_number":443,"context_line":""},{"line_number":444,"context_line":""},{"line_number":445,"context_line":"Os-acc API signatures"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_c30b0b7d","line":442,"updated":"2018-11-14 09:37:47.000000000","message":"You might make this GET /v1/args?instance\u003d{uuid}\u0026state\u003dresolved because the type of the response is a list of arqs. A URL like \u0027GET /v1/arqs/instance\u0027 would return an instance.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2e3e6dda8bc8723b90faef30c4705cc553d53413","unresolved":false,"context_lines":[{"line_number":442,"context_line":"    process of being bound, error 423 is returned."},{"line_number":443,"context_line":""},{"line_number":444,"context_line":""},{"line_number":445,"context_line":"Os-acc API signatures"},{"line_number":446,"context_line":"---------------------"},{"line_number":447,"context_line":""},{"line_number":448,"context_line":".. _os-acc-create:"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_d880d1f9","line":445,"range":{"start_line":445,"start_character":0,"end_line":445,"end_character":21},"updated":"2018-11-14 15:45:12.000000000","message":"we dont quite need to go into this level of detail for the api presented to nova by os-acc as it will change over time but since you have aready added it we might as well leave it in the spec","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"ff649544558254a6b8210eaafed45724d2ce35da","unresolved":false,"context_lines":[{"line_number":442,"context_line":"    process of being bound, error 423 is returned."},{"line_number":443,"context_line":""},{"line_number":444,"context_line":""},{"line_number":445,"context_line":"Os-acc API signatures"},{"line_number":446,"context_line":"---------------------"},{"line_number":447,"context_line":""},{"line_number":448,"context_line":".. _os-acc-create:"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_49eb5c10","line":445,"range":{"start_line":445,"start_character":0,"end_line":445,"end_character":21},"in_reply_to":"3f79a3b5_57a69cc1","updated":"2018-11-19 17:24:34.000000000","message":"api signiture yes but at a higher level.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"a74eca14b8f5b8f0075f08a944623e169e1fc3e6","unresolved":false,"context_lines":[{"line_number":442,"context_line":"    process of being bound, error 423 is returned."},{"line_number":443,"context_line":""},{"line_number":444,"context_line":""},{"line_number":445,"context_line":"Os-acc API signatures"},{"line_number":446,"context_line":"---------------------"},{"line_number":447,"context_line":""},{"line_number":448,"context_line":".. _os-acc-create:"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_57a69cc1","line":445,"range":{"start_line":445,"start_character":0,"end_line":445,"end_character":21},"in_reply_to":"3f79a3b5_d880d1f9","updated":"2018-11-19 09:15:18.000000000","message":"At the Stein PTG, folks wanted to see API signatures in the spec. IIRC, you had also asked for them. :)","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2e3e6dda8bc8723b90faef30c4705cc553d53413","unresolved":false,"context_lines":[{"line_number":450,"context_line":"::"},{"line_number":451,"context_line":""},{"line_number":452,"context_line":"  create_unbound_arqs_for_instance()"},{"line_number":453,"context_line":"  Parameters:"},{"line_number":454,"context_line":"     device_profile_name: string. Name of the device profile."},{"line_number":455,"context_line":"     image_uuid: UUID (optional). Glance UUID of the instance\u0027s image."},{"line_number":456,"context_line":"  Returns:"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_d8953133","line":453,"range":{"start_line":453,"start_character":2,"end_line":453,"end_character":12},"updated":"2018-11-14 15:45:12.000000000","message":"we will need to also pass an api context object such that the call to the cyborg api are made with the credentials of the tenant. this will be needed for all the functions that invoke the cyborg api so im not going to mention it for the rest.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"a74eca14b8f5b8f0075f08a944623e169e1fc3e6","unresolved":false,"context_lines":[{"line_number":450,"context_line":"::"},{"line_number":451,"context_line":""},{"line_number":452,"context_line":"  create_unbound_arqs_for_instance()"},{"line_number":453,"context_line":"  Parameters:"},{"line_number":454,"context_line":"     device_profile_name: string. Name of the device profile."},{"line_number":455,"context_line":"     image_uuid: UUID (optional). Glance UUID of the instance\u0027s image."},{"line_number":456,"context_line":"  Returns:"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_17882423","line":453,"range":{"start_line":453,"start_character":2,"end_line":453,"end_character":12},"in_reply_to":"3f79a3b5_d8953133","updated":"2018-11-19 09:15:18.000000000","message":"True. Will add.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2e3e6dda8bc8723b90faef30c4705cc553d53413","unresolved":false,"context_lines":[{"line_number":451,"context_line":""},{"line_number":452,"context_line":"  create_unbound_arqs_for_instance()"},{"line_number":453,"context_line":"  Parameters:"},{"line_number":454,"context_line":"     device_profile_name: string. Name of the device profile."},{"line_number":455,"context_line":"     image_uuid: UUID (optional). Glance UUID of the instance\u0027s image."},{"line_number":456,"context_line":"  Returns:"},{"line_number":457,"context_line":"     On success:"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_788c1d3a","line":454,"range":{"start_line":454,"start_character":5,"end_line":454,"end_character":24},"updated":"2018-11-14 15:45:12.000000000","message":"as i suggested above this should likely be a uuid not a name","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"a74eca14b8f5b8f0075f08a944623e169e1fc3e6","unresolved":false,"context_lines":[{"line_number":451,"context_line":""},{"line_number":452,"context_line":"  create_unbound_arqs_for_instance()"},{"line_number":453,"context_line":"  Parameters:"},{"line_number":454,"context_line":"     device_profile_name: string. Name of the device profile."},{"line_number":455,"context_line":"     image_uuid: UUID (optional). Glance UUID of the instance\u0027s image."},{"line_number":456,"context_line":"  Returns:"},{"line_number":457,"context_line":"     On success:"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_7782b804","line":454,"range":{"start_line":454,"start_character":5,"end_line":454,"end_character":24},"in_reply_to":"3f79a3b5_788c1d3a","updated":"2018-11-19 09:15:18.000000000","message":"Please see response to your comment on Line 285.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"48f8cde9f7e30141d7420a32ad64bbef038ea7a6","unresolved":false,"context_lines":[{"line_number":462,"context_line":"  Notes:"},{"line_number":463,"context_line":"     Calls Cyborg\u0027s create API cyborg-create_. Converts the JSON for device"},{"line_number":464,"context_line":"     profile groups into request groups defined by Nova."},{"line_number":465,"context_line":""},{"line_number":466,"context_line":".. _os-acc-delete:"},{"line_number":467,"context_line":""},{"line_number":468,"context_line":"::"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_b22e5359","line":465,"updated":"2018-11-14 14:21:29.000000000","message":"This is too much detail I think. I dunno about others, but I really just need text descriptions of the high-level things that will be available and called by nova. This is nearly implementation, which belongs in code patches not specs.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2e3e6dda8bc8723b90faef30c4705cc553d53413","unresolved":false,"context_lines":[{"line_number":523,"context_line":"     On success: List of resolved ARQs"},{"line_number":524,"context_line":"     On failure: String describing the error"},{"line_number":525,"context_line":"  Notes:"},{"line_number":526,"context_line":"     Blocks until each ARQ for the instance is resolved (either successfully"},{"line_number":527,"context_line":"     bound or has failed to bind). Polls Cyborg\u0027s GET API cyborg-get-bound_"},{"line_number":528,"context_line":"     repeatedly till some configured timeout."},{"line_number":529,"context_line":""},{"line_number":530,"context_line":"Assignment workflow"},{"line_number":531,"context_line":"-------------------"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_984a59ac","line":528,"range":{"start_line":526,"start_character":4,"end_line":528,"end_character":45},"updated":"2018-11-14 15:45:12.000000000","message":"this is blocking in os-acc i hope and not in the cyborg rest api.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"a74eca14b8f5b8f0075f08a944623e169e1fc3e6","unresolved":false,"context_lines":[{"line_number":523,"context_line":"     On success: List of resolved ARQs"},{"line_number":524,"context_line":"     On failure: String describing the error"},{"line_number":525,"context_line":"  Notes:"},{"line_number":526,"context_line":"     Blocks until each ARQ for the instance is resolved (either successfully"},{"line_number":527,"context_line":"     bound or has failed to bind). Polls Cyborg\u0027s GET API cyborg-get-bound_"},{"line_number":528,"context_line":"     repeatedly till some configured timeout."},{"line_number":529,"context_line":""},{"line_number":530,"context_line":"Assignment workflow"},{"line_number":531,"context_line":"-------------------"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_b76ff05f","line":528,"range":{"start_line":526,"start_character":4,"end_line":528,"end_character":45},"in_reply_to":"3f79a3b5_984a59ac","updated":"2018-11-19 09:15:18.000000000","message":"Yes. The API provides a poling interface (Lines 436, 440-442).","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"48f8cde9f7e30141d7420a32ad64bbef038ea7a6","unresolved":false,"context_lines":[{"line_number":527,"context_line":"     bound or has failed to bind). Polls Cyborg\u0027s GET API cyborg-get-bound_"},{"line_number":528,"context_line":"     repeatedly till some configured timeout."},{"line_number":529,"context_line":""},{"line_number":530,"context_line":"Assignment workflow"},{"line_number":531,"context_line":"-------------------"},{"line_number":532,"context_line":"This section summarizes the workflow details for Phase 1 from previous"},{"line_number":533,"context_line":"sections; it does not describe any changes needed in Nova beyond what have"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_b2fc13bd","line":530,"updated":"2018-11-14 14:21:29.000000000","message":"This section should be the bulk of the spec, IMHO. It contains almost all the detail we should need to approve this effort and to judge the resulting implementation.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"008306342bfba08a10e7d313f4e52b219b04f686","unresolved":false,"context_lines":[{"line_number":536,"context_line":"#. The Nova API server receives a ``POST /servers`` API request with a"},{"line_number":537,"context_line":"   flavor that includes a device profile. It passes it to the Nova conductor."},{"line_number":538,"context_line":""},{"line_number":539,"context_line":"#. The Nova conductor calls os-acc\u0027s ``create_unbound_arqs_for_instance()``"},{"line_number":540,"context_line":"   method, which calls the Cyborg API ``POST /v1/arqs``"},{"line_number":541,"context_line":"   with the device profile and optionally the image UUID. It"},{"line_number":542,"context_line":"   gets back the request groups for accelerators and a list of unbound ARQs."}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_8dc8d54e","line":539,"range":{"start_line":539,"start_character":3,"end_line":539,"end_character":75},"updated":"2018-11-14 22:16:49.000000000","message":"See note above on this... I really don\u0027t recommend making os-acc into the Cyborg REST API client. Instead, focus os-acc on just the plug/unplug low-level device operations. Nova can call a REST API itself. It does this for Neutron, Cinder and Glance already just fine.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"a74eca14b8f5b8f0075f08a944623e169e1fc3e6","unresolved":false,"context_lines":[{"line_number":536,"context_line":"#. The Nova API server receives a ``POST /servers`` API request with a"},{"line_number":537,"context_line":"   flavor that includes a device profile. It passes it to the Nova conductor."},{"line_number":538,"context_line":""},{"line_number":539,"context_line":"#. The Nova conductor calls os-acc\u0027s ``create_unbound_arqs_for_instance()``"},{"line_number":540,"context_line":"   method, which calls the Cyborg API ``POST /v1/arqs``"},{"line_number":541,"context_line":"   with the device profile and optionally the image UUID. It"},{"line_number":542,"context_line":"   gets back the request groups for accelerators and a list of unbound ARQs."}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_37aa006d","line":539,"range":{"start_line":539,"start_character":3,"end_line":539,"end_character":75},"in_reply_to":"3f79a3b5_8dc8d54e","updated":"2018-11-19 09:15:18.000000000","message":"At the Stein PTG, Nova developers had said that there needs to be an intermediary, and I went with that. The main use of os-acc is to do things that don\u0027t fit in Nova or Cyborg, e.g. figure out the device RP for each request group (Line 495).","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"0f0e57e3d8dd97c7a62cbdf44db46522b78fa772","unresolved":false,"context_lines":[{"line_number":550,"context_line":"#. Nova invokes Placement and gets a list of allocation candidates. Nova"},{"line_number":551,"context_line":"   selects one of those candidates and makes claim(s) in Placement."},{"line_number":552,"context_line":""},{"line_number":553,"context_line":"#. The Nova conductor calls os-acc\u0027s ``bind_arqs_for_instance()`` method."},{"line_number":554,"context_line":"   That method figures out which device RP in the allocated candidate"},{"line_number":555,"context_line":"   corresponds to each request group, and then updates each ARQ with the"},{"line_number":556,"context_line":"   appropriate device RP. (This may leverage [#map-rp-reqgroup]_.)"},{"line_number":557,"context_line":""},{"line_number":558,"context_line":"   Then it calls the Cyborg API ``POST /v1/arqs/bindings`` with the instance"},{"line_number":559,"context_line":"   UUID and the list of unbound ARQs.  This is an asynchronous call which"},{"line_number":560,"context_line":"   initiates binding in the background and returns immediately. (The binding"},{"line_number":561,"context_line":"   may involve device configuration or reprogramming, which happens in the"},{"line_number":562,"context_line":"   background.)"},{"line_number":563,"context_line":""},{"line_number":564,"context_line":"#. The Nova conductor calls the Nova compute manager via RPC to spawn the"},{"line_number":565,"context_line":"   instance. Passing the list of ARQs in this RPC call is optional for Phase"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_dbcd2b30","line":562,"range":{"start_line":553,"start_character":2,"end_line":562,"end_character":15},"updated":"2018-11-14 16:02:06.000000000","message":"this is when the device programming will start right so we will need to pass the image uuid so that cyborge can look up the acclerator image uuid.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"ff649544558254a6b8210eaafed45724d2ce35da","unresolved":false,"context_lines":[{"line_number":550,"context_line":"#. Nova invokes Placement and gets a list of allocation candidates. Nova"},{"line_number":551,"context_line":"   selects one of those candidates and makes claim(s) in Placement."},{"line_number":552,"context_line":""},{"line_number":553,"context_line":"#. The Nova conductor calls os-acc\u0027s ``bind_arqs_for_instance()`` method."},{"line_number":554,"context_line":"   That method figures out which device RP in the allocated candidate"},{"line_number":555,"context_line":"   corresponds to each request group, and then updates each ARQ with the"},{"line_number":556,"context_line":"   appropriate device RP. (This may leverage [#map-rp-reqgroup]_.)"},{"line_number":557,"context_line":""},{"line_number":558,"context_line":"   Then it calls the Cyborg API ``POST /v1/arqs/bindings`` with the instance"},{"line_number":559,"context_line":"   UUID and the list of unbound ARQs.  This is an asynchronous call which"},{"line_number":560,"context_line":"   initiates binding in the background and returns immediately. (The binding"},{"line_number":561,"context_line":"   may involve device configuration or reprogramming, which happens in the"},{"line_number":562,"context_line":"   background.)"},{"line_number":563,"context_line":""},{"line_number":564,"context_line":"#. The Nova conductor calls the Nova compute manager via RPC to spawn the"},{"line_number":565,"context_line":"   instance. Passing the list of ARQs in this RPC call is optional for Phase"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_09bec400","line":562,"range":{"start_line":553,"start_character":2,"end_line":562,"end_character":15},"in_reply_to":"3f79a3b5_d7cdcc5b","updated":"2018-11-19 17:24:34.000000000","message":"since the image uuid is optionall on line 541 you cannot rely on that so we either need to make it required there or we have to always pass it here.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"a74eca14b8f5b8f0075f08a944623e169e1fc3e6","unresolved":false,"context_lines":[{"line_number":550,"context_line":"#. Nova invokes Placement and gets a list of allocation candidates. Nova"},{"line_number":551,"context_line":"   selects one of those candidates and makes claim(s) in Placement."},{"line_number":552,"context_line":""},{"line_number":553,"context_line":"#. The Nova conductor calls os-acc\u0027s ``bind_arqs_for_instance()`` method."},{"line_number":554,"context_line":"   That method figures out which device RP in the allocated candidate"},{"line_number":555,"context_line":"   corresponds to each request group, and then updates each ARQ with the"},{"line_number":556,"context_line":"   appropriate device RP. (This may leverage [#map-rp-reqgroup]_.)"},{"line_number":557,"context_line":""},{"line_number":558,"context_line":"   Then it calls the Cyborg API ``POST /v1/arqs/bindings`` with the instance"},{"line_number":559,"context_line":"   UUID and the list of unbound ARQs.  This is an asynchronous call which"},{"line_number":560,"context_line":"   initiates binding in the background and returns immediately. (The binding"},{"line_number":561,"context_line":"   may involve device configuration or reprogramming, which happens in the"},{"line_number":562,"context_line":"   background.)"},{"line_number":563,"context_line":""},{"line_number":564,"context_line":"#. The Nova conductor calls the Nova compute manager via RPC to spawn the"},{"line_number":565,"context_line":"   instance. Passing the list of ARQs in this RPC call is optional for Phase"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_d7cdcc5b","line":562,"range":{"start_line":553,"start_character":2,"end_line":562,"end_character":15},"in_reply_to":"3f79a3b5_dbcd2b30","updated":"2018-11-19 09:15:18.000000000","message":"Cyborg queries Glance in Lines 540-545 above and tracks the values internally.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"0f0e57e3d8dd97c7a62cbdf44db46522b78fa772","unresolved":false,"context_lines":[{"line_number":565,"context_line":"   instance. Passing the list of ARQs in this RPC call is optional for Phase"},{"line_number":566,"context_line":"   1."},{"line_number":567,"context_line":""},{"line_number":568,"context_line":"#. Nova compute manager\u0027s ``build_and_run_instance()`` calls os-acc\u0027s"},{"line_number":569,"context_line":"   ``get_bound_arqs_for_instance()`` with the ``instance_uuid``. That calls"},{"line_number":570,"context_line":"   the Cyborg API ``GET /v1/arqs/instance/{uuid}``, which returns successfully"},{"line_number":571,"context_line":"   if each ARQ for that instance has either been bound or failed to bind, but"},{"line_number":572,"context_line":"   returns a special code if any ARQ is still in the process of binding. The"},{"line_number":573,"context_line":"   os-acc call repeatedly polls the Cyborg API till all ARQ bindings are"},{"line_number":574,"context_line":"   resolved (successfully or otherwise), or some configured timeout period"},{"line_number":575,"context_line":"   lapses. In the happy path, the os-acc call returns a list of resolved ARQs."},{"line_number":576,"context_line":""},{"line_number":577,"context_line":"#. The Nova compute manager calls the virt driver with the list of ARQs, and"},{"line_number":578,"context_line":"   the latter attaches the accelerator to the spawning instance."}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_7bfbb748","line":575,"range":{"start_line":568,"start_character":0,"end_line":575,"end_character":78},"updated":"2018-11-14 16:02:06.000000000","message":"this answers my quest on 526\nthe blocking behavior is done via os-acc and not the api.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"a74eca14b8f5b8f0075f08a944623e169e1fc3e6","unresolved":false,"context_lines":[{"line_number":565,"context_line":"   instance. Passing the list of ARQs in this RPC call is optional for Phase"},{"line_number":566,"context_line":"   1."},{"line_number":567,"context_line":""},{"line_number":568,"context_line":"#. Nova compute manager\u0027s ``build_and_run_instance()`` calls os-acc\u0027s"},{"line_number":569,"context_line":"   ``get_bound_arqs_for_instance()`` with the ``instance_uuid``. That calls"},{"line_number":570,"context_line":"   the Cyborg API ``GET /v1/arqs/instance/{uuid}``, which returns successfully"},{"line_number":571,"context_line":"   if each ARQ for that instance has either been bound or failed to bind, but"},{"line_number":572,"context_line":"   returns a special code if any ARQ is still in the process of binding. The"},{"line_number":573,"context_line":"   os-acc call repeatedly polls the Cyborg API till all ARQ bindings are"},{"line_number":574,"context_line":"   resolved (successfully or otherwise), or some configured timeout period"},{"line_number":575,"context_line":"   lapses. In the happy path, the os-acc call returns a list of resolved ARQs."},{"line_number":576,"context_line":""},{"line_number":577,"context_line":"#. The Nova compute manager calls the virt driver with the list of ARQs, and"},{"line_number":578,"context_line":"   the latter attaches the accelerator to the spawning instance."}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_77fe386e","line":575,"range":{"start_line":568,"start_character":0,"end_line":575,"end_character":78},"in_reply_to":"3f79a3b5_7bfbb748","updated":"2018-11-19 09:15:18.000000000","message":"Yes.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"0f0e57e3d8dd97c7a62cbdf44db46522b78fa772","unresolved":false,"context_lines":[{"line_number":587,"context_line":"must unbind the relevant ARQs by calling Cyborg API. It may then retry on"},{"line_number":588,"context_line":"another host or delete the (unbound) ARQs for the instance."},{"line_number":589,"context_line":""},{"line_number":590,"context_line":"Indirect accelerator access"},{"line_number":591,"context_line":"---------------------------"},{"line_number":592,"context_line":"As mentioned in Section `Use cases`_, there are scenarios where the"},{"line_number":593,"context_line":"accelerator needs to be provisioned but not attached to the VM. One of them"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_bbaf0f2c","line":590,"range":{"start_line":590,"start_character":0,"end_line":590,"end_character":27},"updated":"2018-11-14 16:02:06.000000000","message":"im still not conviced that the indirect mode is something that should be in thei spec as the acclerator will not be attach to the vm created by nova so nova should not need to care. the lifetime of the acclerator in this case is not tied to the lifetime of the compute instances so this usecase should likely be handeled entrily by cyborg and declared out of scope of nova.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"a74eca14b8f5b8f0075f08a944623e169e1fc3e6","unresolved":false,"context_lines":[{"line_number":587,"context_line":"must unbind the relevant ARQs by calling Cyborg API. It may then retry on"},{"line_number":588,"context_line":"another host or delete the (unbound) ARQs for the instance."},{"line_number":589,"context_line":""},{"line_number":590,"context_line":"Indirect accelerator access"},{"line_number":591,"context_line":"---------------------------"},{"line_number":592,"context_line":"As mentioned in Section `Use cases`_, there are scenarios where the"},{"line_number":593,"context_line":"accelerator needs to be provisioned but not attached to the VM. One of them"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_171b44cc","line":590,"range":{"start_line":590,"start_character":0,"end_line":590,"end_character":27},"in_reply_to":"3f79a3b5_bbaf0f2c","updated":"2018-11-19 09:15:18.000000000","message":"Please see my response to the comment on Line 101.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"48f8cde9f7e30141d7420a32ad64bbef038ea7a6","unresolved":false,"context_lines":[{"line_number":603,"context_line":"RP contains the right function and, if not, programs it."},{"line_number":604,"context_line":""},{"line_number":605,"context_line":"Since the device profile says ``accel:attach_target\u003dnone``, Cyborg shall"},{"line_number":606,"context_line":"return a bound ARQ to Nova wth ``attach_handle`` set to ``None``. Since the"},{"line_number":607,"context_line":"ARQ state indicates that bind succeeded, the lack of the attach handle tells"},{"line_number":608,"context_line":"Nova virt driver that nothing needs to be done for this ARQ but the instance"},{"line_number":609,"context_line":"spawn can proceed. Cyborg shall track that ARQ as associated with that"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_52ed7fff","line":606,"range":{"start_line":606,"start_character":27,"end_line":606,"end_character":30},"updated":"2018-11-14 14:21:29.000000000","message":"with","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"008306342bfba08a10e7d313f4e52b219b04f686","unresolved":false,"context_lines":[{"line_number":587,"context_line":"must unbind the relevant ARQs by calling Cyborg API. It may then retry on"},{"line_number":588,"context_line":"another host or delete the (unbound) ARQs for the instance."},{"line_number":589,"context_line":""},{"line_number":590,"context_line":"Indirect accelerator access"},{"line_number":591,"context_line":"---------------------------"},{"line_number":592,"context_line":"As mentioned in Section `Use cases`_, there are scenarios where the"},{"line_number":593,"context_line":"accelerator needs to be provisioned but not attached to the VM. One of them"},{"line_number":594,"context_line":"involves indirect accelerator access."},{"line_number":595,"context_line":""},{"line_number":596,"context_line":"To handle this, Cyborg could represent the FPGA as a resource provider with an"},{"line_number":597,"context_line":"inventory of N units of CUSTOM_ACCELERATOR_FPGA for some value of N. The"},{"line_number":598,"context_line":"device profile for the request specifies"},{"line_number":599,"context_line":"``resources:CUSTOM_ACCELERATOR_FPGA\u003d1``, the trait for the device"},{"line_number":600,"context_line":"name/family/model, ``accel:function_id\u003d\u003cfunc-id\u003e`` and"},{"line_number":601,"context_line":"``accel:attach_target\u003dnone``.  Thus Placement locates all compute nodes with"},{"line_number":602,"context_line":"the device of the specified type. During ARQ bind, Cyborg checks if the chosen"},{"line_number":603,"context_line":"RP contains the right function and, if not, programs it."},{"line_number":604,"context_line":""},{"line_number":605,"context_line":"Since the device profile says ``accel:attach_target\u003dnone``, Cyborg shall"},{"line_number":606,"context_line":"return a bound ARQ to Nova wth ``attach_handle`` set to ``None``. Since the"},{"line_number":607,"context_line":"ARQ state indicates that bind succeeded, the lack of the attach handle tells"},{"line_number":608,"context_line":"Nova virt driver that nothing needs to be done for this ARQ but the instance"},{"line_number":609,"context_line":"spawn can proceed. Cyborg shall track that ARQ as associated with that"},{"line_number":610,"context_line":"instance even though it is not attached to the instance."},{"line_number":611,"context_line":""},{"line_number":612,"context_line":"A ARQ with ``attach_handle`` set to ``None`` is treated by Nova like any other"},{"line_number":613,"context_line":"ARQ. Specifically, when the instance dies, Nova shall call"},{"line_number":614,"context_line":"``unbind_arqs_for_instance()``, even if no accelerators are attached to the"},{"line_number":615,"context_line":"instance."},{"line_number":616,"context_line":""},{"line_number":617,"context_line":"Nova changes needed"},{"line_number":618,"context_line":"-------------------"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_adc59137","line":615,"range":{"start_line":590,"start_character":0,"end_line":615,"end_character":9},"updated":"2018-11-14 22:16:49.000000000","message":"remove this section. has nothing to do with Cyborg-Nova interaction.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"a74eca14b8f5b8f0075f08a944623e169e1fc3e6","unresolved":false,"context_lines":[{"line_number":587,"context_line":"must unbind the relevant ARQs by calling Cyborg API. It may then retry on"},{"line_number":588,"context_line":"another host or delete the (unbound) ARQs for the instance."},{"line_number":589,"context_line":""},{"line_number":590,"context_line":"Indirect accelerator access"},{"line_number":591,"context_line":"---------------------------"},{"line_number":592,"context_line":"As mentioned in Section `Use cases`_, there are scenarios where the"},{"line_number":593,"context_line":"accelerator needs to be provisioned but not attached to the VM. One of them"},{"line_number":594,"context_line":"involves indirect accelerator access."},{"line_number":595,"context_line":""},{"line_number":596,"context_line":"To handle this, Cyborg could represent the FPGA as a resource provider with an"},{"line_number":597,"context_line":"inventory of N units of CUSTOM_ACCELERATOR_FPGA for some value of N. The"},{"line_number":598,"context_line":"device profile for the request specifies"},{"line_number":599,"context_line":"``resources:CUSTOM_ACCELERATOR_FPGA\u003d1``, the trait for the device"},{"line_number":600,"context_line":"name/family/model, ``accel:function_id\u003d\u003cfunc-id\u003e`` and"},{"line_number":601,"context_line":"``accel:attach_target\u003dnone``.  Thus Placement locates all compute nodes with"},{"line_number":602,"context_line":"the device of the specified type. During ARQ bind, Cyborg checks if the chosen"},{"line_number":603,"context_line":"RP contains the right function and, if not, programs it."},{"line_number":604,"context_line":""},{"line_number":605,"context_line":"Since the device profile says ``accel:attach_target\u003dnone``, Cyborg shall"},{"line_number":606,"context_line":"return a bound ARQ to Nova wth ``attach_handle`` set to ``None``. Since the"},{"line_number":607,"context_line":"ARQ state indicates that bind succeeded, the lack of the attach handle tells"},{"line_number":608,"context_line":"Nova virt driver that nothing needs to be done for this ARQ but the instance"},{"line_number":609,"context_line":"spawn can proceed. Cyborg shall track that ARQ as associated with that"},{"line_number":610,"context_line":"instance even though it is not attached to the instance."},{"line_number":611,"context_line":""},{"line_number":612,"context_line":"A ARQ with ``attach_handle`` set to ``None`` is treated by Nova like any other"},{"line_number":613,"context_line":"ARQ. Specifically, when the instance dies, Nova shall call"},{"line_number":614,"context_line":"``unbind_arqs_for_instance()``, even if no accelerators are attached to the"},{"line_number":615,"context_line":"instance."},{"line_number":616,"context_line":""},{"line_number":617,"context_line":"Nova changes needed"},{"line_number":618,"context_line":"-------------------"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_f7f1e898","line":615,"range":{"start_line":590,"start_character":0,"end_line":615,"end_character":9},"in_reply_to":"3f79a3b5_adc59137","updated":"2018-11-19 09:15:18.000000000","message":"This part says that an ARQ may have an attach handle of type None. That is relevant to virt drivers, right?","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"ff649544558254a6b8210eaafed45724d2ce35da","unresolved":false,"context_lines":[{"line_number":587,"context_line":"must unbind the relevant ARQs by calling Cyborg API. It may then retry on"},{"line_number":588,"context_line":"another host or delete the (unbound) ARQs for the instance."},{"line_number":589,"context_line":""},{"line_number":590,"context_line":"Indirect accelerator access"},{"line_number":591,"context_line":"---------------------------"},{"line_number":592,"context_line":"As mentioned in Section `Use cases`_, there are scenarios where the"},{"line_number":593,"context_line":"accelerator needs to be provisioned but not attached to the VM. One of them"},{"line_number":594,"context_line":"involves indirect accelerator access."},{"line_number":595,"context_line":""},{"line_number":596,"context_line":"To handle this, Cyborg could represent the FPGA as a resource provider with an"},{"line_number":597,"context_line":"inventory of N units of CUSTOM_ACCELERATOR_FPGA for some value of N. The"},{"line_number":598,"context_line":"device profile for the request specifies"},{"line_number":599,"context_line":"``resources:CUSTOM_ACCELERATOR_FPGA\u003d1``, the trait for the device"},{"line_number":600,"context_line":"name/family/model, ``accel:function_id\u003d\u003cfunc-id\u003e`` and"},{"line_number":601,"context_line":"``accel:attach_target\u003dnone``.  Thus Placement locates all compute nodes with"},{"line_number":602,"context_line":"the device of the specified type. During ARQ bind, Cyborg checks if the chosen"},{"line_number":603,"context_line":"RP contains the right function and, if not, programs it."},{"line_number":604,"context_line":""},{"line_number":605,"context_line":"Since the device profile says ``accel:attach_target\u003dnone``, Cyborg shall"},{"line_number":606,"context_line":"return a bound ARQ to Nova wth ``attach_handle`` set to ``None``. Since the"},{"line_number":607,"context_line":"ARQ state indicates that bind succeeded, the lack of the attach handle tells"},{"line_number":608,"context_line":"Nova virt driver that nothing needs to be done for this ARQ but the instance"},{"line_number":609,"context_line":"spawn can proceed. Cyborg shall track that ARQ as associated with that"},{"line_number":610,"context_line":"instance even though it is not attached to the instance."},{"line_number":611,"context_line":""},{"line_number":612,"context_line":"A ARQ with ``attach_handle`` set to ``None`` is treated by Nova like any other"},{"line_number":613,"context_line":"ARQ. Specifically, when the instance dies, Nova shall call"},{"line_number":614,"context_line":"``unbind_arqs_for_instance()``, even if no accelerators are attached to the"},{"line_number":615,"context_line":"instance."},{"line_number":616,"context_line":""},{"line_number":617,"context_line":"Nova changes needed"},{"line_number":618,"context_line":"-------------------"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_e9b26831","line":615,"range":{"start_line":590,"start_character":0,"end_line":615,"end_character":9},"in_reply_to":"3f79a3b5_f7f1e898","updated":"2018-11-19 17:24:34.000000000","message":"no because the ARQ and deive profiles should not be associate with the vm at all in  this usecase.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"48f8cde9f7e30141d7420a32ad64bbef038ea7a6","unresolved":false,"context_lines":[{"line_number":617,"context_line":"Nova changes needed"},{"line_number":618,"context_line":"-------------------"},{"line_number":619,"context_line":"The changes needed in Nova shall be split into three phases, as stated in"},{"line_number":620,"context_line":"Section `User requests`_."},{"line_number":621,"context_line":""},{"line_number":622,"context_line":"#. Instance creation with requests that have device profile in the flavor"},{"line_number":623,"context_line":"#. Instance creation with requests that separate device profile from flavor"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_b225f360","line":620,"updated":"2018-11-14 14:21:29.000000000","message":"I don\u0027t think the phases need to be called out in detail above, as I said, and thus not here either.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"48f8cde9f7e30141d7420a32ad64bbef038ea7a6","unresolved":false,"context_lines":[{"line_number":626,"context_line":"We only enumerate the changes for the first phase here. Details for the other"},{"line_number":627,"context_line":"phases are in [#stein-ptg-ether]_."},{"line_number":628,"context_line":""},{"line_number":629,"context_line":"* Nested RPs need to work for scheduling [#nRP]_."},{"line_number":630,"context_line":"* A new flavor extra spec for device profiles should be added."},{"line_number":631,"context_line":"* Nova conductor must call os-acc to create unbound ARQs."},{"line_number":632,"context_line":"* Nova conductor must call os-acc to create bound ARQs."}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_5216dff5","line":629,"updated":"2018-11-14 14:21:29.000000000","message":"Link to spec or gerrit topic in dependencies below.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"48f8cde9f7e30141d7420a32ad64bbef038ea7a6","unresolved":false,"context_lines":[{"line_number":627,"context_line":"phases are in [#stein-ptg-ether]_."},{"line_number":628,"context_line":""},{"line_number":629,"context_line":"* Nested RPs need to work for scheduling [#nRP]_."},{"line_number":630,"context_line":"* A new flavor extra spec for device profiles should be added."},{"line_number":631,"context_line":"* Nova conductor must call os-acc to create unbound ARQs."},{"line_number":632,"context_line":"* Nova conductor must call os-acc to create bound ARQs."},{"line_number":633,"context_line":"* Nova compute manager must call os-acc for instance spawn and termination."}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_3219e323","line":630,"updated":"2018-11-14 14:21:29.000000000","message":"We don\u0027t add these, they\u0027re free-form.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"0f0e57e3d8dd97c7a62cbdf44db46522b78fa772","unresolved":false,"context_lines":[{"line_number":627,"context_line":"phases are in [#stein-ptg-ether]_."},{"line_number":628,"context_line":""},{"line_number":629,"context_line":"* Nested RPs need to work for scheduling [#nRP]_."},{"line_number":630,"context_line":"* A new flavor extra spec for device profiles should be added."},{"line_number":631,"context_line":"* Nova conductor must call os-acc to create unbound ARQs."},{"line_number":632,"context_line":"* Nova conductor must call os-acc to create bound ARQs."},{"line_number":633,"context_line":"* Nova compute manager must call os-acc for instance spawn and termination."}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_9b6b33ed","line":630,"in_reply_to":"3f79a3b5_3219e323","updated":"2018-11-14 16:02:06.000000000","message":"well we should proably update the docs at https://docs.openstack.org/nova/latest/user/flavors.html\n\nwith the new extra specs\nbut yes your right","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"48f8cde9f7e30141d7420a32ad64bbef038ea7a6","unresolved":false,"context_lines":[{"line_number":633,"context_line":"* Nova compute manager must call os-acc for instance spawn and termination."},{"line_number":634,"context_line":"* Nova virt base driver methods must be updated to include an ARQ_info"},{"line_number":635,"context_line":"  structure, with list of ARQs, as additional argument that defaults to None."},{"line_number":636,"context_line":"* Selected Nova virt drivers must be updated to handle accelerators."},{"line_number":637,"context_line":""},{"line_number":638,"context_line":"Alternatives"},{"line_number":639,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_b2cad378","line":636,"updated":"2018-11-14 14:21:29.000000000","message":"These are work items. Put them there, not here.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"48f8cde9f7e30141d7420a32ad64bbef038ea7a6","unresolved":false,"context_lines":[{"line_number":643,"context_line":"Data model impact"},{"line_number":644,"context_line":"-----------------"},{"line_number":645,"context_line":""},{"line_number":646,"context_line":"A new flavor extra spec for device profiles should be added."},{"line_number":647,"context_line":""},{"line_number":648,"context_line":"REST API impact"},{"line_number":649,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_72d43b1f","line":646,"updated":"2018-11-14 14:21:29.000000000","message":"As above, this is not a thing.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"48f8cde9f7e30141d7420a32ad64bbef038ea7a6","unresolved":false,"context_lines":[{"line_number":648,"context_line":"REST API impact"},{"line_number":649,"context_line":"---------------"},{"line_number":650,"context_line":""},{"line_number":651,"context_line":"None in Phase 1"},{"line_number":652,"context_line":""},{"line_number":653,"context_line":"Security impact"},{"line_number":654,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_12e5c707","line":651,"updated":"2018-11-14 14:21:29.000000000","message":"This spec is about phase 1, so just None here.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"48f8cde9f7e30141d7420a32ad64bbef038ea7a6","unresolved":false,"context_lines":[{"line_number":659,"context_line":"--------------------"},{"line_number":660,"context_line":""},{"line_number":661,"context_line":"Nova may choose to add additional notifications relating to os-acc"},{"line_number":662,"context_line":"invocation."},{"line_number":663,"context_line":""},{"line_number":664,"context_line":"Other end user impact"},{"line_number":665,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_92b23705","line":662,"updated":"2018-11-14 14:21:29.000000000","message":"Are you going to add/change some or not? If so, put them here, if not, then just put None.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"0f0e57e3d8dd97c7a62cbdf44db46522b78fa772","unresolved":false,"context_lines":[{"line_number":659,"context_line":"--------------------"},{"line_number":660,"context_line":""},{"line_number":661,"context_line":"Nova may choose to add additional notifications relating to os-acc"},{"line_number":662,"context_line":"invocation."},{"line_number":663,"context_line":""},{"line_number":664,"context_line":"Other end user impact"},{"line_number":665,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_fb28279f","line":662,"in_reply_to":"3f79a3b5_92b23705","updated":"2018-11-14 16:02:06.000000000","message":"i dont think we need any no notification so i would just make this none.\n\nif we wanted notifications for programing the device ectra i would expect those to be cyborg notificaiton not nova notificaions so form a nova point of view i think there would be no change.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"a74eca14b8f5b8f0075f08a944623e169e1fc3e6","unresolved":false,"context_lines":[{"line_number":659,"context_line":"--------------------"},{"line_number":660,"context_line":""},{"line_number":661,"context_line":"Nova may choose to add additional notifications relating to os-acc"},{"line_number":662,"context_line":"invocation."},{"line_number":663,"context_line":""},{"line_number":664,"context_line":"Other end user impact"},{"line_number":665,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_d7e62cdc","line":662,"in_reply_to":"3f79a3b5_fb28279f","updated":"2018-11-19 09:15:18.000000000","message":"Ok","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"48f8cde9f7e30141d7420a32ad64bbef038ea7a6","unresolved":false,"context_lines":[{"line_number":664,"context_line":"Other end user impact"},{"line_number":665,"context_line":"---------------------"},{"line_number":666,"context_line":""},{"line_number":667,"context_line":"None apart from those called out."},{"line_number":668,"context_line":""},{"line_number":669,"context_line":"Performance Impact"},{"line_number":670,"context_line":"------------------"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_f2c04b4e","line":667,"updated":"2018-11-14 14:21:29.000000000","message":"This is \"other\" impact, so .. None.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"48f8cde9f7e30141d7420a32ad64bbef038ea7a6","unresolved":false,"context_lines":[{"line_number":699,"context_line":"Work Items"},{"line_number":700,"context_line":"----------"},{"line_number":701,"context_line":""},{"line_number":702,"context_line":"See `Nova changes needed`_ section."},{"line_number":703,"context_line":""},{"line_number":704,"context_line":"Dependencies"},{"line_number":705,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_b2817300","line":702,"updated":"2018-11-14 14:21:29.000000000","message":"Please put them here and remove them from above. That\u0027s what this section is for.","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"48f8cde9f7e30141d7420a32ad64bbef038ea7a6","unresolved":false,"context_lines":[{"line_number":705,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":706,"context_line":""},{"line_number":707,"context_line":"* Nested Resource Provider support in Nova [#nRP]_"},{"line_number":708,"context_line":""},{"line_number":709,"context_line":"Testing"},{"line_number":710,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":711,"context_line":"There need to be unit tests and functional tests for the Nova changes."}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_9280f7f8","line":708,"updated":"2018-11-14 14:21:29.000000000","message":"Are the device profile and arq changes all done in cyborg or still pending?","commit_id":"6e07ef67b1b4fef1e9bc1a7f8df758f37817fc4c"}],"specs/train/approved/nova-cyborg-interaction.rst":[{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"548588ed791183aea6fc3cef63b33d81a056d2bd","unresolved":false,"context_lines":[{"line_number":63,"context_line":"  ([#cy-api-impl]_)."},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"* Instance operations: The behavior with respect to accelerators for all"},{"line_number":66,"context_line":"  standard instance operations are defined in [#inst-ops]_."},{"line_number":67,"context_line":"  This spec does not dwell on this topic."},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"Use Cases"}],"source_content_type":"text/x-rst","patch_set":11,"id":"dfbec78f_dd872661","line":66,"updated":"2019-05-07 20:21:19.000000000","message":"That spec is in Cyborg and seems to make sense after a quick read, but at least a summary needs to be included in Nova somehow, because Nova (upon request from the user) is the initiator of all those lifecycle operations. So if in a first pass only booting instances with accelerators is supported, then we need to make sure that all other operations are blocked at the Nova API layer until they\u0027re either explicitly implemented, or confirmed to work out of the box with no additional development effort needed.","commit_id":"cb9e58da70cb2471f3674ea078bad8784e911a43"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"6e8a72fe62a5de0f5e4449a885c30c822acf1012","unresolved":false,"context_lines":[{"line_number":63,"context_line":"  ([#cy-api-impl]_)."},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"* Instance operations: The behavior with respect to accelerators for all"},{"line_number":66,"context_line":"  standard instance operations are defined in [#inst-ops]_."},{"line_number":67,"context_line":"  This spec does not dwell on this topic."},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"Use Cases"}],"source_content_type":"text/x-rst","patch_set":11,"id":"dfbec78f_f5cc2c6b","line":66,"in_reply_to":"dfbec78f_4d7a8d88","updated":"2019-05-13 15:22:09.000000000","message":"I won\u0027t haggle over what spec has what words in it. What I don\u0027t want to happen is an instance ending up half-broken because a user requested an operation that\u0027s not supported and Nova still attempted it.","commit_id":"cb9e58da70cb2471f3674ea078bad8784e911a43"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"ec97c6e4626d5a5350a8c0d81bf4ae5a1debe56a","unresolved":false,"context_lines":[{"line_number":63,"context_line":"  ([#cy-api-impl]_)."},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"* Instance operations: The behavior with respect to accelerators for all"},{"line_number":66,"context_line":"  standard instance operations are defined in [#inst-ops]_."},{"line_number":67,"context_line":"  This spec does not dwell on this topic."},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"Use Cases"}],"source_content_type":"text/x-rst","patch_set":11,"id":"dfbec78f_4d7a8d88","line":66,"in_reply_to":"dfbec78f_dd872661","updated":"2019-05-10 22:49:06.000000000","message":"\u003e but at least a summary needs to be included in Nova\n\nI have got feedback to keep the Nova spec short and to keep Cyborg stuff in Cyborg specs.\n \n\u003e we need to make sure\n\u003e that all other operations are blocked at the Nova API layer until\n\u003e they\u0027re either explicitly implemented, or confirmed to work out of\n\u003e the box with no additional development effort needed.\n\nThe plan is to get as many operations in Train as feasible (except for live migration) and, at suitable date, file a Nova patch to block the rest. The trigger time is TBD, but should give enough time to merge the Nova patch.","commit_id":"cb9e58da70cb2471f3674ea078bad8784e911a43"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"37dc02302f6e3231c4c0fccbac43131c6566f3b6","unresolved":false,"context_lines":[{"line_number":87,"context_line":"Coexistence with PCI whitelists"},{"line_number":88,"context_line":"-------------------------------"},{"line_number":89,"context_line":"The operator tells Nova which PCI devices to claim and use by configuring the"},{"line_number":90,"context_line":"PCI Whitelists mechanism. In addition, the operator installs Cyborg drivers in"},{"line_number":91,"context_line":"compute nodes and configures/enables them. Those drivers may then discover and"},{"line_number":92,"context_line":"report some PCI devices. The operator must ensure that both configurations"},{"line_number":93,"context_line":"are compatible."},{"line_number":94,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"5fc1f717_2c09d8db","line":91,"range":{"start_line":90,"start_character":61,"end_line":91,"end_character":13},"updated":"2019-04-10 12:52:31.000000000","message":"Are these drivers part of a Cyborg agent running on the compute node?","commit_id":"cb9e58da70cb2471f3674ea078bad8784e911a43"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"f4eacf27526173d003cbd54d1ee42a379a824dc2","unresolved":false,"context_lines":[{"line_number":87,"context_line":"Coexistence with PCI whitelists"},{"line_number":88,"context_line":"-------------------------------"},{"line_number":89,"context_line":"The operator tells Nova which PCI devices to claim and use by configuring the"},{"line_number":90,"context_line":"PCI Whitelists mechanism. In addition, the operator installs Cyborg drivers in"},{"line_number":91,"context_line":"compute nodes and configures/enables them. Those drivers may then discover and"},{"line_number":92,"context_line":"report some PCI devices. The operator must ensure that both configurations"},{"line_number":93,"context_line":"are compatible."},{"line_number":94,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"3fce034c_46f736f7","line":91,"range":{"start_line":90,"start_character":61,"end_line":91,"end_character":13},"in_reply_to":"5fc1f717_2c09d8db","updated":"2019-04-11 02:06:31.000000000","message":"Yes They are libraries/modules invoked by the agent.\n\nhttp://git.openstack.org/cgit/openstack/cyborg/tree/cyborg/agent/resource_tracker.py#n47","commit_id":"cb9e58da70cb2471f3674ea078bad8784e911a43"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"37dc02302f6e3231c4c0fccbac43131c6566f3b6","unresolved":false,"context_lines":[{"line_number":88,"context_line":"-------------------------------"},{"line_number":89,"context_line":"The operator tells Nova which PCI devices to claim and use by configuring the"},{"line_number":90,"context_line":"PCI Whitelists mechanism. In addition, the operator installs Cyborg drivers in"},{"line_number":91,"context_line":"compute nodes and configures/enables them. Those drivers may then discover and"},{"line_number":92,"context_line":"report some PCI devices. The operator must ensure that both configurations"},{"line_number":93,"context_line":"are compatible."},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"Ideally, there should be a single way for the operator to identify which PCI"}],"source_content_type":"text/x-rst","patch_set":11,"id":"5fc1f717_0c065ccf","line":92,"range":{"start_line":91,"start_character":43,"end_line":92,"end_character":24},"updated":"2019-04-10 12:52:31.000000000","message":"report to placement?","commit_id":"cb9e58da70cb2471f3674ea078bad8784e911a43"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"f4eacf27526173d003cbd54d1ee42a379a824dc2","unresolved":false,"context_lines":[{"line_number":88,"context_line":"-------------------------------"},{"line_number":89,"context_line":"The operator tells Nova which PCI devices to claim and use by configuring the"},{"line_number":90,"context_line":"PCI Whitelists mechanism. In addition, the operator installs Cyborg drivers in"},{"line_number":91,"context_line":"compute nodes and configures/enables them. Those drivers may then discover and"},{"line_number":92,"context_line":"report some PCI devices. The operator must ensure that both configurations"},{"line_number":93,"context_line":"are compatible."},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"Ideally, there should be a single way for the operator to identify which PCI"}],"source_content_type":"text/x-rst","patch_set":11,"id":"3fce034c_66d11258","line":92,"range":{"start_line":91,"start_character":43,"end_line":92,"end_character":24},"in_reply_to":"5fc1f717_0c065ccf","updated":"2019-04-11 02:06:31.000000000","message":"They report to the agent, which forwards to the conductor. The conductor does a diff with the previous snapshot, updates Cyborg db, and then updates Placement.","commit_id":"cb9e58da70cb2471f3674ea078bad8784e911a43"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"37dc02302f6e3231c4c0fccbac43131c6566f3b6","unresolved":false,"context_lines":[{"line_number":98,"context_line":"could be agreed upon by all stakeholders, Cyborg could adopt it."},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"Until that point, the operator tells Cyborg which devices to claim by"},{"line_number":101,"context_line":"using Cyborg\u0027s configuration file. The operator must ensure that this is"},{"line_number":102,"context_line":"compatible with the PCI whitelists configured in Nova."},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"Placement update"},{"line_number":105,"context_line":"----------------"}],"source_content_type":"text/x-rst","patch_set":11,"id":"5fc1f717_4cff84aa","line":102,"range":{"start_line":101,"start_character":36,"end_line":102,"end_character":54},"updated":"2019-04-10 12:52:31.000000000","message":"What does compatible means here? Are the two PCI whitelist configurations need to be disjoint?","commit_id":"cb9e58da70cb2471f3674ea078bad8784e911a43"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"3359aa6a779d65321e71d2e511200ac203aa288c","unresolved":false,"context_lines":[{"line_number":98,"context_line":"could be agreed upon by all stakeholders, Cyborg could adopt it."},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"Until that point, the operator tells Cyborg which devices to claim by"},{"line_number":101,"context_line":"using Cyborg\u0027s configuration file. The operator must ensure that this is"},{"line_number":102,"context_line":"compatible with the PCI whitelists configured in Nova."},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"Placement update"},{"line_number":105,"context_line":"----------------"}],"source_content_type":"text/x-rst","patch_set":11,"id":"ffb9cba7_7d493fce","line":102,"range":{"start_line":101,"start_character":36,"end_line":102,"end_character":54},"in_reply_to":"3fce034c_38ad2931","updated":"2019-04-25 15:26:16.000000000","message":"The operator can enable or disable specific Cyborg drivers. That effectively enables/disables a class of devices with specific PCI IDs. If operators desire a more fine-grained control, we could offer that in the future, but probably via APIs rather than config files.","commit_id":"cb9e58da70cb2471f3674ea078bad8784e911a43"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"3158e47108f645552a05687081d8c32f305dabf8","unresolved":false,"context_lines":[{"line_number":98,"context_line":"could be agreed upon by all stakeholders, Cyborg could adopt it."},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"Until that point, the operator tells Cyborg which devices to claim by"},{"line_number":101,"context_line":"using Cyborg\u0027s configuration file. The operator must ensure that this is"},{"line_number":102,"context_line":"compatible with the PCI whitelists configured in Nova."},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"Placement update"},{"line_number":105,"context_line":"----------------"}],"source_content_type":"text/x-rst","patch_set":11,"id":"3fce034c_38ad2931","line":102,"range":{"start_line":101,"start_character":36,"end_line":102,"end_character":54},"in_reply_to":"3fce034c_c6bb260c","updated":"2019-04-15 12:52:18.000000000","message":"How do you control that if there\u0027s no corresponding whitelist within Cyborg or will the agent try to claim all devices?","commit_id":"cb9e58da70cb2471f3674ea078bad8784e911a43"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"f4eacf27526173d003cbd54d1ee42a379a824dc2","unresolved":false,"context_lines":[{"line_number":98,"context_line":"could be agreed upon by all stakeholders, Cyborg could adopt it."},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"Until that point, the operator tells Cyborg which devices to claim by"},{"line_number":101,"context_line":"using Cyborg\u0027s configuration file. The operator must ensure that this is"},{"line_number":102,"context_line":"compatible with the PCI whitelists configured in Nova."},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"Placement update"},{"line_number":105,"context_line":"----------------"}],"source_content_type":"text/x-rst","patch_set":11,"id":"3fce034c_c6bb260c","line":102,"range":{"start_line":101,"start_character":36,"end_line":102,"end_character":54},"in_reply_to":"5fc1f717_4cff84aa","updated":"2019-04-11 02:06:31.000000000","message":"The two sets of devices need to be disjoint. There is no PCI whitelist for Cyborg. But, when the operator enables a driver for Cyborg, he should ensure corresponding PCI IDs don\u0027t appear in the whitelist.","commit_id":"cb9e58da70cb2471f3674ea078bad8784e911a43"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"ec97c6e4626d5a5350a8c0d81bf4ae5a1debe56a","unresolved":false,"context_lines":[{"line_number":98,"context_line":"could be agreed upon by all stakeholders, Cyborg could adopt it."},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"Until that point, the operator tells Cyborg which devices to claim by"},{"line_number":101,"context_line":"using Cyborg\u0027s configuration file. The operator must ensure that this is"},{"line_number":102,"context_line":"compatible with the PCI whitelists configured in Nova."},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"Placement update"},{"line_number":105,"context_line":"----------------"}],"source_content_type":"text/x-rst","patch_set":11,"id":"dfbec78f_adaf89e1","line":102,"range":{"start_line":101,"start_character":36,"end_line":102,"end_character":54},"in_reply_to":"dfbec78f_4b685120","updated":"2019-05-10 22:49:06.000000000","message":"I don\u0027t see it as a common case. Why would a deployment incur the costs of both whitelisting and installing Cyborg drivers? Also, the operator has to use 2 kinds of flavors for the same device class, and track inventory in 2 different ways. \n\nFWIW, Cyborg could consider disabling specific devices but first we want to hear from operators.","commit_id":"cb9e58da70cb2471f3674ea078bad8784e911a43"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"6e8a72fe62a5de0f5e4449a885c30c822acf1012","unresolved":false,"context_lines":[{"line_number":98,"context_line":"could be agreed upon by all stakeholders, Cyborg could adopt it."},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"Until that point, the operator tells Cyborg which devices to claim by"},{"line_number":101,"context_line":"using Cyborg\u0027s configuration file. The operator must ensure that this is"},{"line_number":102,"context_line":"compatible with the PCI whitelists configured in Nova."},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"Placement update"},{"line_number":105,"context_line":"----------------"}],"source_content_type":"text/x-rst","patch_set":11,"id":"dfbec78f_d5d488eb","line":102,"range":{"start_line":101,"start_character":36,"end_line":102,"end_character":54},"in_reply_to":"dfbec78f_adaf89e1","updated":"2019-05-13 15:22:09.000000000","message":"Yep, that\u0027s fair.","commit_id":"cb9e58da70cb2471f3674ea078bad8784e911a43"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"548588ed791183aea6fc3cef63b33d81a056d2bd","unresolved":false,"context_lines":[{"line_number":98,"context_line":"could be agreed upon by all stakeholders, Cyborg could adopt it."},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"Until that point, the operator tells Cyborg which devices to claim by"},{"line_number":101,"context_line":"using Cyborg\u0027s configuration file. The operator must ensure that this is"},{"line_number":102,"context_line":"compatible with the PCI whitelists configured in Nova."},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"Placement update"},{"line_number":105,"context_line":"----------------"}],"source_content_type":"text/x-rst","patch_set":11,"id":"dfbec78f_4b685120","line":102,"range":{"start_line":101,"start_character":36,"end_line":102,"end_character":54},"in_reply_to":"ffb9cba7_7d493fce","updated":"2019-05-07 20:21:19.000000000","message":"Ah, so enabling a Cybord driver will make Cyborg claim a whole \"class\" of devices, for lack of a better word. And those devices need to *not* be in the Nova whitelist.\n\nThis kinda sucks for the case of \"I have 2 devices of class X, I want to pass 1 to Cyborg and one as PCI passthrough in Nova.\"\n\nNot sure how common such a use case would be, but it\u0027s something to think about it.","commit_id":"cb9e58da70cb2471f3674ea078bad8784e911a43"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"548588ed791183aea6fc3cef63b33d81a056d2bd","unresolved":false,"context_lines":[{"line_number":106,"context_line":"Cyborg shall call Placement API directly to represent devices and"},{"line_number":107,"context_line":"accelerators. Some of the intended use cases for the API invocation are:"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"* Create or delete child RPs under the compute node RP."},{"line_number":110,"context_line":"* Create or delete custom RCs and custom traits."},{"line_number":111,"context_line":"* Associate traits with RPs or remove such association."},{"line_number":112,"context_line":"* Update RP inventory."},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"Cyborg shall not modify the RPs created by any other component, such"},{"line_number":115,"context_line":"as Nova virt drivers."}],"source_content_type":"text/x-rst","patch_set":11,"id":"dfbec78f_a6e9041b","line":112,"range":{"start_line":109,"start_character":0,"end_line":112,"end_character":22},"updated":"2019-05-07 20:21:19.000000000","message":"Placement can handle that sort of stuff, I guess? Specifically, multiple services creating nested RPs under the same \"root\"? Having an extra child RP \"owned\" by Cyborg is not something Nova needs to think about when reshaping for unrelated things (like GPUs)?","commit_id":"cb9e58da70cb2471f3674ea078bad8784e911a43"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"6e8a72fe62a5de0f5e4449a885c30c822acf1012","unresolved":false,"context_lines":[{"line_number":106,"context_line":"Cyborg shall call Placement API directly to represent devices and"},{"line_number":107,"context_line":"accelerators. Some of the intended use cases for the API invocation are:"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"* Create or delete child RPs under the compute node RP."},{"line_number":110,"context_line":"* Create or delete custom RCs and custom traits."},{"line_number":111,"context_line":"* Associate traits with RPs or remove such association."},{"line_number":112,"context_line":"* Update RP inventory."},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"Cyborg shall not modify the RPs created by any other component, such"},{"line_number":115,"context_line":"as Nova virt drivers."}],"source_content_type":"text/x-rst","patch_set":11,"id":"dfbec78f_b5d794ee","line":112,"range":{"start_line":109,"start_character":0,"end_line":112,"end_character":22},"in_reply_to":"dfbec78f_4d884d70","updated":"2019-05-13 15:22:09.000000000","message":"I\u0027m not a placement expert, so if others are fine with this I\u0027m in no position to complain :)","commit_id":"cb9e58da70cb2471f3674ea078bad8784e911a43"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"ec97c6e4626d5a5350a8c0d81bf4ae5a1debe56a","unresolved":false,"context_lines":[{"line_number":106,"context_line":"Cyborg shall call Placement API directly to represent devices and"},{"line_number":107,"context_line":"accelerators. Some of the intended use cases for the API invocation are:"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"* Create or delete child RPs under the compute node RP."},{"line_number":110,"context_line":"* Create or delete custom RCs and custom traits."},{"line_number":111,"context_line":"* Associate traits with RPs or remove such association."},{"line_number":112,"context_line":"* Update RP inventory."},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"Cyborg shall not modify the RPs created by any other component, such"},{"line_number":115,"context_line":"as Nova virt drivers."}],"source_content_type":"text/x-rst","patch_set":11,"id":"dfbec78f_4d884d70","line":112,"range":{"start_line":109,"start_character":0,"end_line":112,"end_character":22},"in_reply_to":"dfbec78f_a6e9041b","updated":"2019-05-10 22:49:06.000000000","message":"Multiple services creating nested RPs has been explicitly considered. Re. handling nested RPs owned by non-Nova services, I\u0027m not an expert but there has been talk of using an \u0027owned-by\u0027 field.","commit_id":"cb9e58da70cb2471f3674ea078bad8784e911a43"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"9558eae415d38c0bdef036865956743d145f61c8","unresolved":false,"context_lines":[{"line_number":106,"context_line":"Cyborg shall call Placement API directly to represent devices and"},{"line_number":107,"context_line":"accelerators. Some of the intended use cases for the API invocation are:"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"* Create or delete child RPs under the compute node RP."},{"line_number":110,"context_line":"* Create or delete custom RCs and custom traits."},{"line_number":111,"context_line":"* Associate traits with RPs or remove such association."},{"line_number":112,"context_line":"* Update RP inventory."},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"Cyborg shall not modify the RPs created by any other component, such"},{"line_number":115,"context_line":"as Nova virt drivers."}],"source_content_type":"text/x-rst","patch_set":11,"id":"dfbec78f_58ce8db4","line":112,"range":{"start_line":109,"start_character":0,"end_line":112,"end_character":22},"in_reply_to":"dfbec78f_b5d794ee","updated":"2019-05-13 15:31:17.000000000","message":"Yeah, update_provider_tree has an explicit contract not to f with things it doesn\u0027t own: https://opendev.org/openstack/nova/src/branch/master/nova/virt/driver.py#L996-L1002","commit_id":"cb9e58da70cb2471f3674ea078bad8784e911a43"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"37dc02302f6e3231c4c0fccbac43131c6566f3b6","unresolved":false,"context_lines":[{"line_number":113,"context_line":""},{"line_number":114,"context_line":"Cyborg shall not modify the RPs created by any other component, such"},{"line_number":115,"context_line":"as Nova virt drivers."},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"User requests"},{"line_number":118,"context_line":"-------------"},{"line_number":119,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"5fc1f717_ecdc3046","line":116,"updated":"2019-04-10 12:52:31.000000000","message":"Will the hostname of the compute host (and therefore the name of the root RP) be used by placement to identify where to create the child RPs?","commit_id":"cb9e58da70cb2471f3674ea078bad8784e911a43"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"f4eacf27526173d003cbd54d1ee42a379a824dc2","unresolved":false,"context_lines":[{"line_number":113,"context_line":""},{"line_number":114,"context_line":"Cyborg shall not modify the RPs created by any other component, such"},{"line_number":115,"context_line":"as Nova virt drivers."},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"User requests"},{"line_number":118,"context_line":"-------------"},{"line_number":119,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"3fce034c_863bde9a","line":116,"in_reply_to":"5fc1f717_ecdc3046","updated":"2019-04-11 02:06:31.000000000","message":"Cyborg shall create the RPs under the compute node RP in Placement. I suppose the hostname has to figure in that process. Parenting to a NUMA node instead of compute node is open to discussion.","commit_id":"cb9e58da70cb2471f3674ea078bad8784e911a43"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"548588ed791183aea6fc3cef63b33d81a056d2bd","unresolved":false,"context_lines":[{"line_number":117,"context_line":"User requests"},{"line_number":118,"context_line":"-------------"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"The user request for accelerators is encapsulated in a device profile"},{"line_number":121,"context_line":"[#dev-prof]_."},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"A device profile may be viewed as a \u0027flavor for devices\u0027. Accordingly, the"}],"source_content_type":"text/x-rst","patch_set":11,"id":"dfbec78f_86eac0a9","line":120,"updated":"2019-05-07 20:21:19.000000000","message":"Should probably clarify here that devices profiles are resources in the Cyborg API.","commit_id":"cb9e58da70cb2471f3674ea078bad8784e911a43"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"ec97c6e4626d5a5350a8c0d81bf4ae5a1debe56a","unresolved":false,"context_lines":[{"line_number":117,"context_line":"User requests"},{"line_number":118,"context_line":"-------------"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"The user request for accelerators is encapsulated in a device profile"},{"line_number":121,"context_line":"[#dev-prof]_."},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"A device profile may be viewed as a \u0027flavor for devices\u0027. Accordingly, the"}],"source_content_type":"text/x-rst","patch_set":11,"id":"dfbec78f_eab8f1c8","line":120,"in_reply_to":"dfbec78f_86eac0a9","updated":"2019-05-10 22:49:06.000000000","message":"Done","commit_id":"cb9e58da70cb2471f3674ea078bad8784e911a43"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"548588ed791183aea6fc3cef63b33d81a056d2bd","unresolved":false,"context_lines":[{"line_number":136,"context_line":""},{"line_number":137,"context_line":" openstack server create --flavor f ....  # instance creation"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"In the future, device profile will be specified separately in instance"},{"line_number":140,"context_line":"creation API and other use cases, like hot-attach, will be supported."},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"Updating the Request Spec"}],"source_content_type":"text/x-rst","patch_set":11,"id":"dfbec78f_2628b4e0","line":139,"updated":"2019-05-07 20:21:19.000000000","message":"Just to play devil\u0027s advocate a bit, what\u0027s the advantage for doing it as a flavor extra spec? Simpler code? It\u0027s not like any of this is going to be backportable, so why not bite the bullet and do it in a new microversion right away? The attach stuff can be done in a later microversion.","commit_id":"cb9e58da70cb2471f3674ea078bad8784e911a43"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"ec97c6e4626d5a5350a8c0d81bf4ae5a1debe56a","unresolved":false,"context_lines":[{"line_number":136,"context_line":""},{"line_number":137,"context_line":" openstack server create --flavor f ....  # instance creation"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"In the future, device profile will be specified separately in instance"},{"line_number":140,"context_line":"creation API and other use cases, like hot-attach, will be supported."},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"Updating the Request Spec"}],"source_content_type":"text/x-rst","patch_set":11,"id":"dfbec78f_6d92f1a0","line":139,"in_reply_to":"dfbec78f_2628b4e0","updated":"2019-05-10 22:49:06.000000000","message":"I am fine either way but Nova developers at Stein PTG have explicitly asked to not make changes to Nova API right away. I guess that makes sense -- let Cyborg get adopted and let specific use cases emerge for hot add/delete etc. before making API changes.","commit_id":"cb9e58da70cb2471f3674ea078bad8784e911a43"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"6e8a72fe62a5de0f5e4449a885c30c822acf1012","unresolved":false,"context_lines":[{"line_number":136,"context_line":""},{"line_number":137,"context_line":" openstack server create --flavor f ....  # instance creation"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"In the future, device profile will be specified separately in instance"},{"line_number":140,"context_line":"creation API and other use cases, like hot-attach, will be supported."},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"Updating the Request Spec"}],"source_content_type":"text/x-rst","patch_set":11,"id":"dfbec78f_3532c45f","line":139,"in_reply_to":"dfbec78f_6d92f1a0","updated":"2019-05-13 15:22:09.000000000","message":"\u003e I am fine either way but Nova developers at Stein PTG have\n \u003e explicitly asked to not make changes to Nova API right away. I\n \u003e guess that makes sense -- let Cyborg get adopted\n\nAh, yeah, that\u0027s a good argument. No API changes for now, then.","commit_id":"cb9e58da70cb2471f3674ea078bad8784e911a43"},{"author":{"_account_id":25738,"name":"Xinran WANG","email":"xin-ran.wang@intel.com","username":"Xinran"},"change_message_id":"ae98da0a7e34e64254d851e6ebae979bfe423470","unresolved":false,"context_lines":[{"line_number":142,"context_line":"Updating the Request Spec"},{"line_number":143,"context_line":"-------------------------"},{"line_number":144,"context_line":"When the user submits a request to create an instance, in any of the ways"},{"line_number":145,"context_line":"described in Section `User requests`_, Nova needs to call a Cyborg API, to get"},{"line_number":146,"context_line":"back the resource request groups in the device profile and merge them into the"},{"line_number":147,"context_line":"request spec. (This is along the lines of the scheme proposed for Neutron"},{"line_number":148,"context_line":"[#req-spec-groups]_.)"}],"source_content_type":"text/x-rst","patch_set":11,"id":"ffb9cba7_057da11b","line":145,"range":{"start_line":145,"start_character":39,"end_line":145,"end_character":70},"updated":"2019-04-22 03:23:28.000000000","message":"I did not see such API description in the device_profile spec in cyborg-spec. The GET method return a entire device_profile. Who will parse the groups fields in dev_profile to return request group and merge them into request spec?","commit_id":"cb9e58da70cb2471f3674ea078bad8784e911a43"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"c0af5924923e18fc30791b01644f81fd37d8fae8","unresolved":false,"context_lines":[{"line_number":142,"context_line":"Updating the Request Spec"},{"line_number":143,"context_line":"-------------------------"},{"line_number":144,"context_line":"When the user submits a request to create an instance, in any of the ways"},{"line_number":145,"context_line":"described in Section `User requests`_, Nova needs to call a Cyborg API, to get"},{"line_number":146,"context_line":"back the resource request groups in the device profile and merge them into the"},{"line_number":147,"context_line":"request spec. (This is along the lines of the scheme proposed for Neutron"},{"line_number":148,"context_line":"[#req-spec-groups]_.)"}],"source_content_type":"text/x-rst","patch_set":11,"id":"ffb9cba7_fdcc4fbd","line":145,"range":{"start_line":145,"start_character":39,"end_line":145,"end_character":70},"in_reply_to":"ffb9cba7_057da11b","updated":"2019-04-25 15:20:38.000000000","message":"Cyborg provides a generic GET API for device profiles, and Nova converts that to the form it needs. Please see:\nhttps://review.opendev.org/#/c/631243/18/nova/scheduler/utils.py","commit_id":"cb9e58da70cb2471f3674ea078bad8784e911a43"},{"author":{"_account_id":24872,"name":"YumengBao","email":"yumeng_bao@yahoo.com","username":"Yumeng_Bao"},"change_message_id":"44ffbc6e207afefe275d6a4b1840cfdfaa8520f8","unresolved":false,"context_lines":[{"line_number":143,"context_line":"-------------------------"},{"line_number":144,"context_line":"When the user submits a request to create an instance, in any of the ways"},{"line_number":145,"context_line":"described in Section `User requests`_, Nova needs to call a Cyborg API, to get"},{"line_number":146,"context_line":"back the resource request groups in the device profile and merge them into the"},{"line_number":147,"context_line":"request spec. (This is along the lines of the scheme proposed for Neutron"},{"line_number":148,"context_line":"[#req-spec-groups]_.)"},{"line_number":149,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"5fc1f717_897fbf15","line":146,"range":{"start_line":146,"start_character":18,"end_line":146,"end_character":32},"updated":"2019-04-09 09:36:04.000000000","message":"If possible, could you also add a brief definition of the concept \"request_group\" here?  something like that described in neutron request group: If you want to get the same kind of resources from multiple resource providers at once, or if you require a provider of a particular requested resource class to have a specific trait or aggregate membership, you can use the Granular Resource Request feature.","commit_id":"cb9e58da70cb2471f3674ea078bad8784e911a43"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"2312af9645de97af78cb5aea4f19f7e73f1bed2d","unresolved":false,"context_lines":[{"line_number":143,"context_line":"-------------------------"},{"line_number":144,"context_line":"When the user submits a request to create an instance, in any of the ways"},{"line_number":145,"context_line":"described in Section `User requests`_, Nova needs to call a Cyborg API, to get"},{"line_number":146,"context_line":"back the resource request groups in the device profile and merge them into the"},{"line_number":147,"context_line":"request spec. (This is along the lines of the scheme proposed for Neutron"},{"line_number":148,"context_line":"[#req-spec-groups]_.)"},{"line_number":149,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"5fc1f717_c4d12e59","line":146,"range":{"start_line":146,"start_character":18,"end_line":146,"end_character":32},"in_reply_to":"5fc1f717_897fbf15","updated":"2019-04-09 10:05:40.000000000","message":"The device profile request groups are defined in the spec [1].\n\nThe original concept of a request group is from the extra specs in the flavor. Would [2] be a good reference for you?\n\n[1] https://git.openstack.org/cgit/openstack/cyborg-specs/tree/specs/train/approved/device-profiles.rst?h\u003drefs/changes/78/602978/7#n78\n\n[2] https://specs.openstack.org/openstack/nova-specs/specs/rocky/implemented/granular-resource-requests.html","commit_id":"cb9e58da70cb2471f3674ea078bad8784e911a43"},{"author":{"_account_id":25738,"name":"Xinran WANG","email":"xin-ran.wang@intel.com","username":"Xinran"},"change_message_id":"ae98da0a7e34e64254d851e6ebae979bfe423470","unresolved":false,"context_lines":[{"line_number":143,"context_line":"-------------------------"},{"line_number":144,"context_line":"When the user submits a request to create an instance, in any of the ways"},{"line_number":145,"context_line":"described in Section `User requests`_, Nova needs to call a Cyborg API, to get"},{"line_number":146,"context_line":"back the resource request groups in the device profile and merge them into the"},{"line_number":147,"context_line":"request spec. (This is along the lines of the scheme proposed for Neutron"},{"line_number":148,"context_line":"[#req-spec-groups]_.)"},{"line_number":149,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"ffb9cba7_e5e2cd2f","line":146,"range":{"start_line":146,"start_character":18,"end_line":146,"end_character":32},"in_reply_to":"5fc1f717_c4d12e59","updated":"2019-04-22 03:23:28.000000000","message":"the link[1] is depracated.","commit_id":"cb9e58da70cb2471f3674ea078bad8784e911a43"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"c0af5924923e18fc30791b01644f81fd37d8fae8","unresolved":false,"context_lines":[{"line_number":143,"context_line":"-------------------------"},{"line_number":144,"context_line":"When the user submits a request to create an instance, in any of the ways"},{"line_number":145,"context_line":"described in Section `User requests`_, Nova needs to call a Cyborg API, to get"},{"line_number":146,"context_line":"back the resource request groups in the device profile and merge them into the"},{"line_number":147,"context_line":"request spec. (This is along the lines of the scheme proposed for Neutron"},{"line_number":148,"context_line":"[#req-spec-groups]_.)"},{"line_number":149,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"ffb9cba7_7d55bfc5","line":146,"range":{"start_line":146,"start_character":18,"end_line":146,"end_character":32},"in_reply_to":"ffb9cba7_e5e2cd2f","updated":"2019-04-25 15:20:38.000000000","message":"Updated reference for [1]: https://review.opendev.org/#/c/602978/","commit_id":"cb9e58da70cb2471f3674ea078bad8784e911a43"},{"author":{"_account_id":25738,"name":"Xinran WANG","email":"xin-ran.wang@intel.com","username":"Xinran"},"change_message_id":"ae98da0a7e34e64254d851e6ebae979bfe423470","unresolved":false,"context_lines":[{"line_number":154,"context_line":"to the way Nova calls Placement. A new Cyborg client module shall be added to"},{"line_number":155,"context_line":"Nova, to encapsulate such calls and to provide Cyborg-specific functionality."},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"VM images in Glance may be associated with image properties (other than image"},{"line_number":158,"context_line":"traits), such as bitstream/function IDs needed for that image. So, Nova should"},{"line_number":159,"context_line":"pass the VM image UUID from the request spec to Cyborg. This is TBD."},{"line_number":160,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"ffb9cba7_45f2b908","line":157,"range":{"start_line":157,"start_character":0,"end_line":157,"end_character":60},"updated":"2019-04-22 03:23:28.000000000","message":"what doest VM image mean here, is the VM OS image or the image to be program on FPGA? I am sometimes confused about this expression :)","commit_id":"cb9e58da70cb2471f3674ea078bad8784e911a43"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"c0af5924923e18fc30791b01644f81fd37d8fae8","unresolved":false,"context_lines":[{"line_number":154,"context_line":"to the way Nova calls Placement. A new Cyborg client module shall be added to"},{"line_number":155,"context_line":"Nova, to encapsulate such calls and to provide Cyborg-specific functionality."},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"VM images in Glance may be associated with image properties (other than image"},{"line_number":158,"context_line":"traits), such as bitstream/function IDs needed for that image. So, Nova should"},{"line_number":159,"context_line":"pass the VM image UUID from the request spec to Cyborg. This is TBD."},{"line_number":160,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"ffb9cba7_9d69938c","line":157,"range":{"start_line":157,"start_character":0,"end_line":157,"end_character":60},"in_reply_to":"ffb9cba7_45f2b908","updated":"2019-04-25 15:20:38.000000000","message":"By VM image, I always mean the disk image (with guest OS) to be used by the VM. I use the term \u0027bitstream\u0027 to refer to FPGA images, except in the term \u0027image metadata\u0027 which is Glance terminology.","commit_id":"cb9e58da70cb2471f3674ea078bad8784e911a43"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"548588ed791183aea6fc3cef63b33d81a056d2bd","unresolved":false,"context_lines":[{"line_number":156,"context_line":""},{"line_number":157,"context_line":"VM images in Glance may be associated with image properties (other than image"},{"line_number":158,"context_line":"traits), such as bitstream/function IDs needed for that image. So, Nova should"},{"line_number":159,"context_line":"pass the VM image UUID from the request spec to Cyborg. This is TBD."},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"The groups in the device profile are numbered by Cyborg. The request groups"},{"line_number":162,"context_line":"that are merged into the request spec are numbered by Nova. These numberings"}],"source_content_type":"text/x-rst","patch_set":11,"id":"dfbec78f_c63438fe","line":159,"updated":"2019-05-07 20:21:19.000000000","message":"Seems inefficient. If Nova\u0027s already fetched the image metadata, can it not pass the properties directly to Cyborg, to avoid Cyborg having to query the image API again?\n\nThis also opens up the possibilities for a race, wherein an image property is modified immediately after a boot but before Cyborg fetches the image. I know it\u0027s extrement unlikely (and in practice, what would be the damage?), but it\u0027s something to think about.","commit_id":"cb9e58da70cb2471f3674ea078bad8784e911a43"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"548588ed791183aea6fc3cef63b33d81a056d2bd","unresolved":false,"context_lines":[{"line_number":222,"context_line":"   that includes a device profile name."},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"#. NEW: The Nova scheduler calls the Cyborg API ``GET"},{"line_number":225,"context_line":"   /v2/device_profiles?name\u003d$device_profile_name`` and gets back the device"},{"line_number":226,"context_line":"   profile request groups. These are added to the request spec."},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"#. Nova invokes Placement and gets a list of allocation candidates. Nova"}],"source_content_type":"text/x-rst","patch_set":11,"id":"dfbec78f_dad5ec44","line":225,"range":{"start_line":225,"start_character":4,"end_line":225,"end_character":6},"updated":"2019-05-07 20:21:19.000000000","message":"Cyborg is at v2 already? ;)","commit_id":"cb9e58da70cb2471f3674ea078bad8784e911a43"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"548588ed791183aea6fc3cef63b33d81a056d2bd","unresolved":false,"context_lines":[{"line_number":222,"context_line":"   that includes a device profile name."},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"#. NEW: The Nova scheduler calls the Cyborg API ``GET"},{"line_number":225,"context_line":"   /v2/device_profiles?name\u003d$device_profile_name`` and gets back the device"},{"line_number":226,"context_line":"   profile request groups. These are added to the request spec."},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"#. Nova invokes Placement and gets a list of allocation candidates. Nova"}],"source_content_type":"text/x-rst","patch_set":11,"id":"dfbec78f_5a46dc23","line":225,"range":{"start_line":225,"start_character":22,"end_line":225,"end_character":47},"updated":"2019-05-07 20:21:19.000000000","message":"I know this isn\u0027t a spec for the Cyborg API, but if you\u0027re GETting a device profile with a unique name, the request response should look more like:\n\nGET /v2/device_profiles/\u003cname\u003e\n\n200 OK\n\u003cdevice profile\u003e\n\nand not a list of request groups. It\u0027s weird to GET a device profile and receive a different thing.","commit_id":"cb9e58da70cb2471f3674ea078bad8784e911a43"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"ec97c6e4626d5a5350a8c0d81bf4ae5a1debe56a","unresolved":false,"context_lines":[{"line_number":222,"context_line":"   that includes a device profile name."},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"#. NEW: The Nova scheduler calls the Cyborg API ``GET"},{"line_number":225,"context_line":"   /v2/device_profiles?name\u003d$device_profile_name`` and gets back the device"},{"line_number":226,"context_line":"   profile request groups. These are added to the request spec."},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"#. Nova invokes Placement and gets a list of allocation candidates. Nova"}],"source_content_type":"text/x-rst","patch_set":11,"id":"dfbec78f_ca116dae","line":225,"range":{"start_line":225,"start_character":22,"end_line":225,"end_character":47},"in_reply_to":"dfbec78f_5a46dc23","updated":"2019-05-10 22:49:06.000000000","message":"That was the first design. But I found an unsavory side effect: if the name ends in \".xyz\", the pecan WSGI treats the \".xyz\" as an extension and tries to translate it to a MIME type. Sometimes, there is a valid MIME type for that and pecan fails the request with the message that the MIME type is unsupported. We could document that such naming is not recommended. But it is better to not even allow for such error, esp. when there is an alternative way to request a specific dp by name.\n\nAlso, the pattern /v2/device_profiles/{uuid} needs to be allowed for enabling renaming etc.","commit_id":"cb9e58da70cb2471f3674ea078bad8784e911a43"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"6e8a72fe62a5de0f5e4449a885c30c822acf1012","unresolved":false,"context_lines":[{"line_number":222,"context_line":"   that includes a device profile name."},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"#. NEW: The Nova scheduler calls the Cyborg API ``GET"},{"line_number":225,"context_line":"   /v2/device_profiles?name\u003d$device_profile_name`` and gets back the device"},{"line_number":226,"context_line":"   profile request groups. These are added to the request spec."},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"#. Nova invokes Placement and gets a list of allocation candidates. Nova"}],"source_content_type":"text/x-rst","patch_set":11,"id":"dfbec78f_358084bf","line":225,"range":{"start_line":225,"start_character":22,"end_line":225,"end_character":47},"in_reply_to":"dfbec78f_ca116dae","updated":"2019-05-13 15:22:09.000000000","message":"It\u0027s your API, I\u0027m not going to haggle over it :)","commit_id":"cb9e58da70cb2471f3674ea078bad8784e911a43"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"37dc02302f6e3231c4c0fccbac43131c6566f3b6","unresolved":false,"context_lines":[{"line_number":223,"context_line":""},{"line_number":224,"context_line":"#. NEW: The Nova scheduler calls the Cyborg API ``GET"},{"line_number":225,"context_line":"   /v2/device_profiles?name\u003d$device_profile_name`` and gets back the device"},{"line_number":226,"context_line":"   profile request groups. These are added to the request spec."},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"#. Nova invokes Placement and gets a list of allocation candidates. Nova"},{"line_number":229,"context_line":"   selects one of those candidates and makes claim(s) in Placement."}],"source_content_type":"text/x-rst","patch_set":11,"id":"5fc1f717_2ce1d8d0","line":226,"updated":"2019-04-10 12:52:31.000000000","message":"RequestSpec is created in the nova-api service during boot so that might be the logical place to gather the necessary input from cyborg to populate the request specs.\n\n[1] https://github.com/openstack/nova/blob/dbfb6def5bd0d11cf068dcc34f382fd537dce8e9/nova/compute/api.py#L951","commit_id":"cb9e58da70cb2471f3674ea078bad8784e911a43"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"f4eacf27526173d003cbd54d1ee42a379a824dc2","unresolved":false,"context_lines":[{"line_number":223,"context_line":""},{"line_number":224,"context_line":"#. NEW: The Nova scheduler calls the Cyborg API ``GET"},{"line_number":225,"context_line":"   /v2/device_profiles?name\u003d$device_profile_name`` and gets back the device"},{"line_number":226,"context_line":"   profile request groups. These are added to the request spec."},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"#. Nova invokes Placement and gets a list of allocation candidates. Nova"},{"line_number":229,"context_line":"   selects one of those candidates and makes claim(s) in Placement."}],"source_content_type":"text/x-rst","patch_set":11,"id":"3fce034c_0647ee1f","line":226,"in_reply_to":"5fc1f717_2ce1d8d0","updated":"2019-04-11 02:06:31.000000000","message":"That is exactly where I do it in the proposed patch [1]. In fact, these patches broadly leverage the bandwidth provider code.\n\n[1] https://review.openstack.org/#/c/631243/16/nova/objects/request_spec.py","commit_id":"cb9e58da70cb2471f3674ea078bad8784e911a43"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"5ca209c23055c44ed1ee0e03d6d245fa538c9368","unresolved":false,"context_lines":[{"line_number":228,"context_line":"#. Nova invokes Placement and gets a list of allocation candidates. Nova"},{"line_number":229,"context_line":"   selects one of those candidates and makes claim(s) in Placement."},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"#. NEW: The Nova conductor calls the Cyborg API ``POST"},{"line_number":232,"context_line":"   /v2/accelerator_requests`` with the device profile name. Cyborg creates a"},{"line_number":233,"context_line":"   set of unbound ARQs for that device profile and returns them to Nova."},{"line_number":234,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"1fcbff3d_6b6481ba","line":231,"updated":"2019-04-20 03:57:50.000000000","message":"Why we need these 2 rest api calls to Cyborg to complete the create ARQ and bind process? \n\nIs there any reason we can\u0027t merge the create and bind operations in to one rest api?","commit_id":"cb9e58da70cb2471f3674ea078bad8784e911a43"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"c0af5924923e18fc30791b01644f81fd37d8fae8","unresolved":false,"context_lines":[{"line_number":228,"context_line":"#. Nova invokes Placement and gets a list of allocation candidates. Nova"},{"line_number":229,"context_line":"   selects one of those candidates and makes claim(s) in Placement."},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"#. NEW: The Nova conductor calls the Cyborg API ``POST"},{"line_number":232,"context_line":"   /v2/accelerator_requests`` with the device profile name. Cyborg creates a"},{"line_number":233,"context_line":"   set of unbound ARQs for that device profile and returns them to Nova."},{"line_number":234,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"ffb9cba7_1d2cc345","line":231,"in_reply_to":"1fcbff3d_6b6481ba","updated":"2019-04-25 15:20:38.000000000","message":"Between the two, the ARQ needs to be associated with a specific device RP. That can happen only after the ARQ is created but must happen before the binding is started.","commit_id":"cb9e58da70cb2471f3674ea078bad8784e911a43"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"5ca209c23055c44ed1ee0e03d6d245fa538c9368","unresolved":false,"context_lines":[{"line_number":237,"context_line":""},{"line_number":238,"context_line":"#. NEW: Nova calls the Cyborg API ``PATCH /v2/accelerator_requests`` to bind"},{"line_number":239,"context_line":"   the ARQ with the host name, device\u0027s RP UUID and instance UUID. This is an"},{"line_number":240,"context_line":"   asynchronous call which prepares or reconfigures the device in the"},{"line_number":241,"context_line":"   background."},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"#. The Nova conductor calls the Nova compute manager via RPC to spawn the"}],"source_content_type":"text/x-rst","patch_set":11,"id":"1fcbff3d_cb72557d","line":240,"updated":"2019-04-20 03:57:50.000000000","message":"What the arq status in here, it\u0027s binding right? And if we complete the device configure, the arq will be changed to resolved?","commit_id":"cb9e58da70cb2471f3674ea078bad8784e911a43"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"c0af5924923e18fc30791b01644f81fd37d8fae8","unresolved":false,"context_lines":[{"line_number":237,"context_line":""},{"line_number":238,"context_line":"#. NEW: Nova calls the Cyborg API ``PATCH /v2/accelerator_requests`` to bind"},{"line_number":239,"context_line":"   the ARQ with the host name, device\u0027s RP UUID and instance UUID. This is an"},{"line_number":240,"context_line":"   asynchronous call which prepares or reconfigures the device in the"},{"line_number":241,"context_line":"   background."},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"#. The Nova conductor calls the Nova compute manager via RPC to spawn the"}],"source_content_type":"text/x-rst","patch_set":11,"id":"ffb9cba7_9d9af36b","line":240,"in_reply_to":"1fcbff3d_cb72557d","updated":"2019-04-25 15:20:38.000000000","message":"In the pilot code, we use the state \u0027BOUND\u0027 to indicate the device preparation is done and attach handles are available. At the point where Nova has associated a host/RP with the ARQ, there is no explicit state change, as of now. We could add a state called BINDING for that.\n\nThe term \u0027resolved\u0027 means either the binding succeeded or it failed, i.e. state BOUND or BIND_FAILED.","commit_id":"cb9e58da70cb2471f3674ea078bad8784e911a43"},{"author":{"_account_id":27458,"name":"Li Liu","email":"liliueecg@gmail.com","username":"liliu"},"change_message_id":"2b6ea4de27888d9a0dba9d0cbd0d969cbc8f5d0e","unresolved":false,"context_lines":[{"line_number":244,"context_line":"   instance. The compute manager calls the virt driver. Passing the list of"},{"line_number":245,"context_line":"   ARQs in this sequence is optional for Phase 1."},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"#. NEW: The Nova virt driver calls the Cyborg REST API ``GET"},{"line_number":248,"context_line":"   /v2/accelerator_requests?instance\u003d\u003cuuid\u003e\u0026bind_state\u003dresolved``. The"},{"line_number":249,"context_line":"   Cyborg client will retry till all ARQs are resolved (i.e. bound"},{"line_number":250,"context_line":"   successfully or failed to bind)."},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"#. NEW: The Nova virt driver uses the attach handles returned from the Cyborg"},{"line_number":253,"context_line":"   call to compose PCI passthrough devices into the VM\u0027s definition."}],"source_content_type":"text/x-rst","patch_set":11,"id":"dfbec78f_725197d8","line":250,"range":{"start_line":247,"start_character":3,"end_line":250,"end_character":35},"updated":"2019-05-07 04:11:49.000000000","message":"As we discussed in ptg, using ExternalEventAPI is preferred.\nhttps://wiki.openstack.org/wiki/Nova/ExternalEventAPI","commit_id":"cb9e58da70cb2471f3674ea078bad8784e911a43"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"ec97c6e4626d5a5350a8c0d81bf4ae5a1debe56a","unresolved":false,"context_lines":[{"line_number":244,"context_line":"   instance. The compute manager calls the virt driver. Passing the list of"},{"line_number":245,"context_line":"   ARQs in this sequence is optional for Phase 1."},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"#. NEW: The Nova virt driver calls the Cyborg REST API ``GET"},{"line_number":248,"context_line":"   /v2/accelerator_requests?instance\u003d\u003cuuid\u003e\u0026bind_state\u003dresolved``. The"},{"line_number":249,"context_line":"   Cyborg client will retry till all ARQs are resolved (i.e. bound"},{"line_number":250,"context_line":"   successfully or failed to bind)."},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"#. NEW: The Nova virt driver uses the attach handles returned from the Cyborg"},{"line_number":253,"context_line":"   call to compose PCI passthrough devices into the VM\u0027s definition."}],"source_content_type":"text/x-rst","patch_set":11,"id":"dfbec78f_d50cb23c","line":250,"range":{"start_line":247,"start_character":3,"end_line":250,"end_character":35},"in_reply_to":"dfbec78f_3a0e883b","updated":"2019-05-10 22:49:06.000000000","message":"Thanks, Artom. Looking at this usage, it seems there is no good way for the conductor to start the bind, have the Cyborg\u0027s bind API throw a notification and the compute manager to wait for the notification. That\u0027s what you are saying too, right?\n\nOne motivation to start the bind in the conductor is the scenario where multiple instances are requested and each needs a different device to be prepared, which could take some time. Jay Pipes made the interesting observation that those instances are unlikely to land in the same compute host and also that launching the bind within the compute manager can use the compute node semaphore to avoid some races.\n\nI am fine either way. Could we have a wider discussion on this subject here?","commit_id":"cb9e58da70cb2471f3674ea078bad8784e911a43"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"548588ed791183aea6fc3cef63b33d81a056d2bd","unresolved":false,"context_lines":[{"line_number":244,"context_line":"   instance. The compute manager calls the virt driver. Passing the list of"},{"line_number":245,"context_line":"   ARQs in this sequence is optional for Phase 1."},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"#. NEW: The Nova virt driver calls the Cyborg REST API ``GET"},{"line_number":248,"context_line":"   /v2/accelerator_requests?instance\u003d\u003cuuid\u003e\u0026bind_state\u003dresolved``. The"},{"line_number":249,"context_line":"   Cyborg client will retry till all ARQs are resolved (i.e. bound"},{"line_number":250,"context_line":"   successfully or failed to bind)."},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"#. NEW: The Nova virt driver uses the attach handles returned from the Cyborg"},{"line_number":253,"context_line":"   call to compose PCI passthrough devices into the VM\u0027s definition."}],"source_content_type":"text/x-rst","patch_set":11,"id":"dfbec78f_3a0e883b","line":250,"range":{"start_line":247,"start_character":3,"end_line":250,"end_character":35},"in_reply_to":"dfbec78f_725197d8","updated":"2019-05-07 20:21:19.000000000","message":"So actually polling may be the better way to go in this case. The current wait_for_instance_events [1] context manager is useful if the code that triggers the external service to send the event is close to the code that expects to receive the event. Using the current overly simplified Neutron example:\n\n  def spawn_instance():\n    with wait_for_external_event():\n      plug_vifs() # This will cause Neutron to send us the\n                   # event\n      # vifs are done plugging\n    libvirt.spawn()\n\nIn this spec, when the conductor (or compute?) does the initial PATCH to bind the ARQ, it might take Cyborg a while to finish the binding if it has to reprogram the FPGA. So it makes sense that Nova continues to do its thing in the meantime, and when it can\u0027t make progress anymore, it starts polling Cyborg.\n\nAnd anyways, if the PATCH is done in the conductor, and that causes Cyborg to send Nova the external event, waiting for that event in compute is a non-starter.\n\n[1] https://github.com/openstack/nova/blob/95e782dfd86caa4201d28ee86ba2bb475e0a409f/nova/compute/manager.py#L428","commit_id":"cb9e58da70cb2471f3674ea078bad8784e911a43"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"6e8a72fe62a5de0f5e4449a885c30c822acf1012","unresolved":false,"context_lines":[{"line_number":244,"context_line":"   instance. The compute manager calls the virt driver. Passing the list of"},{"line_number":245,"context_line":"   ARQs in this sequence is optional for Phase 1."},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"#. NEW: The Nova virt driver calls the Cyborg REST API ``GET"},{"line_number":248,"context_line":"   /v2/accelerator_requests?instance\u003d\u003cuuid\u003e\u0026bind_state\u003dresolved``. The"},{"line_number":249,"context_line":"   Cyborg client will retry till all ARQs are resolved (i.e. bound"},{"line_number":250,"context_line":"   successfully or failed to bind)."},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"#. NEW: The Nova virt driver uses the attach handles returned from the Cyborg"},{"line_number":253,"context_line":"   call to compose PCI passthrough devices into the VM\u0027s definition."}],"source_content_type":"text/x-rst","patch_set":11,"id":"dfbec78f_95c4d0f6","line":250,"range":{"start_line":247,"start_character":3,"end_line":250,"end_character":35},"in_reply_to":"dfbec78f_d50cb23c","updated":"2019-05-13 15:22:09.000000000","message":"\u003e Thanks, Artom. Looking at this usage, it seems there is no good way\n \u003e for the conductor to start the bind, have the Cyborg\u0027s bind API\n \u003e throw a notification and the compute manager to wait for the\n \u003e notification. That\u0027s what you are saying too, right?\n\nYes :)\n\n \n \u003e One motivation to start the bind in the conductor is the scenario\n \u003e where multiple instances are requested and each needs a different\n \u003e device to be prepared, which could take some time. Jay Pipes made\n \u003e the interesting observation that those instances are unlikely to\n \u003e land in the same compute host and also that launching the bind\n \u003e within the compute manager can use the compute node semaphore to\n \u003e avoid some races.\n \u003e \n \u003e I am fine either way. Could we have a wider discussion on this\n \u003e subject here?\n\nAs you said, it comes down to whether the bind request is done in the conductor or the compute. The latter would mean external events, the former would mean polling. I don\u0027t think I can formulate an argument either way, but I\u0027d be interested in getting more details about Jay\u0027s thoughts :)","commit_id":"cb9e58da70cb2471f3674ea078bad8784e911a43"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"37dc02302f6e3231c4c0fccbac43131c6566f3b6","unresolved":false,"context_lines":[{"line_number":255,"context_line":"#. NEW: If there is any error after binding has been initiated, Nova"},{"line_number":256,"context_line":"   must unbind the relevant ARQs by calling Cyborg API. It may then retry on"},{"line_number":257,"context_line":"   another host or delete the (unbound) ARQs for the instance."},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"Alternatives"},{"line_number":260,"context_line":"------------"},{"line_number":261,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"5fc1f717_8cdb2ceb","line":258,"updated":"2019-04-10 12:52:31.000000000","message":"Will the implementation supports server move operations (resize, migrate, evacuate, unshelve after shelve offload)? The use case part only talks about live-migration and attach as out of scope. So I need to assume that the other move operations are supported. However the spec does not talk about the nova impact of such support.","commit_id":"cb9e58da70cb2471f3674ea078bad8784e911a43"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"f4eacf27526173d003cbd54d1ee42a379a824dc2","unresolved":false,"context_lines":[{"line_number":255,"context_line":"#. NEW: If there is any error after binding has been initiated, Nova"},{"line_number":256,"context_line":"   must unbind the relevant ARQs by calling Cyborg API. It may then retry on"},{"line_number":257,"context_line":"   another host or delete the (unbound) ARQs for the instance."},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"Alternatives"},{"line_number":260,"context_line":"------------"},{"line_number":261,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"3fce034c_e672e27c","line":258,"in_reply_to":"5fc1f717_8cdb2ceb","updated":"2019-04-11 02:06:31.000000000","message":"This proposal should support these operations because, as per [1], all of them would involve creating, binding, unbinding and deleting ARQs in some form. Whether the implementation in Train will cover all of these is an open question.\n\n[1] https://review.openstack.org/#/c/605237/3/specs/stein/approved/instance-ops.rst (also cited in Line 360)","commit_id":"cb9e58da70cb2471f3674ea078bad8784e911a43"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"37dc02302f6e3231c4c0fccbac43131c6566f3b6","unresolved":false,"context_lines":[{"line_number":269,"context_line":"REST API impact"},{"line_number":270,"context_line":"---------------"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"None"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"Security impact"},{"line_number":275,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":11,"id":"5fc1f717_ac3aa830","line":272,"updated":"2019-04-10 12:52:31.000000000","message":"flavor extra_spec addition could be mentioned here.","commit_id":"cb9e58da70cb2471f3674ea078bad8784e911a43"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"52c1b5d5c22507390983ee2f0bcbe004907d7111","unresolved":false,"context_lines":[{"line_number":269,"context_line":"REST API impact"},{"line_number":270,"context_line":"---------------"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"None"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"Security impact"},{"line_number":275,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":11,"id":"dfbec78f_48609233","line":272,"in_reply_to":"3fce034c_a6c4da41","updated":"2019-05-03 02:06:44.000000000","message":"I would repeat the name of the new exta_spec key here.","commit_id":"cb9e58da70cb2471f3674ea078bad8784e911a43"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"f4eacf27526173d003cbd54d1ee42a379a824dc2","unresolved":false,"context_lines":[{"line_number":269,"context_line":"REST API impact"},{"line_number":270,"context_line":"---------------"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"None"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"Security impact"},{"line_number":275,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":11,"id":"3fce034c_a6c4da41","line":272,"in_reply_to":"5fc1f717_ac3aa830","updated":"2019-04-11 02:06:31.000000000","message":"Why does that need an API change? I think the operator would do:\n$ openstack flavor set --property \u0027accel:device_profile\u003d\u003cprofile_name\u003e\u0027 flavor","commit_id":"cb9e58da70cb2471f3674ea078bad8784e911a43"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"ec97c6e4626d5a5350a8c0d81bf4ae5a1debe56a","unresolved":false,"context_lines":[{"line_number":269,"context_line":"REST API impact"},{"line_number":270,"context_line":"---------------"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"None"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"Security impact"},{"line_number":275,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":11,"id":"dfbec78f_35366ee8","line":272,"in_reply_to":"dfbec78f_48609233","updated":"2019-05-10 22:49:06.000000000","message":"Done","commit_id":"cb9e58da70cb2471f3674ea078bad8784e911a43"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"37dc02302f6e3231c4c0fccbac43131c6566f3b6","unresolved":false,"context_lines":[{"line_number":296,"context_line":"Other deployer impact"},{"line_number":297,"context_line":"---------------------"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"None"},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"Developer impact"},{"line_number":302,"context_line":"----------------"}],"source_content_type":"text/x-rst","patch_set":11,"id":"5fc1f717_ac238804","line":299,"updated":"2019-04-10 12:52:31.000000000","message":"Deployer needs to configure nova with credential so that nova can call the cyborg REST API.","commit_id":"cb9e58da70cb2471f3674ea078bad8784e911a43"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"ec97c6e4626d5a5350a8c0d81bf4ae5a1debe56a","unresolved":false,"context_lines":[{"line_number":296,"context_line":"Other deployer impact"},{"line_number":297,"context_line":"---------------------"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"None"},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"Developer impact"},{"line_number":302,"context_line":"----------------"}],"source_content_type":"text/x-rst","patch_set":11,"id":"dfbec78f_1551ea0e","line":299,"in_reply_to":"3fce034c_c6c1e630","updated":"2019-05-10 22:49:06.000000000","message":"Done","commit_id":"cb9e58da70cb2471f3674ea078bad8784e911a43"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"f4eacf27526173d003cbd54d1ee42a379a824dc2","unresolved":false,"context_lines":[{"line_number":296,"context_line":"Other deployer impact"},{"line_number":297,"context_line":"---------------------"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"None"},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"Developer impact"},{"line_number":302,"context_line":"----------------"}],"source_content_type":"text/x-rst","patch_set":11,"id":"3fce034c_c6c1e630","line":299,"in_reply_to":"5fc1f717_ac238804","updated":"2019-04-11 02:06:31.000000000","message":"Ok","commit_id":"cb9e58da70cb2471f3674ea078bad8784e911a43"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"14ed37c363910f8c853c735422964ab53af9236f","unresolved":false,"context_lines":[{"line_number":332,"context_line":"There need to be unit tests and functional tests for the Nova changes."},{"line_number":333,"context_line":""},{"line_number":334,"context_line":"There need to be tempest tests for the end-to-end flow, including failure"},{"line_number":335,"context_line":"modes."},{"line_number":336,"context_line":""},{"line_number":337,"context_line":"Documentation Impact"},{"line_number":338,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":11,"id":"5fc1f717_559ba471","line":335,"updated":"2019-04-09 15:56:13.000000000","message":"Will there be third-party CI which provides real accelerators for end-to-end testing, or will the tempest test use some form of fakes?","commit_id":"cb9e58da70cb2471f3674ea078bad8784e911a43"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"ec97c6e4626d5a5350a8c0d81bf4ae5a1debe56a","unresolved":false,"context_lines":[{"line_number":332,"context_line":"There need to be unit tests and functional tests for the Nova changes."},{"line_number":333,"context_line":""},{"line_number":334,"context_line":"There need to be tempest tests for the end-to-end flow, including failure"},{"line_number":335,"context_line":"modes."},{"line_number":336,"context_line":""},{"line_number":337,"context_line":"Documentation Impact"},{"line_number":338,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":11,"id":"dfbec78f_a5b0d98b","line":335,"in_reply_to":"3fce034c_46ebb6af","updated":"2019-05-10 22:49:06.000000000","message":"Proof of sincerity: https://review.opendev.org/657764 :)","commit_id":"cb9e58da70cb2471f3674ea078bad8784e911a43"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"f4eacf27526173d003cbd54d1ee42a379a824dc2","unresolved":false,"context_lines":[{"line_number":332,"context_line":"There need to be unit tests and functional tests for the Nova changes."},{"line_number":333,"context_line":""},{"line_number":334,"context_line":"There need to be tempest tests for the end-to-end flow, including failure"},{"line_number":335,"context_line":"modes."},{"line_number":336,"context_line":""},{"line_number":337,"context_line":"Documentation Impact"},{"line_number":338,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":11,"id":"3fce034c_46ebb6af","line":335,"in_reply_to":"5fc1f717_559ba471","updated":"2019-04-11 02:06:31.000000000","message":"There are active plans for CI with real hardware. We should have more clarity by early May. If real hardware is available, would there be any advantage to using fake devices?","commit_id":"cb9e58da70cb2471f3674ea078bad8784e911a43"},{"author":{"_account_id":24872,"name":"YumengBao","email":"yumeng_bao@yahoo.com","username":"Yumeng_Bao"},"change_message_id":"44ffbc6e207afefe275d6a4b1840cfdfaa8520f8","unresolved":false,"context_lines":[{"line_number":366,"context_line":".. [#kosamara] `Modelling passthrough devices for report to placement"},{"line_number":367,"context_line":"   \u003chttps://review.openstack.org/#/c/591037/\u003e`_"},{"line_number":368,"context_line":""},{"line_number":369,"context_line":".. [#req-spec-groups] `Store RequestGroup objects in RequestSpec"},{"line_number":370,"context_line":"   \u003chttps://review.openstack.org/#/c/567267/\u003e`_"},{"line_number":371,"context_line":""},{"line_number":372,"context_line":".. [#requester-id] `Requester_id field in RequestGroup"}],"source_content_type":"text/x-rst","patch_set":11,"id":"5fc1f717_3ef9237f","line":369,"range":{"start_line":369,"start_character":23,"end_line":369,"end_character":64},"updated":"2019-04-09 09:36:04.000000000","message":"https://docs.openstack.org/placement/latest/usage/provider-tree.html#granular-resource-requests\nCan you pls also add this link? This link may be easier to understand the concept \"request_group\" while do not need to go through the code.","commit_id":"cb9e58da70cb2471f3674ea078bad8784e911a43"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"2312af9645de97af78cb5aea4f19f7e73f1bed2d","unresolved":false,"context_lines":[{"line_number":366,"context_line":".. [#kosamara] `Modelling passthrough devices for report to placement"},{"line_number":367,"context_line":"   \u003chttps://review.openstack.org/#/c/591037/\u003e`_"},{"line_number":368,"context_line":""},{"line_number":369,"context_line":".. [#req-spec-groups] `Store RequestGroup objects in RequestSpec"},{"line_number":370,"context_line":"   \u003chttps://review.openstack.org/#/c/567267/\u003e`_"},{"line_number":371,"context_line":""},{"line_number":372,"context_line":".. [#requester-id] `Requester_id field in RequestGroup"}],"source_content_type":"text/x-rst","patch_set":11,"id":"5fc1f717_24fb52be","line":369,"range":{"start_line":369,"start_character":23,"end_line":369,"end_character":64},"in_reply_to":"5fc1f717_3ef9237f","updated":"2019-04-09 10:05:40.000000000","message":"IMHO, the granular resource request in flavors, cited in my previous response, may be a better reference. Do you agree?","commit_id":"cb9e58da70cb2471f3674ea078bad8784e911a43"},{"author":{"_account_id":24872,"name":"YumengBao","email":"yumeng_bao@yahoo.com","username":"Yumeng_Bao"},"change_message_id":"44ffbc6e207afefe275d6a4b1840cfdfaa8520f8","unresolved":false,"context_lines":[{"line_number":372,"context_line":".. [#requester-id] `Requester_id field in RequestGroup"},{"line_number":373,"context_line":"   \u003chttps://git.openstack.org/cgit/openstack/nova/tree/nova/objects/request_spec.py?h\u003drefs/changes/27/619527/16#n818/\u003e`_"},{"line_number":374,"context_line":""},{"line_number":375,"context_line":".. [#map-rg-to-rp] `Map request groups to resource providers"},{"line_number":376,"context_line":"   \u003chttps://review.openstack.org/#/c/616239/33/nova/objects/request_spec.py\u003e`_"},{"line_number":377,"context_line":""},{"line_number":378,"context_line":".. [#cy-api] \u0027Cyborg API Specification for Nova. TBD.\u0027_"}],"source_content_type":"text/x-rst","patch_set":11,"id":"5fc1f717_292ecb8b","line":375,"range":{"start_line":375,"start_character":20,"end_line":375,"end_character":60},"updated":"2019-04-09 09:36:04.000000000","message":"https://specs.openstack.org/openstack/nova-specs/specs/rocky/approved/bandwidth-resource-provider.html#mapping-between-physical-resource-consumption-and-claimed-resources\nditto here. :)","commit_id":"cb9e58da70cb2471f3674ea078bad8784e911a43"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"2312af9645de97af78cb5aea4f19f7e73f1bed2d","unresolved":false,"context_lines":[{"line_number":372,"context_line":".. [#requester-id] `Requester_id field in RequestGroup"},{"line_number":373,"context_line":"   \u003chttps://git.openstack.org/cgit/openstack/nova/tree/nova/objects/request_spec.py?h\u003drefs/changes/27/619527/16#n818/\u003e`_"},{"line_number":374,"context_line":""},{"line_number":375,"context_line":".. [#map-rg-to-rp] `Map request groups to resource providers"},{"line_number":376,"context_line":"   \u003chttps://review.openstack.org/#/c/616239/33/nova/objects/request_spec.py\u003e`_"},{"line_number":377,"context_line":""},{"line_number":378,"context_line":".. [#cy-api] \u0027Cyborg API Specification for Nova. TBD.\u0027_"}],"source_content_type":"text/x-rst","patch_set":11,"id":"5fc1f717_84d80652","line":375,"range":{"start_line":375,"start_character":20,"end_line":375,"end_character":60},"in_reply_to":"5fc1f717_292ecb8b","updated":"2019-04-09 10:05:40.000000000","message":"This is obsolete. :) There are many comments in the method map_requested_resources_to_providers() in this patch, and they explain the algorithm.","commit_id":"cb9e58da70cb2471f3674ea078bad8784e911a43"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"8a4f02f7e340d1bc8819a43c47d28703380a306e","unresolved":false,"context_lines":[{"line_number":156,"context_line":""},{"line_number":157,"context_line":"VM images in Glance may be associated with image properties (other than image"},{"line_number":158,"context_line":"traits), such as bitstream/function IDs needed for that image. So, Nova should"},{"line_number":159,"context_line":"pass the VM image UUID from the request spec to Cyborg. This is TBD."},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"The groups in the device profile are numbered by Cyborg. The request groups"},{"line_number":162,"context_line":"that are merged into the request spec are numbered by Nova. These numberings"}],"source_content_type":"text/x-rst","patch_set":12,"id":"dfbec78f_1826d516","line":159,"updated":"2019-05-13 16:11:30.000000000","message":"Just occurred to me that this is going to need care, so Horizon doesn\u0027t present cyborg images as options during Nova boot. But this is really outside the scope here, so maybe I will ignore that for now.","commit_id":"d25929cd7c6dddfa6462017928e3ba73fce6d45f"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"5f8723a60b0e9c217fcc01f6aba88cac1d049503","unresolved":false,"context_lines":[{"line_number":156,"context_line":""},{"line_number":157,"context_line":"VM images in Glance may be associated with image properties (other than image"},{"line_number":158,"context_line":"traits), such as bitstream/function IDs needed for that image. So, Nova should"},{"line_number":159,"context_line":"pass the VM image UUID from the request spec to Cyborg. This is TBD."},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"The groups in the device profile are numbered by Cyborg. The request groups"},{"line_number":162,"context_line":"that are merged into the request spec are numbered by Nova. These numberings"}],"source_content_type":"text/x-rst","patch_set":12,"id":"dfbec78f_57b973c9","line":159,"in_reply_to":"dfbec78f_1826d516","updated":"2019-05-14 05:45:16.000000000","message":"Good point. We plan to keep FPGA bitstreams and device firmware images as Glance images with appropriate metadata. How would one prevent Horizon from displaying them as bootable images? \n\nAlso, in the output of \u0027openstack image list\u0027, we may want to see these images but with an indication that they are not VM images. Any suggestions?","commit_id":"d25929cd7c6dddfa6462017928e3ba73fce6d45f"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"f8710f852b99a12a51677735e2718f9a335cc2cb","unresolved":false,"context_lines":[{"line_number":156,"context_line":""},{"line_number":157,"context_line":"VM images in Glance may be associated with image properties (other than image"},{"line_number":158,"context_line":"traits), such as bitstream/function IDs needed for that image. So, Nova should"},{"line_number":159,"context_line":"pass the VM image UUID from the request spec to Cyborg. This is TBD."},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"The groups in the device profile are numbered by Cyborg. The request groups"},{"line_number":162,"context_line":"that are merged into the request spec are numbered by Nova. These numberings"}],"source_content_type":"text/x-rst","patch_set":12,"id":"dfbec78f_c4927857","line":159,"in_reply_to":"dfbec78f_57b973c9","updated":"2019-05-15 07:15:27.000000000","message":"that is not really a new issue\nwe already store docker images that can be used with zun and kernel images which can be used on there own so i dont think we shoudl be that concerned with this.\n\nwe can always set the visableity to community (added in glace api v2.5)\nwhich will allow any user to read the image but will not list it in the default list for users other then the owner of the image.\n\nhttps://developer.openstack.org/api-ref/image/v2/index.html?expanded\u003dcreate-image-detail#images\n\nwe can also use the os_hidden property on the image to hide it from the default list\n\nanyway this is out of scope of this specs but there are ways to make it not show up  in the list horizon will show","commit_id":"d25929cd7c6dddfa6462017928e3ba73fce6d45f"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"fbdc1a6b9ae37a5fa003644adba42980d31397bf","unresolved":false,"context_lines":[{"line_number":156,"context_line":""},{"line_number":157,"context_line":"VM images in Glance may be associated with image properties (other than image"},{"line_number":158,"context_line":"traits), such as bitstream/function IDs needed for that image. So, Nova should"},{"line_number":159,"context_line":"pass the VM image UUID from the request spec to Cyborg. This is TBD."},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"The groups in the device profile are numbered by Cyborg. The request groups"},{"line_number":162,"context_line":"that are merged into the request spec are numbered by Nova. These numberings"}],"source_content_type":"text/x-rst","patch_set":12,"id":"bfb3d3c7_57ad532f","line":159,"in_reply_to":"dfbec78f_c4927857","updated":"2019-05-22 08:04:43.000000000","message":"Sure, the visibility can apparently be \u0027community\u0027 or \u0027shared\u0027. This should probably be documented somewhere, if not in this spec.","commit_id":"d25929cd7c6dddfa6462017928e3ba73fce6d45f"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"f8710f852b99a12a51677735e2718f9a335cc2cb","unresolved":false,"context_lines":[{"line_number":163,"context_line":"would not be the same in general, i.e., the N-th device profile group may not"},{"line_number":164,"context_line":"correspond to the N-th request group in the request spec."},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"When the device profile request groups are added to other request groups in"},{"line_number":167,"context_line":"the flavor, the ``group_policy`` of the flavor shall govern the overall"},{"line_number":168,"context_line":"semantics of all request groups."},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"Accelerator Requests"},{"line_number":171,"context_line":"--------------------"}],"source_content_type":"text/x-rst","patch_set":12,"id":"dfbec78f_a480a4f6","line":168,"range":{"start_line":166,"start_character":0,"end_line":168,"end_character":32},"updated":"2019-05-15 07:15:27.000000000","message":"nit: this is not really relevent.\nits correct but this is just how placement request groups work it is not cyborg specific","commit_id":"d25929cd7c6dddfa6462017928e3ba73fce6d45f"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"fbdc1a6b9ae37a5fa003644adba42980d31397bf","unresolved":false,"context_lines":[{"line_number":163,"context_line":"would not be the same in general, i.e., the N-th device profile group may not"},{"line_number":164,"context_line":"correspond to the N-th request group in the request spec."},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"When the device profile request groups are added to other request groups in"},{"line_number":167,"context_line":"the flavor, the ``group_policy`` of the flavor shall govern the overall"},{"line_number":168,"context_line":"semantics of all request groups."},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"Accelerator Requests"},{"line_number":171,"context_line":"--------------------"}],"source_content_type":"text/x-rst","patch_set":12,"id":"bfb3d3c7_d766232a","line":168,"range":{"start_line":166,"start_character":0,"end_line":168,"end_character":32},"in_reply_to":"dfbec78f_a480a4f6","updated":"2019-05-22 08:04:43.000000000","message":"The point here is that Cyborg is leveraging and working with Nova mechanisms, rather than overriding or doing something else. It is probably better to err on the side of clarity than brevity.","commit_id":"d25929cd7c6dddfa6462017928e3ba73fce6d45f"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f0c43c3bac1d439d8ce92d9e469b9e35641d3ddd","unresolved":false,"context_lines":[{"line_number":191,"context_line":"that Nova has chosen, before the ARQ is bound. Since Placement does not match"},{"line_number":192,"context_line":"RPs to request groups, this must be done in the Cyborg client module of Nova"},{"line_number":193,"context_line":"(`cyborg-client-module`_). The matching is done using the requester_id field"},{"line_number":194,"context_line":"in the ``RequestGroup`` object ([#requester-id]_) as below:`"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"* The order of request groups in a device profile is not significant, but it"},{"line_number":197,"context_line":"  is preserved by Cyborg. Thus, each device profile request group has a unique"}],"source_content_type":"text/x-rst","patch_set":12,"id":"dfbec78f_f5e74c11","line":194,"range":{"start_line":194,"start_character":59,"end_line":194,"end_character":60},"updated":"2019-05-13 15:07:42.000000000","message":"strike","commit_id":"d25929cd7c6dddfa6462017928e3ba73fce6d45f"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"f779a49d951c41da447921d48b04676a2e1fd906","unresolved":false,"context_lines":[{"line_number":191,"context_line":"that Nova has chosen, before the ARQ is bound. Since Placement does not match"},{"line_number":192,"context_line":"RPs to request groups, this must be done in the Cyborg client module of Nova"},{"line_number":193,"context_line":"(`cyborg-client-module`_). The matching is done using the requester_id field"},{"line_number":194,"context_line":"in the ``RequestGroup`` object ([#requester-id]_) as below:`"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"* The order of request groups in a device profile is not significant, but it"},{"line_number":197,"context_line":"  is preserved by Cyborg. Thus, each device profile request group has a unique"}],"source_content_type":"text/x-rst","patch_set":12,"id":"bfb3d3c7_8ab60efa","line":194,"range":{"start_line":194,"start_character":59,"end_line":194,"end_character":60},"in_reply_to":"bfb3d3c7_9ad452bf","updated":"2019-05-24 04:58:19.000000000","message":"Done","commit_id":"d25929cd7c6dddfa6462017928e3ba73fce6d45f"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"fbdc1a6b9ae37a5fa003644adba42980d31397bf","unresolved":false,"context_lines":[{"line_number":191,"context_line":"that Nova has chosen, before the ARQ is bound. Since Placement does not match"},{"line_number":192,"context_line":"RPs to request groups, this must be done in the Cyborg client module of Nova"},{"line_number":193,"context_line":"(`cyborg-client-module`_). The matching is done using the requester_id field"},{"line_number":194,"context_line":"in the ``RequestGroup`` object ([#requester-id]_) as below:`"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"* The order of request groups in a device profile is not significant, but it"},{"line_number":197,"context_line":"  is preserved by Cyborg. Thus, each device profile request group has a unique"}],"source_content_type":"text/x-rst","patch_set":12,"id":"bfb3d3c7_9ad452bf","line":194,"range":{"start_line":194,"start_character":59,"end_line":194,"end_character":60},"in_reply_to":"dfbec78f_f5e74c11","updated":"2019-05-22 08:04:43.000000000","message":"Done","commit_id":"d25929cd7c6dddfa6462017928e3ba73fce6d45f"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"f8710f852b99a12a51677735e2718f9a335cc2cb","unresolved":false,"context_lines":[{"line_number":193,"context_line":"(`cyborg-client-module`_). The matching is done using the requester_id field"},{"line_number":194,"context_line":"in the ``RequestGroup`` object ([#requester-id]_) as below:`"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"* The order of request groups in a device profile is not significant, but it"},{"line_number":197,"context_line":"  is preserved by Cyborg. Thus, each device profile request group has a unique"},{"line_number":198,"context_line":"  index."},{"line_number":199,"context_line":"* When the device profile request groups returned by Cyborg are added to the"},{"line_number":200,"context_line":"  request spec, the requester_id field is set to \u0027device_profile_\u003cN\u003e\u0027 for the"},{"line_number":201,"context_line":"  N-th device profile request group (starting from zero). The device profile"}],"source_content_type":"text/x-rst","patch_set":12,"id":"dfbec78f_84a6c0aa","line":198,"range":{"start_line":196,"start_character":2,"end_line":198,"end_character":8},"updated":"2019-05-15 07:15:27.000000000","message":"to be clear this is good that it has been stated because libivrt provides no guarantees that the order you specify host passhtough devices in the xml will be the order they are presented to the vm. so its good that we don\u0027t imply the order will be preserved.","commit_id":"d25929cd7c6dddfa6462017928e3ba73fce6d45f"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f0c43c3bac1d439d8ce92d9e469b9e35641d3ddd","unresolved":false,"context_lines":[{"line_number":210,"context_line":"  * Each request group is mapped to a specific RP using the same logic as the"},{"line_number":211,"context_line":"    Neutron bandwidth provider ([#map-rg-to-rp]_)."},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"Nova changes for Assignment workflow"},{"line_number":214,"context_line":"------------------------------------"},{"line_number":215,"context_line":"This section summarizes the workflow details for Phase 1. The changes needed"},{"line_number":216,"context_line":"in Nova are marked with NEW."}],"source_content_type":"text/x-rst","patch_set":12,"id":"dfbec78f_15f8e078","line":213,"updated":"2019-05-13 15:07:42.000000000","message":"could put a seqdiag in here","commit_id":"d25929cd7c6dddfa6462017928e3ba73fce6d45f"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"5f8723a60b0e9c217fcc01f6aba88cac1d049503","unresolved":false,"context_lines":[{"line_number":210,"context_line":"  * Each request group is mapped to a specific RP using the same logic as the"},{"line_number":211,"context_line":"    Neutron bandwidth provider ([#map-rg-to-rp]_)."},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"Nova changes for Assignment workflow"},{"line_number":214,"context_line":"------------------------------------"},{"line_number":215,"context_line":"This section summarizes the workflow details for Phase 1. The changes needed"},{"line_number":216,"context_line":"in Nova are marked with NEW."}],"source_content_type":"text/x-rst","patch_set":12,"id":"dfbec78f_17e45bdf","line":213,"in_reply_to":"dfbec78f_15f8e078","updated":"2019-05-14 05:45:16.000000000","message":"Arguably, it is easier to comment on bulleted paragraphs than on a sequence diagram.","commit_id":"d25929cd7c6dddfa6462017928e3ba73fce6d45f"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b8b5203b0d5aa5dce79ecd8dea222114c5b66920","unresolved":false,"context_lines":[{"line_number":210,"context_line":"  * Each request group is mapped to a specific RP using the same logic as the"},{"line_number":211,"context_line":"    Neutron bandwidth provider ([#map-rg-to-rp]_)."},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"Nova changes for Assignment workflow"},{"line_number":214,"context_line":"------------------------------------"},{"line_number":215,"context_line":"This section summarizes the workflow details for Phase 1. The changes needed"},{"line_number":216,"context_line":"in Nova are marked with NEW."}],"source_content_type":"text/x-rst","patch_set":12,"id":"dfbec78f_6c206149","line":213,"in_reply_to":"dfbec78f_17e45bdf","updated":"2019-05-14 13:13:20.000000000","message":"Agree; I wasn\u0027t suggesting removing the bullets. Anyway, totally optional, just a thought.","commit_id":"d25929cd7c6dddfa6462017928e3ba73fce6d45f"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"f779a49d951c41da447921d48b04676a2e1fd906","unresolved":false,"context_lines":[{"line_number":210,"context_line":"  * Each request group is mapped to a specific RP using the same logic as the"},{"line_number":211,"context_line":"    Neutron bandwidth provider ([#map-rg-to-rp]_)."},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"Nova changes for Assignment workflow"},{"line_number":214,"context_line":"------------------------------------"},{"line_number":215,"context_line":"This section summarizes the workflow details for Phase 1. The changes needed"},{"line_number":216,"context_line":"in Nova are marked with NEW."}],"source_content_type":"text/x-rst","patch_set":12,"id":"bfb3d3c7_aab992e9","line":213,"in_reply_to":"dfbec78f_44952832","updated":"2019-05-24 04:58:19.000000000","message":"Done","commit_id":"d25929cd7c6dddfa6462017928e3ba73fce6d45f"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"f8710f852b99a12a51677735e2718f9a335cc2cb","unresolved":false,"context_lines":[{"line_number":210,"context_line":"  * Each request group is mapped to a specific RP using the same logic as the"},{"line_number":211,"context_line":"    Neutron bandwidth provider ([#map-rg-to-rp]_)."},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"Nova changes for Assignment workflow"},{"line_number":214,"context_line":"------------------------------------"},{"line_number":215,"context_line":"This section summarizes the workflow details for Phase 1. The changes needed"},{"line_number":216,"context_line":"in Nova are marked with NEW."}],"source_content_type":"text/x-rst","patch_set":12,"id":"dfbec78f_44952832","line":213,"in_reply_to":"dfbec78f_6c206149","updated":"2019-05-15 07:15:27.000000000","message":"it would be a nice thing to add as a follow up as diagrames do help but we should have both if we add one.","commit_id":"d25929cd7c6dddfa6462017928e3ba73fce6d45f"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f0c43c3bac1d439d8ce92d9e469b9e35641d3ddd","unresolved":false,"context_lines":[{"line_number":239,"context_line":"   the ARQ with the host name, device\u0027s RP UUID and instance UUID. This is an"},{"line_number":240,"context_line":"   asynchronous call which prepares or reconfigures the device in the"},{"line_number":241,"context_line":"   background."},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"#. The Nova conductor calls the Nova compute manager via RPC to spawn the"},{"line_number":244,"context_line":"   instance. The compute manager calls the virt driver. Passing the list of"},{"line_number":245,"context_line":"   ARQs in this sequence is optional for Phase 1."}],"source_content_type":"text/x-rst","patch_set":12,"id":"dfbec78f_d570080b","line":242,"updated":"2019-05-13 15:07:42.000000000","message":"Somewhere around here there was concern about an operation being shunted to the computes rather than looped on the conductor. I don\u0027t remember exactly what that was about. Has it been addressed here?","commit_id":"d25929cd7c6dddfa6462017928e3ba73fce6d45f"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"a5685bfd21ade85419d9a2277e64bfb473f6db1f","unresolved":false,"context_lines":[{"line_number":239,"context_line":"   the ARQ with the host name, device\u0027s RP UUID and instance UUID. This is an"},{"line_number":240,"context_line":"   asynchronous call which prepares or reconfigures the device in the"},{"line_number":241,"context_line":"   background."},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"#. The Nova conductor calls the Nova compute manager via RPC to spawn the"},{"line_number":244,"context_line":"   instance. The compute manager calls the virt driver. Passing the list of"},{"line_number":245,"context_line":"   ARQs in this sequence is optional for Phase 1."}],"source_content_type":"text/x-rst","patch_set":12,"id":"bfb3d3c7_91f0accb","line":242,"in_reply_to":"bfb3d3c7_3a2526c3","updated":"2019-05-22 11:27:03.000000000","message":"if we are taking the notifiction apporch we would start a background waiter thread in the manager just before you call bind but yes those are the to latest poing where you can wait/block/bind","commit_id":"d25929cd7c6dddfa6462017928e3ba73fce6d45f"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"f8710f852b99a12a51677735e2718f9a335cc2cb","unresolved":false,"context_lines":[{"line_number":239,"context_line":"   the ARQ with the host name, device\u0027s RP UUID and instance UUID. This is an"},{"line_number":240,"context_line":"   asynchronous call which prepares or reconfigures the device in the"},{"line_number":241,"context_line":"   background."},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"#. The Nova conductor calls the Nova compute manager via RPC to spawn the"},{"line_number":244,"context_line":"   instance. The compute manager calls the virt driver. Passing the list of"},{"line_number":245,"context_line":"   ARQs in this sequence is optional for Phase 1."}],"source_content_type":"text/x-rst","patch_set":12,"id":"dfbec78f_84ed60b8","line":242,"in_reply_to":"dfbec78f_72a285b0","updated":"2019-05-15 07:15:27.000000000","message":"we actully do bind ports in the conductor during live migration but that is relitivly knew.\n\nin Option A im not sure why we ned to use the _build_semaphore the virt dirver can just block and eventlet will context switch.\n\nanyway ideally if we do the bind in the conducto we shoudl make a fire and forget async call to\nPATCH /v2/accelerator_requests in the condoctor to start the bind process and then later in the compute node make a blocking call in the virt driver to get the bound ARQ\n\nbut i think i prefer the option of the external notifiction too + the moving the bind to the compute.","commit_id":"d25929cd7c6dddfa6462017928e3ba73fce6d45f"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"fbdc1a6b9ae37a5fa003644adba42980d31397bf","unresolved":false,"context_lines":[{"line_number":239,"context_line":"   the ARQ with the host name, device\u0027s RP UUID and instance UUID. This is an"},{"line_number":240,"context_line":"   asynchronous call which prepares or reconfigures the device in the"},{"line_number":241,"context_line":"   background."},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"#. The Nova conductor calls the Nova compute manager via RPC to spawn the"},{"line_number":244,"context_line":"   instance. The compute manager calls the virt driver. Passing the list of"},{"line_number":245,"context_line":"   ARQs in this sequence is optional for Phase 1."}],"source_content_type":"text/x-rst","patch_set":12,"id":"bfb3d3c7_3a2526c3","line":242,"in_reply_to":"dfbec78f_84ed60b8","updated":"2019-05-22 08:04:43.000000000","message":"No comments yet on the performance/scaling of both approaches. Will try to get some time measurements for both.\n\nThe Cyborg bind could be called just before:\n   https://github.com/openstack/nova/blob/master/nova/compute/manager.py#L1878\n\nand the blocking for notification should be at:\n    https://github.com/openstack/nova/blob/master/nova/virt/libvirt/driver.py#L3215\n\nDoes that sound about right?","commit_id":"d25929cd7c6dddfa6462017928e3ba73fce6d45f"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"5f8723a60b0e9c217fcc01f6aba88cac1d049503","unresolved":false,"context_lines":[{"line_number":239,"context_line":"   the ARQ with the host name, device\u0027s RP UUID and instance UUID. This is an"},{"line_number":240,"context_line":"   asynchronous call which prepares or reconfigures the device in the"},{"line_number":241,"context_line":"   background."},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"#. The Nova conductor calls the Nova compute manager via RPC to spawn the"},{"line_number":244,"context_line":"   instance. The compute manager calls the virt driver. Passing the list of"},{"line_number":245,"context_line":"   ARQs in this sequence is optional for Phase 1."}],"source_content_type":"text/x-rst","patch_set":12,"id":"dfbec78f_72a285b0","line":242,"in_reply_to":"dfbec78f_9852c53a","updated":"2019-05-14 05:45:16.000000000","message":"Trying to understand the pros and cons:\n\nOption A: Nova virt driver calls Cyborg API with polling. Cost: REST API call, made with _build_semaphore held.\n\nOption B: Cyborg calls Nova REST API for notification; Nova conductor sends RPC message to Nova compute. Nova virt driver blocks with semaphore held.\n\nFor option B:\n1. RabbitMQ scales poorly. Performance-wise, which is better?\n\n2. If Cyborg sends a notification with multiple events (one for each ARQ), would that result in a single RPC message to the compute host?\n\n3. Would I initiate bind just before [1]? Then the bind call is made without lock held and the wait happens with lock held.\n\n[1] https://github.com/openstack/nova/blob/master/nova/compute/manager.py#L1882","commit_id":"d25929cd7c6dddfa6462017928e3ba73fce6d45f"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"8a4f02f7e340d1bc8819a43c47d28703380a306e","unresolved":false,"context_lines":[{"line_number":239,"context_line":"   the ARQ with the host name, device\u0027s RP UUID and instance UUID. This is an"},{"line_number":240,"context_line":"   asynchronous call which prepares or reconfigures the device in the"},{"line_number":241,"context_line":"   background."},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"#. The Nova conductor calls the Nova compute manager via RPC to spawn the"},{"line_number":244,"context_line":"   instance. The compute manager calls the virt driver. Passing the list of"},{"line_number":245,"context_line":"   ARQs in this sequence is optional for Phase 1."}],"source_content_type":"text/x-rst","patch_set":12,"id":"dfbec78f_9852c53a","line":242,"in_reply_to":"dfbec78f_d570080b","updated":"2019-05-13 16:11:30.000000000","message":"This breaks a pattern in nova where binding operations happen only on the compute node, i.e. after the next RPC call step.\n\nI think we should keep that pattern, because it allows for any compute driver specifics that may need to be sent to that binding call to be configured on the compute node, where it will have that information.\n\nIn my head I am comparing this to os-vif and os-brick. Best to keep that the same.\n\nThere were concerns about concurrency being limited by moving this call to the compute, but I am fairly sure we allow up to 10 builds at any one time, and its configurable.\n\nSo... I think this step should move to the nova compute manager, i.e. after the RPC call from the conductor. This mirrors the plans for neutron.","commit_id":"d25929cd7c6dddfa6462017928e3ba73fce6d45f"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f0c43c3bac1d439d8ce92d9e469b9e35641d3ddd","unresolved":false,"context_lines":[{"line_number":246,"context_line":""},{"line_number":247,"context_line":"#. NEW: The Nova virt driver calls the Cyborg REST API ``GET"},{"line_number":248,"context_line":"   /v2/accelerator_requests?instance\u003d\u003cuuid\u003e\u0026bind_state\u003dresolved``. The"},{"line_number":249,"context_line":"   Cyborg client will retry till all ARQs are resolved (i.e. bound"},{"line_number":250,"context_line":"   successfully or failed to bind)."},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"#. NEW: The Nova virt driver uses the attach handles returned from the Cyborg"}],"source_content_type":"text/x-rst","patch_set":12,"id":"dfbec78f_55b418d1","line":249,"range":{"start_line":249,"start_character":22,"end_line":249,"end_character":27},"updated":"2019-05-13 15:07:42.000000000","message":"as discussed, use notifier instead of polling (is this where we talked about doing that?)","commit_id":"d25929cd7c6dddfa6462017928e3ba73fce6d45f"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"a5685bfd21ade85419d9a2277e64bfb473f6db1f","unresolved":false,"context_lines":[{"line_number":246,"context_line":""},{"line_number":247,"context_line":"#. NEW: The Nova virt driver calls the Cyborg REST API ``GET"},{"line_number":248,"context_line":"   /v2/accelerator_requests?instance\u003d\u003cuuid\u003e\u0026bind_state\u003dresolved``. The"},{"line_number":249,"context_line":"   Cyborg client will retry till all ARQs are resolved (i.e. bound"},{"line_number":250,"context_line":"   successfully or failed to bind)."},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"#. NEW: The Nova virt driver uses the attach handles returned from the Cyborg"}],"source_content_type":"text/x-rst","patch_set":12,"id":"bfb3d3c7_b1729048","line":249,"range":{"start_line":249,"start_character":22,"end_line":249,"end_character":27},"in_reply_to":"bfb3d3c7_705c1d7e","updated":"2019-05-22 11:27:03.000000000","message":"yes but each event cannot carry a payload of arbary data.\n\nit would be nice for example if the ARQ-BOUND event had the actual bound arq in it but the event api does not support that which is why you need to call back to cyborg once to get teh content of the arq after reciving the notificiation","commit_id":"d25929cd7c6dddfa6462017928e3ba73fce6d45f"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"cd488ab603662cde9e06607d14602f4d33462b88","unresolved":false,"context_lines":[{"line_number":246,"context_line":""},{"line_number":247,"context_line":"#. NEW: The Nova virt driver calls the Cyborg REST API ``GET"},{"line_number":248,"context_line":"   /v2/accelerator_requests?instance\u003d\u003cuuid\u003e\u0026bind_state\u003dresolved``. The"},{"line_number":249,"context_line":"   Cyborg client will retry till all ARQs are resolved (i.e. bound"},{"line_number":250,"context_line":"   successfully or failed to bind)."},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"#. NEW: The Nova virt driver uses the attach handles returned from the Cyborg"}],"source_content_type":"text/x-rst","patch_set":12,"id":"dfbec78f_d5280898","line":249,"range":{"start_line":249,"start_character":22,"end_line":249,"end_character":27},"in_reply_to":"dfbec78f_55b418d1","updated":"2019-05-13 15:16:19.000000000","message":"Okay, I\u0027ve been pointed to the discussion on PS11 here. IIUC, notification wouldn\u0027t work because you would have to start listening for the event on the compute before you initiated the bind from the conductor?","commit_id":"d25929cd7c6dddfa6462017928e3ba73fce6d45f"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"5f8723a60b0e9c217fcc01f6aba88cac1d049503","unresolved":false,"context_lines":[{"line_number":246,"context_line":""},{"line_number":247,"context_line":"#. NEW: The Nova virt driver calls the Cyborg REST API ``GET"},{"line_number":248,"context_line":"   /v2/accelerator_requests?instance\u003d\u003cuuid\u003e\u0026bind_state\u003dresolved``. The"},{"line_number":249,"context_line":"   Cyborg client will retry till all ARQs are resolved (i.e. bound"},{"line_number":250,"context_line":"   successfully or failed to bind)."},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"#. NEW: The Nova virt driver uses the attach handles returned from the Cyborg"}],"source_content_type":"text/x-rst","patch_set":12,"id":"dfbec78f_d2a57148","line":249,"range":{"start_line":249,"start_character":22,"end_line":249,"end_character":27},"in_reply_to":"dfbec78f_583d2ddb","updated":"2019-05-14 05:45:16.000000000","message":"I should try this out.","commit_id":"d25929cd7c6dddfa6462017928e3ba73fce6d45f"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"fbdc1a6b9ae37a5fa003644adba42980d31397bf","unresolved":false,"context_lines":[{"line_number":246,"context_line":""},{"line_number":247,"context_line":"#. NEW: The Nova virt driver calls the Cyborg REST API ``GET"},{"line_number":248,"context_line":"   /v2/accelerator_requests?instance\u003d\u003cuuid\u003e\u0026bind_state\u003dresolved``. The"},{"line_number":249,"context_line":"   Cyborg client will retry till all ARQs are resolved (i.e. bound"},{"line_number":250,"context_line":"   successfully or failed to bind)."},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"#. NEW: The Nova virt driver uses the attach handles returned from the Cyborg"}],"source_content_type":"text/x-rst","patch_set":12,"id":"bfb3d3c7_705c1d7e","line":249,"range":{"start_line":249,"start_character":22,"end_line":249,"end_character":27},"in_reply_to":"dfbec78f_64206cf8","updated":"2019-05-22 08:04:43.000000000","message":"\u003e the evnets however do not have a payload\n\nhttps://wiki.openstack.org/wiki/Nova/ExternalEventAPI is supported, right?\n\nThat allows multiple events in one notification.","commit_id":"d25929cd7c6dddfa6462017928e3ba73fce6d45f"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"f8710f852b99a12a51677735e2718f9a335cc2cb","unresolved":false,"context_lines":[{"line_number":246,"context_line":""},{"line_number":247,"context_line":"#. NEW: The Nova virt driver calls the Cyborg REST API ``GET"},{"line_number":248,"context_line":"   /v2/accelerator_requests?instance\u003d\u003cuuid\u003e\u0026bind_state\u003dresolved``. The"},{"line_number":249,"context_line":"   Cyborg client will retry till all ARQs are resolved (i.e. bound"},{"line_number":250,"context_line":"   successfully or failed to bind)."},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"#. NEW: The Nova virt driver uses the attach handles returned from the Cyborg"}],"source_content_type":"text/x-rst","patch_set":12,"id":"dfbec78f_64206cf8","line":249,"range":{"start_line":249,"start_character":22,"end_line":249,"end_character":27},"in_reply_to":"dfbec78f_d2a57148","updated":"2019-05-15 07:15:27.000000000","message":"if we want to use the external event system we use with neutron and cinder then yes we would start teh bind process in the compute node and not the conductor and wait for a ARQ-BOUND event notification.\n\nthe evnets however do not have a payload so when that notifiction is recived you would still have to call back to cyborg to retrive the bound arq but that would be better then polling yes.","commit_id":"d25929cd7c6dddfa6462017928e3ba73fce6d45f"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"8a4f02f7e340d1bc8819a43c47d28703380a306e","unresolved":false,"context_lines":[{"line_number":246,"context_line":""},{"line_number":247,"context_line":"#. NEW: The Nova virt driver calls the Cyborg REST API ``GET"},{"line_number":248,"context_line":"   /v2/accelerator_requests?instance\u003d\u003cuuid\u003e\u0026bind_state\u003dresolved``. The"},{"line_number":249,"context_line":"   Cyborg client will retry till all ARQs are resolved (i.e. bound"},{"line_number":250,"context_line":"   successfully or failed to bind)."},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"#. NEW: The Nova virt driver uses the attach handles returned from the Cyborg"}],"source_content_type":"text/x-rst","patch_set":12,"id":"dfbec78f_583d2ddb","line":249,"range":{"start_line":249,"start_character":22,"end_line":249,"end_character":27},"in_reply_to":"dfbec78f_d5280898","updated":"2019-05-13 16:11:30.000000000","message":"So... if we move the bind to nova-compute, this means you can use the same event mechanisms we have for neutron, i.e. compute manager can start listening for the events before the bind call is made.\n\nAt least I think that would be the case?","commit_id":"d25929cd7c6dddfa6462017928e3ba73fce6d45f"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"8a4f02f7e340d1bc8819a43c47d28703380a306e","unresolved":false,"context_lines":[{"line_number":259,"context_line":"Alternatives"},{"line_number":260,"context_line":"------------"},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"None"},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"Data model impact"},{"line_number":265,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":12,"id":"dfbec78f_db8b5765","line":262,"range":{"start_line":262,"start_character":0,"end_line":262,"end_character":4},"updated":"2019-05-13 16:11:30.000000000","message":"If we don\u0027t want to use the suggestion above of external events to avoid polling, and don\u0027t want to move the binding to nova-compute, we should go through why what wouldn\u0027t work / why the above is better in this section.","commit_id":"d25929cd7c6dddfa6462017928e3ba73fce6d45f"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"f779a49d951c41da447921d48b04676a2e1fd906","unresolved":false,"context_lines":[{"line_number":259,"context_line":"Alternatives"},{"line_number":260,"context_line":"------------"},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"None"},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"Data model impact"},{"line_number":265,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":12,"id":"bfb3d3c7_aaae7295","line":262,"range":{"start_line":262,"start_character":0,"end_line":262,"end_character":4},"in_reply_to":"dfbec78f_247cb4ea","updated":"2019-05-24 04:58:19.000000000","message":"Done","commit_id":"d25929cd7c6dddfa6462017928e3ba73fce6d45f"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"f8710f852b99a12a51677735e2718f9a335cc2cb","unresolved":false,"context_lines":[{"line_number":259,"context_line":"Alternatives"},{"line_number":260,"context_line":"------------"},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"None"},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"Data model impact"},{"line_number":265,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":12,"id":"dfbec78f_247cb4ea","line":262,"range":{"start_line":262,"start_character":0,"end_line":262,"end_character":4},"in_reply_to":"dfbec78f_db8b5765","updated":"2019-05-15 07:15:27.000000000","message":"yes we should document these alternatives here.\n\neven if we do move the bind to the comptue node we shoudl document why we did not not do it in the conductor.","commit_id":"d25929cd7c6dddfa6462017928e3ba73fce6d45f"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f0c43c3bac1d439d8ce92d9e469b9e35641d3ddd","unresolved":false,"context_lines":[{"line_number":269,"context_line":"REST API impact"},{"line_number":270,"context_line":"---------------"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"None. A new etxtra_spec key ``accel:device_profile_name`` is added to"},{"line_number":273,"context_line":"the flavor."},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"Security impact"}],"source_content_type":"text/x-rst","patch_set":12,"id":"dfbec78f_f5950c41","line":272,"range":{"start_line":272,"start_character":12,"end_line":272,"end_character":18},"updated":"2019-05-13 15:07:42.000000000","message":"extra","commit_id":"d25929cd7c6dddfa6462017928e3ba73fce6d45f"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"f779a49d951c41da447921d48b04676a2e1fd906","unresolved":false,"context_lines":[{"line_number":269,"context_line":"REST API impact"},{"line_number":270,"context_line":"---------------"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"None. A new etxtra_spec key ``accel:device_profile_name`` is added to"},{"line_number":273,"context_line":"the flavor."},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"Security impact"}],"source_content_type":"text/x-rst","patch_set":12,"id":"bfb3d3c7_4a95763f","line":272,"range":{"start_line":272,"start_character":12,"end_line":272,"end_character":18},"in_reply_to":"bfb3d3c7_5a09fa2e","updated":"2019-05-24 04:58:19.000000000","message":"Done","commit_id":"d25929cd7c6dddfa6462017928e3ba73fce6d45f"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"fbdc1a6b9ae37a5fa003644adba42980d31397bf","unresolved":false,"context_lines":[{"line_number":269,"context_line":"REST API impact"},{"line_number":270,"context_line":"---------------"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"None. A new etxtra_spec key ``accel:device_profile_name`` is added to"},{"line_number":273,"context_line":"the flavor."},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"Security impact"}],"source_content_type":"text/x-rst","patch_set":12,"id":"bfb3d3c7_5a09fa2e","line":272,"range":{"start_line":272,"start_character":12,"end_line":272,"end_character":18},"in_reply_to":"dfbec78f_f5950c41","updated":"2019-05-22 08:04:43.000000000","message":"Done","commit_id":"d25929cd7c6dddfa6462017928e3ba73fce6d45f"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"8a4f02f7e340d1bc8819a43c47d28703380a306e","unresolved":false,"context_lines":[{"line_number":297,"context_line":"Other deployer impact"},{"line_number":298,"context_line":"---------------------"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"The dpeloyer needs to set up the ``clouds.yaml`` file so that Nova"},{"line_number":301,"context_line":"can call the Cyborg REST API."},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"Developer impact"}],"source_content_type":"text/x-rst","patch_set":12,"id":"dfbec78f_982085ae","line":300,"range":{"start_line":300,"start_character":4,"end_line":300,"end_character":12},"updated":"2019-05-13 16:11:30.000000000","message":"Nit: deployer","commit_id":"d25929cd7c6dddfa6462017928e3ba73fce6d45f"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"f779a49d951c41da447921d48b04676a2e1fd906","unresolved":false,"context_lines":[{"line_number":297,"context_line":"Other deployer impact"},{"line_number":298,"context_line":"---------------------"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"The dpeloyer needs to set up the ``clouds.yaml`` file so that Nova"},{"line_number":301,"context_line":"can call the Cyborg REST API."},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"Developer impact"}],"source_content_type":"text/x-rst","patch_set":12,"id":"bfb3d3c7_2a9a826d","line":300,"range":{"start_line":300,"start_character":4,"end_line":300,"end_character":12},"in_reply_to":"bfb3d3c7_9a177252","updated":"2019-05-24 04:58:19.000000000","message":"Done","commit_id":"d25929cd7c6dddfa6462017928e3ba73fce6d45f"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"fbdc1a6b9ae37a5fa003644adba42980d31397bf","unresolved":false,"context_lines":[{"line_number":297,"context_line":"Other deployer impact"},{"line_number":298,"context_line":"---------------------"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"The dpeloyer needs to set up the ``clouds.yaml`` file so that Nova"},{"line_number":301,"context_line":"can call the Cyborg REST API."},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"Developer impact"}],"source_content_type":"text/x-rst","patch_set":12,"id":"bfb3d3c7_9a177252","line":300,"range":{"start_line":300,"start_character":4,"end_line":300,"end_character":12},"in_reply_to":"dfbec78f_982085ae","updated":"2019-05-22 08:04:43.000000000","message":"Done","commit_id":"d25929cd7c6dddfa6462017928e3ba73fce6d45f"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"8a4f02f7e340d1bc8819a43c47d28703380a306e","unresolved":false,"context_lines":[{"line_number":298,"context_line":"---------------------"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"The dpeloyer needs to set up the ``clouds.yaml`` file so that Nova"},{"line_number":301,"context_line":"can call the Cyborg REST API."},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"Developer impact"},{"line_number":304,"context_line":"----------------"}],"source_content_type":"text/x-rst","patch_set":12,"id":"dfbec78f_1b11ef52","line":301,"updated":"2019-05-13 16:11:30.000000000","message":"Should we always send a service token with the request from Nova?\n\nThis allows cyborg policy to check that the bind request contains both the user token and the nova service token. This avoids the need for any catch all admin user.","commit_id":"d25929cd7c6dddfa6462017928e3ba73fce6d45f"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"a5685bfd21ade85419d9a2277e64bfb473f6db1f","unresolved":false,"context_lines":[{"line_number":298,"context_line":"---------------------"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"The dpeloyer needs to set up the ``clouds.yaml`` file so that Nova"},{"line_number":301,"context_line":"can call the Cyborg REST API."},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"Developer impact"},{"line_number":304,"context_line":"----------------"}],"source_content_type":"text/x-rst","patch_set":12,"id":"bfb3d3c7_11ea7c74","line":301,"in_reply_to":"bfb3d3c7_05c79e47","updated":"2019-05-22 11:27:03.000000000","message":"im not sure how that is relevent but by default nova uses the user tokens to call other service unless you explcitly use an admin context.\n\nwhat we were saying above is that cyborgs api shoudl default to all endpoint being admin only and and require overriding that with a policy file at least initially. \n\nso nova would need admin credetials for cyborg and use those on behalf of the tenant to provision devices from a cyborg point of view the only consume would be nova but in placement exctra we woudl recored the allocation with they user id.\n\nit would be similar to how nova interact with ironic which also has an admin only api. since both are dealing with hardware and it coudl potentially be dangourse to expose cyborg resouces to non admings by default i think making cyborg admin only by default is the safest approch if that is not how the api is currently written.","commit_id":"d25929cd7c6dddfa6462017928e3ba73fce6d45f"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"f779a49d951c41da447921d48b04676a2e1fd906","unresolved":false,"context_lines":[{"line_number":298,"context_line":"---------------------"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"The dpeloyer needs to set up the ``clouds.yaml`` file so that Nova"},{"line_number":301,"context_line":"can call the Cyborg REST API."},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"Developer impact"},{"line_number":304,"context_line":"----------------"}],"source_content_type":"text/x-rst","patch_set":12,"id":"bfb3d3c7_ca8f2621","line":301,"in_reply_to":"bfb3d3c7_11ea7c74","updated":"2019-05-24 04:58:19.000000000","message":"I believe that some APIs may be needed for end users, e.g. end users may want to query device profiles. That said, your point about security is well-taken. For RBAC, quotas and such, Nova may need to pass the user token and a service token.","commit_id":"d25929cd7c6dddfa6462017928e3ba73fce6d45f"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"478c85b2349876519586998cb55efa0a44674ec6","unresolved":false,"context_lines":[{"line_number":298,"context_line":"---------------------"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"The dpeloyer needs to set up the ``clouds.yaml`` file so that Nova"},{"line_number":301,"context_line":"can call the Cyborg REST API."},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"Developer impact"},{"line_number":304,"context_line":"----------------"}],"source_content_type":"text/x-rst","patch_set":12,"id":"dfbec78f_825c79ed","line":301,"in_reply_to":"dfbec78f_1b11ef52","updated":"2019-05-14 18:36:02.000000000","message":"Should the cyborg API operations be user or admin? I\u0027ve kind of been assuming they\u0027d be admin, using ksa auth credentials from config (or clouds.yaml - same effect). In which case service token is n/a.","commit_id":"d25929cd7c6dddfa6462017928e3ba73fce6d45f"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"f8710f852b99a12a51677735e2718f9a335cc2cb","unresolved":false,"context_lines":[{"line_number":298,"context_line":"---------------------"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"The dpeloyer needs to set up the ``clouds.yaml`` file so that Nova"},{"line_number":301,"context_line":"can call the Cyborg REST API."},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"Developer impact"},{"line_number":304,"context_line":"----------------"}],"source_content_type":"text/x-rst","patch_set":12,"id":"dfbec78f_e481bcc4","line":301,"in_reply_to":"dfbec78f_825c79ed","updated":"2019-05-15 07:15:27.000000000","message":"its proably better to start as an admin only api but i can see some usecase where you would like it to be non admin but i think that can be controled by policy with admin by default.","commit_id":"d25929cd7c6dddfa6462017928e3ba73fce6d45f"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"fbdc1a6b9ae37a5fa003644adba42980d31397bf","unresolved":false,"context_lines":[{"line_number":298,"context_line":"---------------------"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"The dpeloyer needs to set up the ``clouds.yaml`` file so that Nova"},{"line_number":301,"context_line":"can call the Cyborg REST API."},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"Developer impact"},{"line_number":304,"context_line":"----------------"}],"source_content_type":"text/x-rst","patch_set":12,"id":"bfb3d3c7_05c79e47","line":301,"in_reply_to":"dfbec78f_e481bcc4","updated":"2019-05-22 08:04:43.000000000","message":"For Cyborg to apply the RBAC policies on the project (tenant)/user id in the API calls, don\u0027t we need the user token?","commit_id":"d25929cd7c6dddfa6462017928e3ba73fce6d45f"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f0c43c3bac1d439d8ce92d9e469b9e35641d3ddd","unresolved":false,"context_lines":[{"line_number":303,"context_line":"Developer impact"},{"line_number":304,"context_line":"----------------"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"Define two new standard resource classes: ACCELERATOR_FPGA and"},{"line_number":307,"context_line":"ACCELERATOR_GPU. For GPUs, though we have VGPU and VGPU_DISPLAY_HEAD RCs"},{"line_number":308,"context_line":"defined already, both specifically refer to virtual GPUs, and seem to be"},{"line_number":309,"context_line":"focused on the graphics use case. For passing the physical GPU for compute"},{"line_number":310,"context_line":"offload, we want something distinctive. Also, it will be subject to separate"}],"source_content_type":"text/x-rst","patch_set":12,"id":"dfbec78f_d5dec8d8","line":307,"range":{"start_line":306,"start_character":42,"end_line":307,"end_character":15},"updated":"2019-05-13 15:07:42.000000000","message":"Naming concerns raised in the os-traits patch proposing these [1]. Let\u0027s talk about that here. Copying gibi\u0027s comment:\n\n\"\"\"Why the prefix \"ACCELERATOR\"? Is this there to encode how the  FPGA is intended to be used by the guest? Is it there to encode that Cyborg owns this resource class?\n\nCould we simply call it FPGA and GPU\"\"\"\n\n[1] https://review.opendev.org/#/c/657464/5/os_resource_classes/__init__.py@72","commit_id":"d25929cd7c6dddfa6462017928e3ba73fce6d45f"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"f779a49d951c41da447921d48b04676a2e1fd906","unresolved":false,"context_lines":[{"line_number":303,"context_line":"Developer impact"},{"line_number":304,"context_line":"----------------"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"Define two new standard resource classes: ACCELERATOR_FPGA and"},{"line_number":307,"context_line":"ACCELERATOR_GPU. For GPUs, though we have VGPU and VGPU_DISPLAY_HEAD RCs"},{"line_number":308,"context_line":"defined already, both specifically refer to virtual GPUs, and seem to be"},{"line_number":309,"context_line":"focused on the graphics use case. For passing the physical GPU for compute"},{"line_number":310,"context_line":"offload, we want something distinctive. Also, it will be subject to separate"}],"source_content_type":"text/x-rst","patch_set":12,"id":"bfb3d3c7_4aa3369f","line":307,"range":{"start_line":306,"start_character":42,"end_line":307,"end_character":15},"in_reply_to":"bfb3d3c7_91e42cae","updated":"2019-05-24 04:58:19.000000000","message":"OK. Could we summarize by saying that we propose FPGA and PGPU as standard resource classes?","commit_id":"d25929cd7c6dddfa6462017928e3ba73fce6d45f"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"fbdc1a6b9ae37a5fa003644adba42980d31397bf","unresolved":false,"context_lines":[{"line_number":303,"context_line":"Developer impact"},{"line_number":304,"context_line":"----------------"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"Define two new standard resource classes: ACCELERATOR_FPGA and"},{"line_number":307,"context_line":"ACCELERATOR_GPU. For GPUs, though we have VGPU and VGPU_DISPLAY_HEAD RCs"},{"line_number":308,"context_line":"defined already, both specifically refer to virtual GPUs, and seem to be"},{"line_number":309,"context_line":"focused on the graphics use case. For passing the physical GPU for compute"},{"line_number":310,"context_line":"offload, we want something distinctive. Also, it will be subject to separate"}],"source_content_type":"text/x-rst","patch_set":12,"id":"dfbec78f_985cefed","line":307,"range":{"start_line":306,"start_character":42,"end_line":307,"end_character":15},"in_reply_to":"dfbec78f_2ceb49dc","updated":"2019-05-22 08:04:43.000000000","message":"Yes. Please see my reply to Gibi above. A device may support multiple attach types.","commit_id":"d25929cd7c6dddfa6462017928e3ba73fce6d45f"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"f8710f852b99a12a51677735e2718f9a335cc2cb","unresolved":false,"context_lines":[{"line_number":303,"context_line":"Developer impact"},{"line_number":304,"context_line":"----------------"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"Define two new standard resource classes: ACCELERATOR_FPGA and"},{"line_number":307,"context_line":"ACCELERATOR_GPU. For GPUs, though we have VGPU and VGPU_DISPLAY_HEAD RCs"},{"line_number":308,"context_line":"defined already, both specifically refer to virtual GPUs, and seem to be"},{"line_number":309,"context_line":"focused on the graphics use case. For passing the physical GPU for compute"},{"line_number":310,"context_line":"offload, we want something distinctive. Also, it will be subject to separate"}],"source_content_type":"text/x-rst","patch_set":12,"id":"dfbec78f_8449e0b7","line":307,"range":{"start_line":306,"start_character":42,"end_line":307,"end_character":15},"in_reply_to":"dfbec78f_2ceb49dc","updated":"2019-05-15 07:15:27.000000000","message":"so the only concern i have with this is the present of ACCELERATOR in the class name\n\n\ni think parity with vcpu and pcup would be better and instead use a PGPU \n\nwe support PGPU passthough via flavor alais and going forwad i think we shoudl track those in placement too. it would be nice to use the same resouce class regardless of if it is manged by cyborg or not which is why i would prefer to not have the ACCLERATOR prefix as we would not normally uses that if for the nova resouce classes\n\ni think this will be important for resocue class based quotas via unified limits as we want a PGPU limit to apply to gpus passthough via the flaovr or cyborg.\n\non that not i would drop the ACCELERATOR prefix form FPGA also.\n\nthe other topic that came up is that we shoudl have a different resouce for the full FPGA vs a FPGA slot\n\nso FPAG and FPGA_SLOT","commit_id":"d25929cd7c6dddfa6462017928e3ba73fce6d45f"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"fbdc1a6b9ae37a5fa003644adba42980d31397bf","unresolved":false,"context_lines":[{"line_number":303,"context_line":"Developer impact"},{"line_number":304,"context_line":"----------------"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"Define two new standard resource classes: ACCELERATOR_FPGA and"},{"line_number":307,"context_line":"ACCELERATOR_GPU. For GPUs, though we have VGPU and VGPU_DISPLAY_HEAD RCs"},{"line_number":308,"context_line":"defined already, both specifically refer to virtual GPUs, and seem to be"},{"line_number":309,"context_line":"focused on the graphics use case. For passing the physical GPU for compute"},{"line_number":310,"context_line":"offload, we want something distinctive. Also, it will be subject to separate"}],"source_content_type":"text/x-rst","patch_set":12,"id":"dfbec78f_384ce340","line":307,"range":{"start_line":306,"start_character":42,"end_line":307,"end_character":15},"in_reply_to":"dfbec78f_68de1212","updated":"2019-05-22 08:04:43.000000000","message":"\u003e Does GPU will mean a full physical GPU resource?\n Yes. Physical function is passed through today.\n\nWhat if a device can support SR-IOV and physical passthrough -- which RC would one use? Just to make things interesting: what if it also supports mediated device (vfio-mdev) [1]? \n\n[1] https://www.kernel.org/doc/Documentation/vfio-mediated-device.txt","commit_id":"d25929cd7c6dddfa6462017928e3ba73fce6d45f"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b8b5203b0d5aa5dce79ecd8dea222114c5b66920","unresolved":false,"context_lines":[{"line_number":303,"context_line":"Developer impact"},{"line_number":304,"context_line":"----------------"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"Define two new standard resource classes: ACCELERATOR_FPGA and"},{"line_number":307,"context_line":"ACCELERATOR_GPU. For GPUs, though we have VGPU and VGPU_DISPLAY_HEAD RCs"},{"line_number":308,"context_line":"defined already, both specifically refer to virtual GPUs, and seem to be"},{"line_number":309,"context_line":"focused on the graphics use case. For passing the physical GPU for compute"},{"line_number":310,"context_line":"offload, we want something distinctive. Also, it will be subject to separate"}],"source_content_type":"text/x-rst","patch_set":12,"id":"dfbec78f_2ceb49dc","line":307,"range":{"start_line":306,"start_character":42,"end_line":307,"end_character":15},"in_reply_to":"dfbec78f_68de1212","updated":"2019-05-14 13:13:20.000000000","message":"Is a \"GPU used for offload\" also known as a \"GPGPU\"? Just throwing another possibility in the mix to keep things crazy.","commit_id":"d25929cd7c6dddfa6462017928e3ba73fce6d45f"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"f05c8daa7fa3ee4466b21046cad75d57864dd487","unresolved":false,"context_lines":[{"line_number":303,"context_line":"Developer impact"},{"line_number":304,"context_line":"----------------"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"Define two new standard resource classes: ACCELERATOR_FPGA and"},{"line_number":307,"context_line":"ACCELERATOR_GPU. For GPUs, though we have VGPU and VGPU_DISPLAY_HEAD RCs"},{"line_number":308,"context_line":"defined already, both specifically refer to virtual GPUs, and seem to be"},{"line_number":309,"context_line":"focused on the graphics use case. For passing the physical GPU for compute"},{"line_number":310,"context_line":"offload, we want something distinctive. Also, it will be subject to separate"}],"source_content_type":"text/x-rst","patch_set":12,"id":"dfbec78f_68de1212","line":307,"range":{"start_line":306,"start_character":42,"end_line":307,"end_character":15},"in_reply_to":"dfbec78f_770cb7a4","updated":"2019-05-14 08:32:40.000000000","message":"I think the existing VGPU also mostly used for offload rather than graphics. Does GPU will mean a full physical GPU resource? If yes then I\u0027m OK to have a GPU class besides the existing VGPU class that represents a virtualized GPU resource.","commit_id":"d25929cd7c6dddfa6462017928e3ba73fce6d45f"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"fbdc1a6b9ae37a5fa003644adba42980d31397bf","unresolved":false,"context_lines":[{"line_number":303,"context_line":"Developer impact"},{"line_number":304,"context_line":"----------------"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"Define two new standard resource classes: ACCELERATOR_FPGA and"},{"line_number":307,"context_line":"ACCELERATOR_GPU. For GPUs, though we have VGPU and VGPU_DISPLAY_HEAD RCs"},{"line_number":308,"context_line":"defined already, both specifically refer to virtual GPUs, and seem to be"},{"line_number":309,"context_line":"focused on the graphics use case. For passing the physical GPU for compute"},{"line_number":310,"context_line":"offload, we want something distinctive. Also, it will be subject to separate"}],"source_content_type":"text/x-rst","patch_set":12,"id":"bfb3d3c7_7a7e3e6c","line":307,"range":{"start_line":306,"start_character":42,"end_line":307,"end_character":15},"in_reply_to":"dfbec78f_8449e0b7","updated":"2019-05-22 08:04:43.000000000","message":"Ok. Whether a whole FPGA or part of it is exposed is device-dependent. Also, SLOT is not a widely used term; PR Region is a standard one. My suggestion is to have only FPGA as an RC.\n\nReference to patch: https://review.opendev.org/#/c/657464/","commit_id":"d25929cd7c6dddfa6462017928e3ba73fce6d45f"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"a5685bfd21ade85419d9a2277e64bfb473f6db1f","unresolved":false,"context_lines":[{"line_number":303,"context_line":"Developer impact"},{"line_number":304,"context_line":"----------------"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"Define two new standard resource classes: ACCELERATOR_FPGA and"},{"line_number":307,"context_line":"ACCELERATOR_GPU. For GPUs, though we have VGPU and VGPU_DISPLAY_HEAD RCs"},{"line_number":308,"context_line":"defined already, both specifically refer to virtual GPUs, and seem to be"},{"line_number":309,"context_line":"focused on the graphics use case. For passing the physical GPU for compute"},{"line_number":310,"context_line":"offload, we want something distinctive. Also, it will be subject to separate"}],"source_content_type":"text/x-rst","patch_set":12,"id":"bfb3d3c7_91e42cae","line":307,"range":{"start_line":306,"start_character":42,"end_line":307,"end_character":15},"in_reply_to":"dfbec78f_985cefed","updated":"2019-05-22 11:27:03.000000000","message":"i dont think thrying to differnacte using the terms sr-iov and phyical passthough are helpful.\n\nsr-iov is a technology that is used when passing though both the PF and VF it does not just refer to just the VF.\nvifo mediated devices are an extention of both sriov and the vfio framework so in this context an mdev is basically the same as a vf when considering the resouce class.\n\nwe current use the v prfix to the the vGPU resouce class to indicate that it is a partition of a gpu rater then the PF.\n\nthe vGPU resource is currently used for nvidias mdevs based vgpus but it would also shoudl be used for amds sriov VF based gpus. so mdevs does not make it interesting it just the same as using an sriov vf and equally boring as a result.\n\nthe vGPU resource should be used anythime you are using hardware based gpu virtualization.\n\na pGPU class woudl ideally be intoduced for modeing the full device passthough case although that is still using the sriov capablityes of the hardware to expose the pf to the guest.","commit_id":"d25929cd7c6dddfa6462017928e3ba73fce6d45f"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"8a4f02f7e340d1bc8819a43c47d28703380a306e","unresolved":false,"context_lines":[{"line_number":303,"context_line":"Developer impact"},{"line_number":304,"context_line":"----------------"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"Define two new standard resource classes: ACCELERATOR_FPGA and"},{"line_number":307,"context_line":"ACCELERATOR_GPU. For GPUs, though we have VGPU and VGPU_DISPLAY_HEAD RCs"},{"line_number":308,"context_line":"defined already, both specifically refer to virtual GPUs, and seem to be"},{"line_number":309,"context_line":"focused on the graphics use case. For passing the physical GPU for compute"},{"line_number":310,"context_line":"offload, we want something distinctive. Also, it will be subject to separate"}],"source_content_type":"text/x-rst","patch_set":12,"id":"dfbec78f_db44b749","line":307,"range":{"start_line":306,"start_character":42,"end_line":307,"end_character":15},"in_reply_to":"dfbec78f_d5dec8d8","updated":"2019-05-13 16:11:30.000000000","message":"+1 keeping this simple.\n\nThese resource classes will eventually get used by keystone\u0027s unified limits, so its very end user viiible.","commit_id":"d25929cd7c6dddfa6462017928e3ba73fce6d45f"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"5f8723a60b0e9c217fcc01f6aba88cac1d049503","unresolved":false,"context_lines":[{"line_number":303,"context_line":"Developer impact"},{"line_number":304,"context_line":"----------------"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"Define two new standard resource classes: ACCELERATOR_FPGA and"},{"line_number":307,"context_line":"ACCELERATOR_GPU. For GPUs, though we have VGPU and VGPU_DISPLAY_HEAD RCs"},{"line_number":308,"context_line":"defined already, both specifically refer to virtual GPUs, and seem to be"},{"line_number":309,"context_line":"focused on the graphics use case. For passing the physical GPU for compute"},{"line_number":310,"context_line":"offload, we want something distinctive. Also, it will be subject to separate"}],"source_content_type":"text/x-rst","patch_set":12,"id":"dfbec78f_770cb7a4","line":307,"range":{"start_line":306,"start_character":42,"end_line":307,"end_character":15},"in_reply_to":"dfbec78f_db44b749","updated":"2019-05-14 05:45:16.000000000","message":"I have no objections. Could somebody object to having \u0027VGPU\u0027 and \u0027GPU\u0027?  The term \u0027ACCELERATOR_GPU\u0027 was meant to indicate that it was meant for compute offload rather than graphics.","commit_id":"d25929cd7c6dddfa6462017928e3ba73fce6d45f"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"f8710f852b99a12a51677735e2718f9a335cc2cb","unresolved":false,"context_lines":[{"line_number":306,"context_line":"Define two new standard resource classes: ACCELERATOR_FPGA and"},{"line_number":307,"context_line":"ACCELERATOR_GPU. For GPUs, though we have VGPU and VGPU_DISPLAY_HEAD RCs"},{"line_number":308,"context_line":"defined already, both specifically refer to virtual GPUs, and seem to be"},{"line_number":309,"context_line":"focused on the graphics use case. For passing the physical GPU for compute"},{"line_number":310,"context_line":"offload, we want something distinctive. Also, it will be subject to separate"},{"line_number":311,"context_line":"quotas/limits in Keystone. Also, using PCI_DEVICE RC is too general: we want"},{"line_number":312,"context_line":"quotas for GPU RC specifically."}],"source_content_type":"text/x-rst","patch_set":12,"id":"dfbec78f_64e38ca5","line":309,"range":{"start_line":309,"start_character":15,"end_line":309,"end_character":33},"updated":"2019-05-15 07:15:27.000000000","message":"we should not have different resouce class based on the usecase.\n\nregardless of if you use the gpu for rendering or compute its still a PGPU or VGPU the capablities e.g. CUDA or OPENGL are tratis and should not be modeled in the RC","commit_id":"d25929cd7c6dddfa6462017928e3ba73fce6d45f"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"f779a49d951c41da447921d48b04676a2e1fd906","unresolved":false,"context_lines":[{"line_number":306,"context_line":"Define two new standard resource classes: ACCELERATOR_FPGA and"},{"line_number":307,"context_line":"ACCELERATOR_GPU. For GPUs, though we have VGPU and VGPU_DISPLAY_HEAD RCs"},{"line_number":308,"context_line":"defined already, both specifically refer to virtual GPUs, and seem to be"},{"line_number":309,"context_line":"focused on the graphics use case. For passing the physical GPU for compute"},{"line_number":310,"context_line":"offload, we want something distinctive. Also, it will be subject to separate"},{"line_number":311,"context_line":"quotas/limits in Keystone. Also, using PCI_DEVICE RC is too general: we want"},{"line_number":312,"context_line":"quotas for GPU RC specifically."}],"source_content_type":"text/x-rst","patch_set":12,"id":"bfb3d3c7_ea922a4b","line":309,"range":{"start_line":309,"start_character":15,"end_line":309,"end_character":33},"in_reply_to":"bfb3d3c7_cd9e96b7","updated":"2019-05-24 04:58:19.000000000","message":"Done","commit_id":"d25929cd7c6dddfa6462017928e3ba73fce6d45f"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"fbdc1a6b9ae37a5fa003644adba42980d31397bf","unresolved":false,"context_lines":[{"line_number":306,"context_line":"Define two new standard resource classes: ACCELERATOR_FPGA and"},{"line_number":307,"context_line":"ACCELERATOR_GPU. For GPUs, though we have VGPU and VGPU_DISPLAY_HEAD RCs"},{"line_number":308,"context_line":"defined already, both specifically refer to virtual GPUs, and seem to be"},{"line_number":309,"context_line":"focused on the graphics use case. For passing the physical GPU for compute"},{"line_number":310,"context_line":"offload, we want something distinctive. Also, it will be subject to separate"},{"line_number":311,"context_line":"quotas/limits in Keystone. Also, using PCI_DEVICE RC is too general: we want"},{"line_number":312,"context_line":"quotas for GPU RC specifically."}],"source_content_type":"text/x-rst","patch_set":12,"id":"bfb3d3c7_cd9e96b7","line":309,"range":{"start_line":309,"start_character":15,"end_line":309,"end_character":33},"in_reply_to":"dfbec78f_64e38ca5","updated":"2019-05-22 08:04:43.000000000","message":"Done","commit_id":"d25929cd7c6dddfa6462017928e3ba73fce6d45f"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f0c43c3bac1d439d8ce92d9e469b9e35641d3ddd","unresolved":false,"context_lines":[{"line_number":333,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":334,"context_line":""},{"line_number":335,"context_line":"* Specification for device profiles [#dev-prof]_."},{"line_number":336,"context_line":"* Cyborg API specification [#cy-api]."},{"line_number":337,"context_line":""},{"line_number":338,"context_line":"Testing"},{"line_number":339,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":12,"id":"dfbec78f_b5a9d47c","line":336,"range":{"start_line":336,"start_character":27,"end_line":336,"end_character":36},"updated":"2019-05-13 15:07:42.000000000","message":"add _ to make this render as link","commit_id":"d25929cd7c6dddfa6462017928e3ba73fce6d45f"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"f779a49d951c41da447921d48b04676a2e1fd906","unresolved":false,"context_lines":[{"line_number":333,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":334,"context_line":""},{"line_number":335,"context_line":"* Specification for device profiles [#dev-prof]_."},{"line_number":336,"context_line":"* Cyborg API specification [#cy-api]."},{"line_number":337,"context_line":""},{"line_number":338,"context_line":"Testing"},{"line_number":339,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":12,"id":"bfb3d3c7_6a9e3a55","line":336,"range":{"start_line":336,"start_character":27,"end_line":336,"end_character":36},"in_reply_to":"bfb3d3c7_6da52a04","updated":"2019-05-24 04:58:19.000000000","message":"Done","commit_id":"d25929cd7c6dddfa6462017928e3ba73fce6d45f"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"fbdc1a6b9ae37a5fa003644adba42980d31397bf","unresolved":false,"context_lines":[{"line_number":333,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":334,"context_line":""},{"line_number":335,"context_line":"* Specification for device profiles [#dev-prof]_."},{"line_number":336,"context_line":"* Cyborg API specification [#cy-api]."},{"line_number":337,"context_line":""},{"line_number":338,"context_line":"Testing"},{"line_number":339,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":12,"id":"bfb3d3c7_6da52a04","line":336,"range":{"start_line":336,"start_character":27,"end_line":336,"end_character":36},"in_reply_to":"dfbec78f_b5a9d47c","updated":"2019-05-22 08:04:43.000000000","message":"Done","commit_id":"d25929cd7c6dddfa6462017928e3ba73fce6d45f"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f0c43c3bac1d439d8ce92d9e469b9e35641d3ddd","unresolved":false,"context_lines":[{"line_number":340,"context_line":"There need to be unit tests and functional tests for the Nova changes."},{"line_number":341,"context_line":""},{"line_number":342,"context_line":"There need to be tempest tests for the end-to-end flow, including failure"},{"line_number":343,"context_line":"modes."},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"Documentation Impact"},{"line_number":346,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":12,"id":"dfbec78f_35e404e0","line":343,"updated":"2019-05-13 15:07:42.000000000","message":"A little more detail on CI here please.\n\nIn particular, we talked about having a fake cyborg driver so the above mentioned tempest flow could be run in upstream zuul without specialized hardware.\n\nAnd we also agreed that that would be sufficient proof of functionality for merging this.","commit_id":"d25929cd7c6dddfa6462017928e3ba73fce6d45f"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"8a4f02f7e340d1bc8819a43c47d28703380a306e","unresolved":false,"context_lines":[{"line_number":340,"context_line":"There need to be unit tests and functional tests for the Nova changes."},{"line_number":341,"context_line":""},{"line_number":342,"context_line":"There need to be tempest tests for the end-to-end flow, including failure"},{"line_number":343,"context_line":"modes."},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"Documentation Impact"},{"line_number":346,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":12,"id":"dfbec78f_5b7207af","line":343,"in_reply_to":"dfbec78f_35e404e0","updated":"2019-05-13 16:11:30.000000000","message":"+1","commit_id":"d25929cd7c6dddfa6462017928e3ba73fce6d45f"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"f8710f852b99a12a51677735e2718f9a335cc2cb","unresolved":false,"context_lines":[{"line_number":340,"context_line":"There need to be unit tests and functional tests for the Nova changes."},{"line_number":341,"context_line":""},{"line_number":342,"context_line":"There need to be tempest tests for the end-to-end flow, including failure"},{"line_number":343,"context_line":"modes."},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"Documentation Impact"},{"line_number":346,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":12,"id":"dfbec78f_c401183a","line":343,"in_reply_to":"dfbec78f_5b7207af","updated":"2019-05-15 07:15:27.000000000","message":"yep i think the minium smoke test we want for mergin the integratio is an upstream dvsm-tempest job on the nova gate that deploy with a cyborg fake dirver. we discussed/agreed that at the ptg and it would be good to capture that here.","commit_id":"d25929cd7c6dddfa6462017928e3ba73fce6d45f"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"f779a49d951c41da447921d48b04676a2e1fd906","unresolved":false,"context_lines":[{"line_number":340,"context_line":"There need to be unit tests and functional tests for the Nova changes."},{"line_number":341,"context_line":""},{"line_number":342,"context_line":"There need to be tempest tests for the end-to-end flow, including failure"},{"line_number":343,"context_line":"modes."},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"Documentation Impact"},{"line_number":346,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":12,"id":"bfb3d3c7_cadde614","line":343,"in_reply_to":"dfbec78f_c401183a","updated":"2019-05-24 04:58:19.000000000","message":"Done","commit_id":"d25929cd7c6dddfa6462017928e3ba73fce6d45f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2a9d79b653d7b4dd9be34f497cefcfbcae098db7","unresolved":false,"context_lines":[{"line_number":26,"context_line":"parts are covered by other specs, and describe what is covered in this spec."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"* Representation: Cyborg shall represent devices as nested resource providers"},{"line_number":29,"context_line":"  under the compute node (except possibly for disaggregated servers),"},{"line_number":30,"context_line":"  accelerator types as resource classes and accelerators as inventory in"},{"line_number":31,"context_line":"  Placement. The properties needed for scheduling are represented as traits."},{"line_number":32,"context_line":"  This is specified by [#cy-nova-place]_. This spec does not"}],"source_content_type":"text/x-rst","patch_set":13,"id":"9fb8cfa7_c374529c","line":29,"range":{"start_line":29,"start_character":26,"end_line":29,"end_character":67},"updated":"2019-06-03 22:20:33.000000000","message":"I don\u0027t know what this means.","commit_id":"e994fa31a23a228878110d900b5d6dabfbd7da8d"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"97bdf1bcd916a885ed25913a4b18d223780f9bf8","unresolved":false,"context_lines":[{"line_number":26,"context_line":"parts are covered by other specs, and describe what is covered in this spec."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"* Representation: Cyborg shall represent devices as nested resource providers"},{"line_number":29,"context_line":"  under the compute node (except possibly for disaggregated servers),"},{"line_number":30,"context_line":"  accelerator types as resource classes and accelerators as inventory in"},{"line_number":31,"context_line":"  Placement. The properties needed for scheduling are represented as traits."},{"line_number":32,"context_line":"  This is specified by [#cy-nova-place]_. This spec does not"}],"source_content_type":"text/x-rst","patch_set":13,"id":"9fb8cfa7_988a2119","line":29,"range":{"start_line":29,"start_character":26,"end_line":29,"end_character":67},"in_reply_to":"9fb8cfa7_6c6c7336","updated":"2019-06-05 13:44:41.000000000","message":"for RSD the cyborg devices would be modelled  as sharing resource providers correct using placement aggregates to track which servers the device can be attached to.","commit_id":"e994fa31a23a228878110d900b5d6dabfbd7da8d"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"d2bbe9923a86493cbd458cf785fd66b239b889d1","unresolved":false,"context_lines":[{"line_number":26,"context_line":"parts are covered by other specs, and describe what is covered in this spec."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"* Representation: Cyborg shall represent devices as nested resource providers"},{"line_number":29,"context_line":"  under the compute node (except possibly for disaggregated servers),"},{"line_number":30,"context_line":"  accelerator types as resource classes and accelerators as inventory in"},{"line_number":31,"context_line":"  Placement. The properties needed for scheduling are represented as traits."},{"line_number":32,"context_line":"  This is specified by [#cy-nova-place]_. This spec does not"}],"source_content_type":"text/x-rst","patch_set":13,"id":"9fb8cfa7_6c6c7336","line":29,"range":{"start_line":29,"start_character":26,"end_line":29,"end_character":67},"in_reply_to":"9fb8cfa7_c374529c","updated":"2019-06-04 05:31:26.000000000","message":"[1] https://searchitoperations.techtarget.com/definition/disaggregated-server\n\n[2] https://www.intel.com/content/www/us/en/architecture-and-technology/rack-scale-design-overview.html","commit_id":"e994fa31a23a228878110d900b5d6dabfbd7da8d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2a9d79b653d7b4dd9be34f497cefcfbcae098db7","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"* User requests for accelerators: Users usually request compute resources via"},{"line_number":44,"context_line":"  flavors. However, since the requests for devices may be highly varied,"},{"line_number":45,"context_line":"  placing them in flavors may result in flavor explosion. We avoid that by"},{"line_number":46,"context_line":"  expressing device requests in a device profile [#dev-prof]_ . The"},{"line_number":47,"context_line":"  relationship between device profiles and flavors is explored in Section"},{"line_number":48,"context_line":"  `User requests`_."}],"source_content_type":"text/x-rst","patch_set":13,"id":"9fb8cfa7_23bf6efc","line":45,"range":{"start_line":45,"start_character":37,"end_line":45,"end_character":57},"updated":"2019-06-03 22:20:33.000000000","message":"Like baremetal flavors, OK.","commit_id":"e994fa31a23a228878110d900b5d6dabfbd7da8d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2a9d79b653d7b4dd9be34f497cefcfbcae098db7","unresolved":false,"context_lines":[{"line_number":52,"context_line":"  syntax in request groups is covered in Section `Updating the Request Spec`_."},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"* Instance scheduling: Nova shall use the Placement data populated by Cyborg"},{"line_number":55,"context_line":"  to schedule instances, just as today. This spec does not dwell on this"},{"line_number":56,"context_line":"  topic."},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"* Assignment of accelerators: We introduce the concept of Accelerator Request"}],"source_content_type":"text/x-rst","patch_set":13,"id":"9fb8cfa7_e35f16e3","line":55,"range":{"start_line":55,"start_character":25,"end_line":55,"end_character":38},"updated":"2019-06-03 22:20:33.000000000","message":"I\u0027m not sure what this is referring to, but assuming it\u0027s akin to the requested resources stuff on ports for bandwidth-aware scheduling.","commit_id":"e994fa31a23a228878110d900b5d6dabfbd7da8d"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"97bdf1bcd916a885ed25913a4b18d223780f9bf8","unresolved":false,"context_lines":[{"line_number":52,"context_line":"  syntax in request groups is covered in Section `Updating the Request Spec`_."},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"* Instance scheduling: Nova shall use the Placement data populated by Cyborg"},{"line_number":55,"context_line":"  to schedule instances, just as today. This spec does not dwell on this"},{"line_number":56,"context_line":"  topic."},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"* Assignment of accelerators: We introduce the concept of Accelerator Request"}],"source_content_type":"text/x-rst","patch_set":13,"id":"9fb8cfa7_f8723d49","line":55,"range":{"start_line":55,"start_character":25,"end_line":55,"end_character":38},"in_reply_to":"9fb8cfa7_0c67f74f","updated":"2019-06-05 13:44:41.000000000","message":"i think you can remove \"just as today\" and its clearer.","commit_id":"e994fa31a23a228878110d900b5d6dabfbd7da8d"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"d2bbe9923a86493cbd458cf785fd66b239b889d1","unresolved":false,"context_lines":[{"line_number":52,"context_line":"  syntax in request groups is covered in Section `Updating the Request Spec`_."},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"* Instance scheduling: Nova shall use the Placement data populated by Cyborg"},{"line_number":55,"context_line":"  to schedule instances, just as today. This spec does not dwell on this"},{"line_number":56,"context_line":"  topic."},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"* Assignment of accelerators: We introduce the concept of Accelerator Request"}],"source_content_type":"text/x-rst","patch_set":13,"id":"9fb8cfa7_0c67f74f","line":55,"range":{"start_line":55,"start_character":25,"end_line":55,"end_character":38},"in_reply_to":"9fb8cfa7_e35f16e3","updated":"2019-06-04 05:31:26.000000000","message":"All I am saying is, Nova will use Placement for scheduling just like today: no changes there.","commit_id":"e994fa31a23a228878110d900b5d6dabfbd7da8d"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"a37ee81c8c7e3d5438ca1a6bca18510f00094f1f","unresolved":false,"context_lines":[{"line_number":52,"context_line":"  syntax in request groups is covered in Section `Updating the Request Spec`_."},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"* Instance scheduling: Nova shall use the Placement data populated by Cyborg"},{"line_number":55,"context_line":"  to schedule instances, just as today. This spec does not dwell on this"},{"line_number":56,"context_line":"  topic."},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"* Assignment of accelerators: We introduce the concept of Accelerator Request"}],"source_content_type":"text/x-rst","patch_set":13,"id":"9fb8cfa7_a717bd51","line":55,"range":{"start_line":55,"start_character":25,"end_line":55,"end_character":38},"in_reply_to":"9fb8cfa7_f8723d49","updated":"2019-06-05 22:13:16.000000000","message":"Done","commit_id":"e994fa31a23a228878110d900b5d6dabfbd7da8d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2a9d79b653d7b4dd9be34f497cefcfbcae098db7","unresolved":false,"context_lines":[{"line_number":99,"context_line":""},{"line_number":100,"context_line":"Until that point, the operator tells Cyborg which devices to claim by"},{"line_number":101,"context_line":"using Cyborg\u0027s configuration file. The operator must ensure that this is"},{"line_number":102,"context_line":"compatible with the PCI whitelists configured in Nova."},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"Placement update"},{"line_number":105,"context_line":"----------------"}],"source_content_type":"text/x-rst","patch_set":13,"id":"9fb8cfa7_43e38234","line":102,"range":{"start_line":102,"start_character":0,"end_line":102,"end_character":10},"updated":"2019-06-03 22:20:33.000000000","message":"As in mutually exclusive, right?","commit_id":"e994fa31a23a228878110d900b5d6dabfbd7da8d"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"d2bbe9923a86493cbd458cf785fd66b239b889d1","unresolved":false,"context_lines":[{"line_number":99,"context_line":""},{"line_number":100,"context_line":"Until that point, the operator tells Cyborg which devices to claim by"},{"line_number":101,"context_line":"using Cyborg\u0027s configuration file. The operator must ensure that this is"},{"line_number":102,"context_line":"compatible with the PCI whitelists configured in Nova."},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"Placement update"},{"line_number":105,"context_line":"----------------"}],"source_content_type":"text/x-rst","patch_set":13,"id":"9fb8cfa7_cc60ff35","line":102,"range":{"start_line":102,"start_character":0,"end_line":102,"end_character":10},"in_reply_to":"9fb8cfa7_43e38234","updated":"2019-06-04 05:31:26.000000000","message":"Yes","commit_id":"e994fa31a23a228878110d900b5d6dabfbd7da8d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d96abd66f60628d554a6f2b66b0a8c21d38b7e03","unresolved":false,"context_lines":[{"line_number":121,"context_line":"[#dev-prof]_, which is created and managed by the admin via the Cyborg API."},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"A device profile may be viewed as a \u0027flavor for devices\u0027. Accordingly, the"},{"line_number":124,"context_line":"instance request should include both a flavor and a device profile. However,"},{"line_number":125,"context_line":"that requires a change to the Nova API for instance creation. To mitigate the"},{"line_number":126,"context_line":"impact of such changes on users and operators, we propose to do this"},{"line_number":127,"context_line":"incrementally in three phases."},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"In Phase 1, Nova API remains as today. The device profile is folded into the"},{"line_number":130,"context_line":"flavor as an extra spec manually by the operator, as below::"}],"source_content_type":"text/x-rst","patch_set":13,"id":"9fb8cfa7_feb557ef","line":127,"range":{"start_line":124,"start_character":68,"end_line":127,"end_character":30},"updated":"2019-06-04 16:36:38.000000000","message":"Maybe I didn\u0027t appreciate this initially in my review and after talking with Sean and Dan it sounds like this is based on previous PTG discussions and what was agreed on.","commit_id":"e994fa31a23a228878110d900b5d6dabfbd7da8d"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"97bdf1bcd916a885ed25913a4b18d223780f9bf8","unresolved":false,"context_lines":[{"line_number":121,"context_line":"[#dev-prof]_, which is created and managed by the admin via the Cyborg API."},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"A device profile may be viewed as a \u0027flavor for devices\u0027. Accordingly, the"},{"line_number":124,"context_line":"instance request should include both a flavor and a device profile. However,"},{"line_number":125,"context_line":"that requires a change to the Nova API for instance creation. To mitigate the"},{"line_number":126,"context_line":"impact of such changes on users and operators, we propose to do this"},{"line_number":127,"context_line":"incrementally in three phases."},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"In Phase 1, Nova API remains as today. The device profile is folded into the"},{"line_number":130,"context_line":"flavor as an extra spec manually by the operator, as below::"}],"source_content_type":"text/x-rst","patch_set":13,"id":"9fb8cfa7_78eacdac","line":127,"range":{"start_line":124,"start_character":68,"end_line":127,"end_character":30},"in_reply_to":"9fb8cfa7_feb557ef","updated":"2019-06-05 13:44:41.000000000","message":"i think matt linked this somewhere else but this is the irc logs of that discussion http://eavesdrop.openstack.org/irclogs/%23openstack-nova/%23openstack-nova.2019-06-04.log.html#t2019-06-04T16:22:01 in case anyone was wondering.","commit_id":"e994fa31a23a228878110d900b5d6dabfbd7da8d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2a9d79b653d7b4dd9be34f497cefcfbcae098db7","unresolved":false,"context_lines":[{"line_number":136,"context_line":""},{"line_number":137,"context_line":" openstack server create --flavor f ....  # instance creation"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"In the future, device profile will be specified separately in instance"},{"line_number":140,"context_line":"creation API and other use cases, like hot-attach, will be supported."},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"Updating the Request Spec"}],"source_content_type":"text/x-rst","patch_set":13,"id":"9fb8cfa7_a3ffde65","line":139,"updated":"2019-06-03 22:20:33.000000000","message":"I would not assume this is going to happen or be allowed in the future. I don\u0027t have my head wrapped around all of the terminology or lifecycle of the resources on the cyborg side, but I\u0027d think you\u0027d attach an ARQ device to a server by passing an id for that resource in cyborg and then nova would fetch the profile from wherever but not the user passing that in themselves (thinking like the binding:profile on a port that you\u0027d attach to a server). I think this is similar to the complications with attaching SR-IOV ports to servers (which isn\u0027t supported).","commit_id":"e994fa31a23a228878110d900b5d6dabfbd7da8d"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"97bdf1bcd916a885ed25913a4b18d223780f9bf8","unresolved":false,"context_lines":[{"line_number":136,"context_line":""},{"line_number":137,"context_line":" openstack server create --flavor f ....  # instance creation"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"In the future, device profile will be specified separately in instance"},{"line_number":140,"context_line":"creation API and other use cases, like hot-attach, will be supported."},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"Updating the Request Spec"}],"source_content_type":"text/x-rst","patch_set":13,"id":"9fb8cfa7_98bea163","line":139,"in_reply_to":"9fb8cfa7_7b2179fb","updated":"2019-06-05 13:44:41.000000000","message":"while we would generally like to support hot attach in the future we may decided to not add support for hot attach.\n\nwe dont currently support hot attach for sriov or for any passthough device so while it would be nice to support if posibale we should not assume it will be supported or if it will be supported that it will always suceed.\n\nthere are many factors that may make hot attach non viable such as the number of pcie slots available in the guest or the avlaible of device on the host the guest is schduled too.\n\nmatt is indicating a preference that if this is supported in the future we require the ARQs to be precreated and then nova would simply bind the arq if we can claim the appropriate resouces in placmenet and update the guest based on teh info provide in the bound ARQ. \n\ni.e. avoid the need for nova to lookup the device profile and create and arq then bind it etc.\n\nit might be better to just remove the future looking aspect and leave that to a follow up spec.","commit_id":"e994fa31a23a228878110d900b5d6dabfbd7da8d"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"a37ee81c8c7e3d5438ca1a6bca18510f00094f1f","unresolved":false,"context_lines":[{"line_number":136,"context_line":""},{"line_number":137,"context_line":" openstack server create --flavor f ....  # instance creation"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"In the future, device profile will be specified separately in instance"},{"line_number":140,"context_line":"creation API and other use cases, like hot-attach, will be supported."},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"Updating the Request Spec"}],"source_content_type":"text/x-rst","patch_set":13,"id":"9fb8cfa7_42c6ef9c","line":139,"in_reply_to":"9fb8cfa7_98bea163","updated":"2019-06-05 22:13:16.000000000","message":"Removed references to hot attach and re-stated the device profile standalone usage without committing to specific mechanisms or usage.","commit_id":"e994fa31a23a228878110d900b5d6dabfbd7da8d"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"d2bbe9923a86493cbd458cf785fd66b239b889d1","unresolved":false,"context_lines":[{"line_number":136,"context_line":""},{"line_number":137,"context_line":" openstack server create --flavor f ....  # instance creation"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"In the future, device profile will be specified separately in instance"},{"line_number":140,"context_line":"creation API and other use cases, like hot-attach, will be supported."},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"Updating the Request Spec"}],"source_content_type":"text/x-rst","patch_set":13,"id":"9fb8cfa7_d73f28d4","line":139,"in_reply_to":"9fb8cfa7_a3ffde65","updated":"2019-06-04 05:31:26.000000000","message":"I think you are saying that, for hot-attach, the user would not pass in the device profile name at all, but would pass the UUID of an already created ARQ, kinda like passing in a Neutron port id. \n\nI agree it it is premature to decide on a specific workflow for hot-attach. Would you be happier if I rephrased it to \"device profile could be specified\"?  As phrased, there is no implication that a separate device profile would be used (or needed) for hot attach.","commit_id":"e994fa31a23a228878110d900b5d6dabfbd7da8d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ce098f3e8b5a9c48b72c62204e8da122235cc6ce","unresolved":false,"context_lines":[{"line_number":136,"context_line":""},{"line_number":137,"context_line":" openstack server create --flavor f ....  # instance creation"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"In the future, device profile will be specified separately in instance"},{"line_number":140,"context_line":"creation API and other use cases, like hot-attach, will be supported."},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"Updating the Request Spec"}],"source_content_type":"text/x-rst","patch_set":13,"id":"9fb8cfa7_7b2179fb","line":139,"in_reply_to":"9fb8cfa7_d73f28d4","updated":"2019-06-04 16:20:30.000000000","message":"I guess I would say \"may be\" or \"could be\" but generally we want to limit the amount of direct orchestration that nova has to do [1]. So rather than make the compute API more complicated by adding pieces that nova would then use to create and manage external resources, I think we\u0027d want (at least for attaching to an existing server) something akin to attaching volumes which is you provide an id of a pre-existing resource and then nova attaches it. Attaching volumes and ports in nova is different in this regard since you can\u0027t attach a volume by having nova create the volume, but you can attach a port by providing a network and nova will create a port on that network and attach it to the server. But because of that ability with ports, there are certain types of ports you can\u0027t have nova create (SR-IOV) without additional parameters and I don\u0027t think we want nova to be responsible for that complexity - have a higher level orchestrator like heat or ansible use the native networking API (or cyborg API in this case) create the resource with the profile information and then attach that resource to the server using the compute API.\n\n[1] https://docs.openstack.org/nova/latest/contributor/project-scope.html#no-more-orchestration","commit_id":"e994fa31a23a228878110d900b5d6dabfbd7da8d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2a9d79b653d7b4dd9be34f497cefcfbcae098db7","unresolved":false,"context_lines":[{"line_number":141,"context_line":""},{"line_number":142,"context_line":"Updating the Request Spec"},{"line_number":143,"context_line":"-------------------------"},{"line_number":144,"context_line":"When the user submits a request to create an instance, in any of the ways"},{"line_number":145,"context_line":"described in Section `User requests`_, Nova needs to call a Cyborg API, to get"},{"line_number":146,"context_line":"back the resource request groups in the device profile and merge them into the"},{"line_number":147,"context_line":"request spec. (This is along the lines of the scheme proposed for Neutron"}],"source_content_type":"text/x-rst","patch_set":13,"id":"9fb8cfa7_43f06291","line":144,"range":{"start_line":144,"start_character":55,"end_line":144,"end_character":73},"updated":"2019-06-03 22:20:33.000000000","message":"Heh, well there is just one way, but sure. :)","commit_id":"e994fa31a23a228878110d900b5d6dabfbd7da8d"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"a37ee81c8c7e3d5438ca1a6bca18510f00094f1f","unresolved":false,"context_lines":[{"line_number":141,"context_line":""},{"line_number":142,"context_line":"Updating the Request Spec"},{"line_number":143,"context_line":"-------------------------"},{"line_number":144,"context_line":"When the user submits a request to create an instance, in any of the ways"},{"line_number":145,"context_line":"described in Section `User requests`_, Nova needs to call a Cyborg API, to get"},{"line_number":146,"context_line":"back the resource request groups in the device profile and merge them into the"},{"line_number":147,"context_line":"request spec. (This is along the lines of the scheme proposed for Neutron"}],"source_content_type":"text/x-rst","patch_set":13,"id":"9fb8cfa7_22bbbb0e","line":144,"range":{"start_line":144,"start_character":55,"end_line":144,"end_character":73},"in_reply_to":"9fb8cfa7_3bc78115","updated":"2019-06-05 22:13:16.000000000","message":"Restated.","commit_id":"e994fa31a23a228878110d900b5d6dabfbd7da8d"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"d2bbe9923a86493cbd458cf785fd66b239b889d1","unresolved":false,"context_lines":[{"line_number":141,"context_line":""},{"line_number":142,"context_line":"Updating the Request Spec"},{"line_number":143,"context_line":"-------------------------"},{"line_number":144,"context_line":"When the user submits a request to create an instance, in any of the ways"},{"line_number":145,"context_line":"described in Section `User requests`_, Nova needs to call a Cyborg API, to get"},{"line_number":146,"context_line":"back the resource request groups in the device profile and merge them into the"},{"line_number":147,"context_line":"request spec. (This is along the lines of the scheme proposed for Neutron"}],"source_content_type":"text/x-rst","patch_set":13,"id":"9fb8cfa7_9721b0b7","line":144,"range":{"start_line":144,"start_character":55,"end_line":144,"end_character":73},"in_reply_to":"9fb8cfa7_43f06291","updated":"2019-06-04 05:31:26.000000000","message":"There were two ways mentioned: one with device profile name in the flavor (today) and one with the name stated in the CLI (possible in the future).","commit_id":"e994fa31a23a228878110d900b5d6dabfbd7da8d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ce098f3e8b5a9c48b72c62204e8da122235cc6ce","unresolved":false,"context_lines":[{"line_number":141,"context_line":""},{"line_number":142,"context_line":"Updating the Request Spec"},{"line_number":143,"context_line":"-------------------------"},{"line_number":144,"context_line":"When the user submits a request to create an instance, in any of the ways"},{"line_number":145,"context_line":"described in Section `User requests`_, Nova needs to call a Cyborg API, to get"},{"line_number":146,"context_line":"back the resource request groups in the device profile and merge them into the"},{"line_number":147,"context_line":"request spec. (This is along the lines of the scheme proposed for Neutron"}],"source_content_type":"text/x-rst","patch_set":13,"id":"9fb8cfa7_3bc78115","line":144,"range":{"start_line":144,"start_character":55,"end_line":144,"end_character":73},"in_reply_to":"9fb8cfa7_9721b0b7","updated":"2019-06-04 16:20:30.000000000","message":"OK, I\u0027m not on board with the latter but it\u0027s a nit for this section.","commit_id":"e994fa31a23a228878110d900b5d6dabfbd7da8d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2a9d79b653d7b4dd9be34f497cefcfbcae098db7","unresolved":false,"context_lines":[{"line_number":158,"context_line":"traits), such as bitstream/function IDs needed for that image. So, Nova should"},{"line_number":159,"context_line":"pass the VM image UUID from the request spec to Cyborg. This is TBD."},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"The groups in the device profile are numbered by Cyborg. The request groups"},{"line_number":162,"context_line":"that are merged into the request spec are numbered by Nova. These numberings"},{"line_number":163,"context_line":"would not be the same in general, i.e., the N-th device profile group may not"},{"line_number":164,"context_line":"correspond to the N-th request group in the request spec."}],"source_content_type":"text/x-rst","patch_set":13,"id":"9fb8cfa7_e31396b7","line":161,"updated":"2019-06-03 22:20:33.000000000","message":"tl;dr the point of all of this is that it should behave similarly to what we do with requested resources in ports for minimum bandwidth-based scheduling, correct?","commit_id":"e994fa31a23a228878110d900b5d6dabfbd7da8d"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"d2bbe9923a86493cbd458cf785fd66b239b889d1","unresolved":false,"context_lines":[{"line_number":158,"context_line":"traits), such as bitstream/function IDs needed for that image. So, Nova should"},{"line_number":159,"context_line":"pass the VM image UUID from the request spec to Cyborg. This is TBD."},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"The groups in the device profile are numbered by Cyborg. The request groups"},{"line_number":162,"context_line":"that are merged into the request spec are numbered by Nova. These numberings"},{"line_number":163,"context_line":"would not be the same in general, i.e., the N-th device profile group may not"},{"line_number":164,"context_line":"correspond to the N-th request group in the request spec."}],"source_content_type":"text/x-rst","patch_set":13,"id":"9fb8cfa7_f2fefa03","line":161,"in_reply_to":"9fb8cfa7_e31396b7","updated":"2019-06-04 05:31:26.000000000","message":"Yes","commit_id":"e994fa31a23a228878110d900b5d6dabfbd7da8d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2a9d79b653d7b4dd9be34f497cefcfbcae098db7","unresolved":false,"context_lines":[{"line_number":183,"context_line":"unbound state. Subsequently, Nova calls Cyborg to bind the ARQ to a host name,"},{"line_number":184,"context_line":"a device RP UUID and an instance UUID. If the instance fails to spawn, Nova"},{"line_number":185,"context_line":"would unbind the ARQ without deleting it. On instance termination, Nova would"},{"line_number":186,"context_line":"delete the ARQs after unbinding them."},{"line_number":187,"context_line":""},{"line_number":188,"context_line":".. _match-rp:"},{"line_number":189,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"9fb8cfa7_c360d235","line":186,"updated":"2019-06-03 22:20:33.000000000","message":"So in the first version of this, will nova always be in charge of the lifecycle of these ARQs or will the user be able to create an ARQ in the cyborg API directly and provide that via id to the compute API when creating the server, similar to ports and volumes? If not, why not? Because historically we\u0027ve pushed back more and more advanced functionality out of nova orchestrating the management of external resources so the user would provide pre-created resources and nova would just attach them. I\u0027m assuming this has been debated already and if so, hopefully there is something to be said about it in an Alternatives section.","commit_id":"e994fa31a23a228878110d900b5d6dabfbd7da8d"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"a37ee81c8c7e3d5438ca1a6bca18510f00094f1f","unresolved":false,"context_lines":[{"line_number":183,"context_line":"unbound state. Subsequently, Nova calls Cyborg to bind the ARQ to a host name,"},{"line_number":184,"context_line":"a device RP UUID and an instance UUID. If the instance fails to spawn, Nova"},{"line_number":185,"context_line":"would unbind the ARQ without deleting it. On instance termination, Nova would"},{"line_number":186,"context_line":"delete the ARQs after unbinding them."},{"line_number":187,"context_line":""},{"line_number":188,"context_line":".. _match-rp:"},{"line_number":189,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"9fb8cfa7_8241470e","line":186,"in_reply_to":"9fb8cfa7_1bef1d85","updated":"2019-06-05 22:13:16.000000000","message":"Done","commit_id":"e994fa31a23a228878110d900b5d6dabfbd7da8d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ce098f3e8b5a9c48b72c62204e8da122235cc6ce","unresolved":false,"context_lines":[{"line_number":183,"context_line":"unbound state. Subsequently, Nova calls Cyborg to bind the ARQ to a host name,"},{"line_number":184,"context_line":"a device RP UUID and an instance UUID. If the instance fails to spawn, Nova"},{"line_number":185,"context_line":"would unbind the ARQ without deleting it. On instance termination, Nova would"},{"line_number":186,"context_line":"delete the ARQs after unbinding them."},{"line_number":187,"context_line":""},{"line_number":188,"context_line":".. _match-rp:"},{"line_number":189,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"9fb8cfa7_1bef1d85","line":186,"in_reply_to":"9fb8cfa7_523266f3","updated":"2019-06-04 16:20:30.000000000","message":"\u003e In the first version, ARQs are created when Nova calls into Cyborg.\n \u003e \n \u003e \"provide that [ARQ] via id to the compute API\": that requires a\n \u003e change to the compute API, which we deliberately stayed away from.\n \u003e \n \u003e That is not precluded for the future, but we want to be clear on\n \u003e the need for such changes before making them.\n\nOK you mean an explicit schema change to the compute API - yes I agree. But even passing through information on the flavor like the device profile is still a change to the compute API. Anyway, I think it would be good to mention somewhere, either here or in the Alternatives section why this spec does not propose changing the compute API to allow passing a pre-created ARQ (by id) to attach to the server when the server is created, similar to an SR-IOV port.","commit_id":"e994fa31a23a228878110d900b5d6dabfbd7da8d"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"d2bbe9923a86493cbd458cf785fd66b239b889d1","unresolved":false,"context_lines":[{"line_number":183,"context_line":"unbound state. Subsequently, Nova calls Cyborg to bind the ARQ to a host name,"},{"line_number":184,"context_line":"a device RP UUID and an instance UUID. If the instance fails to spawn, Nova"},{"line_number":185,"context_line":"would unbind the ARQ without deleting it. On instance termination, Nova would"},{"line_number":186,"context_line":"delete the ARQs after unbinding them."},{"line_number":187,"context_line":""},{"line_number":188,"context_line":".. _match-rp:"},{"line_number":189,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"9fb8cfa7_523266f3","line":186,"in_reply_to":"9fb8cfa7_c360d235","updated":"2019-06-04 05:31:26.000000000","message":"In the first version, ARQs are created when Nova calls into Cyborg. \n\n\"provide that [ARQ] via id to the compute API\": that requires a change to the compute API, which we deliberately stayed away from.\n\nThat is not precluded for the future, but we want to be clear on the need for such changes before making them.","commit_id":"e994fa31a23a228878110d900b5d6dabfbd7da8d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2a9d79b653d7b4dd9be34f497cefcfbcae098db7","unresolved":false,"context_lines":[{"line_number":221,"context_line":"#. The Nova API server receives a ``POST /servers`` API request with a flavor"},{"line_number":222,"context_line":"   that includes a device profile name."},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"#. NEW: The Nova scheduler calls the Cyborg API ``GET"},{"line_number":225,"context_line":"   /v2/device_profiles?name\u003d$device_profile_name`` and gets back the device"},{"line_number":226,"context_line":"   profile request groups. These are added to the request spec."},{"line_number":227,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"9fb8cfa7_c3a3f24e","line":224,"range":{"start_line":224,"start_character":17,"end_line":224,"end_character":26},"updated":"2019-06-03 22:20:33.000000000","message":"I don\u0027t think the scheduler would do this, either the API or conductor would do it. Considering how nova gets the requested resources for pre-existing ports (for min bw scheduling) that happens in the API:\n\nhttps://github.com/openstack/nova/blob/3370f0f03ce17aaf3a7ebaa95d497f62bef238c0/nova/compute/api.py#L889\n\nIt\u0027s a nit and an implementation detail, but probably just easier to say \"Nova controller\" or something.","commit_id":"e994fa31a23a228878110d900b5d6dabfbd7da8d"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"97bdf1bcd916a885ed25913a4b18d223780f9bf8","unresolved":false,"context_lines":[{"line_number":221,"context_line":"#. The Nova API server receives a ``POST /servers`` API request with a flavor"},{"line_number":222,"context_line":"   that includes a device profile name."},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"#. NEW: The Nova scheduler calls the Cyborg API ``GET"},{"line_number":225,"context_line":"   /v2/device_profiles?name\u003d$device_profile_name`` and gets back the device"},{"line_number":226,"context_line":"   profile request groups. These are added to the request spec."},{"line_number":227,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"9fb8cfa7_de1ba118","line":224,"range":{"start_line":224,"start_character":17,"end_line":224,"end_character":26},"in_reply_to":"9fb8cfa7_1265ceb5","updated":"2019-06-05 13:44:41.000000000","message":"+1 that said i think we could maybe fix that in a follow up patch or rather on its own i dont think its enough to requrie a respin of this spec but if you do resping then i think this makes sense to update.","commit_id":"e994fa31a23a228878110d900b5d6dabfbd7da8d"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"d2bbe9923a86493cbd458cf785fd66b239b889d1","unresolved":false,"context_lines":[{"line_number":221,"context_line":"#. The Nova API server receives a ``POST /servers`` API request with a flavor"},{"line_number":222,"context_line":"   that includes a device profile name."},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"#. NEW: The Nova scheduler calls the Cyborg API ``GET"},{"line_number":225,"context_line":"   /v2/device_profiles?name\u003d$device_profile_name`` and gets back the device"},{"line_number":226,"context_line":"   profile request groups. These are added to the request spec."},{"line_number":227,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"9fb8cfa7_1265ceb5","line":224,"range":{"start_line":224,"start_character":17,"end_line":224,"end_character":26},"in_reply_to":"9fb8cfa7_c3a3f24e","updated":"2019-06-04 05:31:26.000000000","message":"Yup. The API does it. It would be easier to say \u0027Nova controller\u0027 vs \u0027Nova compute\u0027 everywhere.","commit_id":"e994fa31a23a228878110d900b5d6dabfbd7da8d"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"a37ee81c8c7e3d5438ca1a6bca18510f00094f1f","unresolved":false,"context_lines":[{"line_number":221,"context_line":"#. The Nova API server receives a ``POST /servers`` API request with a flavor"},{"line_number":222,"context_line":"   that includes a device profile name."},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"#. NEW: The Nova scheduler calls the Cyborg API ``GET"},{"line_number":225,"context_line":"   /v2/device_profiles?name\u003d$device_profile_name`` and gets back the device"},{"line_number":226,"context_line":"   profile request groups. These are added to the request spec."},{"line_number":227,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"9fb8cfa7_a2e00bfc","line":224,"range":{"start_line":224,"start_character":17,"end_line":224,"end_character":26},"in_reply_to":"9fb8cfa7_de1ba118","updated":"2019-06-05 22:13:16.000000000","message":"Fixed in next version.","commit_id":"e994fa31a23a228878110d900b5d6dabfbd7da8d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2a9d79b653d7b4dd9be34f497cefcfbcae098db7","unresolved":false,"context_lines":[{"line_number":226,"context_line":"   profile request groups. These are added to the request spec."},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"#. The Nova scheduler invokes Placement and gets a list of allocation"},{"line_number":229,"context_line":"   candidates. The Nova conductor selects one of those candidates and makes"},{"line_number":230,"context_line":"   claim(s) in Placement. It then sends a RPC message to"},{"line_number":231,"context_line":"   ``build_and_run_instances`` to the Nova compute manager."},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"#. NEW: The Nova compute manager calls the Cyborg API ``POST"}],"source_content_type":"text/x-rst","patch_set":13,"id":"9fb8cfa7_e3bdd668","line":230,"range":{"start_line":229,"start_character":15,"end_line":230,"end_character":25},"updated":"2019-06-03 22:20:33.000000000","message":"Technically the scheduler makes the \"claim\" in placement once the scheduler runs through the filters and weighers:\n\nhttps://github.com/openstack/nova/blob/3370f0f03ce17aaf3a7ebaa95d497f62bef238c0/nova/scheduler/filter_scheduler.py#L239","commit_id":"e994fa31a23a228878110d900b5d6dabfbd7da8d"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"d2bbe9923a86493cbd458cf785fd66b239b889d1","unresolved":false,"context_lines":[{"line_number":226,"context_line":"   profile request groups. These are added to the request spec."},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"#. The Nova scheduler invokes Placement and gets a list of allocation"},{"line_number":229,"context_line":"   candidates. The Nova conductor selects one of those candidates and makes"},{"line_number":230,"context_line":"   claim(s) in Placement. It then sends a RPC message to"},{"line_number":231,"context_line":"   ``build_and_run_instances`` to the Nova compute manager."},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"#. NEW: The Nova compute manager calls the Cyborg API ``POST"}],"source_content_type":"text/x-rst","patch_set":13,"id":"9fb8cfa7_120aaed1","line":230,"range":{"start_line":229,"start_character":15,"end_line":230,"end_character":25},"in_reply_to":"9fb8cfa7_e3bdd668","updated":"2019-06-04 05:31:26.000000000","message":"Will fix.","commit_id":"e994fa31a23a228878110d900b5d6dabfbd7da8d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2a9d79b653d7b4dd9be34f497cefcfbcae098db7","unresolved":false,"context_lines":[{"line_number":230,"context_line":"   claim(s) in Placement. It then sends a RPC message to"},{"line_number":231,"context_line":"   ``build_and_run_instances`` to the Nova compute manager."},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"#. NEW: The Nova compute manager calls the Cyborg API ``POST"},{"line_number":234,"context_line":"   /v2/accelerator_requests`` with the device profile name. Cyborg creates a"},{"line_number":235,"context_line":"   set of unbound ARQs for that device profile and returns them to Nova."},{"line_number":236,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"9fb8cfa7_0336ea04","line":233,"updated":"2019-06-03 22:20:33.000000000","message":"I believe you asked about this in the mailing list, to see if the compute service should do this or the conductor service? I think if we consider how ports (and volumes for that matter) are managed, and this older spec:\n\nhttps://specs.openstack.org/openstack/nova-specs/specs/newton/implemented/prep-for-network-aware-scheduling.html\n\nSo the main idea is create external resources before compute because we can fail to spawn in the compute service and reschedule and if we do, we\u0027d like to avoid the expensive cleanup and create steps for the reschedule. That way nova would create the resources in conductor, pass handles to them to compute, and compute would do the binding (I suppose conductor could also do the binding, I\u0027m not sure how this works with ARQs - but we do early binding for ports with live migration in conductor now as well [1]).\n\nAnyway, again it\u0027s an implementation detail but I think we should strive to avoid a create/cleanup routine during reschedules if the computes are managing these external resources if possible.\n\n[1] https://specs.openstack.org/openstack/nova-specs/specs/rocky/implemented/neutron-new-port-binding-api.html","commit_id":"e994fa31a23a228878110d900b5d6dabfbd7da8d"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"d2bbe9923a86493cbd458cf785fd66b239b889d1","unresolved":false,"context_lines":[{"line_number":230,"context_line":"   claim(s) in Placement. It then sends a RPC message to"},{"line_number":231,"context_line":"   ``build_and_run_instances`` to the Nova compute manager."},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"#. NEW: The Nova compute manager calls the Cyborg API ``POST"},{"line_number":234,"context_line":"   /v2/accelerator_requests`` with the device profile name. Cyborg creates a"},{"line_number":235,"context_line":"   set of unbound ARQs for that device profile and returns them to Nova."},{"line_number":236,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"9fb8cfa7_12338ead","line":233,"in_reply_to":"9fb8cfa7_0336ea04","updated":"2019-06-04 05:31:26.000000000","message":"Yes, I did ask. The broad feedback was to do the binding in the compute manager, both during the demo session at the PTG and in the spec review. \n\nIn the implementation, I kept the creation of ARQs in the compute manager too, so that there is no need to pass ARQs from the conductor to the compute. \n\nCreating ARQs (in an unbound state) is not expensive. But binding and unbinding could be time-consuming (since they involve device preparation and cleanup resp.) Since the latter two need to be in the compute manager anyway, I kept it towards simplicity and fewer changes.","commit_id":"e994fa31a23a228878110d900b5d6dabfbd7da8d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ce098f3e8b5a9c48b72c62204e8da122235cc6ce","unresolved":false,"context_lines":[{"line_number":230,"context_line":"   claim(s) in Placement. It then sends a RPC message to"},{"line_number":231,"context_line":"   ``build_and_run_instances`` to the Nova compute manager."},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"#. NEW: The Nova compute manager calls the Cyborg API ``POST"},{"line_number":234,"context_line":"   /v2/accelerator_requests`` with the device profile name. Cyborg creates a"},{"line_number":235,"context_line":"   set of unbound ARQs for that device profile and returns them to Nova."},{"line_number":236,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"9fb8cfa7_fb456971","line":233,"in_reply_to":"9fb8cfa7_12338ead","updated":"2019-06-04 16:20:30.000000000","message":"\u003e Creating ARQs (in an unbound state) is not expensive. But binding and unbinding could be time-consuming (since they involve device preparation and cleanup resp.) Since the latter two need to be in the compute manager anyway, I kept it towards simplicity and fewer changes.\n\nIt\u0027s not only about the speed to create and delete the external resources, it\u0027s also a matter of failing earlier outside of the compute if we\u0027re going to fail, for example if we go over quota creating the ARQ, it\u0027s better to do that in conductor before we\u0027ve started building *other* resources in the compute like ports and volumes, because if we start creating those resources and then also fail ARQ creation or binding, we have to not only cleanup the ARQs (which may be fast) but we also have to cleanup the ports and volumes (which may be slow, or fail and leak resources, etc). So in general I think it\u0027s better for the control service (conductor in this case) to handle the lifecycle of the external resources so compute doesn\u0027t have to worry about that, compute just needs to deal with the low-level binding.\n\nIn the end this isn\u0027t a blocking issue, but it has come up time and again over the years with problems with managing ports and volumes in the compute service where we\u0027ve said we should be managing those (create/delete) at a higher level (conductor). I think because of that we shouldn\u0027t repeat the mistakes of the past and do the right thing from the start with ARQs.","commit_id":"e994fa31a23a228878110d900b5d6dabfbd7da8d"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"a37ee81c8c7e3d5438ca1a6bca18510f00094f1f","unresolved":false,"context_lines":[{"line_number":230,"context_line":"   claim(s) in Placement. It then sends a RPC message to"},{"line_number":231,"context_line":"   ``build_and_run_instances`` to the Nova compute manager."},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"#. NEW: The Nova compute manager calls the Cyborg API ``POST"},{"line_number":234,"context_line":"   /v2/accelerator_requests`` with the device profile name. Cyborg creates a"},{"line_number":235,"context_line":"   set of unbound ARQs for that device profile and returns them to Nova."},{"line_number":236,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"9fb8cfa7_e22e03f9","line":233,"in_reply_to":"9fb8cfa7_3e3afd33","updated":"2019-06-05 22:13:16.000000000","message":"Doing ARQ creation in the conductor and binding in the compute manager means that the ARQs must be passed via RPC, possibly by adding them to the request_spec. Other comments (below) indicate that it is not desirable to modify the request spec in this release. I was trying to avoid the RPC overhead (at runtime) and extra code changes needed for that.\n\nRe. quota check, line 224 just gets the device profile request groups. There is no quota check in that API because any user could query Cyborg to view device profile contents (subject to RBAC) and it doesn\u0027t imply instance creation. The quota check should happen in the ARQ create API.","commit_id":"e994fa31a23a228878110d900b5d6dabfbd7da8d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"044c409b4adba452d6d07147f4693d31f4e6dfff","unresolved":false,"context_lines":[{"line_number":230,"context_line":"   claim(s) in Placement. It then sends a RPC message to"},{"line_number":231,"context_line":"   ``build_and_run_instances`` to the Nova compute manager."},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"#. NEW: The Nova compute manager calls the Cyborg API ``POST"},{"line_number":234,"context_line":"   /v2/accelerator_requests`` with the device profile name. Cyborg creates a"},{"line_number":235,"context_line":"   set of unbound ARQs for that device profile and returns them to Nova."},{"line_number":236,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"9fb8cfa7_607af488","line":233,"in_reply_to":"9fb8cfa7_64bc5edc","updated":"2019-06-06 20:26:30.000000000","message":"Regarding quota, I wasn\u0027t specifically talking about nova calling keystone to perform an explicit quota check, I was more talking about what Sundar said, \"The quota check should happen in the ARQ create API.\" If we wait to create the ARQ on the compute and fail due to over-quota, we have to do the expensive cleanup of other resources the compute has created (ports and volumes) and then potentially reschedule. It would be more efficient to create in conductor and fail fast if we\u0027re going to fail.\n\nAs far as worrying about RPC changes, that\u0027s mostly a non-issue to me since it\u0027s unavoidable in anything big like this. I guess you\u0027re trying to make everything as seamless as possible in the initial version of this by passing the device profile through flavor extra specs and having the compute look up that information later to do the binding without any compute RPC API changes. I get that, but I also think it makes it harder later if we want to move the ARQ creation to conductor because then that code has to deal with N-1 computes doing the ARQ creation or not. That said it\u0027s an implementation detail (one I think we can state in the alternatives section in the spec) and move on to code review and/or the mailing list (I can reply to the thread you started on this).","commit_id":"e994fa31a23a228878110d900b5d6dabfbd7da8d"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"f3f88dde566ded6cc05b99e51787f81e09d94dd7","unresolved":false,"context_lines":[{"line_number":230,"context_line":"   claim(s) in Placement. It then sends a RPC message to"},{"line_number":231,"context_line":"   ``build_and_run_instances`` to the Nova compute manager."},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"#. NEW: The Nova compute manager calls the Cyborg API ``POST"},{"line_number":234,"context_line":"   /v2/accelerator_requests`` with the device profile name. Cyborg creates a"},{"line_number":235,"context_line":"   set of unbound ARQs for that device profile and returns them to Nova."},{"line_number":236,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"9fb8cfa7_64bc5edc","line":233,"in_reply_to":"9fb8cfa7_e22e03f9","updated":"2019-06-05 22:40:32.000000000","message":"i was refering to nova doing a quota check using the new keystone unified limits api not a cyborg doing a qota check\nhttps://review.opendev.org/#/c/602201/\n\nspecfically after nova has gateher all resouce request for cyborg, the flavor, ports and volumes it could make a singel call check with keystone/placemetn to validate per resouces class quotas before calling the allocation candates placmeent api.\n\n\nhttps://review.opendev.org/#/c/602201/\nis still on my list of specs to review but at least at a highlevel i would expect that quota enfrocement shoudl be possible before schduling.\n\nsimilarly i would not expect cyborg to create its own quota system and instead leverage keysone/placement for quotas as we are trying to move nova to do.","commit_id":"e994fa31a23a228878110d900b5d6dabfbd7da8d"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"97bdf1bcd916a885ed25913a4b18d223780f9bf8","unresolved":false,"context_lines":[{"line_number":230,"context_line":"   claim(s) in Placement. It then sends a RPC message to"},{"line_number":231,"context_line":"   ``build_and_run_instances`` to the Nova compute manager."},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"#. NEW: The Nova compute manager calls the Cyborg API ``POST"},{"line_number":234,"context_line":"   /v2/accelerator_requests`` with the device profile name. Cyborg creates a"},{"line_number":235,"context_line":"   set of unbound ARQs for that device profile and returns them to Nova."},{"line_number":236,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"9fb8cfa7_3e3afd33","line":233,"in_reply_to":"9fb8cfa7_fb456971","updated":"2019-06-05 13:44:41.000000000","message":"i tend to agree with matt on this point. we have had a long standing plan to eventually move creating of neutron ports form the compute to the conductor but its non tiraivl to do in a n to n-1 compatiable way after the fact.\n\nextending the request_spec to contain ARQ would be needed if we are to ever support passing precreated ARQs on the boot request in the future so i dont much benifit in avoiding extending the request_spec to contain the relevent info if we will need to do it anyway in U to enable the other usecases.\n\nwe had talked about starting the bind in the conductor too and then waiting for ti to finish in the compute node. im aware that currently it is a synchronous api in the POC but\nlongterm if we can determin if the bind will be successful in the condocutor and either fail fast and rescudule or proceed to spawn if the bind request was accepted that would be a much cleaner workfload and avoid a bunch of unnecessary cleanup\n\nthe only problem is with this however is if we do the bind in the conductor we could race with the external event so we would have to wait in the conductor for the device to be programed and im not sure we want to do that.\n\nregarding the quota check assuming we use unifed limits to do quota i would have assumed we did the quota check after we got the resource request form cyborg on line 224 so at least for that usecase we should still be able to do that before we call the compute node.","commit_id":"e994fa31a23a228878110d900b5d6dabfbd7da8d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2a9d79b653d7b4dd9be34f497cefcfbcae098db7","unresolved":false,"context_lines":[{"line_number":256,"context_line":"       ]"},{"line_number":257,"context_line":"    }"},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"#. NEW: The Nova virt driver waits for the notification and then calls"},{"line_number":260,"context_line":"   the Cyborg REST API ``GET"},{"line_number":261,"context_line":"   /v2/accelerator_requests?instance\u003d\u003cuuid\u003e\u0026bind_state\u003dresolved``. The"},{"line_number":262,"context_line":"   Cyborg client will retry till all ARQs are resolved (i.e. bound"}],"source_content_type":"text/x-rst","patch_set":13,"id":"9fb8cfa7_4632b0f3","line":259,"range":{"start_line":259,"start_character":29,"end_line":259,"end_character":34},"updated":"2019-06-03 22:20:33.000000000","message":"nit: I\u0027m assuming nova would gain new configuration options similar to the vif_plugging_timeout and vif_plugging_is_fatal options for neutron ports?\n\nhttps://docs.openstack.org/nova/latest/configuration/config.html#DEFAULT.vif_plugging_timeout\n\nSomething like arq_binding_timeout and arq_bindind_is_fatal.","commit_id":"e994fa31a23a228878110d900b5d6dabfbd7da8d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ce098f3e8b5a9c48b72c62204e8da122235cc6ce","unresolved":false,"context_lines":[{"line_number":256,"context_line":"       ]"},{"line_number":257,"context_line":"    }"},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"#. NEW: The Nova virt driver waits for the notification and then calls"},{"line_number":260,"context_line":"   the Cyborg REST API ``GET"},{"line_number":261,"context_line":"   /v2/accelerator_requests?instance\u003d\u003cuuid\u003e\u0026bind_state\u003dresolved``. The"},{"line_number":262,"context_line":"   Cyborg client will retry till all ARQs are resolved (i.e. bound"}],"source_content_type":"text/x-rst","patch_set":13,"id":"9fb8cfa7_bb5ff13f","line":259,"range":{"start_line":259,"start_character":29,"end_line":259,"end_character":34},"in_reply_to":"9fb8cfa7_12d86e51","updated":"2019-06-04 16:20:30.000000000","message":"No, I just didn\u0027t see it mentioned anywhere.","commit_id":"e994fa31a23a228878110d900b5d6dabfbd7da8d"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"d2bbe9923a86493cbd458cf785fd66b239b889d1","unresolved":false,"context_lines":[{"line_number":256,"context_line":"       ]"},{"line_number":257,"context_line":"    }"},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"#. NEW: The Nova virt driver waits for the notification and then calls"},{"line_number":260,"context_line":"   the Cyborg REST API ``GET"},{"line_number":261,"context_line":"   /v2/accelerator_requests?instance\u003d\u003cuuid\u003e\u0026bind_state\u003dresolved``. The"},{"line_number":262,"context_line":"   Cyborg client will retry till all ARQs are resolved (i.e. bound"}],"source_content_type":"text/x-rst","patch_set":13,"id":"9fb8cfa7_12d86e51","line":259,"range":{"start_line":259,"start_character":29,"end_line":259,"end_character":34},"in_reply_to":"9fb8cfa7_4632b0f3","updated":"2019-06-04 05:31:26.000000000","message":"I suppose. Any disagreements?","commit_id":"e994fa31a23a228878110d900b5d6dabfbd7da8d"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"a37ee81c8c7e3d5438ca1a6bca18510f00094f1f","unresolved":false,"context_lines":[{"line_number":256,"context_line":"       ]"},{"line_number":257,"context_line":"    }"},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"#. NEW: The Nova virt driver waits for the notification and then calls"},{"line_number":260,"context_line":"   the Cyborg REST API ``GET"},{"line_number":261,"context_line":"   /v2/accelerator_requests?instance\u003d\u003cuuid\u003e\u0026bind_state\u003dresolved``. The"},{"line_number":262,"context_line":"   Cyborg client will retry till all ARQs are resolved (i.e. bound"}],"source_content_type":"text/x-rst","patch_set":13,"id":"9fb8cfa7_02223701","line":259,"range":{"start_line":259,"start_character":29,"end_line":259,"end_character":34},"in_reply_to":"9fb8cfa7_9e62093e","updated":"2019-06-05 22:13:16.000000000","message":"Since we are going with Neutron parallels in most places, we could retain both tunables but treat timeouts as fatal by default.","commit_id":"e994fa31a23a228878110d900b5d6dabfbd7da8d"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"97bdf1bcd916a885ed25913a4b18d223780f9bf8","unresolved":false,"context_lines":[{"line_number":256,"context_line":"       ]"},{"line_number":257,"context_line":"    }"},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"#. NEW: The Nova virt driver waits for the notification and then calls"},{"line_number":260,"context_line":"   the Cyborg REST API ``GET"},{"line_number":261,"context_line":"   /v2/accelerator_requests?instance\u003d\u003cuuid\u003e\u0026bind_state\u003dresolved``. The"},{"line_number":262,"context_line":"   Cyborg client will retry till all ARQs are resolved (i.e. bound"}],"source_content_type":"text/x-rst","patch_set":13,"id":"9fb8cfa7_9e62093e","line":259,"range":{"start_line":259,"start_character":29,"end_line":259,"end_character":34},"in_reply_to":"9fb8cfa7_bb5ff13f","updated":"2019-06-05 13:44:41.000000000","message":"we only need those in nova because we could not rely on neutron to send the event properly when they were first intoduced. apparently networking-ovn still doesnt.\n\ni think the timeout still makes sense but the is fatal aspect should not be configurable in my opipion. i think we shoudl always threat it as fatal if we don\u0027t receive the event before the timeout expires and be stricter with cyborg in that regard then we were/are with neutron currently similarly to avoid the mess we have with vif-* events on different lifecycle events.","commit_id":"e994fa31a23a228878110d900b5d6dabfbd7da8d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2a9d79b653d7b4dd9be34f497cefcfbcae098db7","unresolved":false,"context_lines":[{"line_number":258,"context_line":""},{"line_number":259,"context_line":"#. NEW: The Nova virt driver waits for the notification and then calls"},{"line_number":260,"context_line":"   the Cyborg REST API ``GET"},{"line_number":261,"context_line":"   /v2/accelerator_requests?instance\u003d\u003cuuid\u003e\u0026bind_state\u003dresolved``. The"},{"line_number":262,"context_line":"   Cyborg client will retry till all ARQs are resolved (i.e. bound"},{"line_number":263,"context_line":"   successfully or failed to bind)."},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"#. NEW: The Nova virt driver uses the attach handles returned from the Cyborg"},{"line_number":266,"context_line":"   call to compose PCI passthrough devices into the VM\u0027s definition."}],"source_content_type":"text/x-rst","patch_set":13,"id":"9fb8cfa7_261c5c69","line":263,"range":{"start_line":261,"start_character":67,"end_line":263,"end_character":35},"updated":"2019-06-03 22:20:33.000000000","message":"Hmm, I\u0027m not sure why nova needs to do retries or some kind of polling here since we were waiting for an external event and got it, so we should just be good to go. I guess the issue is this proposed part isn\u0027t getting ARQs by id but rather by instance and bind_state? I would think the nova could would just be listening for the arq_resolved event on a set of ARQs (by id) and once it gets them it continues (get the \"attach handles\" from each ARQ I guess). Anyway, main point is I don\u0027t see a need for polling on the nova side at this point since nova should just be waiting for the set of events it cares about and once it gets them continues or fails (or times out).","commit_id":"e994fa31a23a228878110d900b5d6dabfbd7da8d"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"d2bbe9923a86493cbd458cf785fd66b239b889d1","unresolved":false,"context_lines":[{"line_number":258,"context_line":""},{"line_number":259,"context_line":"#. NEW: The Nova virt driver waits for the notification and then calls"},{"line_number":260,"context_line":"   the Cyborg REST API ``GET"},{"line_number":261,"context_line":"   /v2/accelerator_requests?instance\u003d\u003cuuid\u003e\u0026bind_state\u003dresolved``. The"},{"line_number":262,"context_line":"   Cyborg client will retry till all ARQs are resolved (i.e. bound"},{"line_number":263,"context_line":"   successfully or failed to bind)."},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"#. NEW: The Nova virt driver uses the attach handles returned from the Cyborg"},{"line_number":266,"context_line":"   call to compose PCI passthrough devices into the VM\u0027s definition."}],"source_content_type":"text/x-rst","patch_set":13,"id":"9fb8cfa7_52c6e669","line":263,"range":{"start_line":261,"start_character":67,"end_line":263,"end_character":35},"in_reply_to":"9fb8cfa7_261c5c69","updated":"2019-06-04 05:31:26.000000000","message":"Will fix.","commit_id":"e994fa31a23a228878110d900b5d6dabfbd7da8d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2a9d79b653d7b4dd9be34f497cefcfbcae098db7","unresolved":false,"context_lines":[{"line_number":262,"context_line":"   Cyborg client will retry till all ARQs are resolved (i.e. bound"},{"line_number":263,"context_line":"   successfully or failed to bind)."},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"#. NEW: The Nova virt driver uses the attach handles returned from the Cyborg"},{"line_number":266,"context_line":"   call to compose PCI passthrough devices into the VM\u0027s definition."},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"#. NEW: If there is any error after binding has been initiated, Nova"}],"source_content_type":"text/x-rst","patch_set":13,"id":"9fb8cfa7_a6560c06","line":265,"range":{"start_line":265,"start_character":38,"end_line":265,"end_character":52},"updated":"2019-06-03 22:20:33.000000000","message":"What is an attach handle? Is this like a binding:profile on a neutron port?","commit_id":"e994fa31a23a228878110d900b5d6dabfbd7da8d"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"d2bbe9923a86493cbd458cf785fd66b239b889d1","unresolved":false,"context_lines":[{"line_number":262,"context_line":"   Cyborg client will retry till all ARQs are resolved (i.e. bound"},{"line_number":263,"context_line":"   successfully or failed to bind)."},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"#. NEW: The Nova virt driver uses the attach handles returned from the Cyborg"},{"line_number":266,"context_line":"   call to compose PCI passthrough devices into the VM\u0027s definition."},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"#. NEW: If there is any error after binding has been initiated, Nova"}],"source_content_type":"text/x-rst","patch_set":13,"id":"9fb8cfa7_9291be55","line":265,"range":{"start_line":265,"start_character":38,"end_line":265,"end_character":52},"in_reply_to":"9fb8cfa7_a6560c06","updated":"2019-06-04 05:31:26.000000000","message":"An attach handle is an object that abstracts the id by which an accelerator is attached to a VM. Usually, it is the PCI BDF of an SR-IOV VF. But it could also be a mediated device UUID or more exotic things for non-libvirt hypervisors.","commit_id":"e994fa31a23a228878110d900b5d6dabfbd7da8d"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"77cf106d1ad1f1cea74d639bf07b1a383535482a","unresolved":false,"context_lines":[{"line_number":270,"context_line":"   another host or delete the (unbound) ARQs for the instance."},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"This flow is captured by the following sequence diagram, in which the Nova"},{"line_number":273,"context_line":"conductor and scheduler are together represented as the Nova controller::"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":" .. seqdiag::"},{"line_number":276,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"9fb8cfa7_25a9a97a","line":273,"range":{"start_line":273,"start_character":71,"end_line":273,"end_character":73},"updated":"2019-06-04 10:43:12.000000000","message":"Three things to fix the seqdiag:\n\n1) s/::/:/ here\n\n...","commit_id":"e994fa31a23a228878110d900b5d6dabfbd7da8d"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"77cf106d1ad1f1cea74d639bf07b1a383535482a","unresolved":false,"context_lines":[{"line_number":272,"context_line":"This flow is captured by the following sequence diagram, in which the Nova"},{"line_number":273,"context_line":"conductor and scheduler are together represented as the Nova controller::"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":" .. seqdiag::"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"     seqdiag {"},{"line_number":278,"context_line":"         edge_length \u003d 200;"}],"source_content_type":"text/x-rst","patch_set":13,"id":"9fb8cfa7_c5b76dd8","line":275,"range":{"start_line":275,"start_character":0,"end_line":275,"end_character":1},"updated":"2019-06-04 10:43:12.000000000","message":"...\n2) dedent this line (remove leading space)\n...","commit_id":"e994fa31a23a228878110d900b5d6dabfbd7da8d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2a9d79b653d7b4dd9be34f497cefcfbcae098db7","unresolved":false,"context_lines":[{"line_number":272,"context_line":"This flow is captured by the following sequence diagram, in which the Nova"},{"line_number":273,"context_line":"conductor and scheduler are together represented as the Nova controller::"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":" .. seqdiag::"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"     seqdiag {"},{"line_number":278,"context_line":"         edge_length \u003d 200;"}],"source_content_type":"text/x-rst","patch_set":13,"id":"9fb8cfa7_067b588c","line":275,"updated":"2019-06-03 22:20:33.000000000","message":"This doesn\u0027t render, maybe because you have this indented, and/or maybe because you have :: preceding this section?\n\nhttp://logs.openstack.org/55/603955/13/check/openstack-tox-docs/4e69519/html/specs/train/approved/nova-cyborg-interaction.html#nova-changes-for-assignment-workflow","commit_id":"e994fa31a23a228878110d900b5d6dabfbd7da8d"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"77cf106d1ad1f1cea74d639bf07b1a383535482a","unresolved":false,"context_lines":[{"line_number":284,"context_line":"         \u0027Nova Controller\u0027 -\u003e \u0027Cyborg\u0027 [label \u003d"},{"line_number":285,"context_line":"             \"GET /v2/device_profiles?name\u003dmydp\"];"},{"line_number":286,"context_line":"         \u0027Nova Controller\u0027 \u003c- \u0027Cyborg\u0027 [label \u003d"},{"line_number":287,"context_line":"             \u0027{\\\"device_profiles\\\": $device_profile}\u0027];"},{"line_number":288,"context_line":"         \u0027Nova Controller\u0027 -\u003e \u0027Nova Controller\u0027 [label\u003d"},{"line_number":289,"context_line":"             \u0027Merge request groups into request_spec\u0027];"},{"line_number":290,"context_line":"         \u0027Nova Controller\u0027 -\u003e \u0027Placement\u0027 [label\u003d"}],"source_content_type":"text/x-rst","patch_set":13,"id":"9fb8cfa7_65c80155","line":287,"range":{"start_line":287,"start_character":15,"end_line":287,"end_character":33},"updated":"2019-06-04 10:43:12.000000000","message":"remove escapes (they show up in the rendered version)","commit_id":"e994fa31a23a228878110d900b5d6dabfbd7da8d"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"77cf106d1ad1f1cea74d639bf07b1a383535482a","unresolved":false,"context_lines":[{"line_number":309,"context_line":"             \u0027GET /v2/accelerator_requests?"},{"line_number":310,"context_line":"             instance\u003d$uuid\u0026bind_state\u003dresolved\u0027];"},{"line_number":311,"context_line":"         \u0027Nova Compute\u0027 \u003c- \u0027Cyborg\u0027 [label\u003d"},{"line_number":312,"context_line":"             \u0027{\u0027arqs\u0027: [$arq, ....]}\u0027];"},{"line_number":313,"context_line":"     }"},{"line_number":314,"context_line":""},{"line_number":315,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"9fb8cfa7_85b175e4","line":312,"range":{"start_line":312,"start_character":15,"end_line":312,"end_character":21},"updated":"2019-06-04 10:43:12.000000000","message":"...\n3) s/\u0027arqs\u0027/\"arqs\"/ here (single quotes \u003d\u003e double quotes inside the label string)","commit_id":"e994fa31a23a228878110d900b5d6dabfbd7da8d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2a9d79b653d7b4dd9be34f497cefcfbcae098db7","unresolved":false,"context_lines":[{"line_number":316,"context_line":"Alternatives"},{"line_number":317,"context_line":"------------"},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"It is possible to have the Nova virt driver poll for the Cyborg ARQ binding"},{"line_number":320,"context_line":"completion. That is not preferable, partly because that is not the pattern of"},{"line_number":321,"context_line":"interaction with other services like Neutron. The proposed alternative, which"},{"line_number":322,"context_line":"is that Cyborg raises a notification which the Nova virt driver listens to,"}],"source_content_type":"text/x-rst","patch_set":13,"id":"9fb8cfa7_c674609c","line":319,"range":{"start_line":319,"start_character":44,"end_line":319,"end_character":48},"updated":"2019-06-03 22:20:33.000000000","message":"As mentioned above it sounds like you already kind of have some polling in mind.","commit_id":"e994fa31a23a228878110d900b5d6dabfbd7da8d"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"97bdf1bcd916a885ed25913a4b18d223780f9bf8","unresolved":false,"context_lines":[{"line_number":316,"context_line":"Alternatives"},{"line_number":317,"context_line":"------------"},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"It is possible to have the Nova virt driver poll for the Cyborg ARQ binding"},{"line_number":320,"context_line":"completion. That is not preferable, partly because that is not the pattern of"},{"line_number":321,"context_line":"interaction with other services like Neutron. The proposed alternative, which"},{"line_number":322,"context_line":"is that Cyborg raises a notification which the Nova virt driver listens to,"}],"source_content_type":"text/x-rst","patch_set":13,"id":"9fb8cfa7_de2e41a4","line":319,"range":{"start_line":319,"start_character":44,"end_line":319,"end_character":48},"in_reply_to":"9fb8cfa7_128f0e2b","updated":"2019-06-05 13:44:41.000000000","message":"@matt the poc used polling and the change to notification was a PTG request so ya the reference in the previous section predate the PTG","commit_id":"e994fa31a23a228878110d900b5d6dabfbd7da8d"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"d2bbe9923a86493cbd458cf785fd66b239b889d1","unresolved":false,"context_lines":[{"line_number":316,"context_line":"Alternatives"},{"line_number":317,"context_line":"------------"},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"It is possible to have the Nova virt driver poll for the Cyborg ARQ binding"},{"line_number":320,"context_line":"completion. That is not preferable, partly because that is not the pattern of"},{"line_number":321,"context_line":"interaction with other services like Neutron. The proposed alternative, which"},{"line_number":322,"context_line":"is that Cyborg raises a notification which the Nova virt driver listens to,"}],"source_content_type":"text/x-rst","patch_set":13,"id":"9fb8cfa7_128f0e2b","line":319,"range":{"start_line":319,"start_character":44,"end_line":319,"end_character":48},"in_reply_to":"9fb8cfa7_c674609c","updated":"2019-06-04 05:31:26.000000000","message":"The polling is an alternative design, not the proposed one. The notification is the one that is proposed. We\u0027ll remove references to polling from the earlier section.","commit_id":"e994fa31a23a228878110d900b5d6dabfbd7da8d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2a9d79b653d7b4dd9be34f497cefcfbcae098db7","unresolved":false,"context_lines":[{"line_number":318,"context_line":""},{"line_number":319,"context_line":"It is possible to have the Nova virt driver poll for the Cyborg ARQ binding"},{"line_number":320,"context_line":"completion. That is not preferable, partly because that is not the pattern of"},{"line_number":321,"context_line":"interaction with other services like Neutron. The proposed alternative, which"},{"line_number":322,"context_line":"is that Cyborg raises a notification which the Nova virt driver listens to,"},{"line_number":323,"context_line":"requires also that the binding be started in the Nova compute manager, rather"},{"line_number":324,"context_line":"than in the conductor, which is the earliest point where binding could be"},{"line_number":325,"context_line":"initiated."}],"source_content_type":"text/x-rst","patch_set":13,"id":"9fb8cfa7_a67dac6f","line":322,"range":{"start_line":321,"start_character":46,"end_line":322,"end_character":74},"updated":"2019-06-03 22:20:33.000000000","message":"I\u0027m confused because isn\u0027t this what the spec above says is the plan?\n\nI think conductor can create the ARQs and compute can bind them (and compute can wait for the callback event). I don\u0027t think we really want compute creating the ARQs though because then (as noted above) on a reschedule we have to know if we have pre-existing ARQs or if we need to create new ones - it could get messy.","commit_id":"e994fa31a23a228878110d900b5d6dabfbd7da8d"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"d2bbe9923a86493cbd458cf785fd66b239b889d1","unresolved":false,"context_lines":[{"line_number":318,"context_line":""},{"line_number":319,"context_line":"It is possible to have the Nova virt driver poll for the Cyborg ARQ binding"},{"line_number":320,"context_line":"completion. That is not preferable, partly because that is not the pattern of"},{"line_number":321,"context_line":"interaction with other services like Neutron. The proposed alternative, which"},{"line_number":322,"context_line":"is that Cyborg raises a notification which the Nova virt driver listens to,"},{"line_number":323,"context_line":"requires also that the binding be started in the Nova compute manager, rather"},{"line_number":324,"context_line":"than in the conductor, which is the earliest point where binding could be"},{"line_number":325,"context_line":"initiated."}],"source_content_type":"text/x-rst","patch_set":13,"id":"9fb8cfa7_d2b656da","line":322,"range":{"start_line":321,"start_character":46,"end_line":322,"end_character":74},"in_reply_to":"9fb8cfa7_a67dac6f","updated":"2019-06-04 05:31:26.000000000","message":"This sentence is saying that, for the binding to be resolved by notification in the compute manager, binding should also be started in the compute manager.","commit_id":"e994fa31a23a228878110d900b5d6dabfbd7da8d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ce098f3e8b5a9c48b72c62204e8da122235cc6ce","unresolved":false,"context_lines":[{"line_number":318,"context_line":""},{"line_number":319,"context_line":"It is possible to have the Nova virt driver poll for the Cyborg ARQ binding"},{"line_number":320,"context_line":"completion. That is not preferable, partly because that is not the pattern of"},{"line_number":321,"context_line":"interaction with other services like Neutron. The proposed alternative, which"},{"line_number":322,"context_line":"is that Cyborg raises a notification which the Nova virt driver listens to,"},{"line_number":323,"context_line":"requires also that the binding be started in the Nova compute manager, rather"},{"line_number":324,"context_line":"than in the conductor, which is the earliest point where binding could be"},{"line_number":325,"context_line":"initiated."}],"source_content_type":"text/x-rst","patch_set":13,"id":"9fb8cfa7_db2185b6","line":322,"range":{"start_line":321,"start_character":46,"end_line":322,"end_character":74},"in_reply_to":"9fb8cfa7_d2b656da","updated":"2019-06-04 16:20:30.000000000","message":"Sure, and that makes sense for the (1) register callback, (2) bind, (3) wait for external event scenario described above, it\u0027s just a bit confusing to have it described here in the Alternatives section talking about polling.","commit_id":"e994fa31a23a228878110d900b5d6dabfbd7da8d"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"a37ee81c8c7e3d5438ca1a6bca18510f00094f1f","unresolved":false,"context_lines":[{"line_number":318,"context_line":""},{"line_number":319,"context_line":"It is possible to have the Nova virt driver poll for the Cyborg ARQ binding"},{"line_number":320,"context_line":"completion. That is not preferable, partly because that is not the pattern of"},{"line_number":321,"context_line":"interaction with other services like Neutron. The proposed alternative, which"},{"line_number":322,"context_line":"is that Cyborg raises a notification which the Nova virt driver listens to,"},{"line_number":323,"context_line":"requires also that the binding be started in the Nova compute manager, rather"},{"line_number":324,"context_line":"than in the conductor, which is the earliest point where binding could be"},{"line_number":325,"context_line":"initiated."}],"source_content_type":"text/x-rst","patch_set":13,"id":"9fb8cfa7_02779704","line":322,"range":{"start_line":321,"start_character":46,"end_line":322,"end_character":74},"in_reply_to":"9fb8cfa7_db2185b6","updated":"2019-06-05 22:13:16.000000000","message":"Removed.","commit_id":"e994fa31a23a228878110d900b5d6dabfbd7da8d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2a9d79b653d7b4dd9be34f497cefcfbcae098db7","unresolved":false,"context_lines":[{"line_number":327,"context_line":"Data model impact"},{"line_number":328,"context_line":"-----------------"},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"None"},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"REST API impact"},{"line_number":333,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":13,"id":"9fb8cfa7_c6f780f5","line":330,"updated":"2019-06-03 22:20:33.000000000","message":"Would we not be tracking anything in nova\u0027s data model related to ARQs attached to a server? For volumes we have the block_device_mappings table and for ports we have the instance_info_caches (network_info column) table, I would think we\u0027d at least want something for tracking ARQs attached to a server, especially if nova is going to be creating and deleting them (so we don\u0027t lose RPC or something and then nova can\u0027t figure out how to cleanup after itself).","commit_id":"e994fa31a23a228878110d900b5d6dabfbd7da8d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"044c409b4adba452d6d07147f4693d31f4e6dfff","unresolved":false,"context_lines":[{"line_number":327,"context_line":"Data model impact"},{"line_number":328,"context_line":"-----------------"},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"None"},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"REST API impact"},{"line_number":333,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":13,"id":"9fb8cfa7_e0d82480","line":330,"in_reply_to":"9fb8cfa7_22f97b4c","updated":"2019-06-06 20:26:30.000000000","message":"\u003e That would involve changing the Nova db schema. Perhaps we can keep\n \u003e it for the future; for now, a hard reboot may entail a Cyborg API\n \u003e call.\n\nTrue, we\u0027d need a new column somewhere, either instance_info_caches or the instance_extra table, but then it\u0027s just a serialized json string (if we modeled it like the network info cache rather than BDMs). Anyway, it\u0027s not really a blocking issue but I\u0027m going to assume it will be nice to have some day (or necessary).","commit_id":"e994fa31a23a228878110d900b5d6dabfbd7da8d"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"f3f88dde566ded6cc05b99e51787f81e09d94dd7","unresolved":false,"context_lines":[{"line_number":327,"context_line":"Data model impact"},{"line_number":328,"context_line":"-----------------"},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"None"},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"REST API impact"},{"line_number":333,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":13,"id":"9fb8cfa7_24b2e6e7","line":330,"in_reply_to":"9fb8cfa7_22f97b4c","updated":"2019-06-05 22:40:32.000000000","message":"im not sure it is resonable to requrire that the cyborg api being availble to be able to reboot a vm.\n\nwe do not have a depency on the neutron api being avaiable for a reboot. im not sure about cinder.","commit_id":"e994fa31a23a228878110d900b5d6dabfbd7da8d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ce098f3e8b5a9c48b72c62204e8da122235cc6ce","unresolved":false,"context_lines":[{"line_number":327,"context_line":"Data model impact"},{"line_number":328,"context_line":"-----------------"},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"None"},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"REST API impact"},{"line_number":333,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":13,"id":"9fb8cfa7_5b1fd56b","line":330,"in_reply_to":"9fb8cfa7_32c5723d","updated":"2019-06-04 16:20:30.000000000","message":"OK, that\u0027s probably ideal, I know we have issues with BDMs and port cache information getting out of sync, but I wouldn\u0027t be surprised if at some point down the road we\u0027d have wished we had some internal-to-nova tracking of this information (but again we should strive to avoid that if possible, unless for performance reasons we need something like the port cache).","commit_id":"e994fa31a23a228878110d900b5d6dabfbd7da8d"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"a37ee81c8c7e3d5438ca1a6bca18510f00094f1f","unresolved":false,"context_lines":[{"line_number":327,"context_line":"Data model impact"},{"line_number":328,"context_line":"-----------------"},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"None"},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"REST API impact"},{"line_number":333,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":13,"id":"9fb8cfa7_22f97b4c","line":330,"in_reply_to":"9fb8cfa7_493cddbe","updated":"2019-06-05 22:13:16.000000000","message":"That would involve changing the Nova db schema. Perhaps we can keep it for the future; for now, a hard reboot may entail a Cyborg API call.","commit_id":"e994fa31a23a228878110d900b5d6dabfbd7da8d"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"97bdf1bcd916a885ed25913a4b18d223780f9bf8","unresolved":false,"context_lines":[{"line_number":327,"context_line":"Data model impact"},{"line_number":328,"context_line":"-----------------"},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"None"},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"REST API impact"},{"line_number":333,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":13,"id":"9fb8cfa7_493cddbe","line":330,"in_reply_to":"9fb8cfa7_5b1fd56b","updated":"2019-06-05 13:44:41.000000000","message":"we will need to extend the request spec to track the arqs if we support precreated arqs but for now we snould not need to modify the request_spec or other data stuctures. that said i had assume we woudl be tracking the list of bound arqs somewhere in the instance object/ instance extra table so we dont need to always go back to cyboge on a hard reboot or other non move operation lifecycle events.","commit_id":"e994fa31a23a228878110d900b5d6dabfbd7da8d"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"d2bbe9923a86493cbd458cf785fd66b239b889d1","unresolved":false,"context_lines":[{"line_number":327,"context_line":"Data model impact"},{"line_number":328,"context_line":"-----------------"},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"None"},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"REST API impact"},{"line_number":333,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":13,"id":"9fb8cfa7_32c5723d","line":330,"in_reply_to":"9fb8cfa7_c6f780f5","updated":"2019-06-04 05:31:26.000000000","message":"No. Cyborg tracks all ARQs by instance UUID. So, Nova APIs look like: \u0027Get all bound ARQs for this instance\u0027, \u0027Delete all ARQs for this instance\u0027, \u0027Unbind all ARQs for this instance\u0027, etc.","commit_id":"e994fa31a23a228878110d900b5d6dabfbd7da8d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2a9d79b653d7b4dd9be34f497cefcfbcae098db7","unresolved":false,"context_lines":[{"line_number":380,"context_line":"Upgrade impact"},{"line_number":381,"context_line":"--------------"},{"line_number":382,"context_line":""},{"line_number":383,"context_line":"None"},{"line_number":384,"context_line":""},{"line_number":385,"context_line":"Implementation"},{"line_number":386,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":13,"id":"9fb8cfa7_066598b5","line":383,"updated":"2019-06-03 22:20:33.000000000","message":"Well clearly we likely can\u0027t support these types of resources on a server if the scheduler picks an older compute host during a rolling upgrade, but I guess - similar to min bw provider port scheduling - if the compute host doesn\u0027t have some kind of agent reporting the appropriate inventory to placement, the scheduler (placement) shouldn\u0027t pick that host anyway, so I guess we don\u0027t have to worry about older computes.","commit_id":"e994fa31a23a228878110d900b5d6dabfbd7da8d"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"d2bbe9923a86493cbd458cf785fd66b239b889d1","unresolved":false,"context_lines":[{"line_number":380,"context_line":"Upgrade impact"},{"line_number":381,"context_line":"--------------"},{"line_number":382,"context_line":""},{"line_number":383,"context_line":"None"},{"line_number":384,"context_line":""},{"line_number":385,"context_line":"Implementation"},{"line_number":386,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":13,"id":"9fb8cfa7_d2ebb6ad","line":383,"in_reply_to":"9fb8cfa7_066598b5","updated":"2019-06-04 05:31:26.000000000","message":"Agreed.","commit_id":"e994fa31a23a228878110d900b5d6dabfbd7da8d"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"57c770b11b0d71475db5962e17557195c2af4ade","unresolved":false,"context_lines":[{"line_number":406,"context_line":"There need to be unit tests and functional tests for the Nova changes."},{"line_number":407,"context_line":""},{"line_number":408,"context_line":"There need to be tempest tests for the end-to-end flow, including failure"},{"line_number":409,"context_line":"modes. The tempest tests should be targeted at a fake driver (in addition to"},{"line_number":410,"context_line":"real hardware, if any) and tied to the Nova Zuul gate."},{"line_number":411,"context_line":""},{"line_number":412,"context_line":"Documentation Impact"}],"source_content_type":"text/x-rst","patch_set":13,"id":"bfb3d3c7_9bf7ed8b","line":409,"range":{"start_line":409,"start_character":49,"end_line":409,"end_character":73},"updated":"2019-05-30 03:15:21.000000000","message":"Is it acceptable if we do real hardware alone? \n\nWhat test cases are mandatory, apart from VM creation and deletion?","commit_id":"e994fa31a23a228878110d900b5d6dabfbd7da8d"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"97bdf1bcd916a885ed25913a4b18d223780f9bf8","unresolved":false,"context_lines":[{"line_number":406,"context_line":"There need to be unit tests and functional tests for the Nova changes."},{"line_number":407,"context_line":""},{"line_number":408,"context_line":"There need to be tempest tests for the end-to-end flow, including failure"},{"line_number":409,"context_line":"modes. The tempest tests should be targeted at a fake driver (in addition to"},{"line_number":410,"context_line":"real hardware, if any) and tied to the Nova Zuul gate."},{"line_number":411,"context_line":""},{"line_number":412,"context_line":"Documentation Impact"}],"source_content_type":"text/x-rst","patch_set":13,"id":"9fb8cfa7_49ccdd60","line":409,"range":{"start_line":409,"start_character":49,"end_line":409,"end_character":73},"in_reply_to":"9fb8cfa7_3e28cf84","updated":"2019-06-05 13:44:41.000000000","message":"i think we still want to have a fake driver in cyborg so that we can test the api interaction with tempest in the gate without relying on a third party ci. we discuss this at the ptg i had thought we agreed to only merge the nova code after the ci was in place which seams to aline to http://lists.openstack.org/pipermail/openstack-discuss/2019-May/005914.html\n\nand in the ci seesion we agreed we should have the fake cyborg driver as to enable end to end testing without hardware see line 86.\nhttps://etherpad.openstack.org/p/nova-ptg-train-ci\n\nusing real hardware will mean that intel will need to run the ci forever. if the fake cyborg driver is implement which has been agreed at every PTG since dublin, then the thrid party ci becomes a bounce rather than a requirement.","commit_id":"e994fa31a23a228878110d900b5d6dabfbd7da8d"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"a37ee81c8c7e3d5438ca1a6bca18510f00094f1f","unresolved":false,"context_lines":[{"line_number":406,"context_line":"There need to be unit tests and functional tests for the Nova changes."},{"line_number":407,"context_line":""},{"line_number":408,"context_line":"There need to be tempest tests for the end-to-end flow, including failure"},{"line_number":409,"context_line":"modes. The tempest tests should be targeted at a fake driver (in addition to"},{"line_number":410,"context_line":"real hardware, if any) and tied to the Nova Zuul gate."},{"line_number":411,"context_line":""},{"line_number":412,"context_line":"Documentation Impact"}],"source_content_type":"text/x-rst","patch_set":13,"id":"9fb8cfa7_627213e6","line":409,"range":{"start_line":409,"start_character":49,"end_line":409,"end_character":73},"in_reply_to":"9fb8cfa7_49ccdd60","updated":"2019-06-05 22:13:16.000000000","message":"My understanding was that real hardware CI is preferable, but fake driver/hardware is acceptable; so we had planned for 3rd party CI with real hardware. Apparently, the expectation is the other way around.\n\nIn any case, the spec clearly states the fake driver will be done.","commit_id":"e994fa31a23a228878110d900b5d6dabfbd7da8d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"044c409b4adba452d6d07147f4693d31f4e6dfff","unresolved":false,"context_lines":[{"line_number":406,"context_line":"There need to be unit tests and functional tests for the Nova changes."},{"line_number":407,"context_line":""},{"line_number":408,"context_line":"There need to be tempest tests for the end-to-end flow, including failure"},{"line_number":409,"context_line":"modes. The tempest tests should be targeted at a fake driver (in addition to"},{"line_number":410,"context_line":"real hardware, if any) and tied to the Nova Zuul gate."},{"line_number":411,"context_line":""},{"line_number":412,"context_line":"Documentation Impact"}],"source_content_type":"text/x-rst","patch_set":13,"id":"9fb8cfa7_205e3ce6","line":409,"range":{"start_line":409,"start_character":49,"end_line":409,"end_character":73},"in_reply_to":"9fb8cfa7_627213e6","updated":"2019-06-06 20:26:30.000000000","message":"That\u0027s fine with me, I haven\u0027t been a major stakeholder in those discussions about CI so whatever was previously agreed is OK with me as long as we have the cyborg fixture in nova for functional testing the nova code.","commit_id":"e994fa31a23a228878110d900b5d6dabfbd7da8d"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"d2bbe9923a86493cbd458cf785fd66b239b889d1","unresolved":false,"context_lines":[{"line_number":406,"context_line":"There need to be unit tests and functional tests for the Nova changes."},{"line_number":407,"context_line":""},{"line_number":408,"context_line":"There need to be tempest tests for the end-to-end flow, including failure"},{"line_number":409,"context_line":"modes. The tempest tests should be targeted at a fake driver (in addition to"},{"line_number":410,"context_line":"real hardware, if any) and tied to the Nova Zuul gate."},{"line_number":411,"context_line":""},{"line_number":412,"context_line":"Documentation Impact"}],"source_content_type":"text/x-rst","patch_set":13,"id":"9fb8cfa7_d2397641","line":409,"range":{"start_line":409,"start_character":49,"end_line":409,"end_character":73},"in_reply_to":"9fb8cfa7_86f508ce","updated":"2019-06-04 05:31:26.000000000","message":"Agreed broadly. What I mean is, should the CI environment be necessarily set up with fake hardware? We have plans to get real hardware, and associated Cyborg driver. (Yes, I don\u0027t mean virt driver). Would the real hardware CI alone be enough?\n\nWe have created a cyborg-tempest-plugin repo [1].\n\n[1] https://github.com/openstack/cyborg-tempest-plugin","commit_id":"e994fa31a23a228878110d900b5d6dabfbd7da8d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ce098f3e8b5a9c48b72c62204e8da122235cc6ce","unresolved":false,"context_lines":[{"line_number":406,"context_line":"There need to be unit tests and functional tests for the Nova changes."},{"line_number":407,"context_line":""},{"line_number":408,"context_line":"There need to be tempest tests for the end-to-end flow, including failure"},{"line_number":409,"context_line":"modes. The tempest tests should be targeted at a fake driver (in addition to"},{"line_number":410,"context_line":"real hardware, if any) and tied to the Nova Zuul gate."},{"line_number":411,"context_line":""},{"line_number":412,"context_line":"Documentation Impact"}],"source_content_type":"text/x-rst","patch_set":13,"id":"9fb8cfa7_3e28cf84","line":409,"range":{"start_line":409,"start_character":49,"end_line":409,"end_character":73},"in_reply_to":"9fb8cfa7_d2397641","updated":"2019-06-04 16:20:30.000000000","message":"3rd party CI with real hardware would be ideal with cyborg-specific tempest test scenarios. For something like nova functional tests we\u0027ll need to fake out cyborg using fixtures (like we do for neutron and cinder) and for that a fake cyborg driver probably doesn\u0027t matter since the fixture is just faking out the cyborg API and managing some fake resources.","commit_id":"e994fa31a23a228878110d900b5d6dabfbd7da8d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2a9d79b653d7b4dd9be34f497cefcfbcae098db7","unresolved":false,"context_lines":[{"line_number":406,"context_line":"There need to be unit tests and functional tests for the Nova changes."},{"line_number":407,"context_line":""},{"line_number":408,"context_line":"There need to be tempest tests for the end-to-end flow, including failure"},{"line_number":409,"context_line":"modes. The tempest tests should be targeted at a fake driver (in addition to"},{"line_number":410,"context_line":"real hardware, if any) and tied to the Nova Zuul gate."},{"line_number":411,"context_line":""},{"line_number":412,"context_line":"Documentation Impact"}],"source_content_type":"text/x-rst","patch_set":13,"id":"9fb8cfa7_86f508ce","line":409,"range":{"start_line":409,"start_character":49,"end_line":409,"end_character":73},"in_reply_to":"bfb3d3c7_9bf7ed8b","updated":"2019-06-03 22:20:33.000000000","message":"Tempest doesn\u0027t know anything about the underlying driver (I\u0027m not sure what you mean by driver here btw, I\u0027m assuming you mean fake cyborg driver rather than virt driver, right?).\n\nTempest really just cares about the APIs. I think we\u0027d want test coverage on whatever supported instance operations with ARQs we say we have (https://review.opendev.org/#/c/605237/), but that likely would all live in a separate tempest-plugin-cyborg repo and we\u0027d run a job using that plugin on the nova changes. I think that\u0027s how the nova/barbican interaction is tested today.","commit_id":"e994fa31a23a228878110d900b5d6dabfbd7da8d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2a9d79b653d7b4dd9be34f497cefcfbcae098db7","unresolved":false,"context_lines":[{"line_number":424,"context_line":"   interaction \u003chttps://review.openstack.org/#/c/603545/\u003e`_"},{"line_number":425,"context_line":""},{"line_number":426,"context_line":".. [#dev-disc] `Specification for device discovery and update"},{"line_number":427,"context_line":"   \u003chttps://review.openstack.org/#/c/593726/\u003e`_"},{"line_number":428,"context_line":""},{"line_number":429,"context_line":".. [#dev-prof] `Device profiles specification"},{"line_number":430,"context_line":"   \u003chttps://review.openstack.org/602978\u003e`_"}],"source_content_type":"text/x-rst","patch_set":13,"id":"9fb8cfa7_a3f27e05","line":427,"updated":"2019-06-03 22:20:33.000000000","message":"Abandoned huh?","commit_id":"e994fa31a23a228878110d900b5d6dabfbd7da8d"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"a37ee81c8c7e3d5438ca1a6bca18510f00094f1f","unresolved":false,"context_lines":[{"line_number":424,"context_line":"   interaction \u003chttps://review.openstack.org/#/c/603545/\u003e`_"},{"line_number":425,"context_line":""},{"line_number":426,"context_line":".. [#dev-disc] `Specification for device discovery and update"},{"line_number":427,"context_line":"   \u003chttps://review.openstack.org/#/c/593726/\u003e`_"},{"line_number":428,"context_line":""},{"line_number":429,"context_line":".. [#dev-prof] `Device profiles specification"},{"line_number":430,"context_line":"   \u003chttps://review.openstack.org/602978\u003e`_"}],"source_content_type":"text/x-rst","patch_set":13,"id":"9fb8cfa7_6220d3b1","line":427,"in_reply_to":"9fb8cfa7_a3f27e05","updated":"2019-06-05 22:13:16.000000000","message":"Yes. Will remove.","commit_id":"e994fa31a23a228878110d900b5d6dabfbd7da8d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2a9d79b653d7b4dd9be34f497cefcfbcae098db7","unresolved":false,"context_lines":[{"line_number":432,"context_line":".. [#cy-api-impl] `Specification for Cyborg API implementation"},{"line_number":433,"context_line":"   \u003chttps://review.openstack.org/#/c/608624/\u003e`_"},{"line_number":434,"context_line":""},{"line_number":435,"context_line":".. [#inst-ops] `Specification for instance operations with accelerators"},{"line_number":436,"context_line":"   \u003chttps://review.openstack.org/#/c/605237/\u003e`_"},{"line_number":437,"context_line":""},{"line_number":438,"context_line":".. [#generic-dev-disc] `Generic device discovery"}],"source_content_type":"text/x-rst","patch_set":13,"id":"9fb8cfa7_23776e3d","line":435,"updated":"2019-06-03 22:20:33.000000000","message":"As I noted in that spec, it seems odd that it\u0027s in cyborg-specs when it\u0027s talking about things in nova. Not a huge deal since it\u0027s just reference material.","commit_id":"e994fa31a23a228878110d900b5d6dabfbd7da8d"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"d2bbe9923a86493cbd458cf785fd66b239b889d1","unresolved":false,"context_lines":[{"line_number":432,"context_line":".. [#cy-api-impl] `Specification for Cyborg API implementation"},{"line_number":433,"context_line":"   \u003chttps://review.openstack.org/#/c/608624/\u003e`_"},{"line_number":434,"context_line":""},{"line_number":435,"context_line":".. [#inst-ops] `Specification for instance operations with accelerators"},{"line_number":436,"context_line":"   \u003chttps://review.openstack.org/#/c/605237/\u003e`_"},{"line_number":437,"context_line":""},{"line_number":438,"context_line":".. [#generic-dev-disc] `Generic device discovery"}],"source_content_type":"text/x-rst","patch_set":13,"id":"9fb8cfa7_9273fee7","line":435,"in_reply_to":"9fb8cfa7_23776e3d","updated":"2019-06-04 05:31:26.000000000","message":"Thanks for the review. The intention was to get Nova developers to agree on that. But there were calls to move it out of Nova specs area, since there were no Nova changes suggested. So this is what we wound up with.","commit_id":"e994fa31a23a228878110d900b5d6dabfbd7da8d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"044c409b4adba452d6d07147f4693d31f4e6dfff","unresolved":false,"context_lines":[{"line_number":230,"context_line":""},{"line_number":231,"context_line":"#. NEW: Nova calls the Cyborg API ``POST /v2/accelerator_requests`` with the"},{"line_number":232,"context_line":"   device profile name. Cyborg creates a set of unbound ARQs for that device"},{"line_number":233,"context_line":"   profile and returns them to Nova. (The call may originate from Nova"},{"line_number":234,"context_line":"   conductor or the compute manager; that will be settled in code review.)"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"#. NEW: The Cyborg client in Nova matches each ARQ to the resource provider"},{"line_number":237,"context_line":"   picked for that accelerator. See `match-rp`_."}],"source_content_type":"text/x-rst","patch_set":14,"id":"9fb8cfa7_0071b8a9","line":234,"range":{"start_line":233,"start_character":37,"end_line":234,"end_character":74},"updated":"2019-06-06 20:26:30.000000000","message":"Yes thanks this is simple enough to move discussion out of the spec and into code review or mailing list.","commit_id":"ef53e908fd9f7fe0670f527589b6cf50dcfc2199"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"b2522417a59be92a77c540072422f8149078d7b4","unresolved":false,"context_lines":[{"line_number":230,"context_line":""},{"line_number":231,"context_line":"#. NEW: Nova calls the Cyborg API ``POST /v2/accelerator_requests`` with the"},{"line_number":232,"context_line":"   device profile name. Cyborg creates a set of unbound ARQs for that device"},{"line_number":233,"context_line":"   profile and returns them to Nova. (The call may originate from Nova"},{"line_number":234,"context_line":"   conductor or the compute manager; that will be settled in code review.)"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"#. NEW: The Cyborg client in Nova matches each ARQ to the resource provider"},{"line_number":237,"context_line":"   picked for that accelerator. See `match-rp`_."}],"source_content_type":"text/x-rst","patch_set":14,"id":"9fb8cfa7_8048da2c","line":234,"range":{"start_line":233,"start_character":37,"end_line":234,"end_character":74},"in_reply_to":"9fb8cfa7_0071b8a9","updated":"2019-06-13 13:18:16.000000000","message":"+1, FWIW, I vote compute node, very early on. We do allow parallel builds AFAICT, well the conf defaults to 10 or something like that.","commit_id":"ef53e908fd9f7fe0670f527589b6cf50dcfc2199"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"b2522417a59be92a77c540072422f8149078d7b4","unresolved":false,"context_lines":[{"line_number":253,"context_line":"          },"},{"line_number":254,"context_line":"          ..."},{"line_number":255,"context_line":"       ]"},{"line_number":256,"context_line":"    }"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"#. NEW: The Nova virt driver waits for the notification, subject to the"},{"line_number":259,"context_line":"   timeout mentioned in Section `Other deployer impact`_. It then calls"}],"source_content_type":"text/x-rst","patch_set":14,"id":"9fb8cfa7_e062f6ad","line":256,"updated":"2019-06-13 13:18:16.000000000","message":"Awesome, that is what I was looking to see.","commit_id":"ef53e908fd9f7fe0670f527589b6cf50dcfc2199"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"044c409b4adba452d6d07147f4693d31f4e6dfff","unresolved":false,"context_lines":[{"line_number":270,"context_line":"This flow is captured by the following sequence diagram, in which the Nova"},{"line_number":271,"context_line":"conductor and scheduler are together represented as the Nova controller. The"},{"line_number":272,"context_line":"ARQ creation is shown to happen in Nova compute manager only for concreteness;"},{"line_number":273,"context_line":"it may be in the controller instead."},{"line_number":274,"context_line":""},{"line_number":275,"context_line":".. seqdiag::"},{"line_number":276,"context_line":""}],"source_content_type":"text/x-rst","patch_set":14,"id":"9fb8cfa7_e06584e2","line":273,"updated":"2019-06-06 20:26:30.000000000","message":"Thanks for stating this.","commit_id":"ef53e908fd9f7fe0670f527589b6cf50dcfc2199"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"044c409b4adba452d6d07147f4693d31f4e6dfff","unresolved":false,"context_lines":[{"line_number":272,"context_line":"ARQ creation is shown to happen in Nova compute manager only for concreteness;"},{"line_number":273,"context_line":"it may be in the controller instead."},{"line_number":274,"context_line":""},{"line_number":275,"context_line":".. seqdiag::"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"     seqdiag {"},{"line_number":278,"context_line":"         edge_length \u003d 200;"}],"source_content_type":"text/x-rst","patch_set":14,"id":"9fb8cfa7_609f54b4","line":275,"updated":"2019-06-06 20:26:30.000000000","message":"Looks good now: http://logs.openstack.org/55/603955/14/check/openstack-tox-docs/f99aff5/html/specs/train/approved/nova-cyborg-interaction.html#nova-changes-for-assignment-workflow","commit_id":"ef53e908fd9f7fe0670f527589b6cf50dcfc2199"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"b2522417a59be92a77c540072422f8149078d7b4","unresolved":false,"context_lines":[{"line_number":272,"context_line":"ARQ creation is shown to happen in Nova compute manager only for concreteness;"},{"line_number":273,"context_line":"it may be in the controller instead."},{"line_number":274,"context_line":""},{"line_number":275,"context_line":".. seqdiag::"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"     seqdiag {"},{"line_number":278,"context_line":"         edge_length \u003d 200;"}],"source_content_type":"text/x-rst","patch_set":14,"id":"9fb8cfa7_406742b8","line":275,"in_reply_to":"9fb8cfa7_609f54b4","updated":"2019-06-13 13:18:16.000000000","message":"+1, nice.","commit_id":"ef53e908fd9f7fe0670f527589b6cf50dcfc2199"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"044c409b4adba452d6d07147f4693d31f4e6dfff","unresolved":false,"context_lines":[{"line_number":329,"context_line":"Data model impact"},{"line_number":330,"context_line":"-----------------"},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"None"},{"line_number":333,"context_line":""},{"line_number":334,"context_line":"REST API impact"},{"line_number":335,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":14,"id":"9fb8cfa7_20d07c50","line":332,"updated":"2019-06-06 20:26:30.000000000","message":"nit: could mention for completeness that nova will call the cyborg API when it needs information about ARQs for an instance as the source of truth rather than rely on caching that data within the nova database like is done for ports (instance_info_caches table) and volumes (block_device_mappings table).","commit_id":"ef53e908fd9f7fe0670f527589b6cf50dcfc2199"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"044c409b4adba452d6d07147f4693d31f4e6dfff","unresolved":false,"context_lines":[{"line_number":365,"context_line":"The deployer needs to set up the ``clouds.yaml`` file so that Nova"},{"line_number":366,"context_line":"can call the Cyborg REST API."},{"line_number":367,"context_line":""},{"line_number":368,"context_line":"The deployer needs to configure two additional tunables in ``nova-cpu.conf``::"},{"line_number":369,"context_line":""},{"line_number":370,"context_line":" * arq_binding_timeout (integer): Time in seconds for Nova compute"},{"line_number":371,"context_line":"   manager to wait for Cyborg to notify that ARQ binding is done."}],"source_content_type":"text/x-rst","patch_set":14,"id":"9fb8cfa7_603bd49b","line":368,"range":{"start_line":368,"start_character":76,"end_line":368,"end_character":78},"updated":"2019-06-06 20:26:30.000000000","message":"single : since this isn\u0027t a code block","commit_id":"ef53e908fd9f7fe0670f527589b6cf50dcfc2199"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"044c409b4adba452d6d07147f4693d31f4e6dfff","unresolved":false,"context_lines":[{"line_number":367,"context_line":""},{"line_number":368,"context_line":"The deployer needs to configure two additional tunables in ``nova-cpu.conf``::"},{"line_number":369,"context_line":""},{"line_number":370,"context_line":" * arq_binding_timeout (integer): Time in seconds for Nova compute"},{"line_number":371,"context_line":"   manager to wait for Cyborg to notify that ARQ binding is done."},{"line_number":372,"context_line":"   Default: 300."},{"line_number":373,"context_line":""}],"source_content_type":"text/x-rst","patch_set":14,"id":"9fb8cfa7_80c0487d","line":370,"range":{"start_line":370,"start_character":0,"end_line":370,"end_character":1},"updated":"2019-06-06 20:26:30.000000000","message":"nix the space before the bullets","commit_id":"ef53e908fd9f7fe0670f527589b6cf50dcfc2199"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e44182c496179d950088d5d959ba75f677b03d68","unresolved":false,"context_lines":[{"line_number":371,"context_line":"   manager to wait for Cyborg to notify that ARQ binding is done."},{"line_number":372,"context_line":"   Default: 300."},{"line_number":373,"context_line":""},{"line_number":374,"context_line":" * arq_binding_is_fatal (boolean): True if instance bootup should fail"},{"line_number":375,"context_line":"   on ARQ binding timeout, false if booting should proceed with a warning."},{"line_number":376,"context_line":"   Default: true."},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"Developer impact"},{"line_number":379,"context_line":"----------------"}],"source_content_type":"text/x-rst","patch_set":14,"id":"9fb8cfa7_3a491b5f","line":376,"range":{"start_line":374,"start_character":0,"end_line":376,"end_character":17},"updated":"2019-06-13 10:15:28.000000000","message":"Will there be cases when the bind fails but the device will be usable by the guest? Or why we have this flag?","commit_id":"ef53e908fd9f7fe0670f527589b6cf50dcfc2199"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"09b91fba57d3e6795d4600c66f3b89e322839f48","unresolved":false,"context_lines":[{"line_number":371,"context_line":"   manager to wait for Cyborg to notify that ARQ binding is done."},{"line_number":372,"context_line":"   Default: 300."},{"line_number":373,"context_line":""},{"line_number":374,"context_line":" * arq_binding_is_fatal (boolean): True if instance bootup should fail"},{"line_number":375,"context_line":"   on ARQ binding timeout, false if booting should proceed with a warning."},{"line_number":376,"context_line":"   Default: true."},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"Developer impact"},{"line_number":379,"context_line":"----------------"}],"source_content_type":"text/x-rst","patch_set":14,"id":"9fb8cfa7_8d5e6a43","line":376,"range":{"start_line":374,"start_character":0,"end_line":376,"end_character":17},"in_reply_to":"9fb8cfa7_1b4722bf","updated":"2019-06-19 18:12:54.000000000","message":"I think there is some confusion over how the neutron configuration works. vif_plugging_is_fatal is only used if we reach the timeout, not if the binding fails. If the binding for a port fails then the operation fails. As John said, just because we hit a port binding timeout doesn\u0027t mean the port won\u0027t ever be bound (or we screwed up and it\u0027s already bound but we started waiting for the event too late, see bug 1832028). So is it possible that we could have a similar situation where we timeout waiting on the client (nova) side but the device binding actually succeeds? If so, then I see value in the arq_binding_is_fatal option. If the binding itself fails before the timeout, then yes we should always fail the operation, just like with port binding.","commit_id":"ef53e908fd9f7fe0670f527589b6cf50dcfc2199"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b4fc7755918214f0536368aae13ad47fb478b76b","unresolved":false,"context_lines":[{"line_number":371,"context_line":"   manager to wait for Cyborg to notify that ARQ binding is done."},{"line_number":372,"context_line":"   Default: 300."},{"line_number":373,"context_line":""},{"line_number":374,"context_line":" * arq_binding_is_fatal (boolean): True if instance bootup should fail"},{"line_number":375,"context_line":"   on ARQ binding timeout, false if booting should proceed with a warning."},{"line_number":376,"context_line":"   Default: true."},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"Developer impact"},{"line_number":379,"context_line":"----------------"}],"source_content_type":"text/x-rst","patch_set":14,"id":"9fb8cfa7_44b4bad1","line":376,"range":{"start_line":374,"start_character":0,"end_line":376,"end_character":17},"in_reply_to":"9fb8cfa7_2483c606","updated":"2019-06-20 15:35:55.000000000","message":"Agree with gibi - if we timeout and don\u0027t have the information (from the bound ARQs?) necessary to properly construct the domain xml for the guest, then agree we should just fail. That is the subtle difference from the port binding timeout with neutron - we already have the config information we need from the ports to build the domain xml, we\u0027re just waiting for the external wiring of that to happen and neutron to tell us we\u0027re good to proceed.","commit_id":"ef53e908fd9f7fe0670f527589b6cf50dcfc2199"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"b2522417a59be92a77c540072422f8149078d7b4","unresolved":false,"context_lines":[{"line_number":371,"context_line":"   manager to wait for Cyborg to notify that ARQ binding is done."},{"line_number":372,"context_line":"   Default: 300."},{"line_number":373,"context_line":""},{"line_number":374,"context_line":" * arq_binding_is_fatal (boolean): True if instance bootup should fail"},{"line_number":375,"context_line":"   on ARQ binding timeout, false if booting should proceed with a warning."},{"line_number":376,"context_line":"   Default: true."},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"Developer impact"},{"line_number":379,"context_line":"----------------"}],"source_content_type":"text/x-rst","patch_set":14,"id":"9fb8cfa7_60fcc66f","line":376,"range":{"start_line":374,"start_character":0,"end_line":376,"end_character":17},"in_reply_to":"9fb8cfa7_3a491b5f","updated":"2019-06-13 13:18:16.000000000","message":"Hmm... I think gibi makes a good point here. I think this is just copying neutron. With neutron, I believe there is a chance that *eventually* the port gets configured correctly, hence the config exists, it doesn\u0027t totally make sense here.\n\nHaving said that... I am not against updating the once this becomes clear.","commit_id":"ef53e908fd9f7fe0670f527589b6cf50dcfc2199"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"acca31f104c99e9ca6e3e2793160b45788cb7299","unresolved":false,"context_lines":[{"line_number":371,"context_line":"   manager to wait for Cyborg to notify that ARQ binding is done."},{"line_number":372,"context_line":"   Default: 300."},{"line_number":373,"context_line":""},{"line_number":374,"context_line":" * arq_binding_is_fatal (boolean): True if instance bootup should fail"},{"line_number":375,"context_line":"   on ARQ binding timeout, false if booting should proceed with a warning."},{"line_number":376,"context_line":"   Default: true."},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"Developer impact"},{"line_number":379,"context_line":"----------------"}],"source_content_type":"text/x-rst","patch_set":14,"id":"9fb8cfa7_3efb41c1","line":376,"range":{"start_line":374,"start_character":0,"end_line":376,"end_character":17},"in_reply_to":"9fb8cfa7_3a491b5f","updated":"2019-06-18 22:57:17.000000000","message":"No, if the bind fails, the device should not be assigned to the guest. The question is, should the VM bootup be failed if the device is not available. The original idea was to make that configurable. But I\u0027ll remove it based on the feedback.","commit_id":"ef53e908fd9f7fe0670f527589b6cf50dcfc2199"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"7a1eeaf158546139d7affe14149ed29b3ade4911","unresolved":false,"context_lines":[{"line_number":371,"context_line":"   manager to wait for Cyborg to notify that ARQ binding is done."},{"line_number":372,"context_line":"   Default: 300."},{"line_number":373,"context_line":""},{"line_number":374,"context_line":" * arq_binding_is_fatal (boolean): True if instance bootup should fail"},{"line_number":375,"context_line":"   on ARQ binding timeout, false if booting should proceed with a warning."},{"line_number":376,"context_line":"   Default: true."},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"Developer impact"},{"line_number":379,"context_line":"----------------"}],"source_content_type":"text/x-rst","patch_set":14,"id":"9fb8cfa7_1b4722bf","line":376,"range":{"start_line":374,"start_character":0,"end_line":376,"end_character":17},"in_reply_to":"9fb8cfa7_3efb41c1","updated":"2019-06-19 01:44:42.000000000","message":"the device should never be unavialble.\nit is possible that the programming the device might fail but\nwe should never fail because of an inventory issue.\n\ni would prefer to not repeat the workflow we have with neutron and make it uncondtionally fatal if binding fails before the timeout.\n\ni dont think it is really accapatble to boot an instance and effectivly bill a user for consumebing a flavor with an fpga without providing it to them.","commit_id":"ef53e908fd9f7fe0670f527589b6cf50dcfc2199"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"43f271c08bdaa965eb9989923974c123e0558391","unresolved":false,"context_lines":[{"line_number":371,"context_line":"   manager to wait for Cyborg to notify that ARQ binding is done."},{"line_number":372,"context_line":"   Default: 300."},{"line_number":373,"context_line":""},{"line_number":374,"context_line":" * arq_binding_is_fatal (boolean): True if instance bootup should fail"},{"line_number":375,"context_line":"   on ARQ binding timeout, false if booting should proceed with a warning."},{"line_number":376,"context_line":"   Default: true."},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"Developer impact"},{"line_number":379,"context_line":"----------------"}],"source_content_type":"text/x-rst","patch_set":14,"id":"9fb8cfa7_619450e9","line":376,"range":{"start_line":374,"start_character":0,"end_line":376,"end_character":17},"in_reply_to":"9fb8cfa7_5e7d716c","updated":"2019-06-20 15:07:37.000000000","message":"If we agree to add a \"fail on binding timeout\" option, as was originally in the spec but maybe misunderstood as to when it would be used, and mirrors the vif_plugging_is_fatal option, then my only nit would be to name it specifically to binding, so arq_bind_timeout_is_fatal (in retrospect we should have named the neutron option vif_plug_timeout_is_fatal).\n\nBeyond that to your last point about what is missing from the spec, you\u0027re just talking about cleanup, correct? If any of the bindings fails (or times out and timeouts are fatal), then nova needs to release anything that was successfully bound. Is that what you intend to add to the spec? If so, I agree and it\u0027s what we do when processing multiple ports and we hit a failure (we delete any ports we created, unbind any ports that were pre-existing):\n\nhttps://github.com/openstack/nova/blob/19.0.0/nova/network/neutronv2/api.py#L1249\n\nI don\u0027t need to have that in the spec since it\u0027s an implementation detail but if you want to add it for completeness, and so that we don\u0027t forget about it during implementation, then sure feel free to add it. It\u0027s sort of separate from the \"should we have an option to make binding timeouts fatal\" discussion though.","commit_id":"ef53e908fd9f7fe0670f527589b6cf50dcfc2199"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"acca31f104c99e9ca6e3e2793160b45788cb7299","unresolved":false,"context_lines":[{"line_number":371,"context_line":"   manager to wait for Cyborg to notify that ARQ binding is done."},{"line_number":372,"context_line":"   Default: 300."},{"line_number":373,"context_line":""},{"line_number":374,"context_line":" * arq_binding_is_fatal (boolean): True if instance bootup should fail"},{"line_number":375,"context_line":"   on ARQ binding timeout, false if booting should proceed with a warning."},{"line_number":376,"context_line":"   Default: true."},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"Developer impact"},{"line_number":379,"context_line":"----------------"}],"source_content_type":"text/x-rst","patch_set":14,"id":"9fb8cfa7_3e24a15d","line":376,"range":{"start_line":374,"start_character":0,"end_line":376,"end_character":17},"in_reply_to":"9fb8cfa7_60fcc66f","updated":"2019-06-18 22:57:17.000000000","message":"It is partly analogy with Neutron and partly giving control to the operator to decide what happens on a binding failure. But, based on the discussion, I\u0027ll remove it in the next version.","commit_id":"ef53e908fd9f7fe0670f527589b6cf50dcfc2199"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"aa14c26fcff6c358a5be922eee3d896176b2ed04","unresolved":false,"context_lines":[{"line_number":371,"context_line":"   manager to wait for Cyborg to notify that ARQ binding is done."},{"line_number":372,"context_line":"   Default: 300."},{"line_number":373,"context_line":""},{"line_number":374,"context_line":" * arq_binding_is_fatal (boolean): True if instance bootup should fail"},{"line_number":375,"context_line":"   on ARQ binding timeout, false if booting should proceed with a warning."},{"line_number":376,"context_line":"   Default: true."},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"Developer impact"},{"line_number":379,"context_line":"----------------"}],"source_content_type":"text/x-rst","patch_set":14,"id":"9fb8cfa7_843952a4","line":376,"range":{"start_line":374,"start_character":0,"end_line":376,"end_character":17},"in_reply_to":"9fb8cfa7_619450e9","updated":"2019-06-20 15:25:04.000000000","message":"Sorry for misunderstanding the purpose of this config. So if I understand the responses correctly in cyborg there is a case that the binding takes more time than the timeout in nova. And in this case it is meaningful to let the VM boot up with the pci device that still being bound by cyborg. If this is the case then I\u0027m OK with the `arq_bind_timeout_is_fatal` config. I would suggest to make the default of the config False or at least set it to False in the gate so we can detect obvious problems with the event routing code.","commit_id":"ef53e908fd9f7fe0670f527589b6cf50dcfc2199"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"5664a838c637c3583c0b93a78b6965c173be6dbd","unresolved":false,"context_lines":[{"line_number":371,"context_line":"   manager to wait for Cyborg to notify that ARQ binding is done."},{"line_number":372,"context_line":"   Default: 300."},{"line_number":373,"context_line":""},{"line_number":374,"context_line":" * arq_binding_is_fatal (boolean): True if instance bootup should fail"},{"line_number":375,"context_line":"   on ARQ binding timeout, false if booting should proceed with a warning."},{"line_number":376,"context_line":"   Default: true."},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"Developer impact"},{"line_number":379,"context_line":"----------------"}],"source_content_type":"text/x-rst","patch_set":14,"id":"9fb8cfa7_a4efb6e7","line":376,"range":{"start_line":374,"start_character":0,"end_line":376,"end_character":17},"in_reply_to":"9fb8cfa7_843952a4","updated":"2019-06-20 15:30:43.000000000","message":"\u003e there is a case that the binding takes more time than the timeout in nova. \n\u003e And in this case it is meaningful to let the VM boot up with the pci device\n\u003e that still being bound by cyborg. If this is the case \n\nNo. If the timeout is exceeded, Nova does not have the PCI BDFs that need to be composed in the domain XML -- those BDFs need to come from Cyborg. So, if the VM boot proceeds, there would be no accelerators attached to the VM.","commit_id":"ef53e908fd9f7fe0670f527589b6cf50dcfc2199"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"dac8062d75543f4f900bcfdf0e7230fe24813bdb","unresolved":false,"context_lines":[{"line_number":371,"context_line":"   manager to wait for Cyborg to notify that ARQ binding is done."},{"line_number":372,"context_line":"   Default: 300."},{"line_number":373,"context_line":""},{"line_number":374,"context_line":" * arq_binding_is_fatal (boolean): True if instance bootup should fail"},{"line_number":375,"context_line":"   on ARQ binding timeout, false if booting should proceed with a warning."},{"line_number":376,"context_line":"   Default: true."},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"Developer impact"},{"line_number":379,"context_line":"----------------"}],"source_content_type":"text/x-rst","patch_set":14,"id":"9fb8cfa7_5e7d716c","line":376,"range":{"start_line":374,"start_character":0,"end_line":376,"end_character":17},"in_reply_to":"9fb8cfa7_8d5e6a43","updated":"2019-06-20 01:31:41.000000000","message":"Matt, the binding can fail on the Cyborg side and/or the Nova compute may time out: they are independent events. Agreed that the discussion above can be confusing. Let us rename arq_binding_is_fatal as arq_timeout_is_fatal, for the response below. (FWIW, I think the vif_plugging_is_fatal terminology is equally misleading.)\n\nTo clarify, there are 2 cases:\n* Cyborg responds before Nova timeout: If all ARQs bound successfully for that instance, that\u0027s the happy path. If any ARQ fails to bind, the VM boot is aborted. The arq_timeout_is_fatal is not relevant here.\n\n* Cyborg does not respond at all or responds after Nova timeout: The earlier responses basically said that the VM boot should be aborted in this scenario, rather than make it an option based on arq_timeout_is_fatal. This is irrespective of whether the ARQ bindings succeeded or not.\n\nHowever, that highlights a scenario that I have not really addressed in the spec: what if the Cyborg bindings succeed after the timeout? Cyborg has used up resources (such as VFs), which are not tracked by Placement, and they need to be released. The solution is that Nova should call Cyborg to unbind and delete all ARQs for that instance, when it encounters a timeout, i.e., call:\n   DELETE /v2/accelerator_requests?instance\u003d{uuid}\n\nNova does not have the ARQ uuids nor does it need them: you only need the instance UUID.\n\nI will add this to the spec if all agree.","commit_id":"ef53e908fd9f7fe0670f527589b6cf50dcfc2199"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"6f3fd9ad0e2b557143dbdb3babec2cd1273c14d1","unresolved":false,"context_lines":[{"line_number":371,"context_line":"   manager to wait for Cyborg to notify that ARQ binding is done."},{"line_number":372,"context_line":"   Default: 300."},{"line_number":373,"context_line":""},{"line_number":374,"context_line":" * arq_binding_is_fatal (boolean): True if instance bootup should fail"},{"line_number":375,"context_line":"   on ARQ binding timeout, false if booting should proceed with a warning."},{"line_number":376,"context_line":"   Default: true."},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"Developer impact"},{"line_number":379,"context_line":"----------------"}],"source_content_type":"text/x-rst","patch_set":14,"id":"9fb8cfa7_2483c606","line":376,"range":{"start_line":374,"start_character":0,"end_line":376,"end_character":17},"in_reply_to":"9fb8cfa7_a4efb6e7","updated":"2019-06-20 15:32:26.000000000","message":"\u003e \u003e there is a case that the binding takes more time than the timeout\n \u003e in nova.\n \u003e \u003e And in this case it is meaningful to let the VM boot up with the\n \u003e pci device\n \u003e \u003e that still being bound by cyborg. If this is the case\n \u003e \n \u003e No. If the timeout is exceeded, Nova does not have the PCI BDFs\n \u003e that need to be composed in the domain XML -- those BDFs need to\n \u003e come from Cyborg. So, if the VM boot proceeds, there would be no\n \u003e accelerators attached to the VM.\n\nThen I don\u0027t see the reason to let the VM boot up and the user pay for the accelerator she cannot use.","commit_id":"ef53e908fd9f7fe0670f527589b6cf50dcfc2199"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"044c409b4adba452d6d07147f4693d31f4e6dfff","unresolved":false,"context_lines":[{"line_number":383,"context_line":"We have VGPU and VGPU_DISPLAY_HEAD RCs defined already. But we propose a"},{"line_number":384,"context_line":"PGPU as a different RC for the following reasons:"},{"line_number":385,"context_line":""},{"line_number":386,"context_line":" * Both VGPU and VGPU_DISPLAY_HEAD RCs specifically refer to virtual GPUs."},{"line_number":387,"context_line":"   We need a different one for physical GPUs."},{"line_number":388,"context_line":" * It will be subject to separate quotas/limits in Keystone."},{"line_number":389,"context_line":" * Using PCI_DEVICE RC is too general: we want quotas for GPU RC"}],"source_content_type":"text/x-rst","patch_set":14,"id":"9fb8cfa7_e0c10482","line":386,"range":{"start_line":386,"start_character":0,"end_line":386,"end_character":1},"updated":"2019-06-06 20:26:30.000000000","message":"nix the space before the bullets","commit_id":"ef53e908fd9f7fe0670f527589b6cf50dcfc2199"}]}
