)]}'
{"nova/conf/powervm.py":[{"author":{"_account_id":8190,"name":"Drew Thorstensen (thorst)","email":"thorst@us.ibm.com","username":"thorst"},"change_message_id":"604fa94af8bab32873971f185817e80004a4e3c2","unresolved":false,"context_lines":[{"line_number":60,"context_line":"    cfg.StrOpt(\u0027volume_group_name\u0027,"},{"line_number":61,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":62,"context_line":"               help\u003d\"\"\""},{"line_number":63,"context_line":"Volume Group to use for block device operations."},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"Must not be rootvg. If disk_driver is localdisk, and more"},{"line_number":66,"context_line":"than one non-rootvg volume group exists across the"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a57fde8_e4a056a8","line":63,"range":{"start_line":63,"start_character":24,"end_line":63,"end_character":36},"updated":"2017-01-12 14:06:06.000000000","message":"Block device implies cinder.\n\nThis is for the nova disk devices only.","commit_id":"aa5d9297e0d7149f09f37131ee6081cd1d6a2ad1"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"7c0462708fbafb8fd3066b71ecdad18f9ba7566f","unresolved":false,"context_lines":[{"line_number":60,"context_line":"    cfg.StrOpt(\u0027volume_group_name\u0027,"},{"line_number":61,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":62,"context_line":"               help\u003d\"\"\""},{"line_number":63,"context_line":"Volume Group to use for block device operations."},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"Must not be rootvg. If disk_driver is localdisk, and more"},{"line_number":66,"context_line":"than one non-rootvg volume group exists across the"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a3c09a3_6fe61445","line":63,"range":{"start_line":63,"start_character":24,"end_line":63,"end_character":36},"in_reply_to":"9a57fde8_e4a056a8","updated":"2017-01-18 22:32:37.000000000","message":"Done","commit_id":"aa5d9297e0d7149f09f37131ee6081cd1d6a2ad1"},{"author":{"_account_id":8190,"name":"Drew Thorstensen (thorst)","email":"thorst@us.ibm.com","username":"thorst"},"change_message_id":"604fa94af8bab32873971f185817e80004a4e3c2","unresolved":false,"context_lines":[{"line_number":62,"context_line":"               help\u003d\"\"\""},{"line_number":63,"context_line":"Volume Group to use for block device operations."},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"Must not be rootvg. If disk_driver is localdisk, and more"},{"line_number":66,"context_line":"than one non-rootvg volume group exists across the"},{"line_number":67,"context_line":"Virtual I/O Servers, then this attribute must be"},{"line_number":68,"context_line":"specified."}],"source_content_type":"text/x-python","patch_set":9,"id":"9a57fde8_c4d8b220","line":65,"range":{"start_line":65,"start_character":12,"end_line":65,"end_character":18},"updated":"2017-01-12 14:06:06.000000000","message":"Must not be the Virtual I/O Server\u0027s rootvg.\n\nMay help clarify a bit?","commit_id":"aa5d9297e0d7149f09f37131ee6081cd1d6a2ad1"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"7c0462708fbafb8fd3066b71ecdad18f9ba7566f","unresolved":false,"context_lines":[{"line_number":62,"context_line":"               help\u003d\"\"\""},{"line_number":63,"context_line":"Volume Group to use for block device operations."},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"Must not be rootvg. If disk_driver is localdisk, and more"},{"line_number":66,"context_line":"than one non-rootvg volume group exists across the"},{"line_number":67,"context_line":"Virtual I/O Servers, then this attribute must be"},{"line_number":68,"context_line":"specified."}],"source_content_type":"text/x-python","patch_set":9,"id":"7a3c09a3_8fe1802c","line":65,"range":{"start_line":65,"start_character":12,"end_line":65,"end_character":18},"in_reply_to":"9a57fde8_c4d8b220","updated":"2017-01-18 22:32:37.000000000","message":"Done","commit_id":"aa5d9297e0d7149f09f37131ee6081cd1d6a2ad1"},{"author":{"_account_id":8190,"name":"Drew Thorstensen (thorst)","email":"thorst@us.ibm.com","username":"thorst"},"change_message_id":"f3fbca64200789e4f5915cc6610e84179e5ac310","unresolved":false,"context_lines":[{"line_number":46,"context_line":"\"\"\"),"},{"line_number":47,"context_line":"]"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"localdisk_opts \u003d ["},{"line_number":50,"context_line":"    cfg.StrOpt(\u0027volume_group_name\u0027,"},{"line_number":51,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":52,"context_line":"               help\u003d\"\"\""},{"line_number":53,"context_line":"Volume Group to use for disk operations."},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"Must not be the Virtual I/O Server\u0027s rootvg. If more than"},{"line_number":56,"context_line":"one non-rootvg volume group exists across the Virtual I/O"},{"line_number":57,"context_line":"Servers, then this attribute must be specified."},{"line_number":58,"context_line":"\"\"\"),"},{"line_number":59,"context_line":"    cfg.StrOpt(\u0027volume_group_vios_name\u0027,"},{"line_number":60,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":61,"context_line":"               help\u003d\"\"\""},{"line_number":62,"context_line":"(Optional) The name of the Virtual I/O Server hosting"},{"line_number":63,"context_line":"the volume group."},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"If this is not specified, the system will query through"},{"line_number":66,"context_line":"the Virtual I/O Servers looking for one that matches"},{"line_number":67,"context_line":"the volume_group_vios_name. This is only needed if"},{"line_number":68,"context_line":"the system has multiple Virtual I/O Servers with a"},{"line_number":69,"context_line":"non-rootvg volume group whose name is duplicated."},{"line_number":70,"context_line":"\"\"\"),"},{"line_number":71,"context_line":"]"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"ALL_OPTS \u003d (cpu_opts + localdisk_opts)"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"def register_opts(conf):"}],"source_content_type":"text/x-python","patch_set":24,"id":"da36d5c6_4981418f","line":73,"range":{"start_line":49,"start_character":0,"end_line":73,"end_character":38},"updated":"2017-02-17 19:57:28.000000000","message":"I think that we should have these in here.  However, if this is confusing to the core reviewers we can consider just looping until we find a volume group.  Then have this be a second change set.","commit_id":"5392dc90bc131e925e4903f1bcd0fe54b37d65b9"},{"author":{"_account_id":10347,"name":"Wang Qing wu","email":"wqw2700@sina.com","username":"cody"},"change_message_id":"a281e154ad3477ef2907df100ecfceed0a20b67c","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":"localdisk_opts \u003d ["},{"line_number":50,"context_line":"    cfg.StrOpt(\u0027volume_group_name\u0027,"},{"line_number":51,"context_line":"               required\u003dTrue,"},{"line_number":52,"context_line":"               help\u003d\"\"\""},{"line_number":53,"context_line":"Volume Group to use for ephemeral disk operations."},{"line_number":54,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"da36d5c6_158d2a7b","line":51,"range":{"start_line":51,"start_character":15,"end_line":51,"end_character":28},"updated":"2017-02-22 14:55:57.000000000","message":"If enable \u0027require\u0027 attribute, this opt needs to be set default value to pass oslo-config check function.\n\nLink:\nhttps://github.com/openstack/oslo.config/blob/master/oslo_config/cfg.py#L2946","commit_id":"ab4dba7c682633232223aa4bb1bfc2c48ad3f303"}],"nova/tests/unit/virt/powervm/disk/test_driver.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"06448bd56c62023a57f8fcbe01dde2db339f93dc","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"#    under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import fixtures"},{"line_number":18,"context_line":"import mock"},{"line_number":19,"context_line":"from nova import test"},{"line_number":20,"context_line":"from pypowervm import const as pvm_const"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba5201f7_ee855107","line":17,"updated":"2017-01-03 20:29:09.000000000","message":"proper grouping of imports","commit_id":"3c6ea91cee09d079a4d04c3fcab1a19a889e3019"},{"author":{"_account_id":10347,"name":"Wang Qing wu","email":"wqw2700@sina.com","username":"cody"},"change_message_id":"6c32264f76c89100c29171bbdff09174d48f9a7b","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"#    under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import fixtures"},{"line_number":18,"context_line":"import mock"},{"line_number":19,"context_line":"from nova import test"},{"line_number":20,"context_line":"from pypowervm import const as pvm_const"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba5201f7_b9a61f0e","line":17,"in_reply_to":"ba5201f7_ee855107","updated":"2017-01-04 07:29:48.000000000","message":"Done","commit_id":"3c6ea91cee09d079a4d04c3fcab1a19a889e3019"},{"author":{"_account_id":10347,"name":"Wang Qing wu","email":"wqw2700@sina.com","username":"cody"},"change_message_id":"ca11ae2ad83c60baeff14ce274029d6216300e3d","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"        # The values (adapter and host uuid) are not used in the base."},{"line_number":34,"context_line":"        # Default them to None."},{"line_number":35,"context_line":"        self.st_adpt \u003d disk_dvr.DiskAdapter(None, None)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def test_capacity(self):"},{"line_number":38,"context_line":"        \"\"\"These are arbitrary capacity numbers.\"\"\""}],"source_content_type":"text/x-python","patch_set":25,"id":"da36d5c6_e0a45ba7","line":35,"range":{"start_line":35,"start_character":8,"end_line":35,"end_character":55},"updated":"2017-02-22 11:08:28.000000000","message":"Test the abstract class we can use these two options:\n1. Create a subclass in this file, such as \u0027TestDiskAdapterImpl\u0027 class. It can split out the implemented method in abstract class.\n2. Use the localdisk test class to cover these test cases in this file. It can cut out LOC.\n\nNot sure if there is other option.\nI will choose the option 1.","commit_id":"74bb5a61eb9a7ad3ad33ff5b5b948cce3c8568c5"}],"nova/tests/unit/virt/powervm/disk/test_localdisk.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"06448bd56c62023a57f8fcbe01dde2db339f93dc","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"#    under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import fixtures"},{"line_number":18,"context_line":"import mock"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import copy"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba5201f7_ae8b491d","line":17,"updated":"2017-01-03 20:29:09.000000000","message":"proper grouping of imports","commit_id":"3c6ea91cee09d079a4d04c3fcab1a19a889e3019"},{"author":{"_account_id":10347,"name":"Wang Qing wu","email":"wqw2700@sina.com","username":"cody"},"change_message_id":"6c32264f76c89100c29171bbdff09174d48f9a7b","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"#    under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import fixtures"},{"line_number":18,"context_line":"import mock"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import copy"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba5201f7_be8445d4","line":17,"in_reply_to":"ba5201f7_ae8b491d","updated":"2017-01-04 07:29:48.000000000","message":"Done","commit_id":"3c6ea91cee09d079a4d04c3fcab1a19a889e3019"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"06448bd56c62023a57f8fcbe01dde2db339f93dc","unresolved":false,"context_lines":[{"line_number":66,"context_line":"            \u0027nova.virt.powervm.mgmt.mgmt_uuid\u0027)).mock"},{"line_number":67,"context_line":"        self.mgmt_uuid.return_value \u003d \u0027mp_uuid\u0027"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def tearDown(self):"},{"line_number":70,"context_line":"        test.TestCase.tearDown(self)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"        # Tear down mocks"},{"line_number":73,"context_line":"        self.mock_vg_uuid_p.stop()"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    @staticmethod"},{"line_number":76,"context_line":"    def get_ls(adpt):"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba5201f7_e3264a67","line":73,"range":{"start_line":69,"start_character":0,"end_line":73,"end_character":34},"updated":"2017-01-03 20:29:09.000000000","message":"Axe this.  Use addCleanup in setUp instead.  (Or use MockPatch.)","commit_id":"3c6ea91cee09d079a4d04c3fcab1a19a889e3019"},{"author":{"_account_id":10347,"name":"Wang Qing wu","email":"wqw2700@sina.com","username":"cody"},"change_message_id":"6c32264f76c89100c29171bbdff09174d48f9a7b","unresolved":false,"context_lines":[{"line_number":66,"context_line":"            \u0027nova.virt.powervm.mgmt.mgmt_uuid\u0027)).mock"},{"line_number":67,"context_line":"        self.mgmt_uuid.return_value \u003d \u0027mp_uuid\u0027"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def tearDown(self):"},{"line_number":70,"context_line":"        test.TestCase.tearDown(self)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"        # Tear down mocks"},{"line_number":73,"context_line":"        self.mock_vg_uuid_p.stop()"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    @staticmethod"},{"line_number":76,"context_line":"    def get_ls(adpt):"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba5201f7_fe032d40","line":73,"range":{"start_line":69,"start_character":0,"end_line":73,"end_character":34},"in_reply_to":"ba5201f7_e3264a67","updated":"2017-01-04 07:29:48.000000000","message":"Done","commit_id":"3c6ea91cee09d079a4d04c3fcab1a19a889e3019"},{"author":{"_account_id":8190,"name":"Drew Thorstensen (thorst)","email":"thorst@us.ibm.com","username":"thorst"},"change_message_id":"604fa94af8bab32873971f185817e80004a4e3c2","unresolved":false,"context_lines":[{"line_number":33,"context_line":"from nova.virt.powervm import exception as npvmex"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"VOL_GRP_WITH_VIOS \u003d \u0027fake_volume_group_with_vio_data.txt\u0027"},{"line_number":37,"context_line":"VIOS_WITH_VOL_GRP \u003d \u0027fake_vios_with_volume_group_data.txt\u0027"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"class TestLocalDisk(test.TestCase):"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a57fde8_04655a44","line":37,"range":{"start_line":36,"start_character":0,"end_line":37,"end_character":58},"updated":"2017-01-12 14:06:06.000000000","message":"I noted on a previous patch that I\u0027m not really in support of these.  Lets see how that plays out in the first patch...but I\u0027d ultimately like us to use full on mock objects.  This dives too deep into the pypowervm api, and is tested via its own unit tests.","commit_id":"aa5d9297e0d7149f09f37131ee6081cd1d6a2ad1"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"7c0462708fbafb8fd3066b71ecdad18f9ba7566f","unresolved":false,"context_lines":[{"line_number":33,"context_line":"from nova.virt.powervm import exception as npvmex"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"VOL_GRP_WITH_VIOS \u003d \u0027fake_volume_group_with_vio_data.txt\u0027"},{"line_number":37,"context_line":"VIOS_WITH_VOL_GRP \u003d \u0027fake_vios_with_volume_group_data.txt\u0027"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"class TestLocalDisk(test.TestCase):"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a3c09a3_be090c97","line":37,"range":{"start_line":36,"start_character":0,"end_line":37,"end_character":58},"in_reply_to":"9a57fde8_04655a44","updated":"2017-01-18 22:32:37.000000000","message":"Done","commit_id":"aa5d9297e0d7149f09f37131ee6081cd1d6a2ad1"}],"nova/tests/unit/virt/powervm/fixtures.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"06448bd56c62023a57f8fcbe01dde2db339f93dc","unresolved":false,"context_lines":[{"line_number":35,"context_line":"class PowerVMComputeDriver(fixtures.Fixture):"},{"line_number":36,"context_line":"    \"\"\"Construct a fake compute driver.\"\"\""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    @mock.patch(\u0027nova.virt.powervm.disk.localdisk.LocalStorage\u0027)"},{"line_number":39,"context_line":"    @mock.patch(\u0027pypowervm.tasks.partition.get_this_partition\u0027)"},{"line_number":40,"context_line":"    def _init_host(self, *args):"},{"line_number":41,"context_line":"        ms_http \u003d pvmhttp.load_pvm_resp("},{"line_number":42,"context_line":"            MS_HTTPRESP_FILE, adapter\u003dmock.Mock()).get_response()"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba5201f7_63f33a9f","line":39,"range":{"start_line":38,"start_character":0,"end_line":39,"end_character":63},"updated":"2017-01-03 20:29:09.000000000","message":"Move these to MockPatches","commit_id":"3c6ea91cee09d079a4d04c3fcab1a19a889e3019"},{"author":{"_account_id":10347,"name":"Wang Qing wu","email":"wqw2700@sina.com","username":"cody"},"change_message_id":"6c32264f76c89100c29171bbdff09174d48f9a7b","unresolved":false,"context_lines":[{"line_number":35,"context_line":"class PowerVMComputeDriver(fixtures.Fixture):"},{"line_number":36,"context_line":"    \"\"\"Construct a fake compute driver.\"\"\""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    @mock.patch(\u0027nova.virt.powervm.disk.localdisk.LocalStorage\u0027)"},{"line_number":39,"context_line":"    @mock.patch(\u0027pypowervm.tasks.partition.get_this_partition\u0027)"},{"line_number":40,"context_line":"    def _init_host(self, *args):"},{"line_number":41,"context_line":"        ms_http \u003d pvmhttp.load_pvm_resp("},{"line_number":42,"context_line":"            MS_HTTPRESP_FILE, adapter\u003dmock.Mock()).get_response()"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba5201f7_5eefd9af","line":39,"range":{"start_line":38,"start_character":0,"end_line":39,"end_character":63},"in_reply_to":"ba5201f7_63f33a9f","updated":"2017-01-04 07:29:48.000000000","message":"Done","commit_id":"3c6ea91cee09d079a4d04c3fcab1a19a889e3019"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"06448bd56c62023a57f8fcbe01dde2db339f93dc","unresolved":false,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    def setUp(self):"},{"line_number":76,"context_line":"        super(ComprehensiveScrub, self).setUp()"},{"line_number":77,"context_line":"        self.mock_comp_scrub \u003d self.useFixture("},{"line_number":78,"context_line":"            fixtures.MockPatch(\u0027pypowervm.tasks.storage.ComprehensiveScrub\u0027))"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"ba5201f7_23277213","line":77,"range":{"start_line":77,"start_character":13,"end_line":77,"end_character":28},"updated":"2017-01-03 20:29:09.000000000","message":"This should be named comp_scrub_fx (or add .mock at the end so it\u0027s really the mock being assigned).","commit_id":"3c6ea91cee09d079a4d04c3fcab1a19a889e3019"},{"author":{"_account_id":10347,"name":"Wang Qing wu","email":"wqw2700@sina.com","username":"cody"},"change_message_id":"6c32264f76c89100c29171bbdff09174d48f9a7b","unresolved":false,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    def setUp(self):"},{"line_number":76,"context_line":"        super(ComprehensiveScrub, self).setUp()"},{"line_number":77,"context_line":"        self.mock_comp_scrub \u003d self.useFixture("},{"line_number":78,"context_line":"            fixtures.MockPatch(\u0027pypowervm.tasks.storage.ComprehensiveScrub\u0027))"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"ba5201f7_be836503","line":77,"range":{"start_line":77,"start_character":13,"end_line":77,"end_character":28},"in_reply_to":"ba5201f7_23277213","updated":"2017-01-04 07:29:48.000000000","message":"Done","commit_id":"3c6ea91cee09d079a4d04c3fcab1a19a889e3019"}],"nova/tests/unit/virt/powervm/tasks/test_storage.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"06448bd56c62023a57f8fcbe01dde2db339f93dc","unresolved":false,"context_lines":[{"line_number":17,"context_line":"import mock"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from nova import test"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from nova.virt.powervm.tasks import storage as tf_stg"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"ba5201f7_4ea01da0","line":20,"updated":"2017-01-03 20:29:09.000000000","message":"eliminate blank line","commit_id":"3c6ea91cee09d079a4d04c3fcab1a19a889e3019"},{"author":{"_account_id":10347,"name":"Wang Qing wu","email":"wqw2700@sina.com","username":"cody"},"change_message_id":"6c32264f76c89100c29171bbdff09174d48f9a7b","unresolved":false,"context_lines":[{"line_number":17,"context_line":"import mock"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from nova import test"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from nova.virt.powervm.tasks import storage as tf_stg"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"ba5201f7_13a0ea8f","line":20,"in_reply_to":"ba5201f7_4ea01da0","updated":"2017-01-04 07:29:48.000000000","message":"Done","commit_id":"3c6ea91cee09d079a4d04c3fcab1a19a889e3019"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"06448bd56c62023a57f8fcbe01dde2db339f93dc","unresolved":false,"context_lines":[{"line_number":24,"context_line":"class TestStorage(test.TestCase):"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def test_delete_disk_pvm(self):"},{"line_number":27,"context_line":"        disk_dvr \u003d mock.Mock()"},{"line_number":28,"context_line":"        instance \u003d mock.Mock()"},{"line_number":29,"context_line":"        context \u003d \u0027context\u0027"},{"line_number":30,"context_line":"        stor_adpt_mappings \u003d mock.Mock()"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"        task \u003d tf_stg.DeleteDisk(disk_dvr, context, instance)"},{"line_number":33,"context_line":"        task.execute(stor_adpt_mappings)"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba5201f7_a34a8281","line":30,"range":{"start_line":27,"start_character":1,"end_line":30,"end_character":1},"updated":"2017-01-03 20:29:09.000000000","message":"Be neat if this common stuff was mocked out in a setUp.  Not critical.","commit_id":"3c6ea91cee09d079a4d04c3fcab1a19a889e3019"},{"author":{"_account_id":10347,"name":"Wang Qing wu","email":"wqw2700@sina.com","username":"cody"},"change_message_id":"6c32264f76c89100c29171bbdff09174d48f9a7b","unresolved":false,"context_lines":[{"line_number":24,"context_line":"class TestStorage(test.TestCase):"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def test_delete_disk_pvm(self):"},{"line_number":27,"context_line":"        disk_dvr \u003d mock.Mock()"},{"line_number":28,"context_line":"        instance \u003d mock.Mock()"},{"line_number":29,"context_line":"        context \u003d \u0027context\u0027"},{"line_number":30,"context_line":"        stor_adpt_mappings \u003d mock.Mock()"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"        task \u003d tf_stg.DeleteDisk(disk_dvr, context, instance)"},{"line_number":33,"context_line":"        task.execute(stor_adpt_mappings)"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba5201f7_1e48f12c","line":30,"range":{"start_line":27,"start_character":1,"end_line":30,"end_character":1},"in_reply_to":"ba5201f7_a34a8281","updated":"2017-01-04 07:29:48.000000000","message":"Done","commit_id":"3c6ea91cee09d079a4d04c3fcab1a19a889e3019"},{"author":{"_account_id":8190,"name":"Drew Thorstensen (thorst)","email":"thorst@us.ibm.com","username":"thorst"},"change_message_id":"604fa94af8bab32873971f185817e80004a4e3c2","unresolved":false,"context_lines":[{"line_number":29,"context_line":"        self.instance \u003d mock.MagicMock()"},{"line_number":30,"context_line":"        self.context \u003d \u0027context\u0027"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def test_delete_disk_pvm(self):"},{"line_number":33,"context_line":"        stor_adpt_mappings \u003d mock.Mock()"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"        task \u003d tf_stg.DeleteDisk(self.disk_dvr, self.context,"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a57fde8_c4e2729f","line":32,"range":{"start_line":32,"start_character":24,"end_line":32,"end_character":28},"updated":"2017-01-12 14:06:06.000000000","message":"Not sure we need all these _pvm\u0027s at the end here.","commit_id":"aa5d9297e0d7149f09f37131ee6081cd1d6a2ad1"},{"author":{"_account_id":10347,"name":"Wang Qing wu","email":"wqw2700@sina.com","username":"cody"},"change_message_id":"708dedd9c87ec747434fd277e22fba9af9998ef3","unresolved":false,"context_lines":[{"line_number":29,"context_line":"        self.instance \u003d mock.MagicMock()"},{"line_number":30,"context_line":"        self.context \u003d \u0027context\u0027"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def test_delete_disk_pvm(self):"},{"line_number":33,"context_line":"        stor_adpt_mappings \u003d mock.Mock()"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"        task \u003d tf_stg.DeleteDisk(self.disk_dvr, self.context,"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a3905b3_a9e532a9","line":32,"range":{"start_line":32,"start_character":24,"end_line":32,"end_character":28},"in_reply_to":"5a3905b3_f349ed8f","updated":"2017-01-19 14:12:04.000000000","message":"Sorry, I did not depict clearly.\nI add \u0027pvm\u0027 suffix to be easy to distinguish from other UTs in local test. Forgot to remove it :)","commit_id":"aa5d9297e0d7149f09f37131ee6081cd1d6a2ad1"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"a5c26ca16adb93f1155cca53dc82eb094acd9969","unresolved":false,"context_lines":[{"line_number":29,"context_line":"        self.instance \u003d mock.MagicMock()"},{"line_number":30,"context_line":"        self.context \u003d \u0027context\u0027"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def test_delete_disk_pvm(self):"},{"line_number":33,"context_line":"        stor_adpt_mappings \u003d mock.Mock()"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"        task \u003d tf_stg.DeleteDisk(self.disk_dvr, self.context,"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a3905b3_f349ed8f","line":32,"range":{"start_line":32,"start_character":24,"end_line":32,"end_character":28},"in_reply_to":"7a3c09a3_064b1c2b","updated":"2017-01-19 13:45:29.000000000","message":"Where? They\u0027re not in this module (including the OOT source) or any superclass.  If they\u0027re in a different module, the qualified names don\u0027t conflict.  And we know they\u0027re powervm from the package name.  Am I missing something?","commit_id":"aa5d9297e0d7149f09f37131ee6081cd1d6a2ad1"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"7c0462708fbafb8fd3066b71ecdad18f9ba7566f","unresolved":false,"context_lines":[{"line_number":29,"context_line":"        self.instance \u003d mock.MagicMock()"},{"line_number":30,"context_line":"        self.context \u003d \u0027context\u0027"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def test_delete_disk_pvm(self):"},{"line_number":33,"context_line":"        stor_adpt_mappings \u003d mock.Mock()"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"        task \u003d tf_stg.DeleteDisk(self.disk_dvr, self.context,"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a3c09a3_7f54f0c9","line":32,"range":{"start_line":32,"start_character":24,"end_line":32,"end_character":28},"in_reply_to":"9a57fde8_c4e2729f","updated":"2017-01-18 22:32:37.000000000","message":"Done","commit_id":"aa5d9297e0d7149f09f37131ee6081cd1d6a2ad1"},{"author":{"_account_id":10347,"name":"Wang Qing wu","email":"wqw2700@sina.com","username":"cody"},"change_message_id":"be398db6c9327482705b66b5b1e105b032813536","unresolved":false,"context_lines":[{"line_number":29,"context_line":"        self.instance \u003d mock.MagicMock()"},{"line_number":30,"context_line":"        self.context \u003d \u0027context\u0027"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def test_delete_disk_pvm(self):"},{"line_number":33,"context_line":"        stor_adpt_mappings \u003d mock.Mock()"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"        task \u003d tf_stg.DeleteDisk(self.disk_dvr, self.context,"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a3c09a3_064b1c2b","line":32,"range":{"start_line":32,"start_character":24,"end_line":32,"end_character":28},"in_reply_to":"9a57fde8_c4e2729f","updated":"2017-01-19 13:13:52.000000000","message":"To distinguish other UTs with the similar test name.","commit_id":"aa5d9297e0d7149f09f37131ee6081cd1d6a2ad1"}],"nova/virt/powervm/disk/driver.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"06448bd56c62023a57f8fcbe01dde2db339f93dc","unresolved":false,"context_lines":[{"line_number":15,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":16,"context_line":"#    under the License."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import abc"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import oslo_log.log as logging"},{"line_number":21,"context_line":"from oslo_utils import units"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba5201f7_2e911953","line":18,"updated":"2017-01-03 20:29:09.000000000","message":"proper grouping of imports","commit_id":"3c6ea91cee09d079a4d04c3fcab1a19a889e3019"},{"author":{"_account_id":10347,"name":"Wang Qing wu","email":"wqw2700@sina.com","username":"cody"},"change_message_id":"6c32264f76c89100c29171bbdff09174d48f9a7b","unresolved":false,"context_lines":[{"line_number":15,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":16,"context_line":"#    under the License."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import abc"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import oslo_log.log as logging"},{"line_number":21,"context_line":"from oslo_utils import units"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba5201f7_7375b696","line":18,"in_reply_to":"ba5201f7_2e911953","updated":"2017-01-04 07:29:48.000000000","message":"Done","commit_id":"3c6ea91cee09d079a4d04c3fcab1a19a889e3019"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"06448bd56c62023a57f8fcbe01dde2db339f93dc","unresolved":false,"context_lines":[{"line_number":136,"context_line":"        \"\"\""},{"line_number":137,"context_line":"        pass"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    def create_disk_from_image(self, context, instance, image_meta, disk_size,"},{"line_number":140,"context_line":"                               image_type\u003dDiskType.BOOT):"},{"line_number":141,"context_line":"        \"\"\"Creates a disk and copies the specified image to it."},{"line_number":142,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"ba5201f7_2e6e7996","line":139,"updated":"2017-01-03 20:29:09.000000000","message":"This should be rebased on Iac0ef37efb9594c7f087447f86ccb5da38796853","commit_id":"3c6ea91cee09d079a4d04c3fcab1a19a889e3019"},{"author":{"_account_id":10347,"name":"Wang Qing wu","email":"wqw2700@sina.com","username":"cody"},"change_message_id":"6c32264f76c89100c29171bbdff09174d48f9a7b","unresolved":false,"context_lines":[{"line_number":136,"context_line":"        \"\"\""},{"line_number":137,"context_line":"        pass"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    def create_disk_from_image(self, context, instance, image_meta, disk_size,"},{"line_number":140,"context_line":"                               image_type\u003dDiskType.BOOT):"},{"line_number":141,"context_line":"        \"\"\"Creates a disk and copies the specified image to it."},{"line_number":142,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"ba5201f7_33c08e7b","line":139,"in_reply_to":"ba5201f7_2e6e7996","updated":"2017-01-04 07:29:48.000000000","message":"Done","commit_id":"3c6ea91cee09d079a4d04c3fcab1a19a889e3019"},{"author":{"_account_id":8190,"name":"Drew Thorstensen (thorst)","email":"thorst@us.ibm.com","username":"thorst"},"change_message_id":"604fa94af8bab32873971f185817e80004a4e3c2","unresolved":false,"context_lines":[{"line_number":154,"context_line":"        :return: The backing pypowervm storage object that was created."},{"line_number":155,"context_line":"        \"\"\""},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        # Retry 3 times on exception"},{"line_number":158,"context_line":"        for attempt in range(1, 5):"},{"line_number":159,"context_line":"            try:"},{"line_number":160,"context_line":"                return self._create_disk_from_image("}],"source_content_type":"text/x-python","patch_set":9,"id":"9a57fde8_a4580e58","line":157,"range":{"start_line":157,"start_character":8,"end_line":157,"end_character":36},"updated":"2017-01-12 14:06:06.000000000","message":"While this was a nightmare for us, maybe a bigger doc for those unfamiliar with why we do this.\n\n# Retry up to 3 times in case of exception.  We have\n# seen scenarios where the glance pipe breaks when\n# running too slow.  The failure is very quick, and\n# usually solved by just a quick retry.  Much better than\n# doing a full server rebuild.","commit_id":"aa5d9297e0d7149f09f37131ee6081cd1d6a2ad1"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"7c0462708fbafb8fd3066b71ecdad18f9ba7566f","unresolved":false,"context_lines":[{"line_number":154,"context_line":"        :return: The backing pypowervm storage object that was created."},{"line_number":155,"context_line":"        \"\"\""},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        # Retry 3 times on exception"},{"line_number":158,"context_line":"        for attempt in range(1, 5):"},{"line_number":159,"context_line":"            try:"},{"line_number":160,"context_line":"                return self._create_disk_from_image("}],"source_content_type":"text/x-python","patch_set":9,"id":"7a3c09a3_1fe12cff","line":157,"range":{"start_line":157,"start_character":8,"end_line":157,"end_character":36},"in_reply_to":"9a57fde8_a4580e58","updated":"2017-01-18 22:32:37.000000000","message":"Done","commit_id":"aa5d9297e0d7149f09f37131ee6081cd1d6a2ad1"},{"author":{"_account_id":8190,"name":"Drew Thorstensen (thorst)","email":"thorst@us.ibm.com","username":"thorst"},"change_message_id":"f3fbca64200789e4f5915cc6610e84179e5ac310","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":40,"context_line":"class DiskAdapter(object):"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    capabilities \u003d {"},{"line_number":43,"context_line":"        \u0027shared_storage\u0027: False,"}],"source_content_type":"text/x-python","patch_set":24,"id":"da36d5c6_a9355df8","line":40,"range":{"start_line":40,"start_character":0,"end_line":40,"end_character":26},"updated":"2017-02-17 19:57:28.000000000","message":"As an abstract meta class, we should provide some documentation on what this is.\n\nThis is the adapter that connects a nova ephemeral disk to a virtual machine.  Different backends can be used for Nova Ephemeral disks (ex. local disks or shared storage pools).","commit_id":"5392dc90bc131e925e4903f1bcd0fe54b37d65b9"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"1f640c08f02684cd12a40dbcb1d481103c91c8c9","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":40,"context_line":"class DiskAdapter(object):"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    capabilities \u003d {"},{"line_number":43,"context_line":"        \u0027shared_storage\u0027: False,"}],"source_content_type":"text/x-python","patch_set":24,"id":"da36d5c6_bda00e92","line":40,"range":{"start_line":40,"start_character":0,"end_line":40,"end_character":26},"in_reply_to":"da36d5c6_a9355df8","updated":"2017-02-21 20:01:56.000000000","message":"Done","commit_id":"5392dc90bc131e925e4903f1bcd0fe54b37d65b9"},{"author":{"_account_id":8190,"name":"Drew Thorstensen (thorst)","email":"thorst@us.ibm.com","username":"thorst"},"change_message_id":"f3fbca64200789e4f5915cc6610e84179e5ac310","unresolved":false,"context_lines":[{"line_number":108,"context_line":"                disk_bytes \u003d floor"},{"line_number":109,"context_line":"        return disk_bytes"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    def disconnect_image_disk(self, context, instance, stg_ftsk\u003dNone,"},{"line_number":112,"context_line":"                              disk_type\u003dNone):"},{"line_number":113,"context_line":"        \"\"\"Disconnects the storage adapters from the image disk."},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        :param context: nova context for operation"}],"source_content_type":"text/x-python","patch_set":24,"id":"da36d5c6_492f81a1","line":112,"range":{"start_line":111,"start_character":0,"end_line":112,"end_character":46},"updated":"2017-02-17 19:57:28.000000000","message":"Do we need to make these \u0027abstract\u0027?","commit_id":"5392dc90bc131e925e4903f1bcd0fe54b37d65b9"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"1f640c08f02684cd12a40dbcb1d481103c91c8c9","unresolved":false,"context_lines":[{"line_number":108,"context_line":"                disk_bytes \u003d floor"},{"line_number":109,"context_line":"        return disk_bytes"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    def disconnect_image_disk(self, context, instance, stg_ftsk\u003dNone,"},{"line_number":112,"context_line":"                              disk_type\u003dNone):"},{"line_number":113,"context_line":"        \"\"\"Disconnects the storage adapters from the image disk."},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        :param context: nova context for operation"}],"source_content_type":"text/x-python","patch_set":24,"id":"da36d5c6_ddadc289","line":112,"range":{"start_line":111,"start_character":0,"end_line":112,"end_character":46},"in_reply_to":"da36d5c6_492f81a1","updated":"2017-02-21 20:01:56.000000000","message":"Done","commit_id":"5392dc90bc131e925e4903f1bcd0fe54b37d65b9"}],"nova/virt/powervm/disk/localdisk.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"06448bd56c62023a57f8fcbe01dde2db339f93dc","unresolved":false,"context_lines":[{"line_number":15,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":16,"context_line":"#    under the License."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from oslo_log import log as logging"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from nova import image"},{"line_number":21,"context_line":"from pypowervm import const as pvm_const"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba5201f7_0e96154c","line":18,"updated":"2017-01-03 20:29:09.000000000","message":"proper grouping of imports","commit_id":"3c6ea91cee09d079a4d04c3fcab1a19a889e3019"},{"author":{"_account_id":10347,"name":"Wang Qing wu","email":"wqw2700@sina.com","username":"cody"},"change_message_id":"6c32264f76c89100c29171bbdff09174d48f9a7b","unresolved":false,"context_lines":[{"line_number":15,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":16,"context_line":"#    under the License."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from oslo_log import log as logging"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from nova import image"},{"line_number":21,"context_line":"from pypowervm import const as pvm_const"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba5201f7_d324a2b0","line":18,"in_reply_to":"ba5201f7_0e96154c","updated":"2017-01-04 07:29:48.000000000","message":"Done","commit_id":"3c6ea91cee09d079a4d04c3fcab1a19a889e3019"},{"author":{"_account_id":8190,"name":"Drew Thorstensen (thorst)","email":"thorst@us.ibm.com","username":"thorst"},"change_message_id":"f3fbca64200789e4f5915cc6610e84179e5ac310","unresolved":false,"context_lines":[{"line_number":36,"context_line":"IMAGE_API \u003d image.API()"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"class LocalStorage(disk_dvr.DiskAdapter):"},{"line_number":40,"context_line":"    def __init__(self, adapter, host_uuid):"},{"line_number":41,"context_line":"        super(LocalStorage, self).__init__(adapter, host_uuid)"},{"line_number":42,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"da36d5c6_c911b15f","line":39,"range":{"start_line":39,"start_character":0,"end_line":39,"end_character":41},"updated":"2017-02-17 19:57:28.000000000","message":"Same comment on doc.","commit_id":"5392dc90bc131e925e4903f1bcd0fe54b37d65b9"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"1f640c08f02684cd12a40dbcb1d481103c91c8c9","unresolved":false,"context_lines":[{"line_number":36,"context_line":"IMAGE_API \u003d image.API()"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"class LocalStorage(disk_dvr.DiskAdapter):"},{"line_number":40,"context_line":"    def __init__(self, adapter, host_uuid):"},{"line_number":41,"context_line":"        super(LocalStorage, self).__init__(adapter, host_uuid)"},{"line_number":42,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"da36d5c6_5db0f2dd","line":39,"range":{"start_line":39,"start_character":0,"end_line":39,"end_character":41},"in_reply_to":"da36d5c6_c911b15f","updated":"2017-02-21 20:01:56.000000000","message":"Done","commit_id":"5392dc90bc131e925e4903f1bcd0fe54b37d65b9"},{"author":{"_account_id":8190,"name":"Drew Thorstensen (thorst)","email":"thorst@us.ibm.com","username":"thorst"},"change_message_id":"f3fbca64200789e4f5915cc6610e84179e5ac310","unresolved":false,"context_lines":[{"line_number":148,"context_line":"        :param image_type: the image type. See disk constants above."},{"line_number":149,"context_line":"        :return: The backing pypowervm storage object that was created."},{"line_number":150,"context_line":"        \"\"\""},{"line_number":151,"context_line":"        LOG.info(_LI(\u0027Create disk.\u0027))"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"        # Transfer the image"},{"line_number":154,"context_line":"        vol_name \u003d self._get_disk_name(image_type, instance, short\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":24,"id":"da36d5c6_ac03ab0c","line":151,"range":{"start_line":151,"start_character":8,"end_line":151,"end_character":37},"updated":"2017-02-17 19:57:28.000000000","message":"Should probably provide more info, like what instance.","commit_id":"5392dc90bc131e925e4903f1bcd0fe54b37d65b9"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"1f640c08f02684cd12a40dbcb1d481103c91c8c9","unresolved":false,"context_lines":[{"line_number":148,"context_line":"        :param image_type: the image type. See disk constants above."},{"line_number":149,"context_line":"        :return: The backing pypowervm storage object that was created."},{"line_number":150,"context_line":"        \"\"\""},{"line_number":151,"context_line":"        LOG.info(_LI(\u0027Create disk.\u0027))"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"        # Transfer the image"},{"line_number":154,"context_line":"        vol_name \u003d self._get_disk_name(image_type, instance, short\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":24,"id":"da36d5c6_c80ed533","line":151,"range":{"start_line":151,"start_character":8,"end_line":151,"end_character":37},"in_reply_to":"da36d5c6_ac03ab0c","updated":"2017-02-21 20:01:56.000000000","message":"IRL, this comes in the midst of other messages that give it good context; but added instance\u003d kwarg anyway.","commit_id":"5392dc90bc131e925e4903f1bcd0fe54b37d65b9"},{"author":{"_account_id":8190,"name":"Drew Thorstensen (thorst)","email":"thorst@us.ibm.com","username":"thorst"},"change_message_id":"f3fbca64200789e4f5915cc6610e84179e5ac310","unresolved":false,"context_lines":[{"line_number":214,"context_line":"        :return vios_uuid: The Virtual I/O Server pypowervm UUID."},{"line_number":215,"context_line":"        :return vg_uuid: The Volume Group pypowervm UUID."},{"line_number":216,"context_line":"        \"\"\""},{"line_number":217,"context_line":"        if CONF.powervm.volume_group_vios_name:"},{"line_number":218,"context_line":"            # Search for the VIOS if the admin specified it."},{"line_number":219,"context_line":"            vios_wraps \u003d pvm_vios.VIOS.search("},{"line_number":220,"context_line":"                self.adapter, name\u003dCONF.powervm.volume_group_vios_name)"},{"line_number":221,"context_line":"        else:"},{"line_number":222,"context_line":"            vios_wraps \u003d pvm_vios.VIOS.get(self.adapter)"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"        # Loop through each vios to find the one with the appropriate name."},{"line_number":225,"context_line":"        for vios_wrap in vios_wraps:"}],"source_content_type":"text/x-python","patch_set":24,"id":"da36d5c6_4906a121","line":222,"range":{"start_line":217,"start_character":0,"end_line":222,"end_character":56},"updated":"2017-02-17 19:57:28.000000000","message":"This would be the only real place where we\u0027d save though...\n\nYou know, I know we can\u0027t do it since we\u0027re pinned to a pypowervm level, but for a future rev, we could potentially throw some of this down into pypowervm.","commit_id":"5392dc90bc131e925e4903f1bcd0fe54b37d65b9"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"1f640c08f02684cd12a40dbcb1d481103c91c8c9","unresolved":false,"context_lines":[{"line_number":214,"context_line":"        :return vios_uuid: The Virtual I/O Server pypowervm UUID."},{"line_number":215,"context_line":"        :return vg_uuid: The Volume Group pypowervm UUID."},{"line_number":216,"context_line":"        \"\"\""},{"line_number":217,"context_line":"        if CONF.powervm.volume_group_vios_name:"},{"line_number":218,"context_line":"            # Search for the VIOS if the admin specified it."},{"line_number":219,"context_line":"            vios_wraps \u003d pvm_vios.VIOS.search("},{"line_number":220,"context_line":"                self.adapter, name\u003dCONF.powervm.volume_group_vios_name)"},{"line_number":221,"context_line":"        else:"},{"line_number":222,"context_line":"            vios_wraps \u003d pvm_vios.VIOS.get(self.adapter)"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"        # Loop through each vios to find the one with the appropriate name."},{"line_number":225,"context_line":"        for vios_wrap in vios_wraps:"}],"source_content_type":"text/x-python","patch_set":24,"id":"da36d5c6_277884f2","line":222,"range":{"start_line":217,"start_character":0,"end_line":222,"end_character":56},"in_reply_to":"da36d5c6_4906a121","updated":"2017-02-21 20:01:56.000000000","message":"Ya know, unless I\u0027m missing something, this is totally not even working like the doc in the conf implies.  If you omit the volume_group_name, we\u0027re not searching squat.\n\nWhich is okay.  I think the way the conf option describes it is too complicated.  I\u0027m saying the doc should change.\n\nLooking into a pypowervm change that makes sense for this.","commit_id":"5392dc90bc131e925e4903f1bcd0fe54b37d65b9"},{"author":{"_account_id":8190,"name":"Drew Thorstensen (thorst)","email":"thorst@us.ibm.com","username":"thorst"},"change_message_id":"f3fbca64200789e4f5915cc6610e84179e5ac310","unresolved":false,"context_lines":[{"line_number":233,"context_line":""},{"line_number":234,"context_line":"        raise exception.VGNotFound(vg_name\u003dname)"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"    def _get_vg(self):"},{"line_number":237,"context_line":"        vg_rsp \u003d self.adapter.read("},{"line_number":238,"context_line":"            pvm_vios.VIOS.schema_type, root_id\u003dself._vios_uuid,"},{"line_number":239,"context_line":"            child_type\u003dpvm_stg.VG.schema_type, child_id\u003dself.vg_uuid)"},{"line_number":240,"context_line":"        return vg_rsp"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"    def _get_vg_wrap(self):"},{"line_number":243,"context_line":"        return pvm_stg.VG.get(self.adapter, uuid\u003dself.vg_uuid,"}],"source_content_type":"text/x-python","patch_set":24,"id":"da36d5c6_ec0da338","line":240,"range":{"start_line":236,"start_character":0,"end_line":240,"end_character":21},"updated":"2017-02-17 19:57:28.000000000","message":"I\u0027m probably missing it...but is this used?","commit_id":"5392dc90bc131e925e4903f1bcd0fe54b37d65b9"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"1f640c08f02684cd12a40dbcb1d481103c91c8c9","unresolved":false,"context_lines":[{"line_number":233,"context_line":""},{"line_number":234,"context_line":"        raise exception.VGNotFound(vg_name\u003dname)"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"    def _get_vg(self):"},{"line_number":237,"context_line":"        vg_rsp \u003d self.adapter.read("},{"line_number":238,"context_line":"            pvm_vios.VIOS.schema_type, root_id\u003dself._vios_uuid,"},{"line_number":239,"context_line":"            child_type\u003dpvm_stg.VG.schema_type, child_id\u003dself.vg_uuid)"},{"line_number":240,"context_line":"        return vg_rsp"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"    def _get_vg_wrap(self):"},{"line_number":243,"context_line":"        return pvm_stg.VG.get(self.adapter, uuid\u003dself.vg_uuid,"}],"source_content_type":"text/x-python","patch_set":24,"id":"da36d5c6_9d20aa4b","line":240,"range":{"start_line":236,"start_character":0,"end_line":240,"end_character":21},"in_reply_to":"da36d5c6_ec0da338","updated":"2017-02-21 20:01:56.000000000","message":"Nope.  Removed.","commit_id":"5392dc90bc131e925e4903f1bcd0fe54b37d65b9"}],"nova/virt/powervm/exception.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"06448bd56c62023a57f8fcbe01dde2db339f93dc","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"\"\"\"Exceptions specific to the powervm nova driver.\"\"\""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import abc"},{"line_number":20,"context_line":"from nova import exception as nex"},{"line_number":21,"context_line":"from nova.i18n import _"},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"ba5201f7_49e81711","line":19,"updated":"2017-01-03 20:29:09.000000000","message":"group imports properly","commit_id":"3c6ea91cee09d079a4d04c3fcab1a19a889e3019"},{"author":{"_account_id":10347,"name":"Wang Qing wu","email":"wqw2700@sina.com","username":"cody"},"change_message_id":"6c32264f76c89100c29171bbdff09174d48f9a7b","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"\"\"\"Exceptions specific to the powervm nova driver.\"\"\""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import abc"},{"line_number":20,"context_line":"from nova import exception as nex"},{"line_number":21,"context_line":"from nova.i18n import _"},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"ba5201f7_78191588","line":19,"in_reply_to":"ba5201f7_49e81711","updated":"2017-01-04 07:29:48.000000000","message":"Done","commit_id":"3c6ea91cee09d079a4d04c3fcab1a19a889e3019"},{"author":{"_account_id":8190,"name":"Drew Thorstensen (thorst)","email":"thorst@us.ibm.com","username":"thorst"},"change_message_id":"604fa94af8bab32873971f185817e80004a4e3c2","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from nova.i18n import _"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":27,"context_line":"class AbstractDiskException(nex.NovaException):"},{"line_number":28,"context_line":"    pass"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"class VGNotFound(AbstractDiskException):"},{"line_number":32,"context_line":"    msg_fmt \u003d _(\"Unable to locate the volume group \u0027%(vg_name)s\u0027 for this \""},{"line_number":33,"context_line":"                \"operation.\")"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"class PowerVMAPIFailed(nex.NovaException):"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a57fde8_e725b8ae","line":33,"range":{"start_line":26,"start_character":0,"end_line":33,"end_character":29},"updated":"2017-01-12 14:06:06.000000000","message":"See my other note on exceptions.  How many of these will we need  :-)","commit_id":"aa5d9297e0d7149f09f37131ee6081cd1d6a2ad1"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"7c0462708fbafb8fd3066b71ecdad18f9ba7566f","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from nova.i18n import _"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":27,"context_line":"class AbstractDiskException(nex.NovaException):"},{"line_number":28,"context_line":"    pass"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"class VGNotFound(AbstractDiskException):"},{"line_number":32,"context_line":"    msg_fmt \u003d _(\"Unable to locate the volume group \u0027%(vg_name)s\u0027 for this \""},{"line_number":33,"context_line":"                \"operation.\")"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"class PowerVMAPIFailed(nex.NovaException):"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a3c09a3_ef3924f3","line":33,"range":{"start_line":26,"start_character":0,"end_line":33,"end_character":29},"in_reply_to":"9a57fde8_e725b8ae","updated":"2017-01-18 22:32:37.000000000","message":"Moved to nova.exception.  (I also got rid of AbstractDiskException - doesn\u0027t seem to be needed.)","commit_id":"aa5d9297e0d7149f09f37131ee6081cd1d6a2ad1"}],"nova/virt/powervm/tasks/storage.py":[{"author":{"_account_id":8190,"name":"Drew Thorstensen (thorst)","email":"thorst@us.ibm.com","username":"thorst"},"change_message_id":"f3fbca64200789e4f5915cc6610e84179e5ac310","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class CreateDiskForImg(pvm_task.PowerVMTask):"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    \"\"\"The Task to create the disk from an image in the storage.\"\"\""}],"source_content_type":"text/x-python","patch_set":24,"id":"da36d5c6_6c31b3ec","line":25,"updated":"2017-02-17 19:57:28.000000000","message":"I love task flow so much.","commit_id":"5392dc90bc131e925e4903f1bcd0fe54b37d65b9"}],"nova/virt/powervm/vm.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"06448bd56c62023a57f8fcbe01dde2db339f93dc","unresolved":false,"context_lines":[{"line_number":533,"context_line":"        return get_vm_qp(self._adapter, self._uuid, q_prop)"},{"line_number":534,"context_line":""},{"line_number":535,"context_line":"    @property"},{"line_number":536,"context_line":"    def state(self):"},{"line_number":537,"context_line":"        # return the state if we previously loaded it"},{"line_number":538,"context_line":"        if self._state is not None:"},{"line_number":539,"context_line":"            return self._state"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba5201f7_291cb312","line":536,"updated":"2017-01-03 20:29:09.000000000","message":"Seems weird that this is the change set where we would start needing the VM state.  Can you explain where this comes from?","commit_id":"3c6ea91cee09d079a4d04c3fcab1a19a889e3019"},{"author":{"_account_id":10347,"name":"Wang Qing wu","email":"wqw2700@sina.com","username":"cody"},"change_message_id":"6c32264f76c89100c29171bbdff09174d48f9a7b","unresolved":false,"context_lines":[{"line_number":533,"context_line":"        return get_vm_qp(self._adapter, self._uuid, q_prop)"},{"line_number":534,"context_line":""},{"line_number":535,"context_line":"    @property"},{"line_number":536,"context_line":"    def state(self):"},{"line_number":537,"context_line":"        # return the state if we previously loaded it"},{"line_number":538,"context_line":"        if self._state is not None:"},{"line_number":539,"context_line":"            return self._state"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba5201f7_98995922","line":536,"in_reply_to":"ba5201f7_291cb312","updated":"2017-01-04 07:29:48.000000000","message":"After sending a boot vm request, the nova updates the vm\u0027s status. If there is no \u0027state\u0027 within instance object, nova would print an error in nova compute log. And the lpar\u0027s status can not reflect correctly in horizon.","commit_id":"3c6ea91cee09d079a4d04c3fcab1a19a889e3019"}]}
