)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6cfe4f26924f88a0935cc468ec0a15d9a4064c93","unresolved":false,"context_lines":[{"line_number":10,"context_line":"regardless of implementation being Local Adapter now or something"},{"line_number":11,"context_line":"else in the future. Moving copy_image_file and its dependencies"},{"line_number":12,"context_line":"to base class. Renamed local md5sum functions to match name of"},{"line_number":13,"context_line":"remote md5sum function. Also, changed time.sleep to enventlet.sleep"},{"line_number":14,"context_line":"call to make it explicit that it is yielding on green threads and"},{"line_number":15,"context_line":"avoid depending on monkey patch of time module."},{"line_number":16,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"AAAATH%2F%2FeXM%3D","line":13,"updated":"2013-10-15 18:19:09.000000000","message":"s/enventlet/eventlet/","commit_id":"278ff4a451d8d1f201416a564ee9f5211aac41dd"},{"author":{"_account_id":5313,"name":"David Peraza","email":"david_peraza@persistentsys.com","username":"dperaza"},"change_message_id":"7067bc85517207930edfe00367d9a3b3f03e084f","unresolved":false,"context_lines":[{"line_number":10,"context_line":"regardless of implementation being Local Adapter now or something"},{"line_number":11,"context_line":"else in the future. Moving copy_image_file and its dependencies"},{"line_number":12,"context_line":"to base class. Renamed local md5sum functions to match name of"},{"line_number":13,"context_line":"remote md5sum function. Also, changed time.sleep to enventlet.sleep"},{"line_number":14,"context_line":"call to make it explicit that it is yielding on green threads and"},{"line_number":15,"context_line":"avoid depending on monkey patch of time module."},{"line_number":16,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"AAAATH%2F%2FQ74%3D","line":13,"in_reply_to":"AAAATH%2F%2FeXM%3D","updated":"2013-10-18 20:23:16.000000000","message":"Done","commit_id":"278ff4a451d8d1f201416a564ee9f5211aac41dd"}],"nova/virt/powervm/blockdev.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"cd3a082dcca52f2f1938abf2f5abeeb9b6d40998","unresolved":false,"context_lines":[{"line_number":144,"context_line":"                hasher.update(buf)"},{"line_number":145,"context_line":"                buf \u003d img_file.read(block_size)"},{"line_number":146,"context_line":"                # this can take awhile so yield so other threads get some time"},{"line_number":147,"context_line":"                eventlet.sleep(0)"},{"line_number":148,"context_line":"            source_cksum \u003d hasher.hexdigest()"},{"line_number":149,"context_line":"        return source_cksum"},{"line_number":150,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAARn%2F%2FzII%3D","line":147,"updated":"2013-08-21 20:44:55.000000000","message":"Note to self: this is where the new eventlet import is used.","commit_id":"66732a61f0c037e5a3f04957c563c02573201b87"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"cd3a082dcca52f2f1938abf2f5abeeb9b6d40998","unresolved":false,"context_lines":[{"line_number":148,"context_line":"            source_cksum \u003d hasher.hexdigest()"},{"line_number":149,"context_line":"        return source_cksum"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"    def copy_image_file(self, source_path, remote_path, decompress\u003dFalse):"},{"line_number":152,"context_line":"        \"\"\"Copy file to VIOS, decompress it, and return its new size and name."},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"        :param source_path: source file path"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAARn%2F%2FzHg%3D","line":151,"updated":"2013-08-21 20:44:55.000000000","message":"I don\u0027t see that decompress is ever True, but we have code to handle it. Why is it here?","commit_id":"66732a61f0c037e5a3f04957c563c02573201b87"},{"author":{"_account_id":5313,"name":"David Peraza","email":"david_peraza@persistentsys.com","username":"dperaza"},"change_message_id":"f8c1b2f2a3ff0ccef57d423bf37d0efa4581499a","unresolved":false,"context_lines":[{"line_number":148,"context_line":"            source_cksum \u003d hasher.hexdigest()"},{"line_number":149,"context_line":"        return source_cksum"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"    def copy_image_file(self, source_path, remote_path, decompress\u003dFalse):"},{"line_number":152,"context_line":"        \"\"\"Copy file to VIOS, decompress it, and return its new size and name."},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"        :param source_path: source file path"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAARn%2F%2Fyvw%3D","line":151,"in_reply_to":"AAAARn%2F%2FzHg%3D","updated":"2013-08-21 22:09:09.000000000","message":"I think this is legacy code that was never cleanup, notice _copy_file_to_device that is where it decompresses now streaming to dd, it is more efficient. Not sure cleaning in this patch makes sense since this is refactoring patch renaming things and moving things around no new logic here","commit_id":"66732a61f0c037e5a3f04957c563c02573201b87"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"cd3a082dcca52f2f1938abf2f5abeeb9b6d40998","unresolved":false,"context_lines":[{"line_number":256,"context_line":"    def run_vios_command_as_root(self, command, check_exit_code\u003dTrue):"},{"line_number":257,"context_line":"        \"\"\"Run a remote command as root using an active ssh connection."},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"        :param command: List of commands."},{"line_number":260,"context_line":"        :param check_exit_code: Indicates whether exit code of command"},{"line_number":261,"context_line":"        should be checked and reported."},{"line_number":262,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAARn%2F%2FzGg%3D","line":259,"updated":"2013-08-21 20:44:55.000000000","message":"Is this really a list or a string?","commit_id":"66732a61f0c037e5a3f04957c563c02573201b87"},{"author":{"_account_id":5313,"name":"David Peraza","email":"david_peraza@persistentsys.com","username":"dperaza"},"change_message_id":"f8c1b2f2a3ff0ccef57d423bf37d0efa4581499a","unresolved":false,"context_lines":[{"line_number":256,"context_line":"    def run_vios_command_as_root(self, command, check_exit_code\u003dTrue):"},{"line_number":257,"context_line":"        \"\"\"Run a remote command as root using an active ssh connection."},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"        :param command: List of commands."},{"line_number":260,"context_line":"        :param check_exit_code: Indicates whether exit code of command"},{"line_number":261,"context_line":"        should be checked and reported."},{"line_number":262,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAARn%2F%2FytU%3D","line":259,"in_reply_to":"AAAARn%2F%2FzGg%3D","updated":"2013-08-21 22:09:09.000000000","message":"not really just a string, changing that","commit_id":"66732a61f0c037e5a3f04957c563c02573201b87"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"cd3a082dcca52f2f1938abf2f5abeeb9b6d40998","unresolved":false,"context_lines":[{"line_number":264,"context_line":"        stdout, stderr \u003d common.ssh_command_as_root("},{"line_number":265,"context_line":"            self._connection, command, check_exit_code\u003dcheck_exit_code)"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"        error_text \u003d stderr.read()"},{"line_number":268,"context_line":"        if error_text:"},{"line_number":269,"context_line":"            LOG.debug(_(\"Found error stream for command \\\"%(command)s\\\":\""},{"line_number":270,"context_line":"                        \" %(error_text)s\"),"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAARn%2F%2FzGU%3D","line":267,"updated":"2013-08-21 20:44:55.000000000","message":"Line 248 does a strip() but this does a read(), should they be doing the same thing?","commit_id":"66732a61f0c037e5a3f04957c563c02573201b87"},{"author":{"_account_id":5313,"name":"David Peraza","email":"david_peraza@persistentsys.com","username":"dperaza"},"change_message_id":"f8c1b2f2a3ff0ccef57d423bf37d0efa4581499a","unresolved":false,"context_lines":[{"line_number":264,"context_line":"        stdout, stderr \u003d common.ssh_command_as_root("},{"line_number":265,"context_line":"            self._connection, command, check_exit_code\u003dcheck_exit_code)"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"        error_text \u003d stderr.read()"},{"line_number":268,"context_line":"        if error_text:"},{"line_number":269,"context_line":"            LOG.debug(_(\"Found error stream for command \\\"%(command)s\\\":\""},{"line_number":270,"context_line":"                        \" %(error_text)s\"),"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAARn%2F%2FysI%3D","line":267,"in_reply_to":"AAAARn%2F%2FzGU%3D","updated":"2013-08-21 22:09:09.000000000","message":"yes this is the right call here strip is not available when using common.ssh_command_as_root","commit_id":"66732a61f0c037e5a3f04957c563c02573201b87"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"cd3a082dcca52f2f1938abf2f5abeeb9b6d40998","unresolved":false,"context_lines":[{"line_number":270,"context_line":"                        \" %(error_text)s\"),"},{"line_number":271,"context_line":"                      {\u0027command\u0027: command, \u0027error_text\u0027: error_text})"},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"        return stdout.read().splitlines()"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"class PowerVMLocalVolumeAdapter(PowerVMDiskAdapter):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAARn%2F%2FzGI%3D","line":273,"updated":"2013-08-21 20:44:55.000000000","message":"Same comment as above.  See line 254.","commit_id":"66732a61f0c037e5a3f04957c563c02573201b87"},{"author":{"_account_id":5313,"name":"David Peraza","email":"david_peraza@persistentsys.com","username":"dperaza"},"change_message_id":"f8c1b2f2a3ff0ccef57d423bf37d0efa4581499a","unresolved":false,"context_lines":[{"line_number":270,"context_line":"                        \" %(error_text)s\"),"},{"line_number":271,"context_line":"                      {\u0027command\u0027: command, \u0027error_text\u0027: error_text})"},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"        return stdout.read().splitlines()"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"class PowerVMLocalVolumeAdapter(PowerVMDiskAdapter):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAARn%2F%2FyqU%3D","line":273,"in_reply_to":"AAAARn%2F%2FzGI%3D","updated":"2013-08-21 22:09:09.000000000","message":"notice stdout and stderr are of different type when using processutils.ssh_execute vs common.ssh_command_as_root","commit_id":"66732a61f0c037e5a3f04957c563c02573201b87"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"cd3a082dcca52f2f1938abf2f5abeeb9b6d40998","unresolved":false,"context_lines":[{"line_number":530,"context_line":"        self.run_vios_command_as_root(cmd)"},{"line_number":531,"context_line":""},{"line_number":532,"context_line":"    def _copy_image_file_from_host(self, remote_source_path, local_dest_dir,"},{"line_number":533,"context_line":"                                   compress\u003dFalse):"},{"line_number":534,"context_line":"        \"\"\""},{"line_number":535,"context_line":"        Copy a file from IVM to the nova-compute host,"},{"line_number":536,"context_line":"        and return the location of the copy"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAARn%2F%2FzF4%3D","line":533,"updated":"2013-08-21 20:44:55.000000000","message":"There is never a case where this is called and compress is not set to True, so I\u0027m not sure why it defaults to false.  I\u0027m actually working on a separate patch to try and make this configurable so someone can decide if they want to spend time doing compression/decompression on the compute node or vios, or spend time in ftp\u0027ing the image file.  Right now the code has these default values but doesn\u0027t really toggle them.","commit_id":"66732a61f0c037e5a3f04957c563c02573201b87"},{"author":{"_account_id":5313,"name":"David Peraza","email":"david_peraza@persistentsys.com","username":"dperaza"},"change_message_id":"f8c1b2f2a3ff0ccef57d423bf37d0efa4581499a","unresolved":false,"context_lines":[{"line_number":530,"context_line":"        self.run_vios_command_as_root(cmd)"},{"line_number":531,"context_line":""},{"line_number":532,"context_line":"    def _copy_image_file_from_host(self, remote_source_path, local_dest_dir,"},{"line_number":533,"context_line":"                                   compress\u003dFalse):"},{"line_number":534,"context_line":"        \"\"\""},{"line_number":535,"context_line":"        Copy a file from IVM to the nova-compute host,"},{"line_number":536,"context_line":"        and return the location of the copy"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAARn%2F%2Fynk%3D","line":533,"in_reply_to":"AAAARn%2F%2FzF4%3D","updated":"2013-08-21 22:09:09.000000000","message":"yeah, this looks like it was the initial way to do things that have been optimized to always compress, I think we could eliminate this extra param, but suggest to do in another cleanup patch this is code I\u0027m not even touching here. when it comes to choosing between compressing in VIOS lpar or OS Compute node, I think VIOS will mostly win in a production environment those tend to be configured with heavy cpu and mem precess. It all depends if you want to move bits over wire compress or uncompress too. I think compress should be done most of the time before moving through the wire I rather be cpu bound than network bound","commit_id":"66732a61f0c037e5a3f04957c563c02573201b87"},{"author":{"_account_id":7040,"name":"GuoHui LIu","email":"liuguohui@gmail.com","username":"guohliu"},"change_message_id":"d4d4f5b400a822cc1f7f40863344a5f541c44690","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 eventlet"},{"line_number":18,"context_line":"import hashlib"},{"line_number":19,"context_line":"import os"},{"line_number":20,"context_line":"import re"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATH%2F%2FcaA%3D","line":17,"updated":"2013-10-16 03:41:45.000000000","message":"nit: eventlet import should go to third party section below","commit_id":"278ff4a451d8d1f201416a564ee9f5211aac41dd"},{"author":{"_account_id":5313,"name":"David Peraza","email":"david_peraza@persistentsys.com","username":"dperaza"},"change_message_id":"7067bc85517207930edfe00367d9a3b3f03e084f","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 eventlet"},{"line_number":18,"context_line":"import hashlib"},{"line_number":19,"context_line":"import os"},{"line_number":20,"context_line":"import re"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATH%2F%2FQ70%3D","line":17,"in_reply_to":"AAAATH%2F%2FcaA%3D","updated":"2013-10-18 20:23:16.000000000","message":"Done","commit_id":"278ff4a451d8d1f201416a564ee9f5211aac41dd"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8655a0321081ebee08384f57d4437d9860c4fee7","unresolved":false,"context_lines":[{"line_number":120,"context_line":"        \"\"\""},{"line_number":121,"context_line":"        pass"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    def _md5sum_remote_file(self, remote_path):"},{"line_number":124,"context_line":"        # AIX6/VIOS cannot md5sum files with sizes greater than ~2GB"},{"line_number":125,"context_line":"        cmd \u003d (\"perl -MDigest::MD5 -e \u0027my $file \u003d \\\"%s\\\"; open(FILE, $file); \""},{"line_number":126,"context_line":"               \"binmode(FILE); \""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATH%2F%2FeQs%3D","line":123,"updated":"2013-10-15 18:45:18.000000000","message":"Why do we need this?","commit_id":"278ff4a451d8d1f201416a564ee9f5211aac41dd"},{"author":{"_account_id":5313,"name":"David Peraza","email":"david_peraza@persistentsys.com","username":"dperaza"},"change_message_id":"7067bc85517207930edfe00367d9a3b3f03e084f","unresolved":false,"context_lines":[{"line_number":120,"context_line":"        \"\"\""},{"line_number":121,"context_line":"        pass"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    def _md5sum_remote_file(self, remote_path):"},{"line_number":124,"context_line":"        # AIX6/VIOS cannot md5sum files with sizes greater than ~2GB"},{"line_number":125,"context_line":"        cmd \u003d (\"perl -MDigest::MD5 -e \u0027my $file \u003d \\\"%s\\\"; open(FILE, $file); \""},{"line_number":126,"context_line":"               \"binmode(FILE); \""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATH%2F%2FQ7o%3D","line":123,"in_reply_to":"AAAATH%2F%2FeQs%3D","updated":"2013-10-18 20:23:16.000000000","message":"Image integrity, we can remove at the expense of integrity risk. We would need to weight pros and cons. I suggest we keep for now to be save and then do a performance analysis to see if it makes sense to even take the risk","commit_id":"278ff4a451d8d1f201416a564ee9f5211aac41dd"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8655a0321081ebee08384f57d4437d9860c4fee7","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        output \u003d self.run_vios_command_as_root(cmd)"},{"line_number":131,"context_line":"        return output[0]"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"    def _md5sum_local_file(self, source_path):"},{"line_number":134,"context_line":"        \"\"\"Calculate local file checksum."},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"        :param source_path: source file path"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATH%2F%2FeQo%3D","line":133,"updated":"2013-10-15 18:45:18.000000000","message":"Why do we need this?","commit_id":"278ff4a451d8d1f201416a564ee9f5211aac41dd"},{"author":{"_account_id":7040,"name":"GuoHui LIu","email":"liuguohui@gmail.com","username":"guohliu"},"change_message_id":"d4d4f5b400a822cc1f7f40863344a5f541c44690","unresolved":false,"context_lines":[{"line_number":187,"context_line":"            # Verify image file checksums match"},{"line_number":188,"context_line":"            output \u003d self._md5sum_remote_file(final_path)"},{"line_number":189,"context_line":"            if not output:"},{"line_number":190,"context_line":"                LOG.error(_(\"Unable to get checksum\"))"},{"line_number":191,"context_line":"                # Cleanup inconsistent remote file"},{"line_number":192,"context_line":"                cmd \u003d \"/usr/bin/rm -f %s\" % final_path"},{"line_number":193,"context_line":"                self.run_vios_command_as_root(cmd)"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATH%2F%2FcZw%3D","line":190,"updated":"2013-10-16 03:41:45.000000000","message":"how about to log the final_path here for troubleshooting?","commit_id":"278ff4a451d8d1f201416a564ee9f5211aac41dd"},{"author":{"_account_id":5313,"name":"David Peraza","email":"david_peraza@persistentsys.com","username":"dperaza"},"change_message_id":"7067bc85517207930edfe00367d9a3b3f03e084f","unresolved":false,"context_lines":[{"line_number":187,"context_line":"            # Verify image file checksums match"},{"line_number":188,"context_line":"            output \u003d self._md5sum_remote_file(final_path)"},{"line_number":189,"context_line":"            if not output:"},{"line_number":190,"context_line":"                LOG.error(_(\"Unable to get checksum\"))"},{"line_number":191,"context_line":"                # Cleanup inconsistent remote file"},{"line_number":192,"context_line":"                cmd \u003d \"/usr/bin/rm -f %s\" % final_path"},{"line_number":193,"context_line":"                self.run_vios_command_as_root(cmd)"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATH%2F%2FQ7g%3D","line":190,"in_reply_to":"AAAATH%2F%2FcZw%3D","updated":"2013-10-18 20:23:16.000000000","message":"Done","commit_id":"278ff4a451d8d1f201416a564ee9f5211aac41dd"},{"author":{"_account_id":7040,"name":"GuoHui LIu","email":"liuguohui@gmail.com","username":"guohliu"},"change_message_id":"d4d4f5b400a822cc1f7f40863344a5f541c44690","unresolved":false,"context_lines":[{"line_number":194,"context_line":""},{"line_number":195,"context_line":"                raise exception.PowerVMFileTransferFailed(file_path\u003dfinal_path)"},{"line_number":196,"context_line":"            if source_cksum !\u003d output.split(\u0027 \u0027)[0]:"},{"line_number":197,"context_line":"                LOG.error(_(\"Image checksums do not match\"))"},{"line_number":198,"context_line":"                # Cleanup inconsistent remote file"},{"line_number":199,"context_line":"                cmd \u003d \"/usr/bin/rm -f %s\" % final_path"},{"line_number":200,"context_line":"                self.run_vios_command_as_root(cmd)"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATH%2F%2FcZs%3D","line":197,"updated":"2013-10-16 03:41:45.000000000","message":"ditto","commit_id":"278ff4a451d8d1f201416a564ee9f5211aac41dd"},{"author":{"_account_id":5313,"name":"David Peraza","email":"david_peraza@persistentsys.com","username":"dperaza"},"change_message_id":"7067bc85517207930edfe00367d9a3b3f03e084f","unresolved":false,"context_lines":[{"line_number":194,"context_line":""},{"line_number":195,"context_line":"                raise exception.PowerVMFileTransferFailed(file_path\u003dfinal_path)"},{"line_number":196,"context_line":"            if source_cksum !\u003d output.split(\u0027 \u0027)[0]:"},{"line_number":197,"context_line":"                LOG.error(_(\"Image checksums do not match\"))"},{"line_number":198,"context_line":"                # Cleanup inconsistent remote file"},{"line_number":199,"context_line":"                cmd \u003d \"/usr/bin/rm -f %s\" % final_path"},{"line_number":200,"context_line":"                self.run_vios_command_as_root(cmd)"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATH%2F%2FQ7c%3D","line":197,"in_reply_to":"AAAATH%2F%2FcZs%3D","updated":"2013-10-18 20:23:16.000000000","message":"Done","commit_id":"278ff4a451d8d1f201416a564ee9f5211aac41dd"},{"author":{"_account_id":7040,"name":"GuoHui LIu","email":"liuguohui@gmail.com","username":"guohliu"},"change_message_id":"d4d4f5b400a822cc1f7f40863344a5f541c44690","unresolved":false,"context_lines":[{"line_number":228,"context_line":"            size \u003d int(output[0])"},{"line_number":229,"context_line":"        else:"},{"line_number":230,"context_line":"            LOG.error(_(\"Uncompressed image file not found\"))"},{"line_number":231,"context_line":"            raise exception.PowerVMFileTransferFailed()"},{"line_number":232,"context_line":"        if (size % 512 !\u003d 0):"},{"line_number":233,"context_line":"            size \u003d (int(size / 512) + 1) * 512"},{"line_number":234,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATH%2F%2FcZU%3D","line":231,"updated":"2013-10-16 03:41:45.000000000","message":"why not pass the final_path in as above does?","commit_id":"278ff4a451d8d1f201416a564ee9f5211aac41dd"},{"author":{"_account_id":5313,"name":"David Peraza","email":"david_peraza@persistentsys.com","username":"dperaza"},"change_message_id":"7067bc85517207930edfe00367d9a3b3f03e084f","unresolved":false,"context_lines":[{"line_number":228,"context_line":"            size \u003d int(output[0])"},{"line_number":229,"context_line":"        else:"},{"line_number":230,"context_line":"            LOG.error(_(\"Uncompressed image file not found\"))"},{"line_number":231,"context_line":"            raise exception.PowerVMFileTransferFailed()"},{"line_number":232,"context_line":"        if (size % 512 !\u003d 0):"},{"line_number":233,"context_line":"            size \u003d (int(size / 512) + 1) * 512"},{"line_number":234,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATH%2F%2FQ7U%3D","line":231,"in_reply_to":"AAAATH%2F%2FcZU%3D","updated":"2013-10-18 20:23:16.000000000","message":"Done","commit_id":"278ff4a451d8d1f201416a564ee9f5211aac41dd"},{"author":{"_account_id":7040,"name":"GuoHui LIu","email":"liuguohui@gmail.com","username":"guohliu"},"change_message_id":"d4d4f5b400a822cc1f7f40863344a5f541c44690","unresolved":false,"context_lines":[{"line_number":239,"context_line":""},{"line_number":240,"context_line":"        :param cmd: String with the command to run."},{"line_number":241,"context_line":"        :param check_exit_code: Indicates whether exit code of command"},{"line_number":242,"context_line":"        should be checked and reported."},{"line_number":243,"context_line":"        \"\"\""},{"line_number":244,"context_line":"        self._set_connection()"},{"line_number":245,"context_line":"        stdout, stderr \u003d processutils.ssh_execute(self._connection, cmd,"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATH%2F%2FcYw%3D","line":242,"updated":"2013-10-16 03:41:45.000000000","message":"nit: alignment","commit_id":"278ff4a451d8d1f201416a564ee9f5211aac41dd"},{"author":{"_account_id":5313,"name":"David Peraza","email":"david_peraza@persistentsys.com","username":"dperaza"},"change_message_id":"7067bc85517207930edfe00367d9a3b3f03e084f","unresolved":false,"context_lines":[{"line_number":239,"context_line":""},{"line_number":240,"context_line":"        :param cmd: String with the command to run."},{"line_number":241,"context_line":"        :param check_exit_code: Indicates whether exit code of command"},{"line_number":242,"context_line":"        should be checked and reported."},{"line_number":243,"context_line":"        \"\"\""},{"line_number":244,"context_line":"        self._set_connection()"},{"line_number":245,"context_line":"        stdout, stderr \u003d processutils.ssh_execute(self._connection, cmd,"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATH%2F%2FQ7M%3D","line":242,"in_reply_to":"AAAATH%2F%2FcYw%3D","updated":"2013-10-18 20:23:16.000000000","message":"Done","commit_id":"278ff4a451d8d1f201416a564ee9f5211aac41dd"},{"author":{"_account_id":7040,"name":"GuoHui LIu","email":"liuguohui@gmail.com","username":"guohliu"},"change_message_id":"d4d4f5b400a822cc1f7f40863344a5f541c44690","unresolved":false,"context_lines":[{"line_number":253,"context_line":""},{"line_number":254,"context_line":"        return stdout.strip().splitlines()"},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"    def run_vios_command_as_root(self, command, check_exit_code\u003dTrue):"},{"line_number":257,"context_line":"        \"\"\"Run a remote command as root using an active ssh connection."},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"        :param command: Command string to execute"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATH%2F%2FcY4%3D","line":256,"updated":"2013-10-16 03:41:45.000000000","message":"why not always using command or cmd, sometimes command somtimes cmd makes people confuse.","commit_id":"278ff4a451d8d1f201416a564ee9f5211aac41dd"},{"author":{"_account_id":5313,"name":"David Peraza","email":"david_peraza@persistentsys.com","username":"dperaza"},"change_message_id":"7067bc85517207930edfe00367d9a3b3f03e084f","unresolved":false,"context_lines":[{"line_number":253,"context_line":""},{"line_number":254,"context_line":"        return stdout.strip().splitlines()"},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"    def run_vios_command_as_root(self, command, check_exit_code\u003dTrue):"},{"line_number":257,"context_line":"        \"\"\"Run a remote command as root using an active ssh connection."},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"        :param command: Command string to execute"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATH%2F%2FQ7I%3D","line":256,"in_reply_to":"AAAATH%2F%2FcY4%3D","updated":"2013-10-18 20:23:16.000000000","message":"Done","commit_id":"278ff4a451d8d1f201416a564ee9f5211aac41dd"},{"author":{"_account_id":7040,"name":"GuoHui LIu","email":"liuguohui@gmail.com","username":"guohliu"},"change_message_id":"d4d4f5b400a822cc1f7f40863344a5f541c44690","unresolved":false,"context_lines":[{"line_number":258,"context_line":""},{"line_number":259,"context_line":"        :param command: Command string to execute"},{"line_number":260,"context_line":"        :param check_exit_code: Indicates whether exit code of command"},{"line_number":261,"context_line":"        should be checked and reported."},{"line_number":262,"context_line":"        \"\"\""},{"line_number":263,"context_line":"        self._set_connection()"},{"line_number":264,"context_line":"        stdout, stderr \u003d common.ssh_command_as_root("}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATH%2F%2FcYs%3D","line":261,"updated":"2013-10-16 03:41:45.000000000","message":"ditto","commit_id":"278ff4a451d8d1f201416a564ee9f5211aac41dd"},{"author":{"_account_id":5313,"name":"David Peraza","email":"david_peraza@persistentsys.com","username":"dperaza"},"change_message_id":"7067bc85517207930edfe00367d9a3b3f03e084f","unresolved":false,"context_lines":[{"line_number":258,"context_line":""},{"line_number":259,"context_line":"        :param command: Command string to execute"},{"line_number":260,"context_line":"        :param check_exit_code: Indicates whether exit code of command"},{"line_number":261,"context_line":"        should be checked and reported."},{"line_number":262,"context_line":"        \"\"\""},{"line_number":263,"context_line":"        self._set_connection()"},{"line_number":264,"context_line":"        stdout, stderr \u003d common.ssh_command_as_root("}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATH%2F%2FQ7E%3D","line":261,"in_reply_to":"AAAATH%2F%2FcYs%3D","updated":"2013-10-18 20:23:16.000000000","message":"Done","commit_id":"278ff4a451d8d1f201416a564ee9f5211aac41dd"},{"author":{"_account_id":5371,"name":"Mathew Odden","email":"locke105@gmail.com","username":"locke105"},"change_message_id":"402b9f78c2404d932c82f0a999d827cef984c35a","unresolved":false,"context_lines":[{"line_number":148,"context_line":"            source_cksum \u003d hasher.hexdigest()"},{"line_number":149,"context_line":"        return source_cksum"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"    def copy_image_file(self, source_path, remote_path, decompress\u003dFalse):"},{"line_number":152,"context_line":"        \"\"\"Copy file to VIOS, decompress it, and return its new size and name."},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"        :param source_path: source file path"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATH%2F%2FQz4%3D","line":151,"updated":"2013-10-18 20:37:19.000000000","message":"I still don\u0027t understand why you are moving all this up to another class. You can simply extend the one below, or break things out into a Mixin that you want to re-use elsewhere.","commit_id":"b2a4bb9a8318914d5147dfd1c28705da26f48175"},{"author":{"_account_id":5313,"name":"David Peraza","email":"david_peraza@persistentsys.com","username":"dperaza"},"change_message_id":"e7d7c63a014ab1f0347dc416ae3fe9c25408c659","unresolved":false,"context_lines":[{"line_number":148,"context_line":"            source_cksum \u003d hasher.hexdigest()"},{"line_number":149,"context_line":"        return source_cksum"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"    def copy_image_file(self, source_path, remote_path, decompress\u003dFalse):"},{"line_number":152,"context_line":"        \"\"\"Copy file to VIOS, decompress it, and return its new size and name."},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"        :param source_path: source file path"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATH%2F%2FQyo%3D","line":151,"in_reply_to":"AAAATH%2F%2FQz4%3D","updated":"2013-10-18 20:47:35.000000000","message":"Let me try again I know it has been a wile, copy_file_image is the main function that config drive patch depends on, it use that to copy iso file over to VIOS, since copy_file_image was implemented by the LocalAdapater with some good robust logic I decided to reuse. Now... since the ISO logic is independent of the blockdev adapter I figured it will be appropriate bring up a level so regardless of the implementation the iso attach logic can be used.","commit_id":"b2a4bb9a8318914d5147dfd1c28705da26f48175"}]}
