)]}'
{"nova/tests/unit/virt/powervm/test_driver.py":[{"author":{"_account_id":8190,"name":"Drew Thorstensen (thorst)","email":"thorst@us.ibm.com","username":"thorst"},"change_message_id":"2887b109263c1ddb893c67fb493a16ef9ab88186","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2016 IBM Corp."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":2,"id":"da36d5c6_95c0a72c","line":1,"range":{"start_line":1,"start_character":15,"end_line":1,"end_character":16},"updated":"2017-02-27 16:49:33.000000000","message":"2017 now","commit_id":"bfdf81d248f7a7bc4e651d91c0465bb9ced8abe8"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"40056ef78c7ccf65af805ca86b4e01b485032c1e","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2016 IBM Corp."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":2,"id":"da36d5c6_158757d8","line":1,"range":{"start_line":1,"start_character":15,"end_line":1,"end_character":16},"in_reply_to":"da36d5c6_95c0a72c","updated":"2017-02-27 16:52:24.000000000","message":"Done.  (Coulda sworn I ...)","commit_id":"bfdf81d248f7a7bc4e651d91c0465bb9ced8abe8"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b39d60501fbf6fb58baa20d2c61530870b30a531","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2017 IBM Corp."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":6,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a30ddce_a437694b","line":3,"updated":"2017-03-12 23:30:18.000000000","message":"ditto","commit_id":"29b12a5000f4ae6c4397fe84721beffa52209c32"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"998b9346f53ddfbc28501bbd406deec28692e66e","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2017 IBM Corp."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":6,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a25e98e_e1867d64","line":3,"in_reply_to":"9a30ddce_a437694b","updated":"2017-03-16 19:48:53.000000000","message":"Done","commit_id":"29b12a5000f4ae6c4397fe84721beffa52209c32"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b39d60501fbf6fb58baa20d2c61530870b30a531","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"class TestPowerVMDriver(test.NoDBTestCase):"},{"line_number":21,"context_line":"    # TODO(efried): Add tests for spawn \u0026 delete once they have content."},{"line_number":22,"context_line":"    pass"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a30ddce_641811d4","line":22,"updated":"2017-03-12 23:30:18.000000000","message":"spawn and destroy don\u0027t do anything here, but you could test things like init_host, get_info, get_available_nodes and list_instances.","commit_id":"29b12a5000f4ae6c4397fe84721beffa52209c32"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"998b9346f53ddfbc28501bbd406deec28692e66e","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"class TestPowerVMDriver(test.NoDBTestCase):"},{"line_number":21,"context_line":"    # TODO(efried): Add tests for spawn \u0026 delete once they have content."},{"line_number":22,"context_line":"    pass"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a1ced50_8fb6d83b","line":22,"in_reply_to":"9a30ddce_641811d4","updated":"2017-03-16 19:48:53.000000000","message":"Yes, good catch, done.","commit_id":"29b12a5000f4ae6c4397fe84721beffa52209c32"}],"nova/tests/unit/virt/powervm/test_host.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b39d60501fbf6fb58baa20d2c61530870b30a531","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2016 IBM Corp."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":6,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a30ddce_c4429dad","line":3,"updated":"2017-03-12 23:30:18.000000000","message":"yar","commit_id":"29b12a5000f4ae6c4397fe84721beffa52209c32"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"998b9346f53ddfbc28501bbd406deec28692e66e","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2016 IBM Corp."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":6,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a1ff146_53ba8b6f","line":3,"in_reply_to":"9a30ddce_c4429dad","updated":"2017-03-16 19:48:53.000000000","message":"Done","commit_id":"29b12a5000f4ae6c4397fe84721beffa52209c32"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b39d60501fbf6fb58baa20d2c61530870b30a531","unresolved":false,"context_lines":[{"line_number":30,"context_line":"                mock.Mock(port_id\u003d3, label\u003d\u0027\u0027, supp_max_lps\u003d2)]),"},{"line_number":31,"context_line":"            mock.Mock(sriov_adap_id\u003d4, phys_ports\u003d["},{"line_number":32,"context_line":"                mock.Mock(port_id\u003d5, label\u003d\u0027bar\u0027, supp_max_lps\u003d3)])]"},{"line_number":33,"context_line":"        ms_wrapper \u003d mock.MagicMock("},{"line_number":34,"context_line":"            proc_units_configurable\u003d500,"},{"line_number":35,"context_line":"            proc_units_avail\u003d500,"},{"line_number":36,"context_line":"            memory_configurable\u003d5242880,"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a30ddce_8434254a","line":33,"range":{"start_line":33,"start_character":26,"end_line":33,"end_character":35},"updated":"2017-03-12 23:30:18.000000000","message":"nit: might be nice to autospec the mocks for the objects that come out of the pypowervm library just to make sure we don\u0027t screw something up where we\u0027re setting attributes on a mock that don\u0027t actually exist in the real object in pypowervm.","commit_id":"29b12a5000f4ae6c4397fe84721beffa52209c32"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"998b9346f53ddfbc28501bbd406deec28692e66e","unresolved":false,"context_lines":[{"line_number":30,"context_line":"                mock.Mock(port_id\u003d3, label\u003d\u0027\u0027, supp_max_lps\u003d2)]),"},{"line_number":31,"context_line":"            mock.Mock(sriov_adap_id\u003d4, phys_ports\u003d["},{"line_number":32,"context_line":"                mock.Mock(port_id\u003d5, label\u003d\u0027bar\u0027, supp_max_lps\u003d3)])]"},{"line_number":33,"context_line":"        ms_wrapper \u003d mock.MagicMock("},{"line_number":34,"context_line":"            proc_units_configurable\u003d500,"},{"line_number":35,"context_line":"            proc_units_avail\u003d500,"},{"line_number":36,"context_line":"            memory_configurable\u003d5242880,"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a1ced50_c957f5c8","line":33,"range":{"start_line":33,"start_character":26,"end_line":33,"end_character":35},"in_reply_to":"9a30ddce_8434254a","updated":"2017-03-16 19:48:53.000000000","message":"One man\u0027s nit is another man\u0027s Swamp Thing.  But thanks for making me a better developer.\n\nDone.","commit_id":"29b12a5000f4ae6c4397fe84721beffa52209c32"},{"author":{"_account_id":8190,"name":"Drew Thorstensen (thorst)","email":"thorst@us.ibm.com","username":"thorst"},"change_message_id":"d5d5677f77d8ce4d49a544cbce14e3087e4aed07","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from nova.virt.powervm import host as pvm_host"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"def mock_sriov(adap_id, pports):"},{"line_number":26,"context_line":"    sriov \u003d mock.create_autospec(pvm_card.SRIOVAdapter, spec_set\u003dTrue)"},{"line_number":27,"context_line":"    sriov.configure_mock(sriov_adap_id\u003dadap_id, phys_ports\u003dpports)"},{"line_number":28,"context_line":"    return sriov"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"def mock_pport(port_id, label, maxlps):"},{"line_number":32,"context_line":"    port \u003d mock.create_autospec(pvm_card.SRIOVEthPPort, spec_set\u003dTrue)"},{"line_number":33,"context_line":"    port.configure_mock(port_id\u003dport_id, label\u003dlabel, supp_max_lps\u003dmaxlps)"},{"line_number":34,"context_line":"    return port"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"class TestPowerVMHost(test.NoDBTestCase):"}],"source_content_type":"text/x-python","patch_set":11,"id":"ffe62b97_f357d301","line":34,"range":{"start_line":25,"start_character":0,"end_line":34,"end_character":15},"updated":"2017-03-27 12:48:24.000000000","message":"I\u0027m good with this, but nothing in the code actually uses the SR-IOV (and its pport) logic yet.  But its fine to put in for now, as we will have it eventually.","commit_id":"8974603fba83d2ec303ae4de278feca959b92ab1"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"c9aa9be92204c7750cd732d92f4c031a61d6ae27","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from nova.virt.powervm import host as pvm_host"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"def mock_sriov(adap_id, pports):"},{"line_number":26,"context_line":"    sriov \u003d mock.create_autospec(pvm_card.SRIOVAdapter, spec_set\u003dTrue)"},{"line_number":27,"context_line":"    sriov.configure_mock(sriov_adap_id\u003dadap_id, phys_ports\u003dpports)"},{"line_number":28,"context_line":"    return sriov"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"def mock_pport(port_id, label, maxlps):"},{"line_number":32,"context_line":"    port \u003d mock.create_autospec(pvm_card.SRIOVEthPPort, spec_set\u003dTrue)"},{"line_number":33,"context_line":"    port.configure_mock(port_id\u003dport_id, label\u003dlabel, supp_max_lps\u003dmaxlps)"},{"line_number":34,"context_line":"    return port"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"class TestPowerVMHost(test.NoDBTestCase):"}],"source_content_type":"text/x-python","patch_set":11,"id":"bff0334d_6c363de9","line":34,"range":{"start_line":25,"start_character":0,"end_line":34,"end_character":15},"in_reply_to":"bff0334d_26bf3462","updated":"2017-04-07 18:49:44.000000000","message":"Done","commit_id":"8974603fba83d2ec303ae4de278feca959b92ab1"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0a8ebcf505cf1cc184aa8e5a11dddc3d07089f4d","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from nova.virt.powervm import host as pvm_host"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"def mock_sriov(adap_id, pports):"},{"line_number":26,"context_line":"    sriov \u003d mock.create_autospec(pvm_card.SRIOVAdapter, spec_set\u003dTrue)"},{"line_number":27,"context_line":"    sriov.configure_mock(sriov_adap_id\u003dadap_id, phys_ports\u003dpports)"},{"line_number":28,"context_line":"    return sriov"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"def mock_pport(port_id, label, maxlps):"},{"line_number":32,"context_line":"    port \u003d mock.create_autospec(pvm_card.SRIOVEthPPort, spec_set\u003dTrue)"},{"line_number":33,"context_line":"    port.configure_mock(port_id\u003dport_id, label\u003dlabel, supp_max_lps\u003dmaxlps)"},{"line_number":34,"context_line":"    return port"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"class TestPowerVMHost(test.NoDBTestCase):"}],"source_content_type":"text/x-python","patch_set":11,"id":"bff0334d_26bf3462","line":34,"range":{"start_line":25,"start_character":0,"end_line":34,"end_character":15},"in_reply_to":"ffe62b97_f357d301","updated":"2017-04-07 18:23:44.000000000","message":"Yeah I was wondering about this too....","commit_id":"8974603fba83d2ec303ae4de278feca959b92ab1"}],"nova/virt/powervm/__init__.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b39d60501fbf6fb58baa20d2c61530870b30a531","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2017 IBM Corp."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":6,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a30ddce_24fe19ae","line":3,"updated":"2017-03-12 23:30:18.000000000","message":"We can remove this line I believe - it wasn\u0027t required for IBM at least from what I remember.","commit_id":"29b12a5000f4ae6c4397fe84721beffa52209c32"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"998b9346f53ddfbc28501bbd406deec28692e66e","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2017 IBM Corp."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":6,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a25e98e_6137ede3","line":3,"in_reply_to":"9a30ddce_19ade09a","updated":"2017-03-16 19:48:53.000000000","message":"TL;DR: Gonna rip it out of all the files.\n\nOkay, so we found those guidelines, and they say:\n\n\"You should never add \u0027All Rights Reserved\u0027 when contributing back to the community.   If it already exists in the file, do not remove or modify it.\"\n\nSince we\u0027re porting this code over from nova-powervm, where it already exists in the file, that would say leave it in.  But arguably we shouldn\u0027t have had it in nova-powervm in the first place.  Also arguably, these are \"new\" files, even though their content is substantially duplicated from existing files.\n\nI would be inclined to take the path of least resistance and just leave it in place, rather than trying to remember to rip it out of the 70-odd files we\u0027re going to wind up porting eventually... Buuut, a few files (like this one) are special - they\u0027re being introduced anew in-tree.  So by the guidelines, they definitely shouldn\u0027t have \"All Rights Reserved.\"\n\nSo rather than trying to determine which files to count as \"new\", I\u0027m going to take the line that they\u0027re *all* new, and rip this phrase out of all of them.\n\nGah, -1 to (both of us) spending nonproductive time on something that, by all indications, is a legal no-op anyway.","commit_id":"29b12a5000f4ae6c4397fe84721beffa52209c32"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"e8a609ae8ade4e39895fc10a73be4b460cdf1f19","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2017 IBM Corp."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":6,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a30ddce_c2c99627","line":3,"in_reply_to":"9a30ddce_24fe19ae","updated":"2017-03-13 15:28:41.000000000","message":"I see 772 other (non-powervm) files in tree with this line.  Before I try talking to legal, can I get an idea of why it\u0027s a problem?","commit_id":"29b12a5000f4ae6c4397fe84721beffa52209c32"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"50a692de2c39dbf2937b213c8ee99c5ec0ca1673","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2017 IBM Corp."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":6,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a30ddce_19ade09a","line":3,"in_reply_to":"9a30ddce_c2c99627","updated":"2017-03-13 15:56:17.000000000","message":"I can\u0027t get to the internal IBM copyright guidelines anymore, but I remember there was something in there about specifically not using \"All Rights Reserved\" for new files in upstream contributions. Maybe you guys are going off a different copyright guideline internal to IBM. It\u0027s not a blocker for me, but just something I remember.","commit_id":"29b12a5000f4ae6c4397fe84721beffa52209c32"}],"nova/virt/powervm/driver.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b39d60501fbf6fb58baa20d2c61530870b30a531","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2014, 2017 IBM Corp."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":6,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a30ddce_442f8d3e","line":3,"updated":"2017-03-12 23:30:18.000000000","message":"ditto","commit_id":"29b12a5000f4ae6c4397fe84721beffa52209c32"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"998b9346f53ddfbc28501bbd406deec28692e66e","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2014, 2017 IBM Corp."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":6,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a25e98e_61928d59","line":3,"in_reply_to":"9a30ddce_442f8d3e","updated":"2017-03-16 19:48:53.000000000","message":"Done","commit_id":"29b12a5000f4ae6c4397fe84721beffa52209c32"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b39d60501fbf6fb58baa20d2c61530870b30a531","unresolved":false,"context_lines":[{"line_number":34,"context_line":"class PowerVMDriver(driver.ComputeDriver):"},{"line_number":35,"context_line":"    \"\"\"PowerVM Implementation of Compute Driver.\"\"\""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    capabilities \u003d {"},{"line_number":38,"context_line":"        \"has_imagecache\": False,"},{"line_number":39,"context_line":"        \"supports_recreate\": False,"},{"line_number":40,"context_line":"        \"supports_migrate_to_same_host\": False,"},{"line_number":41,"context_line":"        \"supports_attach_interface\": False,"},{"line_number":42,"context_line":"        \"supports_device_tagging\": False,"},{"line_number":43,"context_line":"    }"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def __init__(self, virtapi):"},{"line_number":46,"context_line":"        super(PowerVMDriver, self).__init__(virtapi)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a30ddce_8425055d","line":43,"range":{"start_line":37,"start_character":4,"end_line":43,"end_character":5},"updated":"2017-03-12 23:30:18.000000000","message":"This is the same as in the base class. Personally I\u0027d just omit this until you actually needed to override the defaults.","commit_id":"29b12a5000f4ae6c4397fe84721beffa52209c32"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"998b9346f53ddfbc28501bbd406deec28692e66e","unresolved":false,"context_lines":[{"line_number":34,"context_line":"class PowerVMDriver(driver.ComputeDriver):"},{"line_number":35,"context_line":"    \"\"\"PowerVM Implementation of Compute Driver.\"\"\""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    capabilities \u003d {"},{"line_number":38,"context_line":"        \"has_imagecache\": False,"},{"line_number":39,"context_line":"        \"supports_recreate\": False,"},{"line_number":40,"context_line":"        \"supports_migrate_to_same_host\": False,"},{"line_number":41,"context_line":"        \"supports_attach_interface\": False,"},{"line_number":42,"context_line":"        \"supports_device_tagging\": False,"},{"line_number":43,"context_line":"    }"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def __init__(self, virtapi):"},{"line_number":46,"context_line":"        super(PowerVMDriver, self).__init__(virtapi)"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a25e98e_819f895e","line":43,"range":{"start_line":37,"start_character":4,"end_line":43,"end_character":5},"in_reply_to":"9a30ddce_8425055d","updated":"2017-03-16 19:48:53.000000000","message":"Done","commit_id":"29b12a5000f4ae6c4397fe84721beffa52209c32"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b39d60501fbf6fb58baa20d2c61530870b30a531","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        # Build the adapter.  May need to attempt the connection multiple times"},{"line_number":54,"context_line":"        # in case the PowerVM management API service is starting."},{"line_number":55,"context_line":"        self.adapter \u003d pvm_apt.Adapter("},{"line_number":56,"context_line":"            pvm_apt.Session(conn_tries\u003d300),"},{"line_number":57,"context_line":"            helpers\u003d[log_hlp.log_helper, vio_hlp.vios_busy_retry_helper])"},{"line_number":58,"context_line":"        # Make sure the Virtual I/O Server(s) are available."},{"line_number":59,"context_line":"        pvm_par.validate_vios_ready(self.adapter)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a30ddce_a4284934","line":56,"range":{"start_line":56,"start_character":28,"end_line":56,"end_character":42},"updated":"2017-03-12 23:30:18.000000000","message":"Is this blocking and if so, is it 300 seconds? Seems bad to block the nova-compute services from starting that long.","commit_id":"29b12a5000f4ae6c4397fe84721beffa52209c32"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"998b9346f53ddfbc28501bbd406deec28692e66e","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        # Build the adapter.  May need to attempt the connection multiple times"},{"line_number":54,"context_line":"        # in case the PowerVM management API service is starting."},{"line_number":55,"context_line":"        self.adapter \u003d pvm_apt.Adapter("},{"line_number":56,"context_line":"            pvm_apt.Session(conn_tries\u003d300),"},{"line_number":57,"context_line":"            helpers\u003d[log_hlp.log_helper, vio_hlp.vios_busy_retry_helper])"},{"line_number":58,"context_line":"        # Make sure the Virtual I/O Server(s) are available."},{"line_number":59,"context_line":"        pvm_par.validate_vios_ready(self.adapter)"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a25e98e_81c4e940","line":56,"range":{"start_line":56,"start_character":28,"end_line":56,"end_character":42},"in_reply_to":"9a30ddce_79da5c18","updated":"2017-03-16 19:48:53.000000000","message":"I was getting some déjà vu here - turns out mikal had a similar concern, though we never concluded: https://review.openstack.org/#/c/391288/27/nova/virt/powervm/driver.py@76\n\nPer IRC (http://eavesdrop.openstack.org/irclogs/%23openstack-nova/%23openstack-nova.2017-03-14.log.html#t2017-03-14T21:48:02), reducing this to 2 minutes, and adding a TODO to implement compute service disable/enable à la I73a34eb6e0ca32d03e54d12a5e066b2ed4f19a61.","commit_id":"29b12a5000f4ae6c4397fe84721beffa52209c32"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"e8a609ae8ade4e39895fc10a73be4b460cdf1f19","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        # Build the adapter.  May need to attempt the connection multiple times"},{"line_number":54,"context_line":"        # in case the PowerVM management API service is starting."},{"line_number":55,"context_line":"        self.adapter \u003d pvm_apt.Adapter("},{"line_number":56,"context_line":"            pvm_apt.Session(conn_tries\u003d300),"},{"line_number":57,"context_line":"            helpers\u003d[log_hlp.log_helper, vio_hlp.vios_busy_retry_helper])"},{"line_number":58,"context_line":"        # Make sure the Virtual I/O Server(s) are available."},{"line_number":59,"context_line":"        pvm_par.validate_vios_ready(self.adapter)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a30ddce_d6d5d742","line":56,"range":{"start_line":56,"start_character":28,"end_line":56,"end_character":42},"in_reply_to":"9a30ddce_a4284934","updated":"2017-03-13 15:28:41.000000000","message":"Assuming init_host is synchronous, yes, it\u0027s blocking.  There\u0027s a 2s sleep between tries, so this is 10 minutes.  But the compute service is dead in the water if this doesn\u0027t work - i.e. the Session initializer will raise and kill n-cpu.\n\nIs that not the right behavior?","commit_id":"29b12a5000f4ae6c4397fe84721beffa52209c32"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"50a692de2c39dbf2937b213c8ee99c5ec0ca1673","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        # Build the adapter.  May need to attempt the connection multiple times"},{"line_number":54,"context_line":"        # in case the PowerVM management API service is starting."},{"line_number":55,"context_line":"        self.adapter \u003d pvm_apt.Adapter("},{"line_number":56,"context_line":"            pvm_apt.Session(conn_tries\u003d300),"},{"line_number":57,"context_line":"            helpers\u003d[log_hlp.log_helper, vio_hlp.vios_busy_retry_helper])"},{"line_number":58,"context_line":"        # Make sure the Virtual I/O Server(s) are available."},{"line_number":59,"context_line":"        pvm_par.validate_vios_ready(self.adapter)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a30ddce_79da5c18","line":56,"range":{"start_line":56,"start_character":28,"end_line":56,"end_character":42},"in_reply_to":"9a30ddce_d6d5d742","updated":"2017-03-13 15:56:17.000000000","message":"Hmm, well, we don\u0027t want to act like nova-compute is running when you can\u0027t actually use it, but blocking for 10 minutes on startup is also not great.\n\nI\u0027m wondering if we can startup nova-compute but disable the service until we know it\u0027s ready, sort of like how the libvirt driver handles connection failures, it will auto-disable the compute service record in the database, and when it reconnects it will auto-enable the compute service record in the DB. This way it\u0027s out of contention for scheduling, but the service is still running. You\u0027d have to have some kind of event callback or periodic check until you know that the session is connected though.\n\nMaybe take this to the mailing list and see if it\u0027s a similar problem for other virt drivers like vcenter?","commit_id":"29b12a5000f4ae6c4397fe84721beffa52209c32"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b39d60501fbf6fb58baa20d2c61530870b30a531","unresolved":false,"context_lines":[{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        :state:           the running state, one of the power_state codes"},{"line_number":77,"context_line":"        :max_mem:         (int) the maximum memory in KBytes allowed"},{"line_number":78,"context_line":"        :mem:             (int) the memory in KBytes used by the domain"},{"line_number":79,"context_line":"        :num_cpu:         (int) the number of virtual CPUs for the domain"},{"line_number":80,"context_line":"        :cpu_time:        (int) the CPU time used in nanoseconds"},{"line_number":81,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"9a30ddce_64a731bd","line":78,"range":{"start_line":78,"start_character":9,"end_line":78,"end_character":12},"updated":"2017-03-12 23:30:18.000000000","message":"mem_kb","commit_id":"29b12a5000f4ae6c4397fe84721beffa52209c32"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"998b9346f53ddfbc28501bbd406deec28692e66e","unresolved":false,"context_lines":[{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        :state:           the running state, one of the power_state codes"},{"line_number":77,"context_line":"        :max_mem:         (int) the maximum memory in KBytes allowed"},{"line_number":78,"context_line":"        :mem:             (int) the memory in KBytes used by the domain"},{"line_number":79,"context_line":"        :num_cpu:         (int) the number of virtual CPUs for the domain"},{"line_number":80,"context_line":"        :cpu_time:        (int) the CPU time used in nanoseconds"},{"line_number":81,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"3a1ff146_05355e45","line":78,"range":{"start_line":78,"start_character":9,"end_line":78,"end_character":12},"in_reply_to":"9a30ddce_64a731bd","updated":"2017-03-16 19:48:53.000000000","message":"Done","commit_id":"29b12a5000f4ae6c4397fe84721beffa52209c32"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b39d60501fbf6fb58baa20d2c61530870b30a531","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        :max_mem:         (int) the maximum memory in KBytes allowed"},{"line_number":78,"context_line":"        :mem:             (int) the memory in KBytes used by the domain"},{"line_number":79,"context_line":"        :num_cpu:         (int) the number of virtual CPUs for the domain"},{"line_number":80,"context_line":"        :cpu_time:        (int) the CPU time used in nanoseconds"},{"line_number":81,"context_line":"        \"\"\""},{"line_number":82,"context_line":"        return hardware.InstanceInfo(state\u003dpower_state.NOSTATE)"},{"line_number":83,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"9a30ddce_84aa6583","line":80,"range":{"start_line":80,"start_character":9,"end_line":80,"end_character":17},"updated":"2017-03-12 23:30:18.000000000","message":"cpu_time_ns","commit_id":"29b12a5000f4ae6c4397fe84721beffa52209c32"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"998b9346f53ddfbc28501bbd406deec28692e66e","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        :max_mem:         (int) the maximum memory in KBytes allowed"},{"line_number":78,"context_line":"        :mem:             (int) the memory in KBytes used by the domain"},{"line_number":79,"context_line":"        :num_cpu:         (int) the number of virtual CPUs for the domain"},{"line_number":80,"context_line":"        :cpu_time:        (int) the CPU time used in nanoseconds"},{"line_number":81,"context_line":"        \"\"\""},{"line_number":82,"context_line":"        return hardware.InstanceInfo(state\u003dpower_state.NOSTATE)"},{"line_number":83,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3a1ff146_253a5a37","line":80,"range":{"start_line":80,"start_character":9,"end_line":80,"end_character":17},"in_reply_to":"9a30ddce_84aa6583","updated":"2017-03-16 19:48:53.000000000","message":"Done","commit_id":"29b12a5000f4ae6c4397fe84721beffa52209c32"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b39d60501fbf6fb58baa20d2c61530870b30a531","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        :mem:             (int) the memory in KBytes used by the domain"},{"line_number":79,"context_line":"        :num_cpu:         (int) the number of virtual CPUs for the domain"},{"line_number":80,"context_line":"        :cpu_time:        (int) the CPU time used in nanoseconds"},{"line_number":81,"context_line":"        \"\"\""},{"line_number":82,"context_line":"        return hardware.InstanceInfo(state\u003dpower_state.NOSTATE)"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    def list_instances(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a30ddce_a4ada99c","line":81,"updated":"2017-03-12 23:30:18.000000000","message":"There is also:\n\n:param id: a unique ID for the instance","commit_id":"29b12a5000f4ae6c4397fe84721beffa52209c32"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"998b9346f53ddfbc28501bbd406deec28692e66e","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        :mem:             (int) the memory in KBytes used by the domain"},{"line_number":79,"context_line":"        :num_cpu:         (int) the number of virtual CPUs for the domain"},{"line_number":80,"context_line":"        :cpu_time:        (int) the CPU time used in nanoseconds"},{"line_number":81,"context_line":"        \"\"\""},{"line_number":82,"context_line":"        return hardware.InstanceInfo(state\u003dpower_state.NOSTATE)"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    def list_instances(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a1ff146_453f5625","line":81,"in_reply_to":"9a30ddce_a4ada99c","updated":"2017-03-16 19:48:53.000000000","message":"Done","commit_id":"29b12a5000f4ae6c4397fe84721beffa52209c32"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b39d60501fbf6fb58baa20d2c61530870b30a531","unresolved":false,"context_lines":[{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        return [self.host_wrapper.mtms.mtms_str]"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    def get_available_resource(self, nodename):"},{"line_number":104,"context_line":"        \"\"\"Retrieve resource information."},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        This method is called when nova-compute launches, and as part of a"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a30ddce_049f555f","line":103,"range":{"start_line":103,"start_character":8,"end_line":103,"end_character":30},"updated":"2017-03-12 23:30:18.000000000","message":"FYI, as of https://review.openstack.org/#/c/441543/ we\u0027re going to be moving virt drivers over to the new get_inventory method.","commit_id":"29b12a5000f4ae6c4397fe84721beffa52209c32"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"998b9346f53ddfbc28501bbd406deec28692e66e","unresolved":false,"context_lines":[{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        return [self.host_wrapper.mtms.mtms_str]"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    def get_available_resource(self, nodename):"},{"line_number":104,"context_line":"        \"\"\"Retrieve resource information."},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        This method is called when nova-compute launches, and as part of a"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a1ff146_1bb10fe2","line":103,"range":{"start_line":103,"start_character":8,"end_line":103,"end_character":30},"in_reply_to":"9a30ddce_049f555f","updated":"2017-03-16 19:48:53.000000000","message":"If I understand correctly, we\u0027ve got a release or two to port over.  Adding a TODO, will convert in a subsequent change set.","commit_id":"29b12a5000f4ae6c4397fe84721beffa52209c32"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b39d60501fbf6fb58baa20d2c61530870b30a531","unresolved":false,"context_lines":[{"line_number":117,"context_line":"        data \u003d host.build_host_resource_from_ms(self.host_wrapper)"},{"line_number":118,"context_line":"        # Add the disk information"},{"line_number":119,"context_line":"        # TODO(efried): Get real stats when disk support is added."},{"line_number":120,"context_line":"        data[\"local_gb\"] \u003d 100000"},{"line_number":121,"context_line":"        data[\"local_gb_used\"] \u003d 10"},{"line_number":122,"context_line":"        return data"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def spawn(self, context, instance, image_meta, injected_files,"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a30ddce_84afc57b","line":121,"range":{"start_line":120,"start_character":8,"end_line":121,"end_character":34},"updated":"2017-03-12 23:30:18.000000000","message":"Why can\u0027t this live in build_host_resource_from_ms with the other keys?","commit_id":"29b12a5000f4ae6c4397fe84721beffa52209c32"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"998b9346f53ddfbc28501bbd406deec28692e66e","unresolved":false,"context_lines":[{"line_number":117,"context_line":"        data \u003d host.build_host_resource_from_ms(self.host_wrapper)"},{"line_number":118,"context_line":"        # Add the disk information"},{"line_number":119,"context_line":"        # TODO(efried): Get real stats when disk support is added."},{"line_number":120,"context_line":"        data[\"local_gb\"] \u003d 100000"},{"line_number":121,"context_line":"        data[\"local_gb_used\"] \u003d 10"},{"line_number":122,"context_line":"        return data"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def spawn(self, context, instance, image_meta, injected_files,"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a1ff146_86692628","line":121,"range":{"start_line":120,"start_character":8,"end_line":121,"end_character":34},"in_reply_to":"9a30ddce_84afc57b","updated":"2017-03-16 19:48:53.000000000","message":"The \u0027ms\u0027 stands for ManagedSystem, the PowerVM REST object from which all the other resource data are extracted.  The disk info comes from another object that the disk driver will know about, once that\u0027s implemented:\n\nhttps://review.openstack.org/#/c/443189/9/nova/virt/powervm/driver.py@148\n\nIf there were more than two data points, we might have implemented another helper method (build_host_resource_from_disk_driver?), but it didn\u0027t seem worthwhile for just two.","commit_id":"29b12a5000f4ae6c4397fe84721beffa52209c32"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b39d60501fbf6fb58baa20d2c61530870b30a531","unresolved":false,"context_lines":[{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def spawn(self, context, instance, image_meta, injected_files,"},{"line_number":125,"context_line":"              admin_password, network_info\u003dNone, block_device_info\u003dNone,"},{"line_number":126,"context_line":"              flavor\u003dNone):"},{"line_number":127,"context_line":"        \"\"\"Create a new instance/VM/domain on the virtualization platform."},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"        Once this successfully completes, the instance should be"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a30ddce_44922d4d","line":126,"range":{"start_line":126,"start_character":14,"end_line":126,"end_character":25},"updated":"2017-03-12 23:30:18.000000000","message":"This is no longer part of the ComputeDriver\u0027s definition of spawn in upstream nova, the flavor is stored on the instance now (instance.flavor).","commit_id":"29b12a5000f4ae6c4397fe84721beffa52209c32"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"998b9346f53ddfbc28501bbd406deec28692e66e","unresolved":false,"context_lines":[{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def spawn(self, context, instance, image_meta, injected_files,"},{"line_number":125,"context_line":"              admin_password, network_info\u003dNone, block_device_info\u003dNone,"},{"line_number":126,"context_line":"              flavor\u003dNone):"},{"line_number":127,"context_line":"        \"\"\"Create a new instance/VM/domain on the virtualization platform."},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"        Once this successfully completes, the instance should be"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a1ff146_f337f7ad","line":126,"range":{"start_line":126,"start_character":14,"end_line":126,"end_character":25},"in_reply_to":"9a30ddce_44922d4d","updated":"2017-03-16 19:48:53.000000000","message":"Done","commit_id":"29b12a5000f4ae6c4397fe84721beffa52209c32"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b39d60501fbf6fb58baa20d2c61530870b30a531","unresolved":false,"context_lines":[{"line_number":142,"context_line":"        :param injected_files: User files to inject into instance."},{"line_number":143,"context_line":"        :param admin_password: Administrator password to set in instance."},{"line_number":144,"context_line":"        :param network_info:"},{"line_number":145,"context_line":"           :py:meth:`~nova.network.manager.NetworkManager.get_instance_nw_info`"},{"line_number":146,"context_line":"        :param block_device_info: Information about block devices to be"},{"line_number":147,"context_line":"                                  attached to the instance."},{"line_number":148,"context_line":"        :param flavor: The flavor for the instance to be spawned."}],"source_content_type":"text/x-python","patch_set":5,"id":"9a30ddce_2471b944","line":145,"range":{"start_line":145,"start_character":22,"end_line":145,"end_character":78},"updated":"2017-03-12 23:30:18.000000000","message":"This is wrong, maybe copied from somewhere else, but this is nova-network and that\u0027s not really where this could be coming from, it\u0027s really more coming from nova.compute.manager.ComputeManager._allocate_network.","commit_id":"29b12a5000f4ae6c4397fe84721beffa52209c32"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"998b9346f53ddfbc28501bbd406deec28692e66e","unresolved":false,"context_lines":[{"line_number":142,"context_line":"        :param injected_files: User files to inject into instance."},{"line_number":143,"context_line":"        :param admin_password: Administrator password to set in instance."},{"line_number":144,"context_line":"        :param network_info:"},{"line_number":145,"context_line":"           :py:meth:`~nova.network.manager.NetworkManager.get_instance_nw_info`"},{"line_number":146,"context_line":"        :param block_device_info: Information about block devices to be"},{"line_number":147,"context_line":"                                  attached to the instance."},{"line_number":148,"context_line":"        :param flavor: The flavor for the instance to be spawned."}],"source_content_type":"text/x-python","patch_set":5,"id":"3a1ff146_93ca436d","line":145,"range":{"start_line":145,"start_character":22,"end_line":145,"end_character":78},"in_reply_to":"9a30ddce_2471b944","updated":"2017-03-16 19:48:53.000000000","message":"Re-copied in from superclass.","commit_id":"29b12a5000f4ae6c4397fe84721beffa52209c32"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b39d60501fbf6fb58baa20d2c61530870b30a531","unresolved":false,"context_lines":[{"line_number":145,"context_line":"           :py:meth:`~nova.network.manager.NetworkManager.get_instance_nw_info`"},{"line_number":146,"context_line":"        :param block_device_info: Information about block devices to be"},{"line_number":147,"context_line":"                                  attached to the instance."},{"line_number":148,"context_line":"        :param flavor: The flavor for the instance to be spawned."},{"line_number":149,"context_line":"        \"\"\""},{"line_number":150,"context_line":"        self._log_operation(\u0027spawn\u0027, instance)"},{"line_number":151,"context_line":"        # TODO(efried): Take flavor extra specs into account"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a30ddce_64957131","line":148,"range":{"start_line":148,"start_character":7,"end_line":148,"end_character":65},"updated":"2017-03-12 23:30:18.000000000","message":"Remove.","commit_id":"29b12a5000f4ae6c4397fe84721beffa52209c32"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"998b9346f53ddfbc28501bbd406deec28692e66e","unresolved":false,"context_lines":[{"line_number":145,"context_line":"           :py:meth:`~nova.network.manager.NetworkManager.get_instance_nw_info`"},{"line_number":146,"context_line":"        :param block_device_info: Information about block devices to be"},{"line_number":147,"context_line":"                                  attached to the instance."},{"line_number":148,"context_line":"        :param flavor: The flavor for the instance to be spawned."},{"line_number":149,"context_line":"        \"\"\""},{"line_number":150,"context_line":"        self._log_operation(\u0027spawn\u0027, instance)"},{"line_number":151,"context_line":"        # TODO(efried): Take flavor extra specs into account"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a1ff146_f3d37736","line":148,"range":{"start_line":148,"start_character":7,"end_line":148,"end_character":65},"in_reply_to":"9a30ddce_64957131","updated":"2017-03-16 19:48:53.000000000","message":"Done","commit_id":"29b12a5000f4ae6c4397fe84721beffa52209c32"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b39d60501fbf6fb58baa20d2c61530870b30a531","unresolved":false,"context_lines":[{"line_number":158,"context_line":"        # TODO(efried): Power on the LPAR"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    def destroy(self, context, instance, network_info, block_device_info\u003dNone,"},{"line_number":161,"context_line":"                destroy_disks\u003dTrue, migrate_data\u003dNone):"},{"line_number":162,"context_line":"        \"\"\"Destroy (shutdown and delete) the specified instance."},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"        If the instance is not found (for example if networking failed), this"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a30ddce_e4a16195","line":161,"range":{"start_line":161,"start_character":36,"end_line":161,"end_character":53},"updated":"2017-03-12 23:30:18.000000000","message":"Looks like this is no longer used in the compute manager...but I see it\u0027s in the base ComputeDriver class definition. We should clean that up separately.","commit_id":"29b12a5000f4ae6c4397fe84721beffa52209c32"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"998b9346f53ddfbc28501bbd406deec28692e66e","unresolved":false,"context_lines":[{"line_number":158,"context_line":"        # TODO(efried): Power on the LPAR"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    def destroy(self, context, instance, network_info, block_device_info\u003dNone,"},{"line_number":161,"context_line":"                destroy_disks\u003dTrue, migrate_data\u003dNone):"},{"line_number":162,"context_line":"        \"\"\"Destroy (shutdown and delete) the specified instance."},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"        If the instance is not found (for example if networking failed), this"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a1ff146_53afeb93","line":161,"range":{"start_line":161,"start_character":36,"end_line":161,"end_character":53},"in_reply_to":"9a30ddce_e4a16195","updated":"2017-03-16 19:48:53.000000000","message":"Wannabug?","commit_id":"29b12a5000f4ae6c4397fe84721beffa52209c32"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b39d60501fbf6fb58baa20d2c61530870b30a531","unresolved":false,"context_lines":[{"line_number":168,"context_line":"        :param context: security context"},{"line_number":169,"context_line":"        :param instance: Instance object as returned by DB layer."},{"line_number":170,"context_line":"        :param network_info:"},{"line_number":171,"context_line":"           :py:meth:`~nova.network.manager.NetworkManager.get_instance_nw_info`"},{"line_number":172,"context_line":"        :param block_device_info: Information about block devices that should"},{"line_number":173,"context_line":"                                  be detached from the instance."},{"line_number":174,"context_line":"        :param destroy_disks: Indicates if disks should be destroyed"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a30ddce_8498a56b","line":171,"range":{"start_line":171,"start_character":22,"end_line":171,"end_character":78},"updated":"2017-03-12 23:30:18.000000000","message":"Same as above.","commit_id":"29b12a5000f4ae6c4397fe84721beffa52209c32"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"998b9346f53ddfbc28501bbd406deec28692e66e","unresolved":false,"context_lines":[{"line_number":168,"context_line":"        :param context: security context"},{"line_number":169,"context_line":"        :param instance: Instance object as returned by DB layer."},{"line_number":170,"context_line":"        :param network_info:"},{"line_number":171,"context_line":"           :py:meth:`~nova.network.manager.NetworkManager.get_instance_nw_info`"},{"line_number":172,"context_line":"        :param block_device_info: Information about block devices that should"},{"line_number":173,"context_line":"                                  be detached from the instance."},{"line_number":174,"context_line":"        :param destroy_disks: Indicates if disks should be destroyed"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a1ff146_33ac2fa0","line":171,"range":{"start_line":171,"start_character":22,"end_line":171,"end_character":78},"in_reply_to":"9a30ddce_8498a56b","updated":"2017-03-16 19:48:53.000000000","message":"Re-copied from superclass.","commit_id":"29b12a5000f4ae6c4397fe84721beffa52209c32"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"aaed9798b133b941f8d4f1fae04671e81dd885d2","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from pypowervm.wrappers import managed_system as pvm_ms"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from nova.compute import power_state"},{"line_number":24,"context_line":"from nova.i18n import _LI"},{"line_number":25,"context_line":"from nova.virt import driver"},{"line_number":26,"context_line":"from nova.virt import hardware"},{"line_number":27,"context_line":"from nova.virt.powervm import host"}],"source_content_type":"text/x-python","patch_set":11,"id":"bff0334d_49fecbae","line":24,"range":{"start_line":24,"start_character":22,"end_line":24,"end_character":25},"updated":"2017-04-07 18:31:43.000000000","message":"We don\u0027t have to translate logs anymore, so you can remove this. Sorry, I should have noticed this earlier.","commit_id":"8974603fba83d2ec303ae4de278feca959b92ab1"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"c9aa9be92204c7750cd732d92f4c031a61d6ae27","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from pypowervm.wrappers import managed_system as pvm_ms"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from nova.compute import power_state"},{"line_number":24,"context_line":"from nova.i18n import _LI"},{"line_number":25,"context_line":"from nova.virt import driver"},{"line_number":26,"context_line":"from nova.virt import hardware"},{"line_number":27,"context_line":"from nova.virt.powervm import host"}],"source_content_type":"text/x-python","patch_set":11,"id":"bff0334d_cc5ae928","line":24,"range":{"start_line":24,"start_character":22,"end_line":24,"end_character":25},"in_reply_to":"bff0334d_49fecbae","updated":"2017-04-07 18:49:44.000000000","message":"Done","commit_id":"8974603fba83d2ec303ae4de278feca959b92ab1"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0a8ebcf505cf1cc184aa8e5a11dddc3d07089f4d","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"class PowerVMDriver(driver.ComputeDriver):"},{"line_number":33,"context_line":"    \"\"\"PowerVM Implementation of Compute Driver.\"\"\""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def __init__(self, virtapi):"},{"line_number":36,"context_line":"        super(PowerVMDriver, self).__init__(virtapi)"}],"source_content_type":"text/x-python","patch_set":11,"id":"bff0334d_867280e2","line":33,"updated":"2017-04-07 18:23:44.000000000","message":"nit: at some point you might want to explain this a bit more, since it could be confused with libvirt+phyp:\n\nhttps://libvirt.org/drvphyp.html","commit_id":"8974603fba83d2ec303ae4de278feca959b92ab1"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"c9aa9be92204c7750cd732d92f4c031a61d6ae27","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"class PowerVMDriver(driver.ComputeDriver):"},{"line_number":33,"context_line":"    \"\"\"PowerVM Implementation of Compute Driver.\"\"\""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def __init__(self, virtapi):"},{"line_number":36,"context_line":"        super(PowerVMDriver, self).__init__(virtapi)"}],"source_content_type":"text/x-python","patch_set":11,"id":"bff0334d_ec57ed01","line":33,"in_reply_to":"bff0334d_096443b8","updated":"2017-04-07 18:49:44.000000000","message":"Done","commit_id":"8974603fba83d2ec303ae4de278feca959b92ab1"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f4a362b01abe0c681758412acc198be7ab395b0f","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"class PowerVMDriver(driver.ComputeDriver):"},{"line_number":33,"context_line":"    \"\"\"PowerVM Implementation of Compute Driver.\"\"\""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def __init__(self, virtapi):"},{"line_number":36,"context_line":"        super(PowerVMDriver, self).__init__(virtapi)"}],"source_content_type":"text/x-python","patch_set":11,"id":"bff0334d_096443b8","line":33,"in_reply_to":"bff0334d_867280e2","updated":"2017-04-07 18:29:48.000000000","message":"Mm, duly noted.","commit_id":"8974603fba83d2ec303ae4de278feca959b92ab1"},{"author":{"_account_id":8190,"name":"Drew Thorstensen (thorst)","email":"thorst@us.ibm.com","username":"thorst"},"change_message_id":"d5d5677f77d8ce4d49a544cbce14e3087e4aed07","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        :cpu_time_ns:     (int) the CPU time used in nanoseconds"},{"line_number":75,"context_line":"        :id:              a unique ID for the instance"},{"line_number":76,"context_line":"        \"\"\""},{"line_number":77,"context_line":"        return hardware.InstanceInfo(state\u003dpower_state.NOSTATE)"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def list_instances(self):"},{"line_number":80,"context_line":"        \"\"\"Return the names of all the instances known to the virt host."}],"source_content_type":"text/x-python","patch_set":11,"id":"ffe62b97_00a09b42","line":77,"range":{"start_line":77,"start_character":8,"end_line":77,"end_character":63},"updated":"2017-03-27 12:48:24.000000000","message":"If you do another pass, should have a TODO to implement.  I believe we have this OOT, from the vm.py.  You may already have it in a subsequent review.","commit_id":"8974603fba83d2ec303ae4de278feca959b92ab1"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"12775d9c595422f595522571779f087b4b2e077e","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        :cpu_time_ns:     (int) the CPU time used in nanoseconds"},{"line_number":75,"context_line":"        :id:              a unique ID for the instance"},{"line_number":76,"context_line":"        \"\"\""},{"line_number":77,"context_line":"        return hardware.InstanceInfo(state\u003dpower_state.NOSTATE)"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def list_instances(self):"},{"line_number":80,"context_line":"        \"\"\"Return the names of all the instances known to the virt host."}],"source_content_type":"text/x-python","patch_set":11,"id":"ffe62b97_73caa36d","line":77,"range":{"start_line":77,"start_character":8,"end_line":77,"end_character":63},"in_reply_to":"ffe62b97_00a09b42","updated":"2017-03-27 13:10:59.000000000","message":"Yes, next change set, see https://review.openstack.org/#/c/438598/10/nova/virt/powervm/driver.py@78 and https://review.openstack.org/#/c/438598/10/nova/virt/powervm/vm.py@286","commit_id":"8974603fba83d2ec303ae4de278feca959b92ab1"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"c9aa9be92204c7750cd732d92f4c031a61d6ae27","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        :cpu_time_ns:     (int) the CPU time used in nanoseconds"},{"line_number":75,"context_line":"        :id:              a unique ID for the instance"},{"line_number":76,"context_line":"        \"\"\""},{"line_number":77,"context_line":"        return hardware.InstanceInfo(state\u003dpower_state.NOSTATE)"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def list_instances(self):"},{"line_number":80,"context_line":"        \"\"\"Return the names of all the instances known to the virt host."}],"source_content_type":"text/x-python","patch_set":11,"id":"bff0334d_8c3ce1bf","line":77,"range":{"start_line":77,"start_character":8,"end_line":77,"end_character":63},"in_reply_to":"ffe62b97_73caa36d","updated":"2017-04-07 18:49:44.000000000","message":"Done","commit_id":"8974603fba83d2ec303ae4de278feca959b92ab1"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0a8ebcf505cf1cc184aa8e5a11dddc3d07089f4d","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        # TODO(efried): Power on the LPAR"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"    def destroy(self, context, instance, network_info, block_device_info\u003dNone,"},{"line_number":155,"context_line":"                destroy_disks\u003dTrue, migrate_data\u003dNone):"},{"line_number":156,"context_line":"        \"\"\"Destroy the specified instance from the Hypervisor."},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"        If the instance is not found (for example if networking failed), this"}],"source_content_type":"text/x-python","patch_set":11,"id":"bff0334d_890e1330","line":155,"range":{"start_line":155,"start_character":36,"end_line":155,"end_character":53},"updated":"2017-04-07 18:23:44.000000000","message":"I guess it\u0027s a race to see which patch is merged first:\n\nhttps://review.openstack.org/#/c/452958/","commit_id":"8974603fba83d2ec303ae4de278feca959b92ab1"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f4a362b01abe0c681758412acc198be7ab395b0f","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        # TODO(efried): Power on the LPAR"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"    def destroy(self, context, instance, network_info, block_device_info\u003dNone,"},{"line_number":155,"context_line":"                destroy_disks\u003dTrue, migrate_data\u003dNone):"},{"line_number":156,"context_line":"        \"\"\"Destroy the specified instance from the Hypervisor."},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"        If the instance is not found (for example if networking failed), this"}],"source_content_type":"text/x-python","patch_set":11,"id":"bff0334d_69550fc6","line":155,"range":{"start_line":155,"start_character":36,"end_line":155,"end_character":53},"in_reply_to":"bff0334d_890e1330","updated":"2017-04-07 18:29:48.000000000","message":"Since it\u0027s a kwarg, and we\u0027re not using it here anyway, it\u0027s not going to cause any errors if the override\u0027s signature doesn\u0027t match the base, right?  So they can merge independently, and we can remove this after?","commit_id":"8974603fba83d2ec303ae4de278feca959b92ab1"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"f50e47829a5d0c457bbf351db34d8eabca9ef5b0","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        # TODO(efried): Implement async compute service enable/disable like"},{"line_number":48,"context_line":"        # I73a34eb6e0ca32d03e54d12a5e066b2ed4f19a61"},{"line_number":49,"context_line":"        self.adapter \u003d pvm_apt.Adapter("},{"line_number":50,"context_line":"            pvm_apt.Session(conn_tries\u003d60),"},{"line_number":51,"context_line":"            helpers\u003d[log_hlp.log_helper, vio_hlp.vios_busy_retry_helper])"},{"line_number":52,"context_line":"        # Make sure the Virtual I/O Server(s) are available."},{"line_number":53,"context_line":"        pvm_par.validate_vios_ready(self.adapter)"}],"source_content_type":"text/x-python","patch_set":14,"id":"7ffa3b31_276b74b7","line":50,"range":{"start_line":50,"start_character":39,"end_line":50,"end_character":41},"updated":"2017-04-20 14:27:12.000000000","message":"sugestion: things like these are often best done as module level vars","commit_id":"3cd409483d45cc165f59a4033242cac840def5aa"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"5a7713e6933197c9efd150b9a3eb5b747db091f7","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        # TODO(efried): Implement async compute service enable/disable like"},{"line_number":48,"context_line":"        # I73a34eb6e0ca32d03e54d12a5e066b2ed4f19a61"},{"line_number":49,"context_line":"        self.adapter \u003d pvm_apt.Adapter("},{"line_number":50,"context_line":"            pvm_apt.Session(conn_tries\u003d60),"},{"line_number":51,"context_line":"            helpers\u003d[log_hlp.log_helper, vio_hlp.vios_busy_retry_helper])"},{"line_number":52,"context_line":"        # Make sure the Virtual I/O Server(s) are available."},{"line_number":53,"context_line":"        pvm_par.validate_vios_ready(self.adapter)"}],"source_content_type":"text/x-python","patch_set":14,"id":"7ffa3b31_67805cc0","line":50,"range":{"start_line":50,"start_character":39,"end_line":50,"end_character":41},"in_reply_to":"7ffa3b31_276b74b7","updated":"2017-04-20 14:42:26.000000000","message":"Noted, thanks.  We\u0027re actually going to get rid of this - see discussion in PS5.","commit_id":"3cd409483d45cc165f59a4033242cac840def5aa"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"f50e47829a5d0c457bbf351db34d8eabca9ef5b0","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    @staticmethod"},{"line_number":58,"context_line":"    def _log_operation(op, instance):"},{"line_number":59,"context_line":"        \"\"\"Log entry point of driver operations.\"\"\""},{"line_number":60,"context_line":"        LOG.info(\u0027Operation: %(op)s. Virtual machine display name: \u0027"},{"line_number":61,"context_line":"                 \u0027%(display_name)s, name: %(name)s\u0027,"},{"line_number":62,"context_line":"                 {\u0027op\u0027: op, \u0027display_name\u0027: instance.display_name,"},{"line_number":63,"context_line":"                  \u0027name\u0027: instance.name}, instance\u003dinstance)"}],"source_content_type":"text/x-python","patch_set":14,"id":"7ffa3b31_07ad18e8","line":60,"updated":"2017-04-20 14:27:12.000000000","message":"nit:info seems quite high.","commit_id":"3cd409483d45cc165f59a4033242cac840def5aa"}],"nova/virt/powervm/host.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b39d60501fbf6fb58baa20d2c61530870b30a531","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2014, 2017 IBM Corp."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":6,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a30ddce_04ad9587","line":3,"updated":"2017-03-12 23:30:18.000000000","message":"ditto","commit_id":"29b12a5000f4ae6c4397fe84721beffa52209c32"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"998b9346f53ddfbc28501bbd406deec28692e66e","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2014, 2017 IBM Corp."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":6,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a1ff146_d372fb48","line":3,"in_reply_to":"9a30ddce_04ad9587","updated":"2017-03-16 19:48:53.000000000","message":"Done","commit_id":"29b12a5000f4ae6c4397fe84721beffa52209c32"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"2c8fc1c5823948bd966bc4307bae8b8fa19c4bc2","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    \"\"\""},{"line_number":46,"context_line":"    data \u003d {}"},{"line_number":47,"context_line":"    # Calculate the vcpus"},{"line_number":48,"context_line":"    proc_units \u003d ms_w.proc_units_configurable"},{"line_number":49,"context_line":"    pu_used \u003d float(proc_units) - float(ms_w.proc_units_avail)"},{"line_number":50,"context_line":"    data[\u0027vcpus\u0027] \u003d int(math.ceil(float(proc_units)))"},{"line_number":51,"context_line":"    data[\u0027vcpus_used\u0027] \u003d int(math.ceil(pu_used))"}],"source_content_type":"text/x-python","patch_set":14,"id":"7ffa3b31_59380f3c","line":48,"updated":"2017-04-17 21:08:15.000000000","message":"nit: do \u0027proc_units \u003d float(ms_w.proc_units_configurable)\u0027 here rather than \u0027float(proc_units)\u0027 everywhere proc_units is used hereafter.","commit_id":"3cd409483d45cc165f59a4033242cac840def5aa"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"21ba568084e95b58f070637132178cb05c4d0b99","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    \"\"\""},{"line_number":46,"context_line":"    data \u003d {}"},{"line_number":47,"context_line":"    # Calculate the vcpus"},{"line_number":48,"context_line":"    proc_units \u003d ms_w.proc_units_configurable"},{"line_number":49,"context_line":"    pu_used \u003d float(proc_units) - float(ms_w.proc_units_avail)"},{"line_number":50,"context_line":"    data[\u0027vcpus\u0027] \u003d int(math.ceil(float(proc_units)))"},{"line_number":51,"context_line":"    data[\u0027vcpus_used\u0027] \u003d int(math.ceil(pu_used))"}],"source_content_type":"text/x-python","patch_set":14,"id":"7ffa3b31_7c2299a6","line":48,"in_reply_to":"7ffa3b31_59380f3c","updated":"2017-04-17 21:13:01.000000000","message":"Good eye, will do if respin; else in a subsequent change.","commit_id":"3cd409483d45cc165f59a4033242cac840def5aa"}],"requirements.txt":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b39d60501fbf6fb58baa20d2c61530870b30a531","unresolved":false,"context_lines":[{"line_number":59,"context_line":"castellan\u003e\u003d0.4.0 # Apache-2.0"},{"line_number":60,"context_line":"microversion-parse\u003e\u003d0.1.2 # Apache-2.0"},{"line_number":61,"context_line":"os-xenapi\u003e\u003d0.1.1 # Apache-2.0"},{"line_number":62,"context_line":"pypowervm\u003e\u003d1.0.0.4 # Apache-2.0"}],"source_content_type":"text/plain","patch_set":5,"id":"9a30ddce_0403d5b8","line":62,"updated":"2017-03-12 23:30:18.000000000","message":"I\u0027m semi-torn on having this live in test-requirements or as extras in setup.cfg, like how we have oslo.vmware and python-ironicclient in test-requirements since they aren\u0027t required unless you\u0027re using those virt drivers. However, we also have os-win and os-xenapi in requirements and those are hyperv and xenapi specific, so we\u0027re not consistent anyway.","commit_id":"29b12a5000f4ae6c4397fe84721beffa52209c32"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"e8a609ae8ade4e39895fc10a73be4b460cdf1f19","unresolved":false,"context_lines":[{"line_number":59,"context_line":"castellan\u003e\u003d0.4.0 # Apache-2.0"},{"line_number":60,"context_line":"microversion-parse\u003e\u003d0.1.2 # Apache-2.0"},{"line_number":61,"context_line":"os-xenapi\u003e\u003d0.1.1 # Apache-2.0"},{"line_number":62,"context_line":"pypowervm\u003e\u003d1.0.0.4 # Apache-2.0"}],"source_content_type":"text/plain","patch_set":5,"id":"9a30ddce_62a1ca93","line":62,"in_reply_to":"9a30ddce_0403d5b8","updated":"2017-03-13 15:28:41.000000000","message":"Yeah, I raised an eyebrow at os-win et al.  If it matters, pypowervm is in global requirements at this point.","commit_id":"29b12a5000f4ae6c4397fe84721beffa52209c32"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"998b9346f53ddfbc28501bbd406deec28692e66e","unresolved":false,"context_lines":[{"line_number":59,"context_line":"castellan\u003e\u003d0.4.0 # Apache-2.0"},{"line_number":60,"context_line":"microversion-parse\u003e\u003d0.1.2 # Apache-2.0"},{"line_number":61,"context_line":"os-xenapi\u003e\u003d0.1.1 # Apache-2.0"},{"line_number":62,"context_line":"pypowervm\u003e\u003d1.0.0.4 # Apache-2.0"}],"source_content_type":"text/plain","patch_set":5,"id":"3a1ff146_f3bc576e","line":62,"in_reply_to":"9a30ddce_3942a4ae","updated":"2017-03-16 19:48:53.000000000","message":"To me, having it in test-requirements feels... wrong.  Because it\u0027s a requirement, not just a test requirement.  I mean, I get that it\u0027s not ideal for irrelevant packages to get pip installed with nova, but that seems like the lesser evil when compared to the maintainability headaches from hiding a requirement in setup.cfg or some other non-intuitive spot.\n\nSince you\u0027re OK with this living here, I\u0027d like to leave it and move on, and we can bring the issue up separately if it still chafes later.","commit_id":"29b12a5000f4ae6c4397fe84721beffa52209c32"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"50a692de2c39dbf2937b213c8ee99c5ec0ca1673","unresolved":false,"context_lines":[{"line_number":59,"context_line":"castellan\u003e\u003d0.4.0 # Apache-2.0"},{"line_number":60,"context_line":"microversion-parse\u003e\u003d0.1.2 # Apache-2.0"},{"line_number":61,"context_line":"os-xenapi\u003e\u003d0.1.1 # Apache-2.0"},{"line_number":62,"context_line":"pypowervm\u003e\u003d1.0.0.4 # Apache-2.0"}],"source_content_type":"text/plain","patch_set":5,"id":"9a30ddce_3942a4ae","line":62,"in_reply_to":"9a30ddce_62a1ca93","updated":"2017-03-13 15:56:17.000000000","message":"It has to be in global-requirements, all of these do, so that\u0027s beside the point. I\u0027m OK with this living here, but it might not be a bad idea to follow up with a separate change that just moves the optional virt-driver specific dependencies into test-requirements and see how that is received (or again, ask on the mailing list to see what others think).","commit_id":"29b12a5000f4ae6c4397fe84721beffa52209c32"},{"author":{"_account_id":13883,"name":"Adam Reznechek","email":"adreznec@us.ibm.com","username":"adrez"},"change_message_id":"69bc2a596625b7119d20c58b2db5fed003b97311","unresolved":false,"context_lines":[{"line_number":60,"context_line":"microversion-parse\u003e\u003d0.1.2 # Apache-2.0"},{"line_number":61,"context_line":"os-xenapi\u003e\u003d0.1.1 # Apache-2.0"},{"line_number":62,"context_line":"tooz\u003e\u003d1.47.0 # Apache-2.0"},{"line_number":63,"context_line":"pypowervm\u003e\u003d1.0.0.4 # Apache-2.0"}],"source_content_type":"text/plain","patch_set":8,"id":"1a1ced50_90d527e6","line":63,"range":{"start_line":63,"start_character":11,"end_line":63,"end_character":18},"updated":"2017-03-23 13:26:28.000000000","message":"This will need to be bumped to 1.1.0 to match the req bump we did yesterday.","commit_id":"92bb18f7afcf394cf9efbb41e9ea8b1a9ef37d55"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"2f5ab8c306d0b48100abbcec0773c618c5996ce5","unresolved":false,"context_lines":[{"line_number":60,"context_line":"microversion-parse\u003e\u003d0.1.2 # Apache-2.0"},{"line_number":61,"context_line":"os-xenapi\u003e\u003d0.1.1 # Apache-2.0"},{"line_number":62,"context_line":"tooz\u003e\u003d1.47.0 # Apache-2.0"},{"line_number":63,"context_line":"pypowervm\u003e\u003d1.0.0.4 # Apache-2.0"}],"source_content_type":"text/plain","patch_set":8,"id":"1a1ced50_af8d542c","line":63,"range":{"start_line":63,"start_character":11,"end_line":63,"end_character":18},"in_reply_to":"1a1ced50_90d527e6","updated":"2017-03-23 18:17:16.000000000","message":"Done","commit_id":"92bb18f7afcf394cf9efbb41e9ea8b1a9ef37d55"}]}
