)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ea533da15fd0fad9f1231499ab628236a4317a83","unresolved":false,"context_lines":[{"line_number":13,"context_line":"However:"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"* The list of classes passed to autowrap was incomplete"},{"line_number":16,"context_line":"* autowrap doesn\u0027t work when a call returns a list of objects"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"We fix the problem of the autowrap whitelist by using inspection on the"},{"line_number":19,"context_line":"libvirt module. We fix the only currently known case of a list being"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"7faddb67_780a2279","line":16,"updated":"2019-08-21 14:02:28.000000000","message":"Should we open and track an eventlet issue for this?","commit_id":"eaa1d27b4b17e41ddd6ef09cdd5d4b1968e5232f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"64d6160cd78c0a847713664f53b8cadfb7093693","unresolved":false,"context_lines":[{"line_number":13,"context_line":"However:"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"* The list of classes passed to autowrap was incomplete"},{"line_number":16,"context_line":"* autowrap doesn\u0027t work when a call returns a list of objects"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"We fix the problem of the autowrap whitelist by using inspection on the"},{"line_number":19,"context_line":"libvirt module. We fix the only currently known case of a list being"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"7faddb67_7291bdf7","line":16,"updated":"2019-08-22 20:54:28.000000000","message":"Again, should we report an issue against eventlet for supporting/fixing this and track that so we don\u0027t need a workaround in our code forever?","commit_id":"4978681cfc5e3de06bb838be41b668503c9eae29"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"ea1bc2deaf0bad5810214b6cf229b790eae0a912","unresolved":false,"context_lines":[{"line_number":13,"context_line":"However:"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"* The list of classes passed to autowrap was incomplete"},{"line_number":16,"context_line":"* autowrap doesn\u0027t work when a call returns a list of objects"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"We fix the problem of the autowrap whitelist by using inspection on the"},{"line_number":19,"context_line":"libvirt module. We fix the only currently known case of a list being"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"7faddb67_f103610f","line":16,"in_reply_to":"7faddb67_7291bdf7","updated":"2019-08-23 12:25:34.000000000","message":"Possibly, but tpool.Proxy autowrapping is a kinda gross hack anyway, and I\u0027m not sure that any \u0027fix\u0027 wouldn\u0027t be worse. I\u0027ll report it anyway and make a note somewhere relevant. We can see what they say.","commit_id":"4978681cfc5e3de06bb838be41b668503c9eae29"}],"nova/tests/unit/virt/libvirt/fakelibvirt.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"246122c918af3d6208e26c26ccbf710f395955be","unresolved":false,"context_lines":[{"line_number":1202,"context_line":"        del self._domain._snapshots[self._name]"},{"line_number":1203,"context_line":""},{"line_number":1204,"context_line":""},{"line_number":1205,"context_line":"class Secret(object):"},{"line_number":1206,"context_line":"    \"\"\"A stub Secret class. Not currently returned by any test, but required to"},{"line_number":1207,"context_line":"    exist for introspection."},{"line_number":1208,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_343a52c4","line":1205,"updated":"2019-08-22 21:04:58.000000000","message":"I removed this and virSecret and nothing failed in the new test class so do we really need it?","commit_id":"4978681cfc5e3de06bb838be41b668503c9eae29"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"ea1bc2deaf0bad5810214b6cf229b790eae0a912","unresolved":false,"context_lines":[{"line_number":1202,"context_line":"        del self._domain._snapshots[self._name]"},{"line_number":1203,"context_line":""},{"line_number":1204,"context_line":""},{"line_number":1205,"context_line":"class Secret(object):"},{"line_number":1206,"context_line":"    \"\"\"A stub Secret class. Not currently returned by any test, but required to"},{"line_number":1207,"context_line":"    exist for introspection."},{"line_number":1208,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_d4ead30c","line":1205,"in_reply_to":"7faddb67_343a52c4","updated":"2019-08-23 12:25:34.000000000","message":"Are you sure?\n\n\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\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\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\nERROR: nova.tests.unit.virt.libvirt.test_host.LibvirtTpoolProxyTestCase.test_get_libvirt_proxy_classes\n----------------------------------------------------------------------\npythonlogging:\u0027\u0027: {{{2019-08-23 13:18:22,114 WARNING [oslo_config.cfg] Config option key_manager.api_class  is deprecated. Use option key_manager.backend instead.}}}\n\nTraceback (most recent call last):\n  File \"/home/mbooth/src/openstack/nova-1/nova/tests/unit/virt/libvirt/test_host.py\", line 900, in test_get_libvirt_proxy_classes\n    self.assertIn(fakelibvirt.virSecret, proxy_classes)\nAttributeError: module \u0027nova.tests.unit.virt.libvirt.fakelibvirt\u0027 has no attribute \u0027virSecret\u0027","commit_id":"4978681cfc5e3de06bb838be41b668503c9eae29"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"86257fbcc97bb4aa8a9f24d25da38f529a8608ee","unresolved":false,"context_lines":[{"line_number":1202,"context_line":"        del self._domain._snapshots[self._name]"},{"line_number":1203,"context_line":""},{"line_number":1204,"context_line":""},{"line_number":1205,"context_line":"class Secret(object):"},{"line_number":1206,"context_line":"    \"\"\"A stub Secret class. Not currently returned by any test, but required to"},{"line_number":1207,"context_line":"    exist for introspection."},{"line_number":1208,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_bc890b70","line":1205,"in_reply_to":"7faddb67_5ac49a41","updated":"2019-08-27 15:29:54.000000000","message":"\u003e Just checking we\u0027re on the same page here... I removed virSecret\n \u003e and Secret from fakelibvirt and it gave me the above error, as\n \u003e expected. i.e. These are required and can\u0027t be removed. Did you get\n \u003e a different behaviour?\n\nAnd you removed the line that uses them from the test?","commit_id":"4978681cfc5e3de06bb838be41b668503c9eae29"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"173d391b9021fc1e414d66c61e2cd08c2b37567f","unresolved":false,"context_lines":[{"line_number":1202,"context_line":"        del self._domain._snapshots[self._name]"},{"line_number":1203,"context_line":""},{"line_number":1204,"context_line":""},{"line_number":1205,"context_line":"class Secret(object):"},{"line_number":1206,"context_line":"    \"\"\"A stub Secret class. Not currently returned by any test, but required to"},{"line_number":1207,"context_line":"    exist for introspection."},{"line_number":1208,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_861aa66c","line":1205,"in_reply_to":"7faddb67_75195620","updated":"2019-08-28 13:38:27.000000000","message":"OK fair enough.","commit_id":"4978681cfc5e3de06bb838be41b668503c9eae29"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"70d2c10c7c2fc73e403a6f7e512364d309b3ccd2","unresolved":false,"context_lines":[{"line_number":1202,"context_line":"        del self._domain._snapshots[self._name]"},{"line_number":1203,"context_line":""},{"line_number":1204,"context_line":""},{"line_number":1205,"context_line":"class Secret(object):"},{"line_number":1206,"context_line":"    \"\"\"A stub Secret class. Not currently returned by any test, but required to"},{"line_number":1207,"context_line":"    exist for introspection."},{"line_number":1208,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_75195620","line":1205,"in_reply_to":"7faddb67_bc890b70","updated":"2019-08-28 10:57:47.000000000","message":"Ah...\n\nNo, I didn\u0027t do that. They\u0027re in the test because virSecret is actually used by Nova. As noted in the comment below we aren\u0027t actually using fakelibvirt to test that (see test_find_secret, test_create_secret, and test_delete_secret: they all use mocks instead). However, Nova does use virSecret here, and we expect it to be wrapped, so I included it in the assertions. It\u0027s just a bit weird because we\u0027re using fakelibvirt for unit tests.","commit_id":"4978681cfc5e3de06bb838be41b668503c9eae29"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"0ad79637f086c68dc24811902fe18cea758d0b3b","unresolved":false,"context_lines":[{"line_number":1202,"context_line":"        del self._domain._snapshots[self._name]"},{"line_number":1203,"context_line":""},{"line_number":1204,"context_line":""},{"line_number":1205,"context_line":"class Secret(object):"},{"line_number":1206,"context_line":"    \"\"\"A stub Secret class. Not currently returned by any test, but required to"},{"line_number":1207,"context_line":"    exist for introspection."},{"line_number":1208,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_5ac49a41","line":1205,"in_reply_to":"7faddb67_ce421e69","updated":"2019-08-27 15:05:37.000000000","message":"Just checking we\u0027re on the same page here... I removed virSecret and Secret from fakelibvirt and it gave me the above error, as expected. i.e. These are required and can\u0027t be removed. Did you get a different behaviour?","commit_id":"4978681cfc5e3de06bb838be41b668503c9eae29"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"06bd31c8447f661f2300a152d282ff8b967759cd","unresolved":false,"context_lines":[{"line_number":1202,"context_line":"        del self._domain._snapshots[self._name]"},{"line_number":1203,"context_line":""},{"line_number":1204,"context_line":""},{"line_number":1205,"context_line":"class Secret(object):"},{"line_number":1206,"context_line":"    \"\"\"A stub Secret class. Not currently returned by any test, but required to"},{"line_number":1207,"context_line":"    exist for introspection."},{"line_number":1208,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_ce421e69","line":1205,"in_reply_to":"7faddb67_d4ead30c","updated":"2019-08-26 18:38:28.000000000","message":"Well you have to remove virSecret from fakelibvirt but yeah.","commit_id":"4978681cfc5e3de06bb838be41b668503c9eae29"}],"nova/tests/unit/virt/libvirt/test_host.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"3601dad375c54a50aa106bc9558b9f1de4f63138","unresolved":false,"context_lines":[{"line_number":1135,"context_line":"        super(LibvirtTpoolProxyTest, self).setUp()"},{"line_number":1136,"context_line":""},{"line_number":1137,"context_line":"        try:"},{"line_number":1138,"context_line":"            import libvirt"},{"line_number":1139,"context_line":"            self._libvirt \u003d libvirt"},{"line_number":1140,"context_line":"        except ModuleNotFoundError:"},{"line_number":1141,"context_line":"            self.skipTest(\"Libvirt module is not present\")"}],"source_content_type":"text/x-python","patch_set":1,"id":"7faddb67_18a3ee44","line":1138,"updated":"2019-08-21 14:07:39.000000000","message":"I assume this is not legit, Matt will probably comment.\n\nHowever, we could just pass in a fake libvirt module with something we control, and then do effectively the same test? It won\u0027t be as airtight because it would miss new additions to the module, but at least it would let us test your inspect bit.","commit_id":"eaa1d27b4b17e41ddd6ef09cdd5d4b1968e5232f"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"d2accb9695a2b824d7729af89d7ef2da8e766e9d","unresolved":false,"context_lines":[{"line_number":1265,"context_line":"        self.assertIsInstance(self.conn, tpool.Proxy)"},{"line_number":1266,"context_line":""},{"line_number":1267,"context_line":"    def test_tpool_instance_lookup(self):"},{"line_number":1268,"context_line":"        # Test that domains returns by our libvirt connection are also proxied"},{"line_number":1269,"context_line":"        dom \u003d self.conn.lookupByUUIDString(uuids.vm1)"},{"line_number":1270,"context_line":"        self.assertIsInstance(dom, tpool.Proxy)"},{"line_number":1271,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"5faad753_bfc61416","line":1268,"range":{"start_line":1268,"start_character":28,"end_line":1268,"end_character":35},"updated":"2019-09-06 23:02:17.000000000","message":"returned?","commit_id":"36ee9c1913a449defd3b35f5ee5fb4afcd44169e"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"d2accb9695a2b824d7729af89d7ef2da8e766e9d","unresolved":false,"context_lines":[{"line_number":1269,"context_line":"        dom \u003d self.conn.lookupByUUIDString(uuids.vm1)"},{"line_number":1270,"context_line":"        self.assertIsInstance(dom, tpool.Proxy)"},{"line_number":1271,"context_line":""},{"line_number":1272,"context_line":"    def test_tpool_list_all_connections(self):"},{"line_number":1273,"context_line":"        # Test that Host.list_all_connections() returns a list of proxied"},{"line_number":1274,"context_line":"        # virDomain objects"},{"line_number":1275,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"5faad753_3fda24e9","line":1272,"range":{"start_line":1272,"start_character":19,"end_line":1272,"end_character":39},"updated":"2019-09-06 23:02:17.000000000","message":"list_instance_domains?","commit_id":"36ee9c1913a449defd3b35f5ee5fb4afcd44169e"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"d2accb9695a2b824d7729af89d7ef2da8e766e9d","unresolved":false,"context_lines":[{"line_number":1270,"context_line":"        self.assertIsInstance(dom, tpool.Proxy)"},{"line_number":1271,"context_line":""},{"line_number":1272,"context_line":"    def test_tpool_list_all_connections(self):"},{"line_number":1273,"context_line":"        # Test that Host.list_all_connections() returns a list of proxied"},{"line_number":1274,"context_line":"        # virDomain objects"},{"line_number":1275,"context_line":""},{"line_number":1276,"context_line":"        domains \u003d self.host.list_instance_domains()"}],"source_content_type":"text/x-python","patch_set":5,"id":"5faad753_5fd7e0c0","line":1273,"range":{"start_line":1273,"start_character":20,"end_line":1273,"end_character":47},"updated":"2019-09-06 23:02:17.000000000","message":"host.list_instance_domains?","commit_id":"36ee9c1913a449defd3b35f5ee5fb4afcd44169e"}],"nova/virt/libvirt/host.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"cccbf2d8e2cb24e19ad26d40d7dc07e4a30412ba","unresolved":false,"context_lines":[{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    @staticmethod"},{"line_number":116,"context_line":"    def _get_libvirt_proxy_classes(libvirt_module):"},{"line_number":117,"context_line":"        \u0027\u0027\u0027Return a tuple for tpool.Proxy\u0027s autowrap argument containing all"},{"line_number":118,"context_line":"        classes defined by the libvirt module except libvirtError."},{"line_number":119,"context_line":"        \u0027\u0027\u0027"},{"line_number":120,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7faddb67_5868861f","line":117,"range":{"start_line":117,"start_character":8,"end_line":117,"end_character":11},"updated":"2019-08-21 14:03:40.000000000","message":"Triple quotes should use double quotes, here and below","commit_id":"eaa1d27b4b17e41ddd6ef09cdd5d4b1968e5232f"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"cd6d02b66f70902b3507f303673beed4085942fe","unresolved":false,"context_lines":[{"line_number":631,"context_line":"            # listAllDomains() returns \u003clist of virDomain\u003e, not \u003cvirDomain\u003e, so"},{"line_number":632,"context_line":"            # tpool.Proxy\u0027s autowrap won\u0027t catch it. We need to wrap the"},{"line_number":633,"context_line":"            # contents of the list we return."},{"line_number":634,"context_line":"            doms.append(self._wrap_libvirt_proxy(dom))"},{"line_number":635,"context_line":""},{"line_number":636,"context_line":"        return doms"},{"line_number":637,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7faddb67_f3463350","line":634,"range":{"start_line":634,"start_character":52,"end_line":634,"end_character":54},"updated":"2019-08-21 14:13:12.000000000","message":"there\u0027s already a native API call a few lines earlier dom.ID so you need to wrap earlier","commit_id":"eaa1d27b4b17e41ddd6ef09cdd5d4b1968e5232f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"64d6160cd78c0a847713664f53b8cadfb7093693","unresolved":false,"context_lines":[{"line_number":231,"context_line":"        flags \u003d 0"},{"line_number":232,"context_line":"        if read_only:"},{"line_number":233,"context_line":"            flags \u003d libvirt.VIR_CONNECT_RO"},{"line_number":234,"context_line":"        # tpool.proxy_call creates a native thread. Due to limitations"},{"line_number":235,"context_line":"        # with eventlet locking we cannot use the logging API inside"},{"line_number":236,"context_line":"        # the called function."},{"line_number":237,"context_line":"        return tpool.proxy_call("},{"line_number":238,"context_line":"            (libvirt.virDomain, libvirt.virConnect),"},{"line_number":239,"context_line":"            libvirt.openAuth, uri, auth, flags)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_12d409bb","side":"PARENT","line":236,"range":{"start_line":234,"start_character":52,"end_line":236,"end_character":30},"updated":"2019-08-22 20:54:28.000000000","message":"I think this is probably still useful to keep around. I know I\u0027ve referenced it before:\n\nhttps://review.opendev.org/#/c/594527/3/nova/virt/libvirt/migration.py@348\n\nI0ffe93a031154b123c8beff96a695df5a280b935","commit_id":"3c6cea360beb8228348b689f8cd445ab914cbde1"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"6014ca2036196f3bfa6f554e13fa9be5851dfafe","unresolved":false,"context_lines":[{"line_number":231,"context_line":"        flags \u003d 0"},{"line_number":232,"context_line":"        if read_only:"},{"line_number":233,"context_line":"            flags \u003d libvirt.VIR_CONNECT_RO"},{"line_number":234,"context_line":"        # tpool.proxy_call creates a native thread. Due to limitations"},{"line_number":235,"context_line":"        # with eventlet locking we cannot use the logging API inside"},{"line_number":236,"context_line":"        # the called function."},{"line_number":237,"context_line":"        return tpool.proxy_call("},{"line_number":238,"context_line":"            (libvirt.virDomain, libvirt.virConnect),"},{"line_number":239,"context_line":"            libvirt.openAuth, uri, auth, flags)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_d4d41322","side":"PARENT","line":236,"range":{"start_line":234,"start_character":52,"end_line":236,"end_character":30},"in_reply_to":"7faddb67_12d409bb","updated":"2019-08-23 12:35:00.000000000","message":"Ack. I\u0027ll add this back somewhere.","commit_id":"3c6cea360beb8228348b689f8cd445ab914cbde1"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"64d6160cd78c0a847713664f53b8cadfb7093693","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        self._lifecycle_delay \u003d 15"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"        self._initialized \u003d False"},{"line_number":112,"context_line":"        self._libvirt_proxy_classes \u003d self._get_libvirt_proxy_classes(libvirt)"},{"line_number":113,"context_line":"        self._libvirt_proxy \u003d self._wrap_libvirt_proxy(libvirt)"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_72021d75","line":112,"range":{"start_line":112,"start_character":13,"end_line":112,"end_character":35},"updated":"2019-08-22 20:54:28.000000000","message":"nit: we don\u0027t really need to save this in an instance variable do we? We could just pass the tuple to _wrap_libvirt_proxy.","commit_id":"4978681cfc5e3de06bb838be41b668503c9eae29"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"6014ca2036196f3bfa6f554e13fa9be5851dfafe","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        self._lifecycle_delay \u003d 15"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"        self._initialized \u003d False"},{"line_number":112,"context_line":"        self._libvirt_proxy_classes \u003d self._get_libvirt_proxy_classes(libvirt)"},{"line_number":113,"context_line":"        self._libvirt_proxy \u003d self._wrap_libvirt_proxy(libvirt)"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_b4863716","line":112,"range":{"start_line":112,"start_character":13,"end_line":112,"end_character":35},"in_reply_to":"7faddb67_72021d75","updated":"2019-08-23 12:35:00.000000000","message":"We also call _wrap_libvirt_proxy from list_instance_domains. I imagine it\u0027s cheap enough to regenerate every time, tbh, but I thought we might as well save it as it will be used for each instance once a minute, and will never change.","commit_id":"4978681cfc5e3de06bb838be41b668503c9eae29"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"06bd31c8447f661f2300a152d282ff8b967759cd","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        self._lifecycle_delay \u003d 15"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"        self._initialized \u003d False"},{"line_number":112,"context_line":"        self._libvirt_proxy_classes \u003d self._get_libvirt_proxy_classes(libvirt)"},{"line_number":113,"context_line":"        self._libvirt_proxy \u003d self._wrap_libvirt_proxy(libvirt)"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_ae59e25b","line":112,"range":{"start_line":112,"start_character":13,"end_line":112,"end_character":35},"in_reply_to":"7faddb67_b4863716","updated":"2019-08-26 18:38:28.000000000","message":"OK I thought it was only single use here, nevermind then.","commit_id":"4978681cfc5e3de06bb838be41b668503c9eae29"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"64d6160cd78c0a847713664f53b8cadfb7093693","unresolved":false,"context_lines":[{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    @staticmethod"},{"line_number":116,"context_line":"    def _get_libvirt_proxy_classes(libvirt_module):"},{"line_number":117,"context_line":"        \"\"\"Return a tuple for tpool.Proxy\u0027s autowrap argument containing all"},{"line_number":118,"context_line":"        classes defined by the libvirt module except libvirtError."},{"line_number":119,"context_line":"        \"\"\""},{"line_number":120,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_9215599e","line":117,"range":{"start_line":117,"start_character":26,"end_line":117,"end_character":61},"updated":"2019-08-22 20:54:28.000000000","message":"✔ https://eventlet.net/doc/threading.html#eventlet.tpool.Proxy","commit_id":"4978681cfc5e3de06bb838be41b668503c9eae29"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"64d6160cd78c0a847713664f53b8cadfb7093693","unresolved":false,"context_lines":[{"line_number":125,"context_line":"        # we don\u0027t need to proxy that"},{"line_number":126,"context_line":"        return tuple([cls[1] for cls in classes if cls[0] !\u003d \u0027libvirtError\u0027])"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    def _wrap_libvirt_proxy(self, obj):"},{"line_number":129,"context_line":"        \"\"\"Return an object wrapped in a tpool.Proxy using autowrap appropriate"},{"line_number":130,"context_line":"        for the libvirt module."},{"line_number":131,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_52e841b2","line":128,"range":{"start_line":128,"start_character":34,"end_line":128,"end_character":37},"updated":"2019-08-22 20:54:28.000000000","message":"nit: why not call this libvirt_module?","commit_id":"4978681cfc5e3de06bb838be41b668503c9eae29"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"6014ca2036196f3bfa6f554e13fa9be5851dfafe","unresolved":false,"context_lines":[{"line_number":125,"context_line":"        # we don\u0027t need to proxy that"},{"line_number":126,"context_line":"        return tuple([cls[1] for cls in classes if cls[0] !\u003d \u0027libvirtError\u0027])"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    def _wrap_libvirt_proxy(self, obj):"},{"line_number":129,"context_line":"        \"\"\"Return an object wrapped in a tpool.Proxy using autowrap appropriate"},{"line_number":130,"context_line":"        for the libvirt module."},{"line_number":131,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_94de9b3c","line":128,"range":{"start_line":128,"start_character":34,"end_line":128,"end_character":37},"in_reply_to":"7faddb67_52e841b2","updated":"2019-08-23 12:35:00.000000000","message":"We also pass it virDomain objects from list_instance_domains(). The autowrapping still needs to be the same, though.","commit_id":"4978681cfc5e3de06bb838be41b668503c9eae29"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"06bd31c8447f661f2300a152d282ff8b967759cd","unresolved":false,"context_lines":[{"line_number":125,"context_line":"        # we don\u0027t need to proxy that"},{"line_number":126,"context_line":"        return tuple([cls[1] for cls in classes if cls[0] !\u003d \u0027libvirtError\u0027])"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    def _wrap_libvirt_proxy(self, obj):"},{"line_number":129,"context_line":"        \"\"\"Return an object wrapped in a tpool.Proxy using autowrap appropriate"},{"line_number":130,"context_line":"        for the libvirt module."},{"line_number":131,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_2e33b215","line":128,"range":{"start_line":128,"start_character":34,"end_line":128,"end_character":37},"in_reply_to":"7faddb67_94de9b3c","updated":"2019-08-26 18:38:28.000000000","message":"Ah yeah.","commit_id":"4978681cfc5e3de06bb838be41b668503c9eae29"}],"test-requirements.txt":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"1a77820b3c846f466fd459067971aede95d2c0cd","unresolved":false,"context_lines":[{"line_number":7,"context_line":"coverage!\u003d4.4,\u003e\u003d4.0 # Apache-2.0"},{"line_number":8,"context_line":"ddt\u003e\u003d1.0.1 # MIT"},{"line_number":9,"context_line":"fixtures\u003e\u003d3.0.0 # Apache-2.0/BSD"},{"line_number":10,"context_line":"libvirt-python\u003e\u003d3.0.0 # GPLv2"},{"line_number":11,"context_line":"mock\u003e\u003d3.0.0 # BSD"},{"line_number":12,"context_line":"mox3\u003e\u003d0.20.0 # Apache-2.0"},{"line_number":13,"context_line":"psycopg2\u003e\u003d2.7 # LGPL/ZPL"}],"source_content_type":"text/plain","patch_set":1,"id":"7faddb67_f3e2b32f","line":10,"range":{"start_line":10,"start_character":23,"end_line":10,"end_character":29},"updated":"2019-08-21 14:27:14.000000000","message":"lgplv2+\nhttps://pypi.org/project/libvirt-python/","commit_id":"eaa1d27b4b17e41ddd6ef09cdd5d4b1968e5232f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"ac01491b86d39a001e9ad44748be0ef621458867","unresolved":false,"context_lines":[{"line_number":7,"context_line":"coverage!\u003d4.4,\u003e\u003d4.0 # Apache-2.0"},{"line_number":8,"context_line":"ddt\u003e\u003d1.0.1 # MIT"},{"line_number":9,"context_line":"fixtures\u003e\u003d3.0.0 # Apache-2.0/BSD"},{"line_number":10,"context_line":"libvirt-python\u003e\u003d3.0.0 # GPLv2"},{"line_number":11,"context_line":"mock\u003e\u003d3.0.0 # BSD"},{"line_number":12,"context_line":"mox3\u003e\u003d0.20.0 # Apache-2.0"},{"line_number":13,"context_line":"psycopg2\u003e\u003d2.7 # LGPL/ZPL"}],"source_content_type":"text/plain","patch_set":1,"id":"7faddb67_d31d3773","line":10,"range":{"start_line":10,"start_character":23,"end_line":10,"end_character":29},"in_reply_to":"7faddb67_53ff0733","updated":"2019-08-21 14:41:15.000000000","message":"I think we should stick to not having this in test-requirements. We can test that the new routine finds what we expect in a test module that we hand to it (the code even takes the libvirt module as an argument). It also means if libvirt adds a new object our test will have to change, at which time we\u0027ll have to make a hard version bump here, and then local testing without that version won\u0027t be possible.\n\nI\u0027m totally comfortable with this being validated with a unit-y test that passes in a fake module and this isn\u0027t a good reason to bring back the dep, IMHO.","commit_id":"eaa1d27b4b17e41ddd6ef09cdd5d4b1968e5232f"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"22d1dd27c0ee1b9f0518dc6a6cd93b5ce72efb02","unresolved":false,"context_lines":[{"line_number":7,"context_line":"coverage!\u003d4.4,\u003e\u003d4.0 # Apache-2.0"},{"line_number":8,"context_line":"ddt\u003e\u003d1.0.1 # MIT"},{"line_number":9,"context_line":"fixtures\u003e\u003d3.0.0 # Apache-2.0/BSD"},{"line_number":10,"context_line":"libvirt-python\u003e\u003d3.0.0 # GPLv2"},{"line_number":11,"context_line":"mock\u003e\u003d3.0.0 # BSD"},{"line_number":12,"context_line":"mox3\u003e\u003d0.20.0 # Apache-2.0"},{"line_number":13,"context_line":"psycopg2\u003e\u003d2.7 # LGPL/ZPL"}],"source_content_type":"text/plain","patch_set":1,"id":"7faddb67_f355d31e","line":10,"range":{"start_line":10,"start_character":23,"end_line":10,"end_character":29},"in_reply_to":"7faddb67_53ff0733","updated":"2019-08-21 14:39:41.000000000","message":"Yeah, we purged it in favour of using fakelibvirt for all unit testing to avoid the native dep.\n\nI don\u0027t see a reason why we can\u0027t validate the tpool proxying against fakelibvirt instead.","commit_id":"eaa1d27b4b17e41ddd6ef09cdd5d4b1968e5232f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"126e672c1f9af13876941f4368ec390cffb5e679","unresolved":false,"context_lines":[{"line_number":7,"context_line":"coverage!\u003d4.4,\u003e\u003d4.0 # Apache-2.0"},{"line_number":8,"context_line":"ddt\u003e\u003d1.0.1 # MIT"},{"line_number":9,"context_line":"fixtures\u003e\u003d3.0.0 # Apache-2.0/BSD"},{"line_number":10,"context_line":"libvirt-python\u003e\u003d3.0.0 # GPLv2"},{"line_number":11,"context_line":"mock\u003e\u003d3.0.0 # BSD"},{"line_number":12,"context_line":"mox3\u003e\u003d0.20.0 # Apache-2.0"},{"line_number":13,"context_line":"psycopg2\u003e\u003d2.7 # LGPL/ZPL"}],"source_content_type":"text/plain","patch_set":1,"id":"7faddb67_53ff0733","line":10,"range":{"start_line":10,"start_character":23,"end_line":10,"end_character":29},"in_reply_to":"7faddb67_f3e2b32f","updated":"2019-08-21 14:36:29.000000000","message":"Can we avoid putting this in test-requirements? I think it introduces a new native binary dependency for local development doesn\u0027t it? I seem to remember we had libvirt-python in test-requirements many years ago but removed it because of that, or some issues with the gate, or libvirt-python in pypi, I can\u0027t remember off the top of my head. If we do want a dependency, can we put it into [extras] and load it up that way, although I\u0027m not sure using [extras] helps for local dev. If we do have this, then we probably want an entry in bindep I\u0027d think, but maybe I should pull this down first and see if it\u0027s a problem before complaining. :)","commit_id":"eaa1d27b4b17e41ddd6ef09cdd5d4b1968e5232f"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"a10f573337882ffe25594f9cfb0d00e6ca44eccb","unresolved":false,"context_lines":[{"line_number":7,"context_line":"coverage!\u003d4.4,\u003e\u003d4.0 # Apache-2.0"},{"line_number":8,"context_line":"ddt\u003e\u003d1.0.1 # MIT"},{"line_number":9,"context_line":"fixtures\u003e\u003d3.0.0 # Apache-2.0/BSD"},{"line_number":10,"context_line":"libvirt-python\u003e\u003d3.0.0 # GPLv2"},{"line_number":11,"context_line":"mock\u003e\u003d3.0.0 # BSD"},{"line_number":12,"context_line":"mox3\u003e\u003d0.20.0 # Apache-2.0"},{"line_number":13,"context_line":"psycopg2\u003e\u003d2.7 # LGPL/ZPL"}],"source_content_type":"text/plain","patch_set":2,"id":"7faddb67_d3a457bb","line":10,"range":{"start_line":10,"start_character":24,"end_line":10,"end_character":29},"updated":"2019-08-21 14:24:55.000000000","message":"LGPLv2+","commit_id":"4db045821e4c1cc23a05af9794092d8df15614f5"}]}
