)]}'
{"doc/source/specs/index.rst":[{"author":{"_account_id":27621,"name":"Vishakha Agarwal","email":"agarwalvishakha18@gmail.com","username":"Vishakha"},"change_message_id":"6f1182f0d2becb49206cb0e57df6993db8d7e726","unresolved":false,"context_lines":[{"line_number":12,"context_line":"-----"},{"line_number":13,"context_line":"This section has a list of specs for the Stein release."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":".. toctree::"},{"line_number":16,"context_line":"   :maxdepth: 1"},{"line_number":17,"context_line":"   :glob:"},{"line_number":18,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"3f79a3b5_5dbb1de4","line":15,"updated":"2018-08-21 06:26:32.000000000","message":"tox-docs failing as toctree glob pattern \u0027stein/approved/*\u0027 didn\u0027t match any documents","commit_id":"7fe4fb84e98f175ab952fe3496d7ee3418633e88"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"e604da9713466d3879a8eb1b76f619969f142b54","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"   template"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Stein"},{"line_number":12,"context_line":"-----"},{"line_number":13,"context_line":"This section has a list of specs for the Stein release."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":".. toctree::"},{"line_number":16,"context_line":"   :maxdepth: 1"},{"line_number":17,"context_line":"   :glob:"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"   stein/*"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Rocky"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_904d3ec6","line":19,"range":{"start_line":11,"start_character":0,"end_line":19,"end_character":10},"updated":"2018-08-30 08:41:50.000000000","message":"this is the second spec i have seen that adds this.\nas i said in the other spec this is an unrelated change and should be in a seperate patch that all stein specs then depend on.","commit_id":"6c11078b85ef06a7a99a3c2f2cb278c310973812"}],"doc/source/specs/stein/cyborg-device-discovery.rst":[{"author":{"_account_id":17813,"name":"wangzhh","email":"wzh_1993@126.com","username":"wangzhh"},"change_message_id":"1d46c1067f6acc97f527995bbcdec88088c905d8","unresolved":false,"context_lines":[{"line_number":27,"context_line":"* The Cyborg agent or conductor then updates Placement."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"This spec defines how each of these tasks are done. It subsumes the Cyborg"},{"line_number":30,"context_line":"Driver/API Specification [CyborgDriverAPI]_ and is complementary to the"},{"line_number":31,"context_line":"Cyborg/Nova Scheduling Specification [CyborgNova_Sched]_."},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"This spec is common to all accelerators, including GPUs, High Precision"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_d44e2a37","line":30,"range":{"start_line":30,"start_character":25,"end_line":30,"end_character":26},"updated":"2018-08-21 02:09:18.000000000","message":"Hi sundar,\nYou lost a \u0027#\u0027 here.","commit_id":"fed598a9fd64aaac5624e983e6d53d704c7170fc"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"326534e21d5aa0145d72c387d90e61aa6a7d636d","unresolved":false,"context_lines":[{"line_number":27,"context_line":"* The Cyborg agent or conductor then updates Placement."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"This spec defines how each of these tasks are done. It subsumes the Cyborg"},{"line_number":30,"context_line":"Driver/API Specification [CyborgDriverAPI]_ and is complementary to the"},{"line_number":31,"context_line":"Cyborg/Nova Scheduling Specification [CyborgNova_Sched]_."},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"This spec is common to all accelerators, including GPUs, High Precision"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f79a3b5_6283d857","line":30,"range":{"start_line":30,"start_character":25,"end_line":30,"end_character":26},"in_reply_to":"3f79a3b5_d44e2a37","updated":"2018-08-21 05:03:40.000000000","message":"Strangely, https://github.com/ralsina/rst-cheatsheet/blob/master/rst-cheatsheet.rst says citation references don\u0027t need the \u0027#\u0027. Also, this syntax worked with http://rst.ninjs.org/#. But I\u0027ll fix it. Thanks.","commit_id":"fed598a9fd64aaac5624e983e6d53d704c7170fc"},{"author":{"_account_id":25547,"name":"jiapei","email":"jiapeish@gmail.com","username":"jeremy.jia"},"change_message_id":"a89db4ae7333d27e2b5cb56d17b632ea3d6fac35","unresolved":false,"context_lines":[{"line_number":38,"context_line":"This spec assumes that each accelerator is connected to a specific compute"},{"line_number":39,"context_line":"node. The case of disaggregated servers (a.k.a. composable architectures,"},{"line_number":40,"context_line":"like Intel Rack Scale Design), where the accelerators reside in separate"},{"line_number":41,"context_line":"pools and are connected to compute nodes as needed, will be taken up at a"},{"line_number":42,"context_line":"later stage."},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"This spec also does not consider devices with complex topologies, such as"},{"line_number":45,"context_line":"ones with multiple GPUs or FPGAs in a single PCIe board sharing board-"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3f79a3b5_6e165e58","line":42,"range":{"start_line":41,"start_character":52,"end_line":42,"end_character":12},"updated":"2018-08-21 12:11:06.000000000","message":"Is there a time schedule to support RSD? I know some customers showed interest in RSD servers. If cyborg can support dynamically managing accelerators in RSD, that would be great.","commit_id":"7fe4fb84e98f175ab952fe3496d7ee3418633e88"},{"author":{"_account_id":25738,"name":"Xinran WANG","email":"xin-ran.wang@intel.com","username":"Xinran"},"change_message_id":"e55f3b1d5be1f3171992b22c3b7fa73acd94ad62","unresolved":false,"context_lines":[{"line_number":35,"context_line":"be considered than other devices, some sections may focus on FPGA-specific"},{"line_number":36,"context_line":"factors. The spec calls out the FPGA-specific aspects."},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"This spec assumes that each accelerator is connected to a specific compute"},{"line_number":39,"context_line":"node. The case of disaggregated servers (a.k.a. composable architectures,"},{"line_number":40,"context_line":"like Intel Rack Scale Design), where the accelerators reside in separate"},{"line_number":41,"context_line":"pools and are connected to compute nodes as needed, will be taken up at a"},{"line_number":42,"context_line":"later stage."},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"This spec also does not consider devices with complex topologies, such as"},{"line_number":45,"context_line":"ones with multiple GPUs or FPGAs in a single PCIe board sharing board-"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3f79a3b5_98dc6019","line":42,"range":{"start_line":38,"start_character":0,"end_line":42,"end_character":12},"updated":"2018-08-21 11:15:26.000000000","message":"could you please elaborate it, shall we integrate things like Intel RSD in cyborg?","commit_id":"7fe4fb84e98f175ab952fe3496d7ee3418633e88"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"68f811439dceeecee91a5590d8b515317ef15b9c","unresolved":false,"context_lines":[{"line_number":38,"context_line":"This spec assumes that each accelerator is connected to a specific compute"},{"line_number":39,"context_line":"node. The case of disaggregated servers (a.k.a. composable architectures,"},{"line_number":40,"context_line":"like Intel Rack Scale Design), where the accelerators reside in separate"},{"line_number":41,"context_line":"pools and are connected to compute nodes as needed, will be taken up at a"},{"line_number":42,"context_line":"later stage."},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"This spec also does not consider devices with complex topologies, such as"},{"line_number":45,"context_line":"ones with multiple GPUs or FPGAs in a single PCIe board sharing board-"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3f79a3b5_00ea1274","line":42,"range":{"start_line":41,"start_character":52,"end_line":42,"end_character":12},"in_reply_to":"3f79a3b5_6e165e58","updated":"2018-08-22 02:45:23.000000000","message":"The ideal time schedule is Stein release :). Yes, there is interest for sure. However, the basic use cases that we aimed for Rocky release are now in Stein. We need to complete them and then take up RSD.","commit_id":"7fe4fb84e98f175ab952fe3496d7ee3418633e88"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"68f811439dceeecee91a5590d8b515317ef15b9c","unresolved":false,"context_lines":[{"line_number":35,"context_line":"be considered than other devices, some sections may focus on FPGA-specific"},{"line_number":36,"context_line":"factors. The spec calls out the FPGA-specific aspects."},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"This spec assumes that each accelerator is connected to a specific compute"},{"line_number":39,"context_line":"node. The case of disaggregated servers (a.k.a. composable architectures,"},{"line_number":40,"context_line":"like Intel Rack Scale Design), where the accelerators reside in separate"},{"line_number":41,"context_line":"pools and are connected to compute nodes as needed, will be taken up at a"},{"line_number":42,"context_line":"later stage."},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"This spec also does not consider devices with complex topologies, such as"},{"line_number":45,"context_line":"ones with multiple GPUs or FPGAs in a single PCIe board sharing board-"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3f79a3b5_a071de0e","line":42,"range":{"start_line":38,"start_character":0,"end_line":42,"end_character":12},"in_reply_to":"3f79a3b5_98dc6019","updated":"2018-08-22 02:45:23.000000000","message":"Since RSD has pools of resources, such as accelerators, we would need to support pools of GPUs, FPGAs, etc. That changes discovery, assignment, and lots of stuff. We could either add those aspects to individual specs (such as this one and 554717), or create a separate spec. I am open to suggestions.","commit_id":"7fe4fb84e98f175ab952fe3496d7ee3418633e88"},{"author":{"_account_id":12597,"name":"Lin Yang","email":"lin.a.yang@intel.com","username":"lin.yang"},"change_message_id":"38a0354dc675a4a940602804b0c127a65c729ecc","unresolved":false,"context_lines":[{"line_number":35,"context_line":"be considered than other devices, some sections may focus on FPGA-specific"},{"line_number":36,"context_line":"factors. The spec calls out the FPGA-specific aspects."},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"This spec assumes that each accelerator is connected to a specific compute"},{"line_number":39,"context_line":"node. The case of disaggregated servers (a.k.a. composable architectures,"},{"line_number":40,"context_line":"like Intel Rack Scale Design), where the accelerators reside in separate"},{"line_number":41,"context_line":"pools and are connected to compute nodes as needed, will be taken up at a"},{"line_number":42,"context_line":"later stage."},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"This spec also does not consider devices with complex topologies, such as"},{"line_number":45,"context_line":"ones with multiple GPUs or FPGAs in a single PCIe board sharing board-"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3f79a3b5_a08b6f1c","line":42,"range":{"start_line":38,"start_character":0,"end_line":42,"end_character":12},"in_reply_to":"3f79a3b5_a071de0e","updated":"2018-09-10 20:04:47.000000000","message":"How about we start with a \"partial pre-compose\" user case in stein, which compose RSD node and deploy nova nad cybory services on that node. Then when user request a VM with FPGA, cyborg attach FGAP to RSD node on the fly. I think current there is no blocking issues fot this user case. Cyborg RSD driver can update those VFs to placement as shared resource pool, so nova scheduler can make the decision to launch VM on which node, and let cyborg to attach FPGA to that node.","commit_id":"7fe4fb84e98f175ab952fe3496d7ee3418633e88"},{"author":{"_account_id":25738,"name":"Xinran WANG","email":"xin-ran.wang@intel.com","username":"Xinran"},"change_message_id":"e55f3b1d5be1f3171992b22c3b7fa73acd94ad62","unresolved":false,"context_lines":[{"line_number":48,"context_line":"Loading Drivers"},{"line_number":49,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"The Cyborg agent shall load the drivers using stevedore\u0027s"},{"line_number":52,"context_line":"`ExtensionManager` ([#extmgr]_). The drivers shall use the name space"},{"line_number":53,"context_line":"`cyborg`. As mentioned in the os-acc spec [#os-acc]_, the os-acc will also"},{"line_number":54,"context_line":"load Cyborg drivers, and that will be based on the same name space as well."},{"line_number":55,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"3f79a3b5_b864bc4a","line":52,"range":{"start_line":51,"start_character":45,"end_line":52,"end_character":18},"updated":"2018-08-21 11:15:26.000000000","message":"Is it necessary to use stevedore\u0027s ExtensionManager here, can agent invoke driver directly?","commit_id":"7fe4fb84e98f175ab952fe3496d7ee3418633e88"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"68f811439dceeecee91a5590d8b515317ef15b9c","unresolved":false,"context_lines":[{"line_number":48,"context_line":"Loading Drivers"},{"line_number":49,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"The Cyborg agent shall load the drivers using stevedore\u0027s"},{"line_number":52,"context_line":"`ExtensionManager` ([#extmgr]_). The drivers shall use the name space"},{"line_number":53,"context_line":"`cyborg`. As mentioned in the os-acc spec [#os-acc]_, the os-acc will also"},{"line_number":54,"context_line":"load Cyborg drivers, and that will be based on the same name space as well."},{"line_number":55,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"3f79a3b5_4cd6f829","line":52,"range":{"start_line":51,"start_character":45,"end_line":52,"end_character":18},"in_reply_to":"3f79a3b5_b864bc4a","updated":"2018-08-22 02:45:23.000000000","message":"Technically, we could use Python\u0027s dynamic loading mechanisms to do whatever we want. However, I believe the standard way is to use stevedore. For example, os-vif uses it for plugins,(https://github.com/openstack/os-vif/blob/master/os_vif/__init__.py#L38), while Nova uses it for hooks (https://github.com/openstack/nova/blob/master/nova/hooks.py#L51).\n\nIs there a reason against using stevedore?","commit_id":"7fe4fb84e98f175ab952fe3496d7ee3418633e88"},{"author":{"_account_id":17813,"name":"wangzhh","email":"wzh_1993@126.com","username":"wangzhh"},"change_message_id":"5c5cd01c5075550cb6ff221e99c92ddb9cd1a4ef","unresolved":false,"context_lines":[{"line_number":65,"context_line":""},{"line_number":66,"context_line":"Discovery scenarios"},{"line_number":67,"context_line":"-------------------"},{"line_number":68,"context_line":"The Cyborg agent shall query each loaded driver not only on startup but also"},{"line_number":69,"context_line":"periodically thereafter, to handle devices that have been dynamically added,"},{"line_number":70,"context_line":"deleted or otherwise changed."},{"line_number":71,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"3f79a3b5_dafc08b7","line":68,"updated":"2018-08-21 14:30:54.000000000","message":"Do you mean that use loaded driver to discover device?","commit_id":"7fe4fb84e98f175ab952fe3496d7ee3418633e88"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"68f811439dceeecee91a5590d8b515317ef15b9c","unresolved":false,"context_lines":[{"line_number":65,"context_line":""},{"line_number":66,"context_line":"Discovery scenarios"},{"line_number":67,"context_line":"-------------------"},{"line_number":68,"context_line":"The Cyborg agent shall query each loaded driver not only on startup but also"},{"line_number":69,"context_line":"periodically thereafter, to handle devices that have been dynamically added,"},{"line_number":70,"context_line":"deleted or otherwise changed."},{"line_number":71,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"3f79a3b5_cccbe847","line":68,"in_reply_to":"3f79a3b5_dafc08b7","updated":"2018-08-22 02:45:23.000000000","message":"Yes.","commit_id":"7fe4fb84e98f175ab952fe3496d7ee3418633e88"},{"author":{"_account_id":25738,"name":"Xinran WANG","email":"xin-ran.wang@intel.com","username":"Xinran"},"change_message_id":"e55f3b1d5be1f3171992b22c3b7fa73acd94ad62","unresolved":false,"context_lines":[{"line_number":65,"context_line":""},{"line_number":66,"context_line":"Discovery scenarios"},{"line_number":67,"context_line":"-------------------"},{"line_number":68,"context_line":"The Cyborg agent shall query each loaded driver not only on startup but also"},{"line_number":69,"context_line":"periodically thereafter, to handle devices that have been dynamically added,"},{"line_number":70,"context_line":"deleted or otherwise changed."},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"When os-acc invokes a Cyborg driver to attach an accelerator to a VM, the"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3f79a3b5_f88c74d8","line":69,"range":{"start_line":68,"start_character":0,"end_line":69,"end_character":24},"updated":"2018-08-21 11:15:26.000000000","message":"As you said above, once driver changes, we should restart cyborg agent to enable it. IMHO, there is no need to query loaded driver periodically.","commit_id":"7fe4fb84e98f175ab952fe3496d7ee3418633e88"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"68f811439dceeecee91a5590d8b515317ef15b9c","unresolved":false,"context_lines":[{"line_number":65,"context_line":""},{"line_number":66,"context_line":"Discovery scenarios"},{"line_number":67,"context_line":"-------------------"},{"line_number":68,"context_line":"The Cyborg agent shall query each loaded driver not only on startup but also"},{"line_number":69,"context_line":"periodically thereafter, to handle devices that have been dynamically added,"},{"line_number":70,"context_line":"deleted or otherwise changed."},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"When os-acc invokes a Cyborg driver to attach an accelerator to a VM, the"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3f79a3b5_8cd5f0e7","line":69,"range":{"start_line":68,"start_character":0,"end_line":69,"end_character":24},"in_reply_to":"3f79a3b5_f88c74d8","updated":"2018-08-22 02:45:23.000000000","message":"The drivers are periodically queried to handle PCI hot adds and deletes, and to handle failed cards.","commit_id":"7fe4fb84e98f175ab952fe3496d7ee3418633e88"},{"author":{"_account_id":25738,"name":"Xinran WANG","email":"xin-ran.wang@intel.com","username":"Xinran"},"change_message_id":"e55f3b1d5be1f3171992b22c3b7fa73acd94ad62","unresolved":false,"context_lines":[{"line_number":69,"context_line":"periodically thereafter, to handle devices that have been dynamically added,"},{"line_number":70,"context_line":"deleted or otherwise changed."},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"When os-acc invokes a Cyborg driver to attach an accelerator to a VM, the"},{"line_number":73,"context_line":"device configuration by the driver may change the traits and even the"},{"line_number":74,"context_line":"accelerator inventory of the device. For example, a vGPU type change or"},{"line_number":75,"context_line":"FPGA programming may cause such changes. These changes need to be reflected"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3f79a3b5_180db03d","line":72,"range":{"start_line":72,"start_character":4,"end_line":72,"end_character":35},"updated":"2018-08-21 11:15:26.000000000","message":"As we have discussed, os-acc does not call either cyborg agent or cyborg driver.","commit_id":"7fe4fb84e98f175ab952fe3496d7ee3418633e88"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"68f811439dceeecee91a5590d8b515317ef15b9c","unresolved":false,"context_lines":[{"line_number":69,"context_line":"periodically thereafter, to handle devices that have been dynamically added,"},{"line_number":70,"context_line":"deleted or otherwise changed."},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"When os-acc invokes a Cyborg driver to attach an accelerator to a VM, the"},{"line_number":73,"context_line":"device configuration by the driver may change the traits and even the"},{"line_number":74,"context_line":"accelerator inventory of the device. For example, a vGPU type change or"},{"line_number":75,"context_line":"FPGA programming may cause such changes. These changes need to be reflected"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3f79a3b5_4c659844","line":72,"range":{"start_line":72,"start_character":4,"end_line":72,"end_character":35},"in_reply_to":"3f79a3b5_180db03d","updated":"2018-08-22 02:45:23.000000000","message":"The os-acc does not call the agent but it does call the Cyborg driver, as explained here: https://git.openstack.org/cgit/openstack/cyborg/tree/doc/source/specs/rocky/approved/compute-node.rst?h\u003drefs/changes/38/577438/10#n290","commit_id":"7fe4fb84e98f175ab952fe3496d7ee3418633e88"},{"author":{"_account_id":25738,"name":"Xinran WANG","email":"xin-ran.wang@intel.com","username":"Xinran"},"change_message_id":"e55f3b1d5be1f3171992b22c3b7fa73acd94ad62","unresolved":false,"context_lines":[{"line_number":83,"context_line":"common utility functions provided by Cyborg. More specifically, the"},{"line_number":84,"context_line":"Cyborg agent must provide an RPC API like this::"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"   def trigger_poll(driver_name):"},{"line_number":87,"context_line":"      # drivers[] is a list of loaded drivers"},{"line_number":88,"context_line":"      found \u003d  False"},{"line_number":89,"context_line":"      for d in drivers[]:"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3f79a3b5_4bf27408","line":86,"range":{"start_line":86,"start_character":2,"end_line":86,"end_character":33},"updated":"2018-08-21 11:15:26.000000000","message":"IMHO, if operator want to program an FPGA card, os-acc will always call cyborg RestFul api, (for example, https://github.com/openstack/cyborg/blob/master/cyborg/api/controllers/v1/deployables.py#L146),and cyborg api will trigger cyborg agent. There should be a way to trigger cyborg agent to update the acc info one cyborg api calls agent to do something like programming.","commit_id":"7fe4fb84e98f175ab952fe3496d7ee3418633e88"},{"author":{"_account_id":17813,"name":"wangzhh","email":"wzh_1993@126.com","username":"wangzhh"},"change_message_id":"5c5cd01c5075550cb6ff221e99c92ddb9cd1a4ef","unresolved":false,"context_lines":[{"line_number":83,"context_line":"common utility functions provided by Cyborg. More specifically, the"},{"line_number":84,"context_line":"Cyborg agent must provide an RPC API like this::"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"   def trigger_poll(driver_name):"},{"line_number":87,"context_line":"      # drivers[] is a list of loaded drivers"},{"line_number":88,"context_line":"      found \u003d  False"},{"line_number":89,"context_line":"      for d in drivers[]:"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3f79a3b5_da716846","line":86,"range":{"start_line":86,"start_character":2,"end_line":86,"end_character":33},"in_reply_to":"3f79a3b5_4bf27408","updated":"2018-08-21 14:30:54.000000000","message":"Agree with xinran, in this way, we needn\u0027t handle some extra issues.","commit_id":"7fe4fb84e98f175ab952fe3496d7ee3418633e88"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"68f811439dceeecee91a5590d8b515317ef15b9c","unresolved":false,"context_lines":[{"line_number":83,"context_line":"common utility functions provided by Cyborg. More specifically, the"},{"line_number":84,"context_line":"Cyborg agent must provide an RPC API like this::"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"   def trigger_poll(driver_name):"},{"line_number":87,"context_line":"      # drivers[] is a list of loaded drivers"},{"line_number":88,"context_line":"      found \u003d  False"},{"line_number":89,"context_line":"      for d in drivers[]:"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3f79a3b5_725e2a13","line":86,"range":{"start_line":86,"start_character":2,"end_line":86,"end_character":33},"in_reply_to":"3f79a3b5_da716846","updated":"2018-08-22 02:45:23.000000000","message":"Folks, hope you have read the use cases in Cyborg/Nova scheduling spec (https://git.openstack.org/cgit/openstack/cyborg/tree/doc/specs/rocky/cyborg-nova-sched.rst?h\u003drefs/changes/17/554717/18#n99).\n\nThe orchestration (Cyborg) has to do the programming in many use cases, not the operator. I will elaborate on the REST API issue later.\n\nwangzhh, please LMK what issues you are thinking of.","commit_id":"7fe4fb84e98f175ab952fe3496d7ee3418633e88"},{"author":{"_account_id":25547,"name":"jiapei","email":"jiapeish@gmail.com","username":"jeremy.jia"},"change_message_id":"a89db4ae7333d27e2b5cb56d17b632ea3d6fac35","unresolved":false,"context_lines":[{"line_number":121,"context_line":""},{"line_number":122,"context_line":"They need not be the same. For example, a device may be identified as a"},{"line_number":123,"context_line":"PCI function but attached to a VM as a mediated device. Neither the"},{"line_number":124,"context_line":"identifier nor the attach handle need be a PCI function."},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"To support non-PCI devices, and to relate better to Placement, the Cyborg"},{"line_number":127,"context_line":"driver should report the elements of the accelerator card as a Python"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3f79a3b5_a901d006","line":124,"range":{"start_line":124,"start_character":33,"end_line":124,"end_character":37},"updated":"2018-08-21 12:11:06.000000000","message":"needs","commit_id":"7fe4fb84e98f175ab952fe3496d7ee3418633e88"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"68f811439dceeecee91a5590d8b515317ef15b9c","unresolved":false,"context_lines":[{"line_number":121,"context_line":""},{"line_number":122,"context_line":"They need not be the same. For example, a device may be identified as a"},{"line_number":123,"context_line":"PCI function but attached to a VM as a mediated device. Neither the"},{"line_number":124,"context_line":"identifier nor the attach handle need be a PCI function."},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"To support non-PCI devices, and to relate better to Placement, the Cyborg"},{"line_number":127,"context_line":"driver should report the elements of the accelerator card as a Python"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3f79a3b5_867dc81d","line":124,"range":{"start_line":124,"start_character":33,"end_line":124,"end_character":37},"in_reply_to":"3f79a3b5_a901d006","updated":"2018-08-22 02:45:23.000000000","message":"Done","commit_id":"7fe4fb84e98f175ab952fe3496d7ee3418633e88"},{"author":{"_account_id":25547,"name":"jiapei","email":"jiapeish@gmail.com","username":"jeremy.jia"},"change_message_id":"a89db4ae7333d27e2b5cb56d17b632ea3d6fac35","unresolved":false,"context_lines":[{"line_number":123,"context_line":"PCI function but attached to a VM as a mediated device. Neither the"},{"line_number":124,"context_line":"identifier nor the attach handle need be a PCI function."},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"To support non-PCI devices, and to relate better to Placement, the Cyborg"},{"line_number":127,"context_line":"driver should report the elements of the accelerator card as a Python"},{"line_number":128,"context_line":"OVO. The exact format is in the next section, but here it is presented"},{"line_number":129,"context_line":"in an abstract notation::"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3f79a3b5_c949ac60","line":126,"range":{"start_line":126,"start_character":11,"end_line":126,"end_character":26},"updated":"2018-08-21 12:11:06.000000000","message":"Could you describe in more detail? What kind of non-PCI devices? And what kind of devices are not supported?","commit_id":"7fe4fb84e98f175ab952fe3496d7ee3418633e88"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"68f811439dceeecee91a5590d8b515317ef15b9c","unresolved":false,"context_lines":[{"line_number":123,"context_line":"PCI function but attached to a VM as a mediated device. Neither the"},{"line_number":124,"context_line":"identifier nor the attach handle need be a PCI function."},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"To support non-PCI devices, and to relate better to Placement, the Cyborg"},{"line_number":127,"context_line":"driver should report the elements of the accelerator card as a Python"},{"line_number":128,"context_line":"OVO. The exact format is in the next section, but here it is presented"},{"line_number":129,"context_line":"in an abstract notation::"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3f79a3b5_b23b62c6","line":126,"range":{"start_line":126,"start_character":11,"end_line":126,"end_character":26},"in_reply_to":"3f79a3b5_c949ac60","updated":"2018-08-22 02:45:23.000000000","message":"Please see Line 110-113 above. Power apparently does not represent PCI devices using BDFs. So, even if they are using PCI protocol, they are not identified using PFs and VFs as Cyborg assumes today.\n\nBTW, I got this info on Power from Eric Fried:\nhttp://eavesdrop.openstack.org/irclogs/%23openstack-nova/%23openstack-nova.2018-07-02.log.html#t2018-07-02T19:01:27\n\nPlease also read the PowerDevices reference below.","commit_id":"7fe4fb84e98f175ab952fe3496d7ee3418633e88"},{"author":{"_account_id":25738,"name":"Xinran WANG","email":"xin-ran.wang@intel.com","username":"Xinran"},"change_message_id":"e55f3b1d5be1f3171992b22c3b7fa73acd94ad62","unresolved":false,"context_lines":[{"line_number":235,"context_line":"  * Function type trait for FPGAs is built as"},{"line_number":236,"context_line":"    `CUSTOM_FPGA_FUNCTION_\u003cvendor\u003e_\u003cuuid\u003e`. E.g."},{"line_number":237,"context_line":"    `CUSTOM_FPGA_FUNCTION_INTEL_\u003cuuid\u003e`."},{"line_number":238,"context_line":"  * Functionality traits, such as \u0027CUSTOM_FPGA_NETWORK\", are included as"},{"line_number":239,"context_line":"    custom traits in above structure."},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"* The resource class for all accelerators on the device would be derived"},{"line_number":242,"context_line":"  by the Cyborg agent as `CUSTOM_ACCELERATOR_\u003cDeviceType\u003e`. E.g."}],"source_content_type":"text/x-rst","patch_set":2,"id":"3f79a3b5_ebea60d6","line":239,"range":{"start_line":238,"start_character":0,"end_line":239,"end_character":37},"updated":"2018-08-21 11:15:26.000000000","message":"it will be better to point out how we mapping function_uuid and function name.","commit_id":"7fe4fb84e98f175ab952fe3496d7ee3418633e88"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"68f811439dceeecee91a5590d8b515317ef15b9c","unresolved":false,"context_lines":[{"line_number":235,"context_line":"  * Function type trait for FPGAs is built as"},{"line_number":236,"context_line":"    `CUSTOM_FPGA_FUNCTION_\u003cvendor\u003e_\u003cuuid\u003e`. E.g."},{"line_number":237,"context_line":"    `CUSTOM_FPGA_FUNCTION_INTEL_\u003cuuid\u003e`."},{"line_number":238,"context_line":"  * Functionality traits, such as \u0027CUSTOM_FPGA_NETWORK\", are included as"},{"line_number":239,"context_line":"    custom traits in above structure."},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"* The resource class for all accelerators on the device would be derived"},{"line_number":242,"context_line":"  by the Cyborg agent as `CUSTOM_ACCELERATOR_\u003cDeviceType\u003e`. E.g."}],"source_content_type":"text/x-rst","patch_set":2,"id":"3f79a3b5_b2c0427e","line":239,"range":{"start_line":238,"start_character":0,"end_line":239,"end_character":37},"in_reply_to":"3f79a3b5_ebea60d6","updated":"2018-08-22 02:45:23.000000000","message":"UUIDs seem clunky and it would be preferable to use names. However, I think it will be a bit premature to define or implement a UUID/name mapping today, for these reasons:\n* Even if you use function names instead of UUIDs, region types will still have UUIDs. There are no good names for them, since they just indicate a type and may change whenever the shell changes. So, the operators cannot avoid using UUIDs.\n* Who defines the function name -- the bitstream developer or the operator? If the former, how do we make it unique? If the latter, operators would have to maintain it. Also, there are a few ways to do that. So, we should ask the operators for feedback.\n\nI think it is productive to get the basics done first and then ask operators to give feedback based on experience. But I agree that we should define the mapping sometime.","commit_id":"7fe4fb84e98f175ab952fe3496d7ee3418633e88"},{"author":{"_account_id":17813,"name":"wangzhh","email":"wzh_1993@126.com","username":"wangzhh"},"change_message_id":"5c5cd01c5075550cb6ff221e99c92ddb9cd1a4ef","unresolved":false,"context_lines":[{"line_number":357,"context_line":""},{"line_number":358,"context_line":"There are two options for where the diff is computed: Cyborg agent or"},{"line_number":359,"context_line":"the Cyborg conductor. These options were debated in the community"},{"line_number":360,"context_line":"[#DiffThread]_. In short, if the agent were to do the diff, it would have"},{"line_number":361,"context_line":"to keep a copy of the previous configuration. That would not only be a"},{"line_number":362,"context_line":"duplicate copy of the database entries, but may also get lost when the"},{"line_number":363,"context_line":"agent restarts or the compute node reboots. So, the conductor must do"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3f79a3b5_aec9d625","line":360,"updated":"2018-08-21 14:30:54.000000000","message":"Both conductor and agent should reload data from form db when they restart. There is no difference.","commit_id":"7fe4fb84e98f175ab952fe3496d7ee3418633e88"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"68f811439dceeecee91a5590d8b515317ef15b9c","unresolved":false,"context_lines":[{"line_number":357,"context_line":""},{"line_number":358,"context_line":"There are two options for where the diff is computed: Cyborg agent or"},{"line_number":359,"context_line":"the Cyborg conductor. These options were debated in the community"},{"line_number":360,"context_line":"[#DiffThread]_. In short, if the agent were to do the diff, it would have"},{"line_number":361,"context_line":"to keep a copy of the previous configuration. That would not only be a"},{"line_number":362,"context_line":"duplicate copy of the database entries, but may also get lost when the"},{"line_number":363,"context_line":"agent restarts or the compute node reboots. So, the conductor must do"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3f79a3b5_b2cb6248","line":360,"in_reply_to":"3f79a3b5_aec9d625","updated":"2018-08-22 02:45:23.000000000","message":"The conductor would surely read from db on restart. If the agent is only discovering devices, it can just get it from the drivers on restart, without reading the db. But, in the following cases, it may have to read the db on restart:\n* If the agent is doing the diff (not saying that it should).\n* There are counters/stats that are not in hardware e.g. the #times a device was reprogrammed.\n* There is some per-device operator config (e.g. to disable a device for whatever reason).\n\nDoes that sound good?","commit_id":"7fe4fb84e98f175ab952fe3496d7ee3418633e88"},{"author":{"_account_id":25738,"name":"Xinran WANG","email":"xin-ran.wang@intel.com","username":"Xinran"},"change_message_id":"e55f3b1d5be1f3171992b22c3b7fa73acd94ad62","unresolved":false,"context_lines":[{"line_number":357,"context_line":""},{"line_number":358,"context_line":"There are two options for where the diff is computed: Cyborg agent or"},{"line_number":359,"context_line":"the Cyborg conductor. These options were debated in the community"},{"line_number":360,"context_line":"[#DiffThread]_. In short, if the agent were to do the diff, it would have"},{"line_number":361,"context_line":"to keep a copy of the previous configuration. That would not only be a"},{"line_number":362,"context_line":"duplicate copy of the database entries, but may also get lost when the"},{"line_number":363,"context_line":"agent restarts or the compute node reboots. So, the conductor must do"},{"line_number":364,"context_line":"the diff."},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"To prevent the conductor from becoming a bottleneck, the agent can optimize"},{"line_number":367,"context_line":"by pre-computing the diff if possible, and marking the components as added,"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3f79a3b5_ebed80b7","line":364,"range":{"start_line":360,"start_character":16,"end_line":364,"end_character":9},"updated":"2018-08-21 11:15:26.000000000","message":"Does conductor retrieve data from DB every time it do the diff? If so, the agent could also retrieve data from DB every time before do the diff.","commit_id":"7fe4fb84e98f175ab952fe3496d7ee3418633e88"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"68f811439dceeecee91a5590d8b515317ef15b9c","unresolved":false,"context_lines":[{"line_number":357,"context_line":""},{"line_number":358,"context_line":"There are two options for where the diff is computed: Cyborg agent or"},{"line_number":359,"context_line":"the Cyborg conductor. These options were debated in the community"},{"line_number":360,"context_line":"[#DiffThread]_. In short, if the agent were to do the diff, it would have"},{"line_number":361,"context_line":"to keep a copy of the previous configuration. That would not only be a"},{"line_number":362,"context_line":"duplicate copy of the database entries, but may also get lost when the"},{"line_number":363,"context_line":"agent restarts or the compute node reboots. So, the conductor must do"},{"line_number":364,"context_line":"the diff."},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"To prevent the conductor from becoming a bottleneck, the agent can optimize"},{"line_number":367,"context_line":"by pre-computing the diff if possible, and marking the components as added,"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3f79a3b5_d29e1e06","line":364,"range":{"start_line":360,"start_character":16,"end_line":364,"end_character":9},"in_reply_to":"3f79a3b5_0eb1ea8f","updated":"2018-08-22 02:45:23.000000000","message":"Xinran: Yes, this is also doable. But there are some things to consider. First, what if we need to read-modify-write of some db fields? A conductor can do a db transaction to make that atomic. But, if the agent reads and the conductor writes, we can\u0027t do that. (The agents should not write to the db; only the conductor must write, to keep consistency. I think other projects follow this too.)\n\nSecond, in your scheme, the conductor expects the agent to send a diff (a delta from previous config). IMHO, delta-based schemes are not as robust against failures and races. E.g.:\nWhat if the conductor has not finished persisting an update in the db before the agent reads the db again?\n\nHonestly, I think we may have to implement something and improve it over time. IMHO, it is better to do something simple and optimize it later. The simplest solution would be:\n* The agent just sends the full data (no local copies or diff)\n* The conductor does the diff and updates the db.\n\nwangzhh: Yes, but we can choose not to do any local copy or agent diff until we detect scaling issues.","commit_id":"7fe4fb84e98f175ab952fe3496d7ee3418633e88"},{"author":{"_account_id":17813,"name":"wangzhh","email":"wzh_1993@126.com","username":"wangzhh"},"change_message_id":"5c5cd01c5075550cb6ff221e99c92ddb9cd1a4ef","unresolved":false,"context_lines":[{"line_number":357,"context_line":""},{"line_number":358,"context_line":"There are two options for where the diff is computed: Cyborg agent or"},{"line_number":359,"context_line":"the Cyborg conductor. These options were debated in the community"},{"line_number":360,"context_line":"[#DiffThread]_. In short, if the agent were to do the diff, it would have"},{"line_number":361,"context_line":"to keep a copy of the previous configuration. That would not only be a"},{"line_number":362,"context_line":"duplicate copy of the database entries, but may also get lost when the"},{"line_number":363,"context_line":"agent restarts or the compute node reboots. So, the conductor must do"},{"line_number":364,"context_line":"the diff."},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"To prevent the conductor from becoming a bottleneck, the agent can optimize"},{"line_number":367,"context_line":"by pre-computing the diff if possible, and marking the components as added,"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3f79a3b5_0eb1ea8f","line":364,"range":{"start_line":360,"start_character":16,"end_line":364,"end_character":9},"in_reply_to":"3f79a3b5_ebed80b7","updated":"2018-08-21 14:30:54.000000000","message":"Hi Xinran,\nI think sundar means that we should use cache when we do the diff. So we needn\u0027t retrieve data from DB every time, just once when we start agent.","commit_id":"7fe4fb84e98f175ab952fe3496d7ee3418633e88"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"e604da9713466d3879a8eb1b76f619969f142b54","unresolved":false,"context_lines":[{"line_number":8,"context_line":"Cyborg Accelerator Discovery"},{"line_number":9,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Cyborg\u0027s process of discovering devices and publishing them to Nova"},{"line_number":12,"context_line":"Placement has many components. The main components are these:"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"* The Cyborg agent needs to locate all Cyborg drivers on the compute node."}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_90577e27","line":11,"range":{"start_line":11,"start_character":63,"end_line":11,"end_character":67},"updated":"2018-08-30 08:41:50.000000000","message":"delete.\n\nplacement is a seperate service.\nits code is hosted in the nova repo but its not the\nnova placement api its just the placement api.","commit_id":"6c11078b85ef06a7a99a3c2f2cb278c310973812"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"e604da9713466d3879a8eb1b76f619969f142b54","unresolved":false,"context_lines":[{"line_number":9,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Cyborg\u0027s process of discovering devices and publishing them to Nova"},{"line_number":12,"context_line":"Placement has many components. The main components are these:"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"* The Cyborg agent needs to locate all Cyborg drivers on the compute node."},{"line_number":15,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_b0295a9c","line":12,"range":{"start_line":12,"start_character":9,"end_line":12,"end_character":18},"updated":"2018-08-30 08:41:50.000000000","message":"involves several","commit_id":"6c11078b85ef06a7a99a3c2f2cb278c310973812"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"e604da9713466d3879a8eb1b76f619969f142b54","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Cyborg\u0027s process of discovering devices and publishing them to Nova"},{"line_number":12,"context_line":"Placement has many components. The main components are these:"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"* The Cyborg agent needs to locate all Cyborg drivers on the compute node."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"* The Cyborg agent must then call those drivers to"},{"line_number":17,"context_line":"  discover devices and their properties. This needs to be done periodically"},{"line_number":18,"context_line":"  since devices may be added or deleted by the operator, or devices"},{"line_number":19,"context_line":"  may become unhealthy."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"* The driver needs to represent the topology of each device in a data"},{"line_number":22,"context_line":"  structure returned to the agent."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"* The Cyborg agent must then report the discovered devices and their"},{"line_number":25,"context_line":"  properties to the Cyborg conductor to be persisted."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"* The Cyborg agent or conductor then updates Placement."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"This spec defines how each of these tasks are done. It subsumes the Cyborg"},{"line_number":30,"context_line":"Driver/API Specification [#CyborgDriverAPI]_ and is complementary to the"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_f0acb236","line":27,"range":{"start_line":13,"start_character":0,"end_line":27,"end_character":55},"updated":"2018-08-30 08:41:50.000000000","message":"you are not listing the componets here you are discribing the work flow. i would delete this section and replace as follows:\n\n* The cyborg agent\n* Agent drivers\n* The cyborg conductor\n* The placement API\n\ndiscribing the workflow before stating the intent id distracting and assumes knowlage on behalf of the reviewer.","commit_id":"6c11078b85ef06a7a99a3c2f2cb278c310973812"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"a3f89c215c6c5fd8edfa617d9f9cf84ebf7bd460","unresolved":false,"context_lines":[{"line_number":25,"context_line":"  properties to the Cyborg conductor to be persisted."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"* The Cyborg agent or conductor then updates Placement."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"This spec defines how each of these tasks are done. It subsumes the Cyborg"},{"line_number":30,"context_line":"Driver/API Specification [#CyborgDriverAPI]_ and is complementary to the"},{"line_number":31,"context_line":"Cyborg/Nova Scheduling Specification [#CyborgNova_Sched]_."}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_b71165b2","line":28,"updated":"2018-08-29 15:15:16.000000000","message":"How do we deal with whitelisting? That is, not all devices ought to be schedulable; and it would be better if those never showed up in placement than if they had to be e.g. filtered out after GET /allocation_candidates.\n\nPerhaps it is up to the individual driver to define a whitelisting mechanism that its discover() method will use to report-or-not-report a particular device for cyborg to stuff into placement? If so, I wonder if it might be nice to try to standardize that mechanism, despite the fact that it would be up to the individual drivers to enact it.","commit_id":"6c11078b85ef06a7a99a3c2f2cb278c310973812"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"63827cf1e111519031bb98bb8ac5b1f9048644c6","unresolved":false,"context_lines":[{"line_number":25,"context_line":"  properties to the Cyborg conductor to be persisted."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"* The Cyborg agent or conductor then updates Placement."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"This spec defines how each of these tasks are done. It subsumes the Cyborg"},{"line_number":30,"context_line":"Driver/API Specification [#CyborgDriverAPI]_ and is complementary to the"},{"line_number":31,"context_line":"Cyborg/Nova Scheduling Specification [#CyborgNova_Sched]_."}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_c71f8c59","line":28,"in_reply_to":"3f79a3b5_726afbed","updated":"2018-08-29 19:35:14.000000000","message":"That\u0027s an interesting idea. A concern would be the manual-ness of that process. I don\u0027t know for sure, but I suspect operators might rather do it with a config file, e.g. so it could persist across reinstalls. But this is a good starting point, thanks.","commit_id":"6c11078b85ef06a7a99a3c2f2cb278c310973812"},{"author":{"_account_id":17813,"name":"wangzhh","email":"wzh_1993@126.com","username":"wangzhh"},"change_message_id":"564e13e396add37db29885036c9cfcee684a2071","unresolved":false,"context_lines":[{"line_number":25,"context_line":"  properties to the Cyborg conductor to be persisted."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"* The Cyborg agent or conductor then updates Placement."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"This spec defines how each of these tasks are done. It subsumes the Cyborg"},{"line_number":30,"context_line":"Driver/API Specification [#CyborgDriverAPI]_ and is complementary to the"},{"line_number":31,"context_line":"Cyborg/Nova Scheduling Specification [#CyborgNova_Sched]_."}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_726afbed","line":28,"in_reply_to":"3f79a3b5_b71165b2","updated":"2018-08-29 15:57:08.000000000","message":"Hi Eric,\nThere is an \u0027assignable\u0027 in deployable. \nI suggest that:\nWhen a deployable discovered by driver, the \u0027assignable\u0027 default to False. Then the user(admin or other operator) update the deployable via cyborg-api(update assignable in this case).\nAnd the report loop only report the devices(deployables) whose assignable\u003dTrue.","commit_id":"6c11078b85ef06a7a99a3c2f2cb278c310973812"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"e604da9713466d3879a8eb1b76f619969f142b54","unresolved":false,"context_lines":[{"line_number":25,"context_line":"  properties to the Cyborg conductor to be persisted."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"* The Cyborg agent or conductor then updates Placement."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"This spec defines how each of these tasks are done. It subsumes the Cyborg"},{"line_number":30,"context_line":"Driver/API Specification [#CyborgDriverAPI]_ and is complementary to the"},{"line_number":31,"context_line":"Cyborg/Nova Scheduling Specification [#CyborgNova_Sched]_."}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_f3927c9f","line":28,"in_reply_to":"3f79a3b5_c71f8c59","updated":"2018-08-30 08:41:50.000000000","message":"i would agree with eric on this point. i think this will be highly tedious to manage on a large scale. we have been discosing a proposal to intoduce a yaml file to descibe what pci device can be whitelisted as part of modeling pci devices in placement. i think a similar approch might be useful here.\n\nin either case i would like to see this specically detail in another revision of this spec.","commit_id":"6c11078b85ef06a7a99a3c2f2cb278c310973812"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"e604da9713466d3879a8eb1b76f619969f142b54","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"* The Cyborg agent or conductor then updates Placement."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"This spec defines how each of these tasks are done. It subsumes the Cyborg"},{"line_number":30,"context_line":"Driver/API Specification [#CyborgDriverAPI]_ and is complementary to the"},{"line_number":31,"context_line":"Cyborg/Nova Scheduling Specification [#CyborgNova_Sched]_."},{"line_number":32,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_93eea8eb","line":29,"range":{"start_line":29,"start_character":0,"end_line":29,"end_character":51},"updated":"2018-08-30 08:41:50.000000000","message":"This spec defines how each of these components will interact to enable device discovery and reporting.","commit_id":"6c11078b85ef06a7a99a3c2f2cb278c310973812"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"e604da9713466d3879a8eb1b76f619969f142b54","unresolved":false,"context_lines":[{"line_number":35,"context_line":"be considered than other devices, some sections may focus on FPGA-specific"},{"line_number":36,"context_line":"factors. The spec calls out the FPGA-specific aspects."},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"This spec assumes that each accelerator is connected to a specific compute"},{"line_number":39,"context_line":"node. The case of disaggregated servers (a.k.a. composable architectures,"},{"line_number":40,"context_line":"like Intel Rack Scale Design), where the accelerators reside in separate"},{"line_number":41,"context_line":"pools and are connected to compute nodes as needed, will be taken up at a"},{"line_number":42,"context_line":"later stage."},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"This spec also does not consider devices with complex topologies, such as"},{"line_number":45,"context_line":"ones with multiple GPUs or FPGAs in a single PCIe board sharing board-"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_13337864","line":42,"range":{"start_line":38,"start_character":0,"end_line":42,"end_character":12},"updated":"2018-08-30 08:41:50.000000000","message":"i would see that as a special case of the general.\n\nwith some hyperviors you will not be able to run a cyborg agent on the hypervior node directly and will instead have to\ninteract with the hyperviors rest api to prefrom discovery. this is the same as interacting with the podm api in  the rsd case.\n\nif you declare RSD out of scope of this spec you should aslo declare powervm,vsphere,hyperv and possibly xen out of scope also and state this spec only covers the case where where a cyborg agent can be run on the hypervior host suchs as libvirt/kvm on linux.\n\ni think it would be much more preferable to include discovery via the hypervior api in this spec so we can support powervm and others.","commit_id":"6c11078b85ef06a7a99a3c2f2cb278c310973812"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"e604da9713466d3879a8eb1b76f619969f142b54","unresolved":false,"context_lines":[{"line_number":41,"context_line":"pools and are connected to compute nodes as needed, will be taken up at a"},{"line_number":42,"context_line":"later stage."},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"This spec also does not consider devices with complex topologies, such as"},{"line_number":45,"context_line":"ones with multiple GPUs or FPGAs in a single PCIe board sharing board-"},{"line_number":46,"context_line":"level resources like local memory."},{"line_number":47,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_d392e058","line":44,"range":{"start_line":44,"start_character":10,"end_line":44,"end_character":14},"updated":"2018-08-30 08:41:50.000000000","message":"delete","commit_id":"6c11078b85ef06a7a99a3c2f2cb278c310973812"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"e604da9713466d3879a8eb1b76f619969f142b54","unresolved":false,"context_lines":[{"line_number":50,"context_line":""},{"line_number":51,"context_line":"The Cyborg agent shall load the drivers using stevedore\u0027s"},{"line_number":52,"context_line":"`ExtensionManager` ([#extmgr]_). The drivers shall use the name space"},{"line_number":53,"context_line":"`cyborg`. As mentioned in the os-acc spec [#os-acc]_, the os-acc will also"},{"line_number":54,"context_line":"load Cyborg drivers, and that will be based on the same name space as well."},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"The list of drivers that need to be loaded will be specified in Cyborg\u0027s"},{"line_number":57,"context_line":"`setup.cfg` file."}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_73650c45","line":54,"range":{"start_line":53,"start_character":10,"end_line":54,"end_character":75},"updated":"2018-08-30 08:41:50.000000000","message":"why is os-acc relevent here.\n\nif you update the os-acc spec with my suggestion that cyborg should consider not interacting with placement directly and instead should provide an inventory_devices api which the nova virt driver invokes form update_provider_tree then fine os-acc should be mentioned. if however cyborg will be creating the placemnet invetories iteslf then you should remove all referneces to os-acc from this spec as it will not be involed in device discovery or reporting.","commit_id":"6c11078b85ef06a7a99a3c2f2cb278c310973812"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"e604da9713466d3879a8eb1b76f619969f142b54","unresolved":false,"context_lines":[{"line_number":58,"context_line":""},{"line_number":59,"context_line":"To discover new drivers, stop using existing drivers, or to handle driver"},{"line_number":60,"context_line":"updates on a compute node, the operator shall update the `setup.cfg` file"},{"line_number":61,"context_line":"on that node and restart the Cyborg agent."},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"Agent - Driver Interaction"},{"line_number":64,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\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":3,"id":"3f79a3b5_53eed08b","line":61,"range":{"start_line":61,"start_character":13,"end_line":61,"end_character":42},"updated":"2018-08-30 08:41:50.000000000","message":"may other projects have made it a goal to start supporting mutable config where by a sig_hup can be send by the admin to rquest a service to reload its config after they have updated it. i think it would be a mistake for cyborg to not support mutable config for this senarior and would suggest that in future mutable config should be assumed in design by default as it is much harder to add later. that way cyborg and learn from the experices of older project and bake in mutable config upfront while it is still young.","commit_id":"6c11078b85ef06a7a99a3c2f2cb278c310973812"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"e604da9713466d3879a8eb1b76f619969f142b54","unresolved":false,"context_lines":[{"line_number":69,"context_line":"periodically thereafter, to handle devices that have been dynamically added,"},{"line_number":70,"context_line":"deleted or otherwise changed."},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"When os-acc invokes a Cyborg driver to attach an accelerator to a VM, the"},{"line_number":73,"context_line":"device configuration by the driver may change the traits and even the"},{"line_number":74,"context_line":"accelerator inventory of the device. For example, a vGPU type change or"},{"line_number":75,"context_line":"FPGA programming may cause such changes. These changes need to be reflected"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_d38660bb","line":72,"range":{"start_line":72,"start_character":0,"end_line":72,"end_character":68},"updated":"2018-08-30 08:41:50.000000000","message":"the attachment will be done by nova not cyborg.\nthe allocation of the device and attaching the device side of the acclartor to the VF or VAN will happen in cyborge but the attachment to the vm will be prefromed by the hypervisor/virt driver outside of cyborgs contol.\n\nplease rephase this as.\n\nwhen a device is allocated,","commit_id":"6c11078b85ef06a7a99a3c2f2cb278c310973812"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"e604da9713466d3879a8eb1b76f619969f142b54","unresolved":false,"context_lines":[{"line_number":70,"context_line":"deleted or otherwise changed."},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"When os-acc invokes a Cyborg driver to attach an accelerator to a VM, the"},{"line_number":73,"context_line":"device configuration by the driver may change the traits and even the"},{"line_number":74,"context_line":"accelerator inventory of the device. For example, a vGPU type change or"},{"line_number":75,"context_line":"FPGA programming may cause such changes. These changes need to be reflected"},{"line_number":76,"context_line":"in Placement. One way to do that is to wait for the next periodic update"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_53bc906b","line":73,"range":{"start_line":73,"start_character":21,"end_line":73,"end_character":45},"updated":"2018-08-30 08:41:50.000000000","message":"may be changed by the driver, as a result","commit_id":"6c11078b85ef06a7a99a3c2f2cb278c310973812"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"e604da9713466d3879a8eb1b76f619969f142b54","unresolved":false,"context_lines":[{"line_number":70,"context_line":"deleted or otherwise changed."},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"When os-acc invokes a Cyborg driver to attach an accelerator to a VM, the"},{"line_number":73,"context_line":"device configuration by the driver may change the traits and even the"},{"line_number":74,"context_line":"accelerator inventory of the device. For example, a vGPU type change or"},{"line_number":75,"context_line":"FPGA programming may cause such changes. These changes need to be reflected"},{"line_number":76,"context_line":"in Placement. One way to do that is to wait for the next periodic update"},{"line_number":77,"context_line":"by the Cyborg agent. But this results in a time window in which the"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_532fb0a6","line":74,"range":{"start_line":73,"start_character":56,"end_line":74,"end_character":35},"updated":"2018-08-30 08:41:50.000000000","message":"fyi you will not be able to chage the inventory in placment on an attach/allocate.\n\nat this point the placemnt invetory would have an allocation against it for the instace against the speific inventores of the resouce provider. to change the invetoreies at the point of attachmet/allocation in cyborg would break the placemnt allocation for that instance.\n\nif you are refining to an internal cyborg inventory stored in the cyborg db the you can update the inventory recored if that makes sense.\n\nnot that updateing tratis may also break placement allocation if you remove traits which would mean a rebuild or posibly even a hard reboot of the instance would fail in the future. as such we should not plan to change invetores or traits in plamcement once a resource provider has an allocation against it.","commit_id":"6c11078b85ef06a7a99a3c2f2cb278c310973812"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"e604da9713466d3879a8eb1b76f619969f142b54","unresolved":false,"context_lines":[{"line_number":72,"context_line":"When os-acc invokes a Cyborg driver to attach an accelerator to a VM, the"},{"line_number":73,"context_line":"device configuration by the driver may change the traits and even the"},{"line_number":74,"context_line":"accelerator inventory of the device. For example, a vGPU type change or"},{"line_number":75,"context_line":"FPGA programming may cause such changes. These changes need to be reflected"},{"line_number":76,"context_line":"in Placement. One way to do that is to wait for the next periodic update"},{"line_number":77,"context_line":"by the Cyborg agent. But this results in a time window in which the"},{"line_number":78,"context_line":"Placement data is out of date, which may result in mis-scheduling."},{"line_number":79,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_b302c40a","line":76,"range":{"start_line":75,"start_character":42,"end_line":76,"end_character":13},"updated":"2018-08-30 08:41:50.000000000","message":"as i said above in genreal i would say they should not be reflected in placement unless you can prove that would not invalidate the allocation agaist the resouce provider created by nova. cyborge may not update an alloation it did not create eiter so you cannot change the invetory by modifying the allocation record created by nova.","commit_id":"6c11078b85ef06a7a99a3c2f2cb278c310973812"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"e604da9713466d3879a8eb1b76f619969f142b54","unresolved":false,"context_lines":[{"line_number":74,"context_line":"accelerator inventory of the device. For example, a vGPU type change or"},{"line_number":75,"context_line":"FPGA programming may cause such changes. These changes need to be reflected"},{"line_number":76,"context_line":"in Placement. One way to do that is to wait for the next periodic update"},{"line_number":77,"context_line":"by the Cyborg agent. But this results in a time window in which the"},{"line_number":78,"context_line":"Placement data is out of date, which may result in mis-scheduling."},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"To prevent that problem, there should be a way to trigger Cyborg agent via"},{"line_number":81,"context_line":"RPC API to query a specific driver. This should be done by the Cyborg"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_9e8c6f80","line":78,"range":{"start_line":77,"start_character":21,"end_line":78,"end_character":66},"updated":"2018-08-30 08:41:50.000000000","message":"i think this is a missunderstaind of how placement is intended to work. if the modifcation to the invetory is as a result of an attachment then nova has already claimed resouces against that invtory so it would be invalid for cyborg to modify it by for example removing the inventory of the unprogramed fpga resouce class and replacing it with an invetory of the programmed FPGA resouce class corresponding to the function provied by the bitstream. \n\nyou could add an addtional inventory corresponding to the fpga bitsream capablites e.g. transcoding_bandwidth however\nsince the current model discussed for consuming acclerators via nova states that the flavor will contain a resouce_calls request for the FPGA device of a region of that device + bitstream uuid that imples the fpga resouces is dedicated to a singel tenant instaces. as such there transcoding_bandwith is not a consumable resouce that others can use so it should not be modeled in placement.\n\nwe also should not be only claiming the device region by the flavor and then seperately claiming device memory for exampels or device VFs dynamically later on attach as that violates the goal of moveing all resouce claimes to the schduler going forward so that we can never race or fail late in the vm boot because we landed on a node that did not have the resouces we needed.","commit_id":"6c11078b85ef06a7a99a3c2f2cb278c310973812"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"e604da9713466d3879a8eb1b76f619969f142b54","unresolved":false,"context_lines":[{"line_number":77,"context_line":"by the Cyborg agent. But this results in a time window in which the"},{"line_number":78,"context_line":"Placement data is out of date, which may result in mis-scheduling."},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"To prevent that problem, there should be a way to trigger Cyborg agent via"},{"line_number":81,"context_line":"RPC API to query a specific driver. This should be done by the Cyborg"},{"line_number":82,"context_line":"driver itself, after it does the programming when called by os-acc, using"},{"line_number":83,"context_line":"common utility functions provided by Cyborg. More specifically, the"},{"line_number":84,"context_line":"Cyborg agent must provide an RPC API like this::"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"   def trigger_poll(driver_name):"},{"line_number":87,"context_line":"      # drivers[] is a list of loaded drivers"},{"line_number":88,"context_line":"      found \u003d  False"},{"line_number":89,"context_line":"      for d in drivers[]:"},{"line_number":90,"context_line":"         if d.name \u003d\u003d driver_name:"},{"line_number":91,"context_line":"            found \u003d True"},{"line_number":92,"context_line":"            # ... call d.discover()"},{"line_number":93,"context_line":"      if not found:"},{"line_number":94,"context_line":"         # ... error ..."},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"Cyborg shall provide a utility function for its drivers to invoke the agent."},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"It is possible for the agent to invoke the Cyborg driver before the os-acc\u0027s"},{"line_number":99,"context_line":"call to the same driver has completed. So, drivers must be reentrant."},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"Device Representation and Topologies"},{"line_number":102,"context_line":"------------------------------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_9ee1cf2d","line":99,"range":{"start_line":80,"start_character":0,"end_line":99,"end_character":69},"updated":"2018-08-30 08:41:50.000000000","message":"i dont think this is a usecase that should be allowed to happen in the first place. also i dont think this is germain to this spec. this entire section is refing to allocation/attachment where as the spec is state to address discovery. i think this should be removed.","commit_id":"6c11078b85ef06a7a99a3c2f2cb278c310973812"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"e604da9713466d3879a8eb1b76f619969f142b54","unresolved":false,"context_lines":[{"line_number":106,"context_line":""},{"line_number":107,"context_line":"Cyborg aims to be agnostic of specific system architectures like x86 and"},{"line_number":108,"context_line":"Power. In x86 servers, PCI devices are usually identified as Bus-Device-"},{"line_number":109,"context_line":"Function (BDFs), possibly prepended with a PCI slot number. However, other"},{"line_number":110,"context_line":"architectures may not follow that. For example, Power identifies devices"},{"line_number":111,"context_line":"using Location Codes, DRC Index, DRC names, etc. ([#PowerDevices]_). To"},{"line_number":112,"context_line":"support this diversity, the Cyborg device representation should include"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_1e44df1a","line":109,"range":{"start_line":109,"start_character":43,"end_line":109,"end_character":58},"updated":"2018-08-30 08:41:50.000000000","message":"its prepened with a pci domain not a slot number.","commit_id":"6c11078b85ef06a7a99a3c2f2cb278c310973812"},{"author":{"_account_id":25738,"name":"Xinran WANG","email":"xin-ran.wang@intel.com","username":"Xinran"},"change_message_id":"5e41668ec6de126a60d09111f64edaf13d609a0c","unresolved":false,"context_lines":[{"line_number":119,"context_line":"* Attach handles to connect them to VMs. E.g. PCI BDFs or mediated"},{"line_number":120,"context_line":"  device UUIDs."},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"They need not be the same. For example, a device may be identified as a"},{"line_number":123,"context_line":"PCI function but attached to a VM as a mediated device. Neither the"},{"line_number":124,"context_line":"identifier nor the attach handle needs to be a PCI function."},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"To support non-PCI devices, and to relate better to Placement, the Cyborg"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_0b138ab2","line":123,"range":{"start_line":122,"start_character":39,"end_line":123,"end_character":55},"updated":"2018-11-28 09:31:54.000000000","message":"could you plz give an example?","commit_id":"6c11078b85ef06a7a99a3c2f2cb278c310973812"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"a3f89c215c6c5fd8edfa617d9f9cf84ebf7bd460","unresolved":false,"context_lines":[{"line_number":135,"context_line":"    \u003cdevice-id\u003e"},{"line_number":136,"context_line":"    \u003cnum-accelerators, if any\u003e"},{"line_number":137,"context_line":"    \u003cattach-handles, if any\u003e"},{"line_number":138,"context_line":"    \u003ccustom traits, if any\u003e"},{"line_number":139,"context_line":"    \u003ctimestamps: created, last-modified\u003e"},{"line_number":140,"context_line":"    \u003cstatus (optional): unchanged/added/deleted/changed\u003e"},{"line_number":141,"context_line":"    ["}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_3753156f","line":138,"range":{"start_line":138,"start_character":4,"end_line":138,"end_character":27},"updated":"2018-08-29 15:15:16.000000000","message":"Cool, where do these come from? Are they just the ones discussed below (L225-239)? The operator needs a mechanism to specify custom traits on a device RP; how is that supported? Possibilities include:\n\n- Direct update of placement (i.e. REST or osc-placement CLI)\n- Some kind of config - perhaps the same one doing the whitelisting\n\nIn any case, there needs to be reconciliation of trait \"ownership\" - i.e. cyborg needs to be able to recognize when the operator has added a trait that\u0027s supposed to be under its (cyborg\u0027s) purview but is not legit, and remove that trait.","commit_id":"6c11078b85ef06a7a99a3c2f2cb278c310973812"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"e604da9713466d3879a8eb1b76f619969f142b54","unresolved":false,"context_lines":[{"line_number":135,"context_line":"    \u003cdevice-id\u003e"},{"line_number":136,"context_line":"    \u003cnum-accelerators, if any\u003e"},{"line_number":137,"context_line":"    \u003cattach-handles, if any\u003e"},{"line_number":138,"context_line":"    \u003ccustom traits, if any\u003e"},{"line_number":139,"context_line":"    \u003ctimestamps: created, last-modified\u003e"},{"line_number":140,"context_line":"    \u003cstatus (optional): unchanged/added/deleted/changed\u003e"},{"line_number":141,"context_line":"    ["}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_def3c7e6","line":138,"range":{"start_line":138,"start_character":4,"end_line":138,"end_character":27},"in_reply_to":"3f79a3b5_3753156f","updated":"2018-08-30 08:41:50.000000000","message":"for programed devices some bitstream format have teh ability to packages what are effectivly feature flags, and if the bitstream was store in glance the we could have traits stored in the image metadata.\n\nfor no programed devcies the base bitstream/firmware immage often reports featrues via pci config space registers listabel via lspci or other tools and fpga vendors also provide some ways to list info about the fpga via there own tools.","commit_id":"6c11078b85ef06a7a99a3c2f2cb278c310973812"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"e604da9713466d3879a8eb1b76f619969f142b54","unresolved":false,"context_lines":[{"line_number":159,"context_line":"The top level component for the device is represented as an RP, nested"},{"line_number":160,"context_line":"within the compute node RP. In addition, each sub-component is"},{"line_number":161,"context_line":"represented as a nested RP. The accelerators in each component are"},{"line_number":162,"context_line":"represented as instances of an RC built from the device type."},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"Note that the device ID and attach handles are abstracted. For SR-IOV"},{"line_number":165,"context_line":"devices in x86, the device-id would be the PF while the attach handles"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_feda4349","line":162,"range":{"start_line":162,"start_character":15,"end_line":162,"end_character":33},"updated":"2018-08-30 08:41:50.000000000","message":"which would map to a placement invetory.","commit_id":"6c11078b85ef06a7a99a3c2f2cb278c310973812"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"e604da9713466d3879a8eb1b76f619969f142b54","unresolved":false,"context_lines":[{"line_number":175,"context_line":"        { \u0027address\u0027: \u00270000:5e:01:0\u0027"},{"line_number":176,"context_line":"        }"},{"line_number":177,"context_line":"    \u0027num_accelerators\u0027: \u00272\u0027"},{"line_number":178,"context_line":"    \u0027attach-handles\u0027: [ # Python objects of type DeviceIdPCI"},{"line_number":179,"context_line":"        { \u0027address\u0027: \u00270000:5e:01:1\u0027"},{"line_number":180,"context_line":"        },"},{"line_number":181,"context_line":"        { \u0027address\u0027: \u00270000:5e:01:2\u0027"},{"line_number":182,"context_line":"        },"},{"line_number":183,"context_line":"    ]"},{"line_number":184,"context_line":"    \u0027custom-traits\u0027: [ \u0027CUSTOM_FOO_TRAIT\u0027 ]"},{"line_number":185,"context_line":"    \u0027created-time\u0027: \u00271720771.681359\u0027"},{"line_number":186,"context_line":"    \u0027components\u0027: [] # there are no sub-components"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_3e88bb20","line":183,"range":{"start_line":178,"start_character":4,"end_line":183,"end_character":5},"updated":"2018-08-30 08:41:50.000000000","message":"so in this case the attachment handels are the VF exposed by the gpu which should correspond to a Resocues class and an inventory of that resouces class assocated with the Resouce provider for phyical parent gpu.\n\ni dont see where you are storing the resouce class info for the attachment handels.\n\nthe inveotry uuid for the attachment handels or the resouce provider uuid for the parent device.\n\ncan you update this with the relevent info.\n\nthese deatils are import to capture in the spec and not to let them be decided later in the implmentation.","commit_id":"6c11078b85ef06a7a99a3c2f2cb278c310973812"},{"author":{"_account_id":25738,"name":"Xinran WANG","email":"xin-ran.wang@intel.com","username":"Xinran"},"change_message_id":"5e41668ec6de126a60d09111f64edaf13d609a0c","unresolved":false,"context_lines":[{"line_number":194,"context_line":"        { \u0027address\u0027: \u00270000:5e:01:0\u0027"},{"line_number":195,"context_line":"        }"},{"line_number":196,"context_line":"    \u0027attach-handles\u0027: [ # Python objects of type DeviceIdPCI"},{"line_number":197,"context_line":"        { \u0027address\u0027: \u00270000:5e:01:1\u0027"},{"line_number":198,"context_line":"        },"},{"line_number":199,"context_line":"        { \u0027address\u0027: \u00270000:5e:01:2\u0027"},{"line_number":200,"context_line":"        },"},{"line_number":201,"context_line":"    ]"},{"line_number":202,"context_line":"    \u0027components\u0027: [ # FPGA region"},{"line_number":203,"context_line":"        {"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_867d4f1e","line":200,"range":{"start_line":197,"start_character":0,"end_line":200,"end_character":10},"updated":"2018-11-28 09:31:54.000000000","message":"these attach handles are PF, are they assignable? why don\u0027t put them into deployables list?","commit_id":"6c11078b85ef06a7a99a3c2f2cb278c310973812"},{"author":{"_account_id":25738,"name":"Xinran WANG","email":"xin-ran.wang@intel.com","username":"Xinran"},"change_message_id":"5e41668ec6de126a60d09111f64edaf13d609a0c","unresolved":false,"context_lines":[{"line_number":199,"context_line":"        { \u0027address\u0027: \u00270000:5e:01:2\u0027"},{"line_number":200,"context_line":"        },"},{"line_number":201,"context_line":"    ]"},{"line_number":202,"context_line":"    \u0027components\u0027: [ # FPGA region"},{"line_number":203,"context_line":"        {"},{"line_number":204,"context_line":"           \u0027num_accelerators\u0027: \u00272\u0027 # this region has 2 accelerators"},{"line_number":205,"context_line":"           \u0027region-type\u0027: uuid-R"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_46989765","line":202,"range":{"start_line":202,"start_character":5,"end_line":202,"end_character":17},"updated":"2018-11-28 09:31:54.000000000","message":"I wonder if the components here is the same as deployables in this doc https://docs.google.com/document/d/1XLQtvyGJeEgo3ztBQiufWLF-E7S7yGLaYrme8iUPtA0/edit#heading\u003dh.g0ztngbdbejh. If so, there should be attach handles in this list. \nAnd is there any field to store the resource class in this object?","commit_id":"6c11078b85ef06a7a99a3c2f2cb278c310973812"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"e604da9713466d3879a8eb1b76f619969f142b54","unresolved":false,"context_lines":[{"line_number":218,"context_line":"  sub-components, as with the GPU example above. For FPGAs with regions,"},{"line_number":219,"context_line":"  the sub-component representing a region provides the accelerators."},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"* Each component is represented as an RP. But only components that have"},{"line_number":222,"context_line":"  non-zero accelerators need to have traits published. Only they would be"},{"line_number":223,"context_line":"  treated as \u0027assignable\u0027 Deployables in Cyborg."},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"* The main traits that the Cyborg agent needs to publish are defined in"},{"line_number":226,"context_line":"  the Cyborg/Nova scheduling spec [#CyborgNova_Sched]_. They are derived"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_fe96c33e","line":223,"range":{"start_line":221,"start_character":2,"end_line":223,"end_character":48},"updated":"2018-08-30 08:41:50.000000000","message":"that implies that you will etither model devices which cant be subdevied as having 1 accleartor you you will not support them at all. e.g. how would i model a GPU where i do not want to subdevied but just want to passthough the entire device.\n\nalso i would argue that if the device is not assignable by cyborg we should not create an invtory/resouce provider for it.","commit_id":"6c11078b85ef06a7a99a3c2f2cb278c310973812"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"e604da9713466d3879a8eb1b76f619969f142b54","unresolved":false,"context_lines":[{"line_number":227,"context_line":"  as below:"},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"  * Device Type trait is built as `CUSTOM_\u003cDeviceType\u003e_\u003cVendor\u003e`."},{"line_number":230,"context_line":"    E.g. `CUSTOM_GPU_AMD`."},{"line_number":231,"context_line":"  * Region type trait for FPGAs is built as"},{"line_number":232,"context_line":"    `CUSTOM_FPGA_REGION_\u003cvendor\u003e_\u003cuuid\u003e`. E.g."},{"line_number":233,"context_line":"    `CUSTOM_FPGA_REGION_INTEL_\u003cuuid\u003e` with the UUID syntax modified to"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_3e12fbb5","line":230,"range":{"start_line":230,"start_character":10,"end_line":230,"end_character":24},"updated":"2018-08-30 08:41:50.000000000","message":"this could be a vaild trait but\nif you want to model a specific sku of an amd gpu that would be a resouces class not a trait.","commit_id":"6c11078b85ef06a7a99a3c2f2cb278c310973812"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"e604da9713466d3879a8eb1b76f619969f142b54","unresolved":false,"context_lines":[{"line_number":228,"context_line":""},{"line_number":229,"context_line":"  * Device Type trait is built as `CUSTOM_\u003cDeviceType\u003e_\u003cVendor\u003e`."},{"line_number":230,"context_line":"    E.g. `CUSTOM_GPU_AMD`."},{"line_number":231,"context_line":"  * Region type trait for FPGAs is built as"},{"line_number":232,"context_line":"    `CUSTOM_FPGA_REGION_\u003cvendor\u003e_\u003cuuid\u003e`. E.g."},{"line_number":233,"context_line":"    `CUSTOM_FPGA_REGION_INTEL_\u003cuuid\u003e` with the UUID syntax modified to"},{"line_number":234,"context_line":"    fit with trait syntax, as described in [#CyborgNova_Sched]_."},{"line_number":235,"context_line":"  * Function type trait for FPGAs is built as"},{"line_number":236,"context_line":"    `CUSTOM_FPGA_FUNCTION_\u003cvendor\u003e_\u003cuuid\u003e`. E.g."},{"line_number":237,"context_line":"    `CUSTOM_FPGA_FUNCTION_INTEL_\u003cuuid\u003e`."},{"line_number":238,"context_line":"  * Functionality traits, such as \u0027CUSTOM_FPGA_NETWORK\", are included as"},{"line_number":239,"context_line":"    custom traits in above structure."},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"* The resource class for all accelerators on the device would be derived"},{"line_number":242,"context_line":"  by the Cyborg agent as `CUSTOM_ACCELERATOR_\u003cDeviceType\u003e`. E.g."}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_7ef15395","line":239,"range":{"start_line":231,"start_character":2,"end_line":239,"end_character":37},"updated":"2018-08-30 08:41:50.000000000","message":"this feels like you are abusing traits to store metadata in placement.\n\nwhat vaild reaosn other then metadata storage can you provide to justify storing a uuid in placement as a trait?\n\nnote metadata storage is not a vaild reason to create a custom tratis. a uuid is not a capablity.\n\nif you need detaild metadata you should store that in the cyborg db using the resouce provider uuid and the inventory uuids as the key.","commit_id":"6c11078b85ef06a7a99a3c2f2cb278c310973812"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"a3f89c215c6c5fd8edfa617d9f9cf84ebf7bd460","unresolved":false,"context_lines":[{"line_number":239,"context_line":"    custom traits in above structure."},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"* The resource class for all accelerators on the device would be derived"},{"line_number":242,"context_line":"  by the Cyborg agent as `CUSTOM_ACCELERATOR_\u003cDeviceType\u003e`. E.g."},{"line_number":243,"context_line":"  `CUSTOM_ACCELERATOR_GPU`."},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"* For mediated devices, attach handles (UUIDs) are not static or a part of"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_17a61955","line":242,"range":{"start_line":242,"start_character":26,"end_line":242,"end_character":45},"updated":"2018-08-29 15:15:16.000000000","message":"we should be making standard resource classes for these, asap.","commit_id":"6c11078b85ef06a7a99a3c2f2cb278c310973812"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"e604da9713466d3879a8eb1b76f619969f142b54","unresolved":false,"context_lines":[{"line_number":239,"context_line":"    custom traits in above structure."},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"* The resource class for all accelerators on the device would be derived"},{"line_number":242,"context_line":"  by the Cyborg agent as `CUSTOM_ACCELERATOR_\u003cDeviceType\u003e`. E.g."},{"line_number":243,"context_line":"  `CUSTOM_ACCELERATOR_GPU`."},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"* For mediated devices, attach handles (UUIDs) are not static or a part of"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_1e5fff72","line":242,"range":{"start_line":242,"start_character":26,"end_line":242,"end_character":45},"in_reply_to":"3f79a3b5_17a61955","updated":"2018-08-30 08:41:50.000000000","message":"agree on this. that said cyborg may still need to do use custom resouce classes to model different skus if that is something we want to schedule on.","commit_id":"6c11078b85ef06a7a99a3c2f2cb278c310973812"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"a3f89c215c6c5fd8edfa617d9f9cf84ebf7bd460","unresolved":false,"context_lines":[{"line_number":240,"context_line":""},{"line_number":241,"context_line":"* The resource class for all accelerators on the device would be derived"},{"line_number":242,"context_line":"  by the Cyborg agent as `CUSTOM_ACCELERATOR_\u003cDeviceType\u003e`. E.g."},{"line_number":243,"context_line":"  `CUSTOM_ACCELERATOR_GPU`."},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"* For mediated devices, attach handles (UUIDs) are not static or a part of"},{"line_number":246,"context_line":"  the device, but dynamically created as needed. In such cases, the attach"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_97ba296c","line":243,"updated":"2018-08-29 15:15:16.000000000","message":"How does cyborg know what resource class to use? Does that information come from the driver?","commit_id":"6c11078b85ef06a7a99a3c2f2cb278c310973812"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"e604da9713466d3879a8eb1b76f619969f142b54","unresolved":false,"context_lines":[{"line_number":240,"context_line":""},{"line_number":241,"context_line":"* The resource class for all accelerators on the device would be derived"},{"line_number":242,"context_line":"  by the Cyborg agent as `CUSTOM_ACCELERATOR_\u003cDeviceType\u003e`. E.g."},{"line_number":243,"context_line":"  `CUSTOM_ACCELERATOR_GPU`."},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"* For mediated devices, attach handles (UUIDs) are not static or a part of"},{"line_number":246,"context_line":"  the device, but dynamically created as needed. In such cases, the attach"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_defe6737","line":243,"in_reply_to":"3f79a3b5_97ba296c","updated":"2018-08-30 08:41:50.000000000","message":"cyborg has a driver for each type of device. e.g. it will have gpu device driver which internal load vendor specific gpu driver to do the intro spection. as a result all device drivers loaded by the GPU acclerator would have a resouces class of CUSTOM_ACCELERATOR_GPU_\u003cmodel_name\u003e or something similar","commit_id":"6c11078b85ef06a7a99a3c2f2cb278c310973812"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"e604da9713466d3879a8eb1b76f619969f142b54","unresolved":false,"context_lines":[{"line_number":242,"context_line":"  by the Cyborg agent as `CUSTOM_ACCELERATOR_\u003cDeviceType\u003e`. E.g."},{"line_number":243,"context_line":"  `CUSTOM_ACCELERATOR_GPU`."},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"* For mediated devices, attach handles (UUIDs) are not static or a part of"},{"line_number":246,"context_line":"  the device, but dynamically created as needed. In such cases, the attach"},{"line_number":247,"context_line":"  handles are not included in the structure."},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"* Note that there can be more than one attach handle for a component; one"},{"line_number":250,"context_line":"  of them would be chosen at attach time."}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_deac2737","line":247,"range":{"start_line":245,"start_character":2,"end_line":247,"end_character":44},"updated":"2018-08-30 08:41:50.000000000","message":"we still need to know the number of mdevs we can created and the amount of each type.\n\nfor those that are not aware  since devices can expose multipel different types of mdev. for gpus these could correspond to different allocations of memory or cores or resolution depending on the mdev type used to allocate the mdev via the sysfs api.\n\nas such for a mdev based gpu it will likely be required to create nested resouce providers for each type of mdev or have seperate inventoryes with different resouces class for each mdev type.","commit_id":"6c11078b85ef06a7a99a3c2f2cb278c310973812"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"e604da9713466d3879a8eb1b76f619969f142b54","unresolved":false,"context_lines":[{"line_number":272,"context_line":"  device-local memory is not expressed as a separate resource class. That"},{"line_number":273,"context_line":"  can be added in the future if needed."},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"* If a PCI board expresses multiple PFs, each would be represented as a"},{"line_number":276,"context_line":"  distinct device. This may not be appropriate for all devices but can be"},{"line_number":277,"context_line":"  refined in the future."},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"In order to handle non-PCI devices well, the Cyborg database schema should"},{"line_number":280,"context_line":"use a similar structure as above."}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_fe11e35e","line":277,"range":{"start_line":275,"start_character":2,"end_line":277,"end_character":24},"updated":"2018-08-30 08:41:50.000000000","message":"how is this reflected in placement. if the PF do not support or provide VF i would expect this to be modled as a single resouce provider with an invetory of pf not multiple resouce providers.","commit_id":"6c11078b85ef06a7a99a3c2f2cb278c310973812"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"e604da9713466d3879a8eb1b76f619969f142b54","unresolved":false,"context_lines":[{"line_number":343,"context_line":"* Cyborg needs to keep timestamps for changes in components, both for"},{"line_number":344,"context_line":"  operations and for accounting/billing."},{"line_number":345,"context_line":""},{"line_number":346,"context_line":"So, an individual component of a device may be updated as a whole but,"},{"line_number":347,"context_line":"in general, we need to \u0027do a diff\u0027 between the previous and current compute"},{"line_number":348,"context_line":"node configurations."},{"line_number":349,"context_line":""},{"line_number":350,"context_line":"After obtaining the device data from the drivers, the Cyborg database"},{"line_number":351,"context_line":"must be updated first before Placement is updated, because Cyborg is the"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_394bf55f","line":348,"range":{"start_line":346,"start_character":0,"end_line":348,"end_character":20},"updated":"2018-08-30 08:41:50.000000000","message":"you will also have to account for the fact that when some devices are passed through to the gust such as a PF they may nolonger be viable form the host and in that case you must not delete them form placement or the internal cyborg database","commit_id":"6c11078b85ef06a7a99a3c2f2cb278c310973812"},{"author":{"_account_id":25738,"name":"Xinran WANG","email":"xin-ran.wang@intel.com","username":"Xinran"},"change_message_id":"5e41668ec6de126a60d09111f64edaf13d609a0c","unresolved":false,"context_lines":[{"line_number":357,"context_line":""},{"line_number":358,"context_line":"There are two options for where the diff is computed: Cyborg agent or"},{"line_number":359,"context_line":"the Cyborg conductor. These options were debated in the community"},{"line_number":360,"context_line":"[#DiffThread]_. In short, if the agent were to do the diff, it would have"},{"line_number":361,"context_line":"to keep a copy of the previous configuration. That would not only be a"},{"line_number":362,"context_line":"duplicate copy of the database entries, but may also get lost when the"},{"line_number":363,"context_line":"agent restarts or the compute node reboots. So, the conductor must do"},{"line_number":364,"context_line":"the diff."},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"To prevent the conductor from becoming a bottleneck, the agent can optimize"},{"line_number":367,"context_line":"by pre-computing the diff if possible, and marking the components as added,"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_21cb054b","line":364,"range":{"start_line":360,"start_character":16,"end_line":364,"end_character":9},"updated":"2018-11-28 09:31:54.000000000","message":"As Sean Mooney said, we should also consider the waste of bandwidth. I see your concern about race condition in this mail http://lists.openstack.org/pipermail/openstack-dev/2018-August/133037.html, it\u0027s better to consider all the pros and cons.","commit_id":"6c11078b85ef06a7a99a3c2f2cb278c310973812"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"e604da9713466d3879a8eb1b76f619969f142b54","unresolved":false,"context_lines":[{"line_number":357,"context_line":""},{"line_number":358,"context_line":"There are two options for where the diff is computed: Cyborg agent or"},{"line_number":359,"context_line":"the Cyborg conductor. These options were debated in the community"},{"line_number":360,"context_line":"[#DiffThread]_. In short, if the agent were to do the diff, it would have"},{"line_number":361,"context_line":"to keep a copy of the previous configuration. That would not only be a"},{"line_number":362,"context_line":"duplicate copy of the database entries, but may also get lost when the"},{"line_number":363,"context_line":"agent restarts or the compute node reboots. So, the conductor must do"},{"line_number":364,"context_line":"the diff."},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"To prevent the conductor from becoming a bottleneck, the agent can optimize"},{"line_number":367,"context_line":"by pre-computing the diff if possible, and marking the components as added,"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_59ecb128","line":364,"range":{"start_line":360,"start_character":16,"end_line":364,"end_character":9},"updated":"2018-08-30 08:41:50.000000000","message":"well if the resouce tracker is executing on the agent it will likely have to keep an in memory copy. passing all the state back to the conductor over the RPC bus will needlessly waste bandwith and put a heverly load on the AMQP instance.\n\nin the reboot case the cyborg agent would jsut have to retrive a copy of the olds state form the db/conductor on star up and could contiue as normal.\n\nanother option however may be to use a clusterd database such as etcd and not send this infor over the message bus at all.\nthe cyborge compute agent could instead update the info in etcd which would make it avialable to the condocutor also\nand etcd would handle propagaing the diff to all nodes.","commit_id":"6c11078b85ef06a7a99a3c2f2cb278c310973812"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"e604da9713466d3879a8eb1b76f619969f142b54","unresolved":false,"context_lines":[{"line_number":381,"context_line":"Data model impact"},{"line_number":382,"context_line":"-----------------"},{"line_number":383,"context_line":""},{"line_number":384,"context_line":"* Update Cyborg database schema to reflect this structure. Add the new"},{"line_number":385,"context_line":"  fields to the database under Deployables and Attributes."},{"line_number":386,"context_line":""},{"line_number":387,"context_line":"REST API impact"},{"line_number":388,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_f9c9fdab","line":385,"range":{"start_line":384,"start_character":1,"end_line":385,"end_character":58},"updated":"2018-08-30 08:41:50.000000000","message":"or change to etcd.\nwill the info be used in a relational manner?\nif not etcd would be bettter for modeling state.\n\nif you will need to preform relational quiers then yes stick with sql","commit_id":"6c11078b85ef06a7a99a3c2f2cb278c310973812"}]}
