)]}'
{"nova/virt/powervm/blockdev.py":[{"author":{"_account_id":4601,"name":"Tiago Mello","email":"tmello@linux.vnet.ibm.com","username":"tmello"},"change_message_id":"7647867a6e35374a7530f6c438703969d5f376fe","unresolved":false,"context_lines":[{"line_number":206,"context_line":""},{"line_number":207,"context_line":"            # cleanup local file only if transferring to remote system"},{"line_number":208,"context_line":"            # otherwise keep the file to boot from locally and clean up later"},{"line_number":209,"context_line":"            cleanup_cmd \u003d \u0027rm %s\u0027 % file_path"},{"line_number":210,"context_line":"            self.run_vios_command_as_root(cleanup_cmd)"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"        return file_path"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2FY4M%3D","line":209,"updated":"2013-01-24 13:51:24.000000000","message":"How does it certify that the file was successfully copied before removing it from local? Couldn\u0027t it have a checksum or something that would tell that the file is not corrupted?","commit_id":"66c39da25bd589a3d587a6239cff218b1a884f0b"},{"author":{"_account_id":5638,"name":"Davanum Srinivas","email":"davanum@gmail.com","username":"dims-v"},"change_message_id":"24158c21368df8475c4d13e45827003d155d5ad3","unresolved":false,"context_lines":[{"line_number":194,"context_line":"            with common.vios_to_vios_auth(self.connection_data.host,"},{"line_number":195,"context_line":"                                          dest,"},{"line_number":196,"context_line":"                                          self.connection_data) as key_name:"},{"line_number":197,"context_line":"                cmd \u003d \u0027 \u0027.join([\u0027scp -o \"StrictHostKeyChecking no\"\u0027,"},{"line_number":198,"context_line":"                                (\u0027-i %s\u0027 % key_name),"},{"line_number":199,"context_line":"                                file_path,"},{"line_number":200,"context_line":"                                \u0027%s@%s:%s\u0027 % (self.connection_data.username,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2FWi8%3D","line":197,"updated":"2013-01-25 22:31:47.000000000","message":"Need the space in the leading \u0027 \u0027?","commit_id":"42db40d710b5a23f57935c777372e6e29813645e"}],"nova/virt/powervm/common.py":[{"author":{"_account_id":5371,"name":"Mathew Odden","email":"locke105@gmail.com","username":"locke105"},"change_message_id":"ab8ef9018905f801c9a0fbe230369162e0e14cc3","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import paramiko"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from contextlib import contextmanager"},{"line_number":23,"context_line":"from nova import exception as nova_exception"},{"line_number":24,"context_line":"from nova.openstack.common import log as logging"},{"line_number":25,"context_line":"from nova import utils"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2Fcz4%3D","line":22,"updated":"2013-01-22 01:37:00.000000000","message":"usually I try to keep the python stdlib imports grouped together (ie this should go up with import os and ftblib) but it\u0027s a nit","commit_id":"f5accdf6557fca2424d2fa38b6f9114f3651f2c5"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"d72cfe29b84c9331942df9858302f6f89bb48474","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import paramiko"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from contextlib import contextmanager"},{"line_number":23,"context_line":"from nova import exception as nova_exception"},{"line_number":24,"context_line":"from nova.openstack.common import log as logging"},{"line_number":25,"context_line":"from nova import utils"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2Fb%2FQ%3D","line":22,"in_reply_to":"AAAAM3%2F%2Fcz4%3D","updated":"2013-01-22 16:42:56.000000000","message":"Done","commit_id":"f5accdf6557fca2424d2fa38b6f9114f3651f2c5"},{"author":{"_account_id":5371,"name":"Mathew Odden","email":"locke105@gmail.com","username":"locke105"},"change_message_id":"ab8ef9018905f801c9a0fbe230369162e0e14cc3","unresolved":false,"context_lines":[{"line_number":25,"context_line":"from nova import utils"},{"line_number":26,"context_line":"from nova.virt.powervm import exception"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"import uuid"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":31,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2Fcz0%3D","line":28,"updated":"2013-01-22 01:37:00.000000000","message":"same here... uuid is from python stdlib","commit_id":"f5accdf6557fca2424d2fa38b6f9114f3651f2c5"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"d72cfe29b84c9331942df9858302f6f89bb48474","unresolved":false,"context_lines":[{"line_number":25,"context_line":"from nova import utils"},{"line_number":26,"context_line":"from nova.virt.powervm import exception"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"import uuid"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":31,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2Fb%2FM%3D","line":28,"in_reply_to":"AAAAM3%2F%2Fcz0%3D","updated":"2013-01-22 16:42:56.000000000","message":"Done","commit_id":"f5accdf6557fca2424d2fa38b6f9114f3651f2c5"},{"author":{"_account_id":5371,"name":"Mathew Odden","email":"locke105@gmail.com","username":"locke105"},"change_message_id":"ab8ef9018905f801c9a0fbe230369162e0e14cc3","unresolved":false,"context_lines":[{"line_number":175,"context_line":"    :param conn_info: dictionary object with SSH connection"},{"line_number":176,"context_line":"                      information for both hosts"},{"line_number":177,"context_line":"    \"\"\""},{"line_number":178,"context_line":"    KEY_BASE_NAME \u003d \"openstack-pvm-rsa\""},{"line_number":179,"context_line":"    keypair_uuid \u003d uuid.uuid4()"},{"line_number":180,"context_line":"    src_conn_obj \u003d ssh_connect(conn_info)"},{"line_number":181,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2Fc0A%3D","line":178,"updated":"2013-01-22 01:37:00.000000000","message":"Before you submit this, there is a bug with this code, where two keys will end up trying to use the same name, and this will hang on creation.\n\nThe uuid created here should be used as the base name (as well as the key comment, as it already is) instead of the hardcoded string. This was supposed to be fixed but must have been lost.","commit_id":"f5accdf6557fca2424d2fa38b6f9114f3651f2c5"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"4f5b619e27bcffe1f548a4a83a3e7e947b18c2e3","unresolved":false,"context_lines":[{"line_number":175,"context_line":"    :param conn_info: dictionary object with SSH connection"},{"line_number":176,"context_line":"                      information for both hosts"},{"line_number":177,"context_line":"    \"\"\""},{"line_number":178,"context_line":"    KEY_BASE_NAME \u003d \"openstack-pvm-rsa\""},{"line_number":179,"context_line":"    keypair_uuid \u003d uuid.uuid4()"},{"line_number":180,"context_line":"    src_conn_obj \u003d ssh_connect(conn_info)"},{"line_number":181,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FbMM%3D","line":178,"in_reply_to":"AAAAM3%2F%2Fc0A%3D","updated":"2013-01-23 01:01:46.000000000","message":"Done","commit_id":"f5accdf6557fca2424d2fa38b6f9114f3651f2c5"}],"nova/virt/powervm/driver.py":[{"author":{"_account_id":5371,"name":"Mathew Odden","email":"locke105@gmail.com","username":"locke105"},"change_message_id":"ab8ef9018905f801c9a0fbe230369162e0e14cc3","unresolved":false,"context_lines":[{"line_number":30,"context_line":"from nova.virt import driver"},{"line_number":31,"context_line":"from nova.virt.powervm import operator"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"import socket"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2Fczw%3D","line":33,"updated":"2013-01-22 01:37:00.000000000","message":"\u0027nother nit","commit_id":"f5accdf6557fca2424d2fa38b6f9114f3651f2c5"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"d72cfe29b84c9331942df9858302f6f89bb48474","unresolved":false,"context_lines":[{"line_number":30,"context_line":"from nova.virt import driver"},{"line_number":31,"context_line":"from nova.virt.powervm import operator"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"import socket"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2Fb%2Bk%3D","line":33,"in_reply_to":"AAAAM3%2F%2Fczw%3D","updated":"2013-01-22 16:42:56.000000000","message":"Done","commit_id":"f5accdf6557fca2424d2fa38b6f9114f3651f2c5"},{"author":{"_account_id":5313,"name":"David Peraza","email":"david_peraza@persistentsys.com","username":"dperaza"},"change_message_id":"541155e2200825bfb4df029461a16b1403021818","unresolved":false,"context_lines":[{"line_number":304,"context_line":""},{"line_number":305,"context_line":"    def finish_revert_migration(self, instance, network_info,"},{"line_number":306,"context_line":"                                block_device_info\u003dNone):"},{"line_number":307,"context_line":"        \"\"\"Finish reverting a resize, powering back on the instance.\"\"\""},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"        # undo instance rename and start"},{"line_number":310,"context_line":"        new_name \u003d self._get_resize_name(instance[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FdV4%3D","line":307,"updated":"2013-01-22 02:27:14.000000000","message":"doing hot resize will speed up things but will brake the revert path since target instance \u003d source instance and it will be removed by manager. I think we need to fall back to doing migrate even if on same host, we need to add a blueprint to allow for hot resize without requiring a migration, which is the way to do it on powervm","commit_id":"f5accdf6557fca2424d2fa38b6f9114f3651f2c5"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"4f5b619e27bcffe1f548a4a83a3e7e947b18c2e3","unresolved":false,"context_lines":[{"line_number":304,"context_line":""},{"line_number":305,"context_line":"    def finish_revert_migration(self, instance, network_info,"},{"line_number":306,"context_line":"                                block_device_info\u003dNone):"},{"line_number":307,"context_line":"        \"\"\"Finish reverting a resize, powering back on the instance.\"\"\""},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"        # undo instance rename and start"},{"line_number":310,"context_line":"        new_name \u003d self._get_resize_name(instance[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FbMo%3D","line":307,"in_reply_to":"AAAAM3%2F%2FdV4%3D","updated":"2013-01-23 01:01:46.000000000","message":"Done","commit_id":"f5accdf6557fca2424d2fa38b6f9114f3651f2c5"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"cb52a3559d3c00e4ccb4d16a1e26be23ca21dc6a","unresolved":false,"context_lines":[{"line_number":234,"context_line":"                instance[\u0027name\u0027])"},{"line_number":235,"context_line":"        disk_info[\u0027old_lv_size\u0027] \u003d pvm_op.get_logical_vol_size(diskname)"},{"line_number":236,"context_line":"        new_name \u003d self._get_resize_name(instance[\u0027name\u0027])"},{"line_number":237,"context_line":"        pvm_op.rename_lpar(instance[\u0027name\u0027], new_name)"},{"line_number":238,"context_line":"        return disk_info"},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"    def _get_resize_name(self, instance_name):"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2FJBw%3D","line":237,"updated":"2013-02-05 20:07:21.000000000","message":"This means you\u0027re not doing what the other hypervisors do for a resize, right? AFAIK, a resize is supposed to create another instance as the new size as part of the two-phase commit nature of the call.","commit_id":"8d7a2f4811bef5da3c4ca2b15d6be172817d5f02"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"cef43eb1c0f85b34816ea8dd058ff727b493a2c4","unresolved":false,"context_lines":[{"line_number":234,"context_line":"                instance[\u0027name\u0027])"},{"line_number":235,"context_line":"        disk_info[\u0027old_lv_size\u0027] \u003d pvm_op.get_logical_vol_size(diskname)"},{"line_number":236,"context_line":"        new_name \u003d self._get_resize_name(instance[\u0027name\u0027])"},{"line_number":237,"context_line":"        pvm_op.rename_lpar(instance[\u0027name\u0027], new_name)"},{"line_number":238,"context_line":"        return disk_info"},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"    def _get_resize_name(self, instance_name):"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2FI9A%3D","line":237,"in_reply_to":"AAAAM3%2F%2FI%2Fc%3D","updated":"2013-02-05 20:56:28.000000000","message":"Okay, I think I see it now. I guess it\u0027s confusing since you name the lpars by the instance name instead of sequentially-named like libvirt. You know that instance names are not unique, right? I can create two with the same name. What would happen on powervm if I did that? Sparks and flames?","commit_id":"8d7a2f4811bef5da3c4ca2b15d6be172817d5f02"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"0d6c59606dc54ed0b06f0c2ab14da3cf3ad8cfaa","unresolved":false,"context_lines":[{"line_number":234,"context_line":"                instance[\u0027name\u0027])"},{"line_number":235,"context_line":"        disk_info[\u0027old_lv_size\u0027] \u003d pvm_op.get_logical_vol_size(diskname)"},{"line_number":236,"context_line":"        new_name \u003d self._get_resize_name(instance[\u0027name\u0027])"},{"line_number":237,"context_line":"        pvm_op.rename_lpar(instance[\u0027name\u0027], new_name)"},{"line_number":238,"context_line":"        return disk_info"},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"    def _get_resize_name(self, instance_name):"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2FIz8%3D","line":237,"in_reply_to":"AAAAM3%2F%2FI4M%3D","updated":"2013-02-05 22:26:54.000000000","message":"Oh good, so why do this rename dance then? Why not just allocate a new sequential instance name? Isn\u0027t that what libvirt does? I know it renames the image directory to -resize or something, but I think it uses sequential instance names everywhere, right? This just seems confusing otherwise...","commit_id":"8d7a2f4811bef5da3c4ca2b15d6be172817d5f02"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"681af3a556cde77ee3dbb8cd5f7430116620bebe","unresolved":false,"context_lines":[{"line_number":234,"context_line":"                instance[\u0027name\u0027])"},{"line_number":235,"context_line":"        disk_info[\u0027old_lv_size\u0027] \u003d pvm_op.get_logical_vol_size(diskname)"},{"line_number":236,"context_line":"        new_name \u003d self._get_resize_name(instance[\u0027name\u0027])"},{"line_number":237,"context_line":"        pvm_op.rename_lpar(instance[\u0027name\u0027], new_name)"},{"line_number":238,"context_line":"        return disk_info"},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"    def _get_resize_name(self, instance_name):"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2FI4M%3D","line":237,"in_reply_to":"AAAAM3%2F%2FI9A%3D","updated":"2013-02-05 21:36:17.000000000","message":"LPARs are named sequentially like libvirt. instance_name_template \u003d instance-%08x generates instance names not defined by the user and is used to name the LPAR. At the driver level we don\u0027t use instance[\u0027display_name\u0027] for anything, which is defined by the user and could allow for naming conflicts.","commit_id":"8d7a2f4811bef5da3c4ca2b15d6be172817d5f02"},{"author":{"_account_id":5371,"name":"Mathew Odden","email":"locke105@gmail.com","username":"locke105"},"change_message_id":"a61d10729aefac2931f114bcf686264f48410abe","unresolved":false,"context_lines":[{"line_number":234,"context_line":"                instance[\u0027name\u0027])"},{"line_number":235,"context_line":"        disk_info[\u0027old_lv_size\u0027] \u003d pvm_op.get_logical_vol_size(diskname)"},{"line_number":236,"context_line":"        new_name \u003d self._get_resize_name(instance[\u0027name\u0027])"},{"line_number":237,"context_line":"        pvm_op.rename_lpar(instance[\u0027name\u0027], new_name)"},{"line_number":238,"context_line":"        return disk_info"},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"    def _get_resize_name(self, instance_name):"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2FFKw%3D","line":237,"in_reply_to":"AAAAM3%2F%2FIvo%3D","updated":"2013-02-07 19:22:59.000000000","message":"The database record always has the same instance[\u0027name\u0027] no matter where the instance exists at the time. Because PowerVM doesn\u0027t allow two LPARs with the same name to exist on the same \u0027node\u0027, we run into a problem with single node resize/migrate (when enabled) where the newly resized LPAR (new version of the instance) fails to be created due to a name conflict. We can\u0027t delete the old one, since we need it still if the user decides to revert the resize/migration, so we just use this function to generate a canonical rsz_\u003cinstance-name\u003e that we use for the old LPAR.\n\nLibvirt does this similarly, but they have a nice file directory to encapsulate all the image data and XML definition for the instance they rename. We have no such thing with PowerVM unfortunately. so we just rename the actual LPAR.","commit_id":"8d7a2f4811bef5da3c4ca2b15d6be172817d5f02"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"cdaeaba7b57fc6f56663d140d0876c4da25e7eab","unresolved":false,"context_lines":[{"line_number":234,"context_line":"                instance[\u0027name\u0027])"},{"line_number":235,"context_line":"        disk_info[\u0027old_lv_size\u0027] \u003d pvm_op.get_logical_vol_size(diskname)"},{"line_number":236,"context_line":"        new_name \u003d self._get_resize_name(instance[\u0027name\u0027])"},{"line_number":237,"context_line":"        pvm_op.rename_lpar(instance[\u0027name\u0027], new_name)"},{"line_number":238,"context_line":"        return disk_info"},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"    def _get_resize_name(self, instance_name):"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2FIvo%3D","line":237,"in_reply_to":"AAAAM3%2F%2FIz8%3D","updated":"2013-02-05 23:09:24.000000000","message":"We do the rename dance because there is a use case that requires resize to same host. It was originally defined only for testing but somehow made it beyond that. The flag is \u0027allow_resize_to_same_host \u003d True\" and we work around that problem by \"tagging\" the one resized LPAR with \u0027rsz_\u003cinstance\u003e\u0027. Since we can\u0027t have two LPARs on the same system with the same name.","commit_id":"8d7a2f4811bef5da3c4ca2b15d6be172817d5f02"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"5a6ed376abebe89a6d3e25897959e41fad1694c2","unresolved":false,"context_lines":[{"line_number":234,"context_line":"                instance[\u0027name\u0027])"},{"line_number":235,"context_line":"        disk_info[\u0027old_lv_size\u0027] \u003d pvm_op.get_logical_vol_size(diskname)"},{"line_number":236,"context_line":"        new_name \u003d self._get_resize_name(instance[\u0027name\u0027])"},{"line_number":237,"context_line":"        pvm_op.rename_lpar(instance[\u0027name\u0027], new_name)"},{"line_number":238,"context_line":"        return disk_info"},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"    def _get_resize_name(self, instance_name):"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2FI%2Fc%3D","line":237,"in_reply_to":"AAAAM3%2F%2FJBw%3D","updated":"2013-02-05 20:33:46.000000000","message":"Resize in the case of PowerVM starts by renaming the instance to be resized, to avoid naming conflicts. disk_info \u003d self._powervm.migrate_disk() calls to PowerVMOperator where it will transfer a file (logical volume written into a file and compressed) to the destination using migrate_volume in blockdev.py. The destination file path is stored in the disk_info dictionary and a new instance is launched from the file path that was passed in disk_info. So at the point where the end user calls \u0027resize-confirm\u0027 or \u0027resize-revert\u0027 there are two instances running, the original is just renamed with a \u0027rsz_\u0027 tag to avoid naming conflicts between the two instances (for testing purposes when resizing to same host). In the case of \u0027resize-revert\u0027 the newly created instance is deleted on the destination and the old instance is renamed to what it was. In the case of \u0027resize-confirm\u0027 the old instance, which is tagged with \u0027rsz_\u003cinstance-name\u003e\u0027, is deleted and the newly resized instance has the name of the original instance before the resize operation took place.","commit_id":"8d7a2f4811bef5da3c4ca2b15d6be172817d5f02"}],"nova/virt/powervm/lpar.py":[{"author":{"_account_id":5638,"name":"Davanum Srinivas","email":"davanum@gmail.com","username":"dims-v"},"change_message_id":"24158c21368df8475c4d13e45827003d155d5ad3","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        try:"},{"line_number":53,"context_line":"            lpar[key] \u003d value"},{"line_number":54,"context_line":"        except exception.PowerVMLPARAttributeNotFound, e:"},{"line_number":55,"context_line":"            LOG.info(_(\u0027Encountered unknown LPAR attribute: %s\\n \\"},{"line_number":56,"context_line":"                        Continuing without storing\u0027) % key)"},{"line_number":57,"context_line":"    return lpar"},{"line_number":58,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2FWjQ%3D","line":55,"updated":"2013-01-25 22:31:47.000000000","message":"if you touch this again, can you please avoid the trailing \\ ?","commit_id":"42db40d710b5a23f57935c777372e6e29813645e"}],"nova/virt/powervm/operator.py":[{"author":{"_account_id":5371,"name":"Mathew Odden","email":"locke105@gmail.com","username":"locke105"},"change_message_id":"ab8ef9018905f801c9a0fbe230369162e0e14cc3","unresolved":false,"context_lines":[{"line_number":426,"context_line":"        :returns: disk_info dictionary object describing root volume"},{"line_number":427,"context_line":"                  information used for locating/mounting the volume"},{"line_number":428,"context_line":"        \"\"\""},{"line_number":429,"context_line":"        dest_file_path \u003d self._operator.migrate_logical_volume("},{"line_number":430,"context_line":"                device_name, dest, image_path, instance_name)"},{"line_number":431,"context_line":"        disk_info \u003d {}"},{"line_number":432,"context_line":"        disk_info[\u0027root_disk_file\u0027] \u003d dest_file_path"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2Fczk%3D","line":429,"updated":"2013-01-22 01:37:00.000000000","message":"I think we need to adapt this part to use the classes in blockdev.py, since that is supposed to be an abstraction used to migrate a block device to a different host...","commit_id":"f5accdf6557fca2424d2fa38b6f9114f3651f2c5"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"4f5b619e27bcffe1f548a4a83a3e7e947b18c2e3","unresolved":false,"context_lines":[{"line_number":426,"context_line":"        :returns: disk_info dictionary object describing root volume"},{"line_number":427,"context_line":"                  information used for locating/mounting the volume"},{"line_number":428,"context_line":"        \"\"\""},{"line_number":429,"context_line":"        dest_file_path \u003d self._operator.migrate_logical_volume("},{"line_number":430,"context_line":"                device_name, dest, image_path, instance_name)"},{"line_number":431,"context_line":"        disk_info \u003d {}"},{"line_number":432,"context_line":"        disk_info[\u0027root_disk_file\u0027] \u003d dest_file_path"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FbMs%3D","line":429,"in_reply_to":"AAAAM3%2F%2Fczk%3D","updated":"2013-01-23 01:01:46.000000000","message":"Done","commit_id":"f5accdf6557fca2424d2fa38b6f9114f3651f2c5"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"0da33a5de581c1129378539b8b15808648967581","unresolved":false,"context_lines":[{"line_number":723,"context_line":"        command \u003d \"/usr/bin/gunzip -c %s \u003e %s\" % (file_path, outfile_path)"},{"line_number":724,"context_line":"        output \u003d self.run_command_as_root(command)"},{"line_number":725,"context_line":""},{"line_number":726,"context_line":"        # Remove compressed image file"},{"line_number":727,"context_line":"        command \u003d \"/usr/bin/rm %s\" % file_path"},{"line_number":728,"context_line":"        output \u003d self.run_command_as_root(command)"},{"line_number":729,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2FZkA%3D","line":726,"updated":"2013-01-23 23:40:41.000000000","message":"why isn\u0027t _remove_file used?","commit_id":"b7f3899c788742ce8d9a89a34fd704e83f0402d2"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"42d8a45a39236618863adf4a9e621770940d9870","unresolved":false,"context_lines":[{"line_number":723,"context_line":"        command \u003d \"/usr/bin/gunzip -c %s \u003e %s\" % (file_path, outfile_path)"},{"line_number":724,"context_line":"        output \u003d self.run_command_as_root(command)"},{"line_number":725,"context_line":""},{"line_number":726,"context_line":"        # Remove compressed image file"},{"line_number":727,"context_line":"        command \u003d \"/usr/bin/rm %s\" % file_path"},{"line_number":728,"context_line":"        output \u003d self.run_command_as_root(command)"},{"line_number":729,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2FZjM%3D","line":726,"in_reply_to":"AAAAM3%2F%2FZkA%3D","updated":"2013-01-23 23:46:05.000000000","message":"It is used in the finally statement in deploy_from_migrated_file to ensure the migrated file is cleaned up after launch","commit_id":"b7f3899c788742ce8d9a89a34fd704e83f0402d2"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"0da33a5de581c1129378539b8b15808648967581","unresolved":false,"context_lines":[{"line_number":735,"context_line":"        :param file_path: absolute path to file to be removed"},{"line_number":736,"context_line":"        \"\"\""},{"line_number":737,"context_line":"        command \u003d \u0027rm %s\u0027 % file_path"},{"line_number":738,"context_line":"        self.run_command_as_root(command)"},{"line_number":739,"context_line":""},{"line_number":740,"context_line":""},{"line_number":741,"context_line":"class IVMOperator(BaseOperator):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2FZjw%3D","line":738,"updated":"2013-01-23 23:40:41.000000000","message":"I thought run_command_as_root was going to be changed to something more descriptive like run_on_vios_as_root to make it clear to folks","commit_id":"b7f3899c788742ce8d9a89a34fd704e83f0402d2"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"42d8a45a39236618863adf4a9e621770940d9870","unresolved":false,"context_lines":[{"line_number":735,"context_line":"        :param file_path: absolute path to file to be removed"},{"line_number":736,"context_line":"        \"\"\""},{"line_number":737,"context_line":"        command \u003d \u0027rm %s\u0027 % file_path"},{"line_number":738,"context_line":"        self.run_command_as_root(command)"},{"line_number":739,"context_line":""},{"line_number":740,"context_line":""},{"line_number":741,"context_line":"class IVMOperator(BaseOperator):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2FZjU%3D","line":738,"in_reply_to":"AAAAM3%2F%2FZjw%3D","updated":"2013-01-23 23:46:05.000000000","message":"That was in blockdev.py, but this can be refactored in this case as well.","commit_id":"b7f3899c788742ce8d9a89a34fd704e83f0402d2"}]}
