)]}'
{"nova/tests/unit/virt/hyperv/test_hostops.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7c0315a60d6d2332d9464e5eb20f57df9c93136d","unresolved":false,"context_lines":[{"line_number":222,"context_line":"            \u0027product_id\u0027: mock_pci_dev[\u0027product_id\u0027]}"},{"line_number":223,"context_line":"        expected_pci_dev \u003d mock_pci_dev.copy()"},{"line_number":224,"context_line":"        expected_pci_dev.update(dev_type\u003dobj_fields.PciDeviceType.STANDARD,"},{"line_number":225,"context_line":"                                label\u003d expected_label,"},{"line_number":226,"context_line":"                                numa_node\u003dNone)"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"        result \u003d self._hostops._get_pci_passthrough_devices()"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a461143_ab07b37f","line":225,"range":{"start_line":225,"start_character":38,"end_line":225,"end_character":39},"updated":"2017-01-26 23:42:45.000000000","message":"dear lord...","commit_id":"9d6f9e9cd5dcb1dc9205ace9476dcb3a404ac497"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"07e23e6bde30d83574b33816db429fbdec7d0a93","unresolved":false,"context_lines":[{"line_number":222,"context_line":"            \u0027product_id\u0027: mock_pci_dev[\u0027product_id\u0027]}"},{"line_number":223,"context_line":"        expected_pci_dev \u003d mock_pci_dev.copy()"},{"line_number":224,"context_line":"        expected_pci_dev.update(dev_type\u003dobj_fields.PciDeviceType.STANDARD,"},{"line_number":225,"context_line":"                                label\u003d expected_label,"},{"line_number":226,"context_line":"                                numa_node\u003dNone)"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"        result \u003d self._hostops._get_pci_passthrough_devices()"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a461143_6b8f8bcc","line":225,"range":{"start_line":225,"start_character":38,"end_line":225,"end_character":39},"in_reply_to":"3a461143_ab07b37f","updated":"2017-01-26 23:49:45.000000000","message":"oups. I did not see that, nor did the pep8 job say anything. :(","commit_id":"9d6f9e9cd5dcb1dc9205ace9476dcb3a404ac497"}],"nova/virt/hyperv/hostops.py":[{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"315a834f342996e6b0800743acaa392939a9ed38","unresolved":false,"context_lines":[{"line_number":199,"context_line":"            dev_label \u003d \u0027label_%(vendor_id)s_%(product_id)s\u0027 % {"},{"line_number":200,"context_line":"                \u0027vendor_id\u0027: pci_dev[\u0027vendor_id\u0027],"},{"line_number":201,"context_line":"                \u0027product_id\u0027: pci_dev[\u0027product_id\u0027]}"},{"line_number":202,"context_line":"            pci_dev.update(dev_type\u003dobj_fields.PciDeviceType.STANDARD,"},{"line_number":203,"context_line":"                           label\u003ddev_label,"},{"line_number":204,"context_line":"                           numa_node\u003dNone)"},{"line_number":205,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"5a3905b3_2d128057","line":202,"range":{"start_line":202,"start_character":12,"end_line":202,"end_character":70},"updated":"2017-01-23 21:24:59.000000000","message":"are you only support generic pci? not PF/VF passthrough","commit_id":"c0dc16a3249d8583e1f6bde94c562f37289c404f"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"a5f29711c451e0a27c797fde35e1188955855929","unresolved":false,"context_lines":[{"line_number":199,"context_line":"            dev_label \u003d \u0027label_%(vendor_id)s_%(product_id)s\u0027 % {"},{"line_number":200,"context_line":"                \u0027vendor_id\u0027: pci_dev[\u0027vendor_id\u0027],"},{"line_number":201,"context_line":"                \u0027product_id\u0027: pci_dev[\u0027product_id\u0027]}"},{"line_number":202,"context_line":"            pci_dev.update(dev_type\u003dobj_fields.PciDeviceType.STANDARD,"},{"line_number":203,"context_line":"                           label\u003ddev_label,"},{"line_number":204,"context_line":"                           numa_node\u003dNone)"},{"line_number":205,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3a461143_8e7cde73","line":202,"range":{"start_line":202,"start_character":12,"end_line":202,"end_character":70},"in_reply_to":"3a461143_f851a863","updated":"2017-01-26 15:13:14.000000000","message":"At the moment, Hyper-V only supports NIC SR-IOV.\n\nAs I\u0027ve replied earlier, VFs/PFs are not queryable, and they are not Msvm_PciExpress objects.\n\nVFs/PFs seem to be entirely managed by Hyper-V itself. In order to \"attach\" one to an instance, all you have to do is connect the instance\u0027s NIC to a SR-IOV capable vSwitch, and enable SR-IOV on the instance\u0027s NIC. Hyper-V then assigns it a VF, and the vSwitch\u0027s IovVirtualFunctionCount and IovVirtualFunctionsInUse fields will update accordingly.","commit_id":"c0dc16a3249d8583e1f6bde94c562f37289c404f"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"1965803eedc4269d878e20206fcda8548d2d68b9","unresolved":false,"context_lines":[{"line_number":199,"context_line":"            dev_label \u003d \u0027label_%(vendor_id)s_%(product_id)s\u0027 % {"},{"line_number":200,"context_line":"                \u0027vendor_id\u0027: pci_dev[\u0027vendor_id\u0027],"},{"line_number":201,"context_line":"                \u0027product_id\u0027: pci_dev[\u0027product_id\u0027]}"},{"line_number":202,"context_line":"            pci_dev.update(dev_type\u003dobj_fields.PciDeviceType.STANDARD,"},{"line_number":203,"context_line":"                           label\u003ddev_label,"},{"line_number":204,"context_line":"                           numa_node\u003dNone)"},{"line_number":205,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"5a3905b3_cd3adce6","line":202,"range":{"start_line":202,"start_character":12,"end_line":202,"end_character":70},"in_reply_to":"5a3905b3_2d128057","updated":"2017-01-24 00:07:46.000000000","message":"theoretically, we could support Network Adapter PF/VF passthrough, but due to lack of hardware, I\u0027m not able to test / implement this at this moment.","commit_id":"c0dc16a3249d8583e1f6bde94c562f37289c404f"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"3c810757edaa463ea2592d732fb9e26ab95af98c","unresolved":false,"context_lines":[{"line_number":199,"context_line":"            dev_label \u003d \u0027label_%(vendor_id)s_%(product_id)s\u0027 % {"},{"line_number":200,"context_line":"                \u0027vendor_id\u0027: pci_dev[\u0027vendor_id\u0027],"},{"line_number":201,"context_line":"                \u0027product_id\u0027: pci_dev[\u0027product_id\u0027]}"},{"line_number":202,"context_line":"            pci_dev.update(dev_type\u003dobj_fields.PciDeviceType.STANDARD,"},{"line_number":203,"context_line":"                           label\u003ddev_label,"},{"line_number":204,"context_line":"                           numa_node\u003dNone)"},{"line_number":205,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"5a3905b3_b54f6990","line":202,"range":{"start_line":202,"start_character":12,"end_line":202,"end_character":70},"in_reply_to":"5a3905b3_427e9f6a","updated":"2017-01-24 17:18:51.000000000","message":"So, Hyper-V will filter out the devices that will be assignable to Hyper-V VMs (Msvm_PciExpress objects from the root/virtualization/v2 namespace, which is the Hyper-V namespace). PCI devices that are not assignable to VMs (e.g.: PCI devices that are still enabled / mounted on the host OS) will not have a Msvm_PciExpress object.\n\nPrimarily, to prepare a PCI device for passthrough, something like this has to be executed in powershell:\n\n    disable-pnpdevice -InstanceId $pnpdev.InstanceId -Confirm:$false\n    $locationpath \u003d ($pnpdev | get-pnpdeviceproperty DEVPKEY_Device_LocationPaths).data[0]\n    dismount-vmhostassignabledevice -locationpath $locationpath\n\nKeep in mind that \"dismount-vmhostassignabledevice\" will fail if the given PCI device does not support / cannot be attached to VMs [1]. That being said, devices for which this operation succeeded can be attached to VMs.\n\nNow, to answer your question, if assignable VF/PF are queryable as Msvm_PciExpress objects, they are not filtered out, but they\u0027ll still be assignable in the same way, if that is your concern.\n\nAnd sure, I\u0027ll update the docs as well.\n\n[1] http://paste.openstack.org/show/596279/","commit_id":"c0dc16a3249d8583e1f6bde94c562f37289c404f"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"89f210aef25a679cf5dcc8a6f64b9b8b73a06a70","unresolved":false,"context_lines":[{"line_number":199,"context_line":"            dev_label \u003d \u0027label_%(vendor_id)s_%(product_id)s\u0027 % {"},{"line_number":200,"context_line":"                \u0027vendor_id\u0027: pci_dev[\u0027vendor_id\u0027],"},{"line_number":201,"context_line":"                \u0027product_id\u0027: pci_dev[\u0027product_id\u0027]}"},{"line_number":202,"context_line":"            pci_dev.update(dev_type\u003dobj_fields.PciDeviceType.STANDARD,"},{"line_number":203,"context_line":"                           label\u003ddev_label,"},{"line_number":204,"context_line":"                           numa_node\u003dNone)"},{"line_number":205,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3a461143_f851a863","line":202,"range":{"start_line":202,"start_character":12,"end_line":202,"end_character":70},"in_reply_to":"5a3905b3_b54f6990","updated":"2017-01-26 14:58:56.000000000","message":"\u003e Now, to answer your question, if assignable VF/PF are queryable as Msvm_PciExpress objects, they are not filtered out, but they\u0027ll still be assignable in the same way, if that is your concern.\n\nBased on Moshe\u0027s original question, this would appear to be an issue. Were we to create VF/PF devices, they would be stored here as STANDARD PCI devices rather than VF/PF devices. I don\u0027t know why this would be a bad thing though, I\u0027m afraid.","commit_id":"c0dc16a3249d8583e1f6bde94c562f37289c404f"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"9140596f3e01f736294d8b06bd21bfbcc043b1f3","unresolved":false,"context_lines":[{"line_number":199,"context_line":"            dev_label \u003d \u0027label_%(vendor_id)s_%(product_id)s\u0027 % {"},{"line_number":200,"context_line":"                \u0027vendor_id\u0027: pci_dev[\u0027vendor_id\u0027],"},{"line_number":201,"context_line":"                \u0027product_id\u0027: pci_dev[\u0027product_id\u0027]}"},{"line_number":202,"context_line":"            pci_dev.update(dev_type\u003dobj_fields.PciDeviceType.STANDARD,"},{"line_number":203,"context_line":"                           label\u003ddev_label,"},{"line_number":204,"context_line":"                           numa_node\u003dNone)"},{"line_number":205,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3a461143_fd37dae0","line":202,"range":{"start_line":202,"start_character":12,"end_line":202,"end_character":70},"in_reply_to":"5a3905b3_b54f6990","updated":"2017-01-26 14:20:48.000000000","message":"So, I\u0027ve investigated SR-IOV and how it works on Hyper-V. This method at the moment only returns assignable PCI devices, which can be queried as Msvm_PciExpress objects.\n\nFor network SR-IOV, that information is obtained in a totally different way, and requires some specific host configuration as well.\n\nFirst of all, the host must be enabled to use SR-IOV and be capable for that. [1]\n\nSecondly, external vSwitches have to be created for each SR-IOV capable NIC (also enabling the SR-IOV field for the vSwitch, it cannot be enabled after it was created).\n\nLastly, when creating the instance\u0027s vNICs and connecting them to vSwitches, there\u0027s a field for enabling it for SR-IOV.\n\nNow, there are a couple of straight-forward things to keep in mind:\n\n- if an admin doesn\u0027t want to use the SR-IOV capabilities of a NIC, he won\u0027t enable the SR-IOV capabilities of its vSwitch.\n\n- the vSwitch tracks the amount of VFs in-use and currently available. [1]\n\nAlso, as a final thing.. PCI passthrough targets Windows / Hyper-V Server 2016 and above, while SR-IOV support has been added in Windows / Hyper-V Server 2012.\n\n[1] http://paste.openstack.org/show/596589/","commit_id":"c0dc16a3249d8583e1f6bde94c562f37289c404f"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"e491a614ca243eaa484aaef5d952c7b6ab0f5f04","unresolved":false,"context_lines":[{"line_number":199,"context_line":"            dev_label \u003d \u0027label_%(vendor_id)s_%(product_id)s\u0027 % {"},{"line_number":200,"context_line":"                \u0027vendor_id\u0027: pci_dev[\u0027vendor_id\u0027],"},{"line_number":201,"context_line":"                \u0027product_id\u0027: pci_dev[\u0027product_id\u0027]}"},{"line_number":202,"context_line":"            pci_dev.update(dev_type\u003dobj_fields.PciDeviceType.STANDARD,"},{"line_number":203,"context_line":"                           label\u003ddev_label,"},{"line_number":204,"context_line":"                           numa_node\u003dNone)"},{"line_number":205,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"5a3905b3_427e9f6a","line":202,"range":{"start_line":202,"start_character":12,"end_line":202,"end_character":70},"in_reply_to":"5a3905b3_cd3adce6","updated":"2017-01-24 10:57:41.000000000","message":"So all the PF/VF are filtered by self._hostutils.get_pci_passthrough_devices()?\nI just want to make sure you wan\u0027t get pci_device which is type VF/PF and you set it to STANDARD pci.\nAlso better to add comment that currently you will support only STANDARD pci and this should also be documented here\nhttp://docs.openstack.org/admin-guide/compute-pci-passthrough.html","commit_id":"c0dc16a3249d8583e1f6bde94c562f37289c404f"},{"author":{"_account_id":24777,"name":"Steven Webster","email":"steven.webster@windriver.com","username":"swebster"},"change_message_id":"ff954f49fa28a60c3c59662d35a87acce14d811e","unresolved":false,"context_lines":[{"line_number":201,"context_line":"                \u0027product_id\u0027: pci_dev[\u0027product_id\u0027]}"},{"line_number":202,"context_line":"            pci_dev.update(dev_type\u003dobj_fields.PciDeviceType.STANDARD,"},{"line_number":203,"context_line":"                           label\u003ddev_label,"},{"line_number":204,"context_line":"                           numa_node\u003dNone)"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"        return jsonutils.dumps(pci_devices)"},{"line_number":207,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"5a3905b3_e3a0dfa1","line":204,"updated":"2017-01-20 22:05:17.000000000","message":"I guess there\u0027s no current way to extract the numa_node?","commit_id":"c0dc16a3249d8583e1f6bde94c562f37289c404f"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"a5f29711c451e0a27c797fde35e1188955855929","unresolved":false,"context_lines":[{"line_number":201,"context_line":"                \u0027product_id\u0027: pci_dev[\u0027product_id\u0027]}"},{"line_number":202,"context_line":"            pci_dev.update(dev_type\u003dobj_fields.PciDeviceType.STANDARD,"},{"line_number":203,"context_line":"                           label\u003ddev_label,"},{"line_number":204,"context_line":"                           numa_node\u003dNone)"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"        return jsonutils.dumps(pci_devices)"},{"line_number":207,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3a461143_ce96e693","line":204,"in_reply_to":"3a461143_58ee3c8c","updated":"2017-01-26 15:13:14.000000000","message":"Sure, will add.","commit_id":"c0dc16a3249d8583e1f6bde94c562f37289c404f"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"89f210aef25a679cf5dcc8a6f64b9b8b73a06a70","unresolved":false,"context_lines":[{"line_number":201,"context_line":"                \u0027product_id\u0027: pci_dev[\u0027product_id\u0027]}"},{"line_number":202,"context_line":"            pci_dev.update(dev_type\u003dobj_fields.PciDeviceType.STANDARD,"},{"line_number":203,"context_line":"                           label\u003ddev_label,"},{"line_number":204,"context_line":"                           numa_node\u003dNone)"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"        return jsonutils.dumps(pci_devices)"},{"line_number":207,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3a461143_58ee3c8c","line":204,"in_reply_to":"5a3905b3_d6c5633c","updated":"2017-01-26 14:58:56.000000000","message":"That sounds fair. Maybe a TODO would help here?","commit_id":"c0dc16a3249d8583e1f6bde94c562f37289c404f"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"2e411ee905cad83c6380867a8cf01a01de94a814","unresolved":false,"context_lines":[{"line_number":201,"context_line":"                \u0027product_id\u0027: pci_dev[\u0027product_id\u0027]}"},{"line_number":202,"context_line":"            pci_dev.update(dev_type\u003dobj_fields.PciDeviceType.STANDARD,"},{"line_number":203,"context_line":"                           label\u003ddev_label,"},{"line_number":204,"context_line":"                           numa_node\u003dNone)"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"        return jsonutils.dumps(pci_devices)"},{"line_number":207,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"5a3905b3_d6c5633c","line":204,"in_reply_to":"5a3905b3_e3a0dfa1","updated":"2017-01-20 22:34:47.000000000","message":"I haven\u0027t found any way to associate the PCI devices with NUMA nodes. Not all of the documentation is available for Windows 2016 at this moment.\n\nI\u0027ll see what I can find out, but this can easily be added later.","commit_id":"c0dc16a3249d8583e1f6bde94c562f37289c404f"}],"releasenotes/notes/hyper-v-pci-passthrough-babf104d6bc2baa6.yaml":[{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"315a834f342996e6b0800743acaa392939a9ed38","unresolved":false,"context_lines":[{"line_number":7,"context_line":"    attach some of the host\u0027s PCI devices (e.g.: GPU devices) directly to"},{"line_number":8,"context_line":"    Hyper-V instances."},{"line_number":9,"context_line":"    In order to benefit from this feature, Hyper-V compute nodes must support"},{"line_number":10,"context_line":"    SRIOV and must have assignable PCI devices. This can easily be checked by"},{"line_number":11,"context_line":"    running the following powershell commands::"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"        Start-BitsTransfer https://raw.githubusercontent.com/Microsoft/Virtualization-Documentation/master/hyperv-samples/benarm-powershell/DDA/survey-dda.ps1"}],"source_content_type":"text/x-yaml","patch_set":7,"id":"5a3905b3_ada750bb","line":10,"range":{"start_line":10,"start_character":4,"end_line":10,"end_character":9},"updated":"2017-01-23 21:24:59.000000000","message":"s/SRIOV/SR-IOV","commit_id":"c0dc16a3249d8583e1f6bde94c562f37289c404f"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"1965803eedc4269d878e20206fcda8548d2d68b9","unresolved":false,"context_lines":[{"line_number":7,"context_line":"    attach some of the host\u0027s PCI devices (e.g.: GPU devices) directly to"},{"line_number":8,"context_line":"    Hyper-V instances."},{"line_number":9,"context_line":"    In order to benefit from this feature, Hyper-V compute nodes must support"},{"line_number":10,"context_line":"    SRIOV and must have assignable PCI devices. This can easily be checked by"},{"line_number":11,"context_line":"    running the following powershell commands::"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"        Start-BitsTransfer https://raw.githubusercontent.com/Microsoft/Virtualization-Documentation/master/hyperv-samples/benarm-powershell/DDA/survey-dda.ps1"}],"source_content_type":"text/x-yaml","patch_set":7,"id":"5a3905b3_8d4d349c","line":10,"range":{"start_line":10,"start_character":4,"end_line":10,"end_character":9},"in_reply_to":"5a3905b3_ada750bb","updated":"2017-01-24 00:07:46.000000000","message":"Done","commit_id":"c0dc16a3249d8583e1f6bde94c562f37289c404f"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"315a834f342996e6b0800743acaa392939a9ed38","unresolved":false,"context_lines":[{"line_number":14,"context_line":"        .\\survey-dda.ps1"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"    The script above will print a list of assignable PCI devices available on"},{"line_number":17,"context_line":"    the host, and if the host supports SRIOV."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"    If the host supports this feature and it has at least an assignable PCI"},{"line_number":20,"context_line":"    device, the host must be configured to allow those PCI devices to be"}],"source_content_type":"text/x-yaml","patch_set":7,"id":"5a3905b3_4d9fcc5e","line":17,"range":{"start_line":17,"start_character":39,"end_line":17,"end_character":44},"updated":"2017-01-23 21:24:59.000000000","message":"s/SRIOV/SR-IOV","commit_id":"c0dc16a3249d8583e1f6bde94c562f37289c404f"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"1965803eedc4269d878e20206fcda8548d2d68b9","unresolved":false,"context_lines":[{"line_number":14,"context_line":"        .\\survey-dda.ps1"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"    The script above will print a list of assignable PCI devices available on"},{"line_number":17,"context_line":"    the host, and if the host supports SRIOV."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"    If the host supports this feature and it has at least an assignable PCI"},{"line_number":20,"context_line":"    device, the host must be configured to allow those PCI devices to be"}],"source_content_type":"text/x-yaml","patch_set":7,"id":"5a3905b3_6d7c88b5","line":17,"range":{"start_line":17,"start_character":39,"end_line":17,"end_character":44},"in_reply_to":"5a3905b3_4d9fcc5e","updated":"2017-01-24 00:07:46.000000000","message":"Done","commit_id":"c0dc16a3249d8583e1f6bde94c562f37289c404f"}]}
