)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":12988,"name":"Peter Penchev","email":"openstack-dev@storpool.com","username":"ppenchev"},"change_message_id":"97e748bdd2b81aa975e6706210ceb6114db8799d","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The patch introduces a poll mechanism to check the migration progress."},{"line_number":10,"context_line":"* For the generic host based migration, the position indication of"},{"line_number":11,"context_line":"/proc/\u003cPID\u003e/fdinfo/1 can be retrieved to indicate how many bytes"},{"line_number":12,"context_line":"have been copied."},{"line_number":13,"context_line":"* For the driver specific migration, the back-end driver need to"},{"line_number":14,"context_line":"report a capability telling the manager if it supports to report the"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"fa32b979_e58c4c37","line":11,"updated":"2015-06-16 11:59:49.000000000","message":"Hmm, the code seems to use file descriptor 0, not 1.","commit_id":"d3762cb7a3c7d8eed1f5f4bbb048b02afb8ca9d5"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"ab05be8f6b729643343ffbad29438846e4b0a266","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The patch introduces a poll mechanism to check the migration progress."},{"line_number":10,"context_line":"* For the generic host based migration, the position indication of"},{"line_number":11,"context_line":"/proc/\u003cPID\u003e/fdinfo/1 can be retrieved to indicate how many bytes"},{"line_number":12,"context_line":"have been copied."},{"line_number":13,"context_line":"* For the driver specific migration, the back-end driver need to"},{"line_number":14,"context_line":"report a capability telling the manager if it supports to report the"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"fa32b979_0f684ab8","line":11,"in_reply_to":"fa32b979_e58c4c37","updated":"2015-06-17 02:18:27.000000000","message":"I need to add more comments on that.\n0 means source and 1 means target. I will change it.","commit_id":"d3762cb7a3c7d8eed1f5f4bbb048b02afb8ca9d5"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"c591ba024f004fa5b1a48e345e97ba8ff793439d","unresolved":false,"context_lines":[{"line_number":10,"context_line":"* For the generic host based migration, the position indication of"},{"line_number":11,"context_line":"/proc/\u003cPID\u003e/fdinfo/1 can be retrieved to indicate how many bytes"},{"line_number":12,"context_line":"have been copied."},{"line_number":13,"context_line":"* For the driver specific migration, the back-end driver need to"},{"line_number":14,"context_line":"report a capability telling the manager if it supports to report the"},{"line_number":15,"context_line":"migration progress. Please implement the method get_volume_copy_progress"},{"line_number":16,"context_line":"for your driver and add a stat flag migration_progress_report,"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":25,"id":"fa32b979_dc2ea28b","line":13,"updated":"2015-06-23 15:03:11.000000000","message":"should \"need\" be \"needs\"?","commit_id":"8766236214fa2e31fe9c3f3f196262bdfc3bd0a4"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"a341383f389f764409f9b17585911e89ecee3618","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Add the notification and the migration progress indication"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The patch adds the notification support and introduces a poll"},{"line_number":10,"context_line":"mechanism to check the migration progress."},{"line_number":11,"context_line":"* For the generic host based migration, the position indication of"},{"line_number":12,"context_line":"/proc/\u003cPID\u003e/fdinfo/1 can be retrieved to indicate how many bytes"},{"line_number":13,"context_line":"have been copied."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":37,"id":"ba3cc151_8198bf1c","line":10,"updated":"2015-07-07 22:14:16.000000000","message":"Sorry, this is a total nit but can we add an empty line around each of the bullets.  That would make this easier to read.","commit_id":"d09f5a59c34a451df319625e603cb82b4a613f8d"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"a2b27276c79bb1d6d194cd3a3a29cddaf5906c17","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Add the notification and the migration progress indication"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The patch adds the notification support and introduces a poll"},{"line_number":10,"context_line":"mechanism to check the migration progress."},{"line_number":11,"context_line":"* For the generic host based migration, the position indication of"},{"line_number":12,"context_line":"/proc/\u003cPID\u003e/fdinfo/1 can be retrieved to indicate how many bytes"},{"line_number":13,"context_line":"have been copied."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":37,"id":"ba3cc151_f0b14590","line":10,"in_reply_to":"ba3cc151_8198bf1c","updated":"2015-07-08 07:39:39.000000000","message":"Done","commit_id":"d09f5a59c34a451df319625e603cb82b4a613f8d"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"a341383f389f764409f9b17585911e89ecee3618","unresolved":false,"context_lines":[{"line_number":15,"context_line":"report a capability telling the manager if it supports to report the"},{"line_number":16,"context_line":"migration progress. Please implement the method get_volume_copy_progress"},{"line_number":17,"context_line":"for your driver and add a stat flag migration_progress_report,"},{"line_number":18,"context_line":"if yours supports the progress report."},{"line_number":19,"context_line":"* For the file based migration, it still needs to be done after"},{"line_number":20,"context_line":"Iece2776fa751152f97b389ddab426e50c6f79bea is merged."},{"line_number":21,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":37,"id":"ba3cc151_c1e00799","line":18,"updated":"2015-07-07 22:14:16.000000000","message":"if your driver supports the progress report.","commit_id":"d09f5a59c34a451df319625e603cb82b4a613f8d"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"a2b27276c79bb1d6d194cd3a3a29cddaf5906c17","unresolved":false,"context_lines":[{"line_number":15,"context_line":"report a capability telling the manager if it supports to report the"},{"line_number":16,"context_line":"migration progress. Please implement the method get_volume_copy_progress"},{"line_number":17,"context_line":"for your driver and add a stat flag migration_progress_report,"},{"line_number":18,"context_line":"if yours supports the progress report."},{"line_number":19,"context_line":"* For the file based migration, it still needs to be done after"},{"line_number":20,"context_line":"Iece2776fa751152f97b389ddab426e50c6f79bea is merged."},{"line_number":21,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":37,"id":"ba3cc151_10af092b","line":18,"in_reply_to":"ba3cc151_c1e00799","updated":"2015-07-08 07:39:39.000000000","message":"Done","commit_id":"d09f5a59c34a451df319625e603cb82b4a613f8d"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"a341383f389f764409f9b17585911e89ecee3618","unresolved":false,"context_lines":[{"line_number":19,"context_line":"* For the file based migration, it still needs to be done after"},{"line_number":20,"context_line":"Iece2776fa751152f97b389ddab426e50c6f79bea is merged."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"The migration progress report can be found in the log window c-vol."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"Change-Id: Ib156b6844cb82c0d8f70af8c6199c513644b82a0"},{"line_number":25,"context_line":"Partially-implements-blueprint: migration-improvement"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":37,"id":"ba3cc151_01acaf33","line":22,"updated":"2015-07-07 22:14:16.000000000","message":"Can we add an example of what that looks like here?\n\nAlso should add note that we have storwize as the example implementation.","commit_id":"d09f5a59c34a451df319625e603cb82b4a613f8d"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"a2b27276c79bb1d6d194cd3a3a29cddaf5906c17","unresolved":false,"context_lines":[{"line_number":19,"context_line":"* For the file based migration, it still needs to be done after"},{"line_number":20,"context_line":"Iece2776fa751152f97b389ddab426e50c6f79bea is merged."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"The migration progress report can be found in the log window c-vol."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"Change-Id: Ib156b6844cb82c0d8f70af8c6199c513644b82a0"},{"line_number":25,"context_line":"Partially-implements-blueprint: migration-improvement"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":37,"id":"ba3cc151_b0a73d4f","line":22,"in_reply_to":"ba3cc151_01acaf33","updated":"2015-07-08 07:39:39.000000000","message":"Done","commit_id":"d09f5a59c34a451df319625e603cb82b4a613f8d"}],"cinder/volume/api.py":[{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"a341383f389f764409f9b17585911e89ecee3618","unresolved":false,"context_lines":[{"line_number":1335,"context_line":"            volume_progress[\u0027migration_progress\u0027] \u003d \u0027100%\u0027"},{"line_number":1336,"context_line":"        elif volume[\u0027migration_status\u0027] in (\u0027error\u0027, None):"},{"line_number":1337,"context_line":"            volume_progress[\u0027migration_progress\u0027] \u003d \u0027NA\u0027"},{"line_number":1338,"context_line":"        return {\u0027volume\u0027: volume_progress}"},{"line_number":1339,"context_line":""},{"line_number":1340,"context_line":"    @wrap_check_policy"},{"line_number":1341,"context_line":"    def update_readonly_flag(self, context, volume, flag):"}],"source_content_type":"text/x-python","patch_set":37,"id":"ba3cc151_7cf1a069","line":1338,"updated":"2015-07-07 22:14:16.000000000","message":"I don\u0027t totally get what this is doing.  Returning a more generic progress report while the more detailed percentage information will go into the log file?  Can you help explain this please?  Thanks!","commit_id":"d09f5a59c34a451df319625e603cb82b4a613f8d"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"a2b27276c79bb1d6d194cd3a3a29cddaf5906c17","unresolved":false,"context_lines":[{"line_number":1335,"context_line":"            volume_progress[\u0027migration_progress\u0027] \u003d \u0027100%\u0027"},{"line_number":1336,"context_line":"        elif volume[\u0027migration_status\u0027] in (\u0027error\u0027, None):"},{"line_number":1337,"context_line":"            volume_progress[\u0027migration_progress\u0027] \u003d \u0027NA\u0027"},{"line_number":1338,"context_line":"        return {\u0027volume\u0027: volume_progress}"},{"line_number":1339,"context_line":""},{"line_number":1340,"context_line":"    @wrap_check_policy"},{"line_number":1341,"context_line":"    def update_readonly_flag(self, context, volume, flag):"}],"source_content_type":"text/x-python","patch_set":37,"id":"ba3cc151_0be91ee6","line":1338,"in_reply_to":"ba3cc151_7cf1a069","updated":"2015-07-08 07:39:39.000000000","message":"Per all the discussions before in the community, the migration progress can be checked in three ways:\n\n1. Via the log, the server check the migration status and progress every 30 seconds, for example, and log the information in c-vol.\n2. Via the cinderclient, if the admin issues cinder migration-progress-show vol-id, the progress will be reported. This method here is doing it.\n3. Via the ceilometer. I am not sure if this is still of any value, since we have already got the above two ways to check the progress. It is better for us to have it, but we are still OK if this is not implemented.\n\nBoth of the log and client need to be able to check/log the progress.","commit_id":"d09f5a59c34a451df319625e603cb82b4a613f8d"}],"cinder/volume/driver.py":[{"author":{"_account_id":12988,"name":"Peter Penchev","email":"openstack-dev@storpool.com","username":"ppenchev"},"change_message_id":"97e748bdd2b81aa975e6706210ceb6114db8799d","unresolved":false,"context_lines":[{"line_number":583,"context_line":"        # \"pos:\\t550502400\\nflags:\\t0140000\\n\". The output of"},{"line_number":584,"context_line":"        # cat /proc/%s/fdinfo/0 is in the same format."},{"line_number":585,"context_line":"        if WRAP in output:"},{"line_number":586,"context_line":"            bytes_copied \u003d output.split(WRAP)[0]"},{"line_number":587,"context_line":"            if TAB in bytes_copied:"},{"line_number":588,"context_line":"                bytes_copied \u003d bytes_copied.split(TAB)[1]"},{"line_number":589,"context_line":"                return int(bytes_copied)"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa32b979_258d547b","line":586,"updated":"2015-06-16 11:59:49.000000000","message":"Would it not be a little bit more reliable to get this value using a regular expression match, just in case the fields are shuffled around or a new one is added in future kernel versions?  It would also avoid an exception if the value happens to not be a valid integer.","commit_id":"d3762cb7a3c7d8eed1f5f4bbb048b02afb8ca9d5"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"ab05be8f6b729643343ffbad29438846e4b0a266","unresolved":false,"context_lines":[{"line_number":583,"context_line":"        # \"pos:\\t550502400\\nflags:\\t0140000\\n\". The output of"},{"line_number":584,"context_line":"        # cat /proc/%s/fdinfo/0 is in the same format."},{"line_number":585,"context_line":"        if WRAP in output:"},{"line_number":586,"context_line":"            bytes_copied \u003d output.split(WRAP)[0]"},{"line_number":587,"context_line":"            if TAB in bytes_copied:"},{"line_number":588,"context_line":"                bytes_copied \u003d bytes_copied.split(TAB)[1]"},{"line_number":589,"context_line":"                return int(bytes_copied)"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa32b979_6f76b6a5","line":586,"in_reply_to":"fa32b979_258d547b","updated":"2015-06-17 02:18:27.000000000","message":"HA, sweet! Thank you for the suggestion.","commit_id":"d3762cb7a3c7d8eed1f5f4bbb048b02afb8ca9d5"},{"author":{"_account_id":12988,"name":"Peter Penchev","email":"openstack-dev@storpool.com","username":"ppenchev"},"change_message_id":"2a78e410a073b64e4da9d0e140c975c8a7548106","unresolved":false,"context_lines":[{"line_number":587,"context_line":"            bytes_copied \u003d output.split(\u0027flags:\u0027)[0]"},{"line_number":588,"context_line":"            if \u0027pos:\u0027 in bytes_copied:"},{"line_number":589,"context_line":"                bytes_copied \u003d bytes_copied.split(\u0027pos:\u0027)[1]"},{"line_number":590,"context_line":"                return int(bytes_copied)"},{"line_number":591,"context_line":"        return 0"},{"line_number":592,"context_line":""},{"line_number":593,"context_line":"    def copy_image_to_volume(self, context, volume, image_service, image_id):"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa32b979_e9e39ba2","line":590,"updated":"2015-06-17 09:01:42.000000000","message":"Hmm, to be honest, I was thinking more of something like...\n\n(up above, just once)\n\n  re_proc_pos \u003d re.compile(r\u0027^pos:\\s*(\\d+)\\s*$\u0027, flags\u003dre.M)\n\n(then here)\n\n  m \u003d re_proc_pos.match(output)\n  if m:\n    return int(m.group(1))\n\nBut, of course, it\u0027s your call :)","commit_id":"105e79b3e9791d88a4acbe66d16e8bece0a67be5"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"b3d9bb63bcaaae13921eb3e63fd6463a7c79d0d4","unresolved":false,"context_lines":[{"line_number":587,"context_line":"            bytes_copied \u003d output.split(\u0027flags:\u0027)[0]"},{"line_number":588,"context_line":"            if \u0027pos:\u0027 in bytes_copied:"},{"line_number":589,"context_line":"                bytes_copied \u003d bytes_copied.split(\u0027pos:\u0027)[1]"},{"line_number":590,"context_line":"                return int(bytes_copied)"},{"line_number":591,"context_line":"        return 0"},{"line_number":592,"context_line":""},{"line_number":593,"context_line":"    def copy_image_to_volume(self, context, volume, image_service, image_id):"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa32b979_73a18a45","line":590,"in_reply_to":"fa32b979_e9e39ba2","updated":"2015-06-18 03:08:06.000000000","message":"Ah. Michal gave me similar suggestions to Patch 15.\nYes, I think it is better to take this pattern. Thx.","commit_id":"105e79b3e9791d88a4acbe66d16e8bece0a67be5"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"65e8070fe481af4704a5fb878a1cc9b14b65340c","unresolved":false,"context_lines":[{"line_number":568,"context_line":"            output \u003d utils.execute(*command, run_as_root\u003dTrue)"},{"line_number":569,"context_line":""},{"line_number":570,"context_line":"            # Parse the output and get the position"},{"line_number":571,"context_line":"            position \u003d self._get_position(output[0])"},{"line_number":572,"context_line":"            percent \u003d position * 100 / size_in_bytes"},{"line_number":573,"context_line":"            LOG.info(_LI(\u0027The source volume %(volume_id)s has been \u0027"},{"line_number":574,"context_line":"                         \u0027copied %(percent)s percent.\u0027),"}],"source_content_type":"text/x-python","patch_set":15,"id":"fa32b979_2c7f4616","line":571,"updated":"2015-06-17 13:18:58.000000000","message":"We should get information from get_volume_copy_progress so this method will be more generic and can be used both if driver support returning progress or not.","commit_id":"9d5947addd1a0cfbeaf0fb0d6b090ae6620eb93c"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"ecfdc2d890ae59d80d04f44673456acac5e0174f","unresolved":false,"context_lines":[{"line_number":568,"context_line":"            output \u003d utils.execute(*command, run_as_root\u003dTrue)"},{"line_number":569,"context_line":""},{"line_number":570,"context_line":"            # Parse the output and get the position"},{"line_number":571,"context_line":"            position \u003d self._get_position(output[0])"},{"line_number":572,"context_line":"            percent \u003d position * 100 / size_in_bytes"},{"line_number":573,"context_line":"            LOG.info(_LI(\u0027The source volume %(volume_id)s has been \u0027"},{"line_number":574,"context_line":"                         \u0027copied %(percent)s percent.\u0027),"}],"source_content_type":"text/x-python","patch_set":15,"id":"fa32b979_73598a34","line":571,"in_reply_to":"fa32b979_2c7f4616","updated":"2015-06-18 02:33:16.000000000","message":"I agree on above.\n\nThere three cases for migration: 3 paths - Nova(out of scope this time), Cinder volume manager, and Cinder volume driver.\n\nI think we should design to be able to get migration progress for these 3 paths using only get_volume_copy_progress(), so that we can get progress via cinderclient if we will add API and command in the future.","commit_id":"9d5947addd1a0cfbeaf0fb0d6b090ae6620eb93c"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"1c344d0b298f81b4c23d51beed3f88382157d695","unresolved":false,"context_lines":[{"line_number":568,"context_line":"            output \u003d utils.execute(*command, run_as_root\u003dTrue)"},{"line_number":569,"context_line":""},{"line_number":570,"context_line":"            # Parse the output and get the position"},{"line_number":571,"context_line":"            position \u003d self._get_position(output[0])"},{"line_number":572,"context_line":"            percent \u003d position * 100 / size_in_bytes"},{"line_number":573,"context_line":"            LOG.info(_LI(\u0027The source volume %(volume_id)s has been \u0027"},{"line_number":574,"context_line":"                         \u0027copied %(percent)s percent.\u0027),"}],"source_content_type":"text/x-python","patch_set":15,"id":"fa32b979_538246c9","line":571,"in_reply_to":"fa32b979_73598a34","updated":"2015-06-18 03:07:54.000000000","message":"Yeah. Totally agree. Trying to merge today.","commit_id":"9d5947addd1a0cfbeaf0fb0d6b090ae6620eb93c"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"65e8070fe481af4704a5fb878a1cc9b14b65340c","unresolved":false,"context_lines":[{"line_number":574,"context_line":"                         \u0027copied %(percent)s percent.\u0027),"},{"line_number":575,"context_line":"                     {\u0027volume_id\u0027: volume[\u0027id\u0027], \u0027percent\u0027: str(percent)})"},{"line_number":576,"context_line":""},{"line_number":577,"context_line":"    def _get_position(self, output):"},{"line_number":578,"context_line":"        # One example of the content of output is"},{"line_number":579,"context_line":"        # \"pos:\\t550502400\\nflags:\\t0140000\\n\". The output of"},{"line_number":580,"context_line":"        # cat /proc/%s/fdinfo/1 is in the same format. After remove all the"}],"source_content_type":"text/x-python","patch_set":15,"id":"fa32b979_8c121208","line":577,"updated":"2015-06-17 13:18:58.000000000","message":"If this is generic for all drivers - then I think it should be done in get_volume_copy_progress. If this works only for LVM driver - then it should be in this driver implementation.","commit_id":"9d5947addd1a0cfbeaf0fb0d6b090ae6620eb93c"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"1c344d0b298f81b4c23d51beed3f88382157d695","unresolved":false,"context_lines":[{"line_number":574,"context_line":"                         \u0027copied %(percent)s percent.\u0027),"},{"line_number":575,"context_line":"                     {\u0027volume_id\u0027: volume[\u0027id\u0027], \u0027percent\u0027: str(percent)})"},{"line_number":576,"context_line":""},{"line_number":577,"context_line":"    def _get_position(self, output):"},{"line_number":578,"context_line":"        # One example of the content of output is"},{"line_number":579,"context_line":"        # \"pos:\\t550502400\\nflags:\\t0140000\\n\". The output of"},{"line_number":580,"context_line":"        # cat /proc/%s/fdinfo/1 is in the same format. After remove all the"}],"source_content_type":"text/x-python","patch_set":15,"id":"fa32b979_13711e0f","line":577,"in_reply_to":"fa32b979_8c121208","updated":"2015-06-18 03:07:54.000000000","message":"Yes.","commit_id":"9d5947addd1a0cfbeaf0fb0d6b090ae6620eb93c"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"65e8070fe481af4704a5fb878a1cc9b14b65340c","unresolved":false,"context_lines":[{"line_number":577,"context_line":"    def _get_position(self, output):"},{"line_number":578,"context_line":"        # One example of the content of output is"},{"line_number":579,"context_line":"        # \"pos:\\t550502400\\nflags:\\t0140000\\n\". The output of"},{"line_number":580,"context_line":"        # cat /proc/%s/fdinfo/1 is in the same format. After remove all the"},{"line_number":581,"context_line":"        # spaces from the string, the string becomes something like"},{"line_number":582,"context_line":"        # \"pos:550502400flags:0140000, so that we can get the position"},{"line_number":583,"context_line":"        # value by splitting with the key word \u0027flags:\u0027 and \u0027pos:\u0027."}],"source_content_type":"text/x-python","patch_set":15,"id":"fa32b979_d1e435e2","line":580,"updated":"2015-06-17 13:18:58.000000000","message":"s/remove/removing","commit_id":"9d5947addd1a0cfbeaf0fb0d6b090ae6620eb93c"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"1c344d0b298f81b4c23d51beed3f88382157d695","unresolved":false,"context_lines":[{"line_number":577,"context_line":"    def _get_position(self, output):"},{"line_number":578,"context_line":"        # One example of the content of output is"},{"line_number":579,"context_line":"        # \"pos:\\t550502400\\nflags:\\t0140000\\n\". The output of"},{"line_number":580,"context_line":"        # cat /proc/%s/fdinfo/1 is in the same format. After remove all the"},{"line_number":581,"context_line":"        # spaces from the string, the string becomes something like"},{"line_number":582,"context_line":"        # \"pos:550502400flags:0140000, so that we can get the position"},{"line_number":583,"context_line":"        # value by splitting with the key word \u0027flags:\u0027 and \u0027pos:\u0027."}],"source_content_type":"text/x-python","patch_set":15,"id":"fa32b979_b366324f","line":580,"in_reply_to":"fa32b979_d1e435e2","updated":"2015-06-18 03:07:54.000000000","message":"Done","commit_id":"9d5947addd1a0cfbeaf0fb0d6b090ae6620eb93c"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"65e8070fe481af4704a5fb878a1cc9b14b65340c","unresolved":false,"context_lines":[{"line_number":578,"context_line":"        # One example of the content of output is"},{"line_number":579,"context_line":"        # \"pos:\\t550502400\\nflags:\\t0140000\\n\". The output of"},{"line_number":580,"context_line":"        # cat /proc/%s/fdinfo/1 is in the same format. After remove all the"},{"line_number":581,"context_line":"        # spaces from the string, the string becomes something like"},{"line_number":582,"context_line":"        # \"pos:550502400flags:0140000, so that we can get the position"},{"line_number":583,"context_line":"        # value by splitting with the key word \u0027flags:\u0027 and \u0027pos:\u0027."},{"line_number":584,"context_line":"        pattern \u003d re.compile(r\u0027\\s+\u0027)"}],"source_content_type":"text/x-python","patch_set":15,"id":"fa32b979_0c8cc27d","line":581,"updated":"2015-06-17 13:18:58.000000000","message":"You\u0027re removing all whitespace characters, not only spaces.","commit_id":"9d5947addd1a0cfbeaf0fb0d6b090ae6620eb93c"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"1c344d0b298f81b4c23d51beed3f88382157d695","unresolved":false,"context_lines":[{"line_number":578,"context_line":"        # One example of the content of output is"},{"line_number":579,"context_line":"        # \"pos:\\t550502400\\nflags:\\t0140000\\n\". The output of"},{"line_number":580,"context_line":"        # cat /proc/%s/fdinfo/1 is in the same format. After remove all the"},{"line_number":581,"context_line":"        # spaces from the string, the string becomes something like"},{"line_number":582,"context_line":"        # \"pos:550502400flags:0140000, so that we can get the position"},{"line_number":583,"context_line":"        # value by splitting with the key word \u0027flags:\u0027 and \u0027pos:\u0027."},{"line_number":584,"context_line":"        pattern \u003d re.compile(r\u0027\\s+\u0027)"}],"source_content_type":"text/x-python","patch_set":15,"id":"fa32b979_336c6234","line":581,"in_reply_to":"fa32b979_0c8cc27d","updated":"2015-06-18 03:07:54.000000000","message":"Yes.","commit_id":"9d5947addd1a0cfbeaf0fb0d6b090ae6620eb93c"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"65e8070fe481af4704a5fb878a1cc9b14b65340c","unresolved":false,"context_lines":[{"line_number":587,"context_line":"            bytes_copied \u003d output.split(\u0027flags:\u0027)[0]"},{"line_number":588,"context_line":"            if \u0027pos:\u0027 in bytes_copied:"},{"line_number":589,"context_line":"                bytes_copied \u003d bytes_copied.split(\u0027pos:\u0027)[1]"},{"line_number":590,"context_line":"                return int(bytes_copied)"},{"line_number":591,"context_line":"        return 0"},{"line_number":592,"context_line":""},{"line_number":593,"context_line":"    def copy_image_to_volume(self, context, volume, image_service, image_id):"}],"source_content_type":"text/x-python","patch_set":15,"id":"fa32b979_8c7f7265","line":590,"updated":"2015-06-17 13:18:58.000000000","message":"You can replace whole method with:\n\n    pattern \u003d re.compile(r\u0027pos:\\t(\\d+)\\nflags:\\t\\d+\\n\u0027)\n    m \u003d re.match(pattern, output)\n    try:\n        return int(m.groups()[0])\n    except ValueError, KeyError, AttributeError:\n        LOG.error(\u0027Some error message\u0027)\n    finally:\n        return 0\n\nIt is definitely more readable.","commit_id":"9d5947addd1a0cfbeaf0fb0d6b090ae6620eb93c"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"1c344d0b298f81b4c23d51beed3f88382157d695","unresolved":false,"context_lines":[{"line_number":587,"context_line":"            bytes_copied \u003d output.split(\u0027flags:\u0027)[0]"},{"line_number":588,"context_line":"            if \u0027pos:\u0027 in bytes_copied:"},{"line_number":589,"context_line":"                bytes_copied \u003d bytes_copied.split(\u0027pos:\u0027)[1]"},{"line_number":590,"context_line":"                return int(bytes_copied)"},{"line_number":591,"context_line":"        return 0"},{"line_number":592,"context_line":""},{"line_number":593,"context_line":"    def copy_image_to_volume(self, context, volume, image_service, image_id):"}],"source_content_type":"text/x-python","patch_set":15,"id":"fa32b979_f3711a0d","line":590,"in_reply_to":"fa32b979_8c7f7265","updated":"2015-06-18 03:07:54.000000000","message":"Thx a lot.","commit_id":"9d5947addd1a0cfbeaf0fb0d6b090ae6620eb93c"},{"author":{"_account_id":11079,"name":"TaoBai","email":"baitao5@huawei.com","username":"TaoBai"},"change_message_id":"4da1f8b100e7c5498c491991d7a0879ac60db72d","unresolved":false,"context_lines":[{"line_number":1404,"context_line":"    def migrate_volume(self, context, volume, host):"},{"line_number":1405,"context_line":"        return (False, None)"},{"line_number":1406,"context_line":""},{"line_number":1407,"context_line":"    def get_volume_copy_progress(self, context, volume):"},{"line_number":1408,"context_line":"        \"\"\"Return how much percentage of volume content has been copied."},{"line_number":1409,"context_line":""},{"line_number":1410,"context_line":"        :param context: the context of the caller."}],"source_content_type":"text/x-python","patch_set":22,"id":"fa32b979_0048a5ca","line":1407,"updated":"2015-06-19 07:31:30.000000000","message":"Do you think this name could be more specified? \n\nThis function name is too general, but I know you want to use it for migration progress report.\n\nHow do you think change the name to similiar like get_volume_migration_progress\n\nOrelse, people may not understand the real usage of this function.How do you think about it?","commit_id":"42e3261a82efbaf8e213ec23ffb43ae3982d301d"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"fffe2b60bf3d32a4e17cd01dde8068840ded5ff8","unresolved":false,"context_lines":[{"line_number":1404,"context_line":"    def migrate_volume(self, context, volume, host):"},{"line_number":1405,"context_line":"        return (False, None)"},{"line_number":1406,"context_line":""},{"line_number":1407,"context_line":"    def get_volume_copy_progress(self, context, volume):"},{"line_number":1408,"context_line":"        \"\"\"Return how much percentage of volume content has been copied."},{"line_number":1409,"context_line":""},{"line_number":1410,"context_line":"        :param context: the context of the caller."}],"source_content_type":"text/x-python","patch_set":22,"id":"fa32b979_7eba4ac2","line":1407,"in_reply_to":"fa32b979_0048a5ca","updated":"2015-06-20 13:45:27.000000000","message":"Yeah, I need a better name.","commit_id":"42e3261a82efbaf8e213ec23ffb43ae3982d301d"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"c591ba024f004fa5b1a48e345e97ba8ff793439d","unresolved":false,"context_lines":[{"line_number":530,"context_line":"                                                           remote\u003dsrc_remote)"},{"line_number":531,"context_line":"        except Exception:"},{"line_number":532,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":533,"context_line":"                LOG.error(_LE(\"Failed to attach volume %(vol)s\"),"},{"line_number":534,"context_line":"                          {\u0027vol\u0027: src_vol[\u0027id\u0027]})"},{"line_number":535,"context_line":"                self.db.volume_update(context, src_vol[\u0027id\u0027],"},{"line_number":536,"context_line":"                                      {\u0027status\u0027: src_orig_status})"}],"source_content_type":"text/x-python","patch_set":25,"id":"fa32b979_7961a838","line":533,"updated":"2015-06-23 15:03:11.000000000","message":"\".\" at EOL","commit_id":"8766236214fa2e31fe9c3f3f196262bdfc3bd0a4"},{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"e57141a6534a81b4bbb3a00a70b8dfd7e5c4bd91","unresolved":false,"context_lines":[{"line_number":619,"context_line":"        LOG.info(_LI(\u0027The source volume %(volume_id)s has been \u0027"},{"line_number":620,"context_line":"                     \u0027copied %(percent)s percent.\u0027),"},{"line_number":621,"context_line":"                 {\u0027volume_id\u0027: volume[\u0027id\u0027], \u0027percent\u0027: str(progress)})"},{"line_number":622,"context_line":""},{"line_number":623,"context_line":"    def _get_position(self, output):"},{"line_number":624,"context_line":"        # One example of the content of output is"},{"line_number":625,"context_line":"        # \"pos:\\t550502400\\nflags:\\t0140000\\n\". The output of"}],"source_content_type":"text/x-python","patch_set":37,"id":"ba3cc151_fd2067f9","line":622,"updated":"2015-07-07 13:38:38.000000000","message":"We can add resource tag to logging. Below is reference for that: https://github.com/openstack/cinder/commit/386e2858a4e76fafc1d78737154859a3c1618b20#diff-724c53b8cd580ae533b4fb301df7c3e9","commit_id":"d09f5a59c34a451df319625e603cb82b4a613f8d"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"a2b27276c79bb1d6d194cd3a3a29cddaf5906c17","unresolved":false,"context_lines":[{"line_number":619,"context_line":"        LOG.info(_LI(\u0027The source volume %(volume_id)s has been \u0027"},{"line_number":620,"context_line":"                     \u0027copied %(percent)s percent.\u0027),"},{"line_number":621,"context_line":"                 {\u0027volume_id\u0027: volume[\u0027id\u0027], \u0027percent\u0027: str(progress)})"},{"line_number":622,"context_line":""},{"line_number":623,"context_line":"    def _get_position(self, output):"},{"line_number":624,"context_line":"        # One example of the content of output is"},{"line_number":625,"context_line":"        # \"pos:\\t550502400\\nflags:\\t0140000\\n\". The output of"}],"source_content_type":"text/x-python","patch_set":37,"id":"ba3cc151_4b32c65f","line":622,"in_reply_to":"ba3cc151_fd2067f9","updated":"2015-07-08 07:39:39.000000000","message":"Done","commit_id":"d09f5a59c34a451df319625e603cb82b4a613f8d"}],"cinder/volume/drivers/ibm/storwize_svc/__init__.py":[{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"c591ba024f004fa5b1a48e345e97ba8ff793439d","unresolved":false,"context_lines":[{"line_number":290,"context_line":"        \"\"\""},{"line_number":291,"context_line":"        volume_defined \u003d self._helpers.is_vdisk_defined(volume[\u0027name\u0027])"},{"line_number":292,"context_line":"        if not volume_defined:"},{"line_number":293,"context_line":"            LOG.error(_LE(\u0027ensure_export: Volume %s not found on storage\u0027),"},{"line_number":294,"context_line":"                      volume[\u0027name\u0027])"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"    def create_export(self, ctxt, volume):"}],"source_content_type":"text/x-python","patch_set":25,"id":"fa32b979_99c26ce8","line":293,"updated":"2015-06-23 15:03:11.000000000","message":"\".\" at EOL","commit_id":"8766236214fa2e31fe9c3f3f196262bdfc3bd0a4"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"c591ba024f004fa5b1a48e345e97ba8ff793439d","unresolved":false,"context_lines":[{"line_number":1109,"context_line":""},{"line_number":1110,"context_line":"        attributes \u003d self._helpers.get_pool_attrs(pool)"},{"line_number":1111,"context_line":"        if not attributes:"},{"line_number":1112,"context_line":"            LOG.error(_LE(\u0027Could not get pool data from the storage\u0027))"},{"line_number":1113,"context_line":"            exception_message \u003d (_(\u0027_update_volume_stats: \u0027"},{"line_number":1114,"context_line":"                                   \u0027Could not get storage pool data\u0027))"},{"line_number":1115,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dexception_message)"}],"source_content_type":"text/x-python","patch_set":25,"id":"fa32b979_79644821","line":1112,"updated":"2015-06-23 15:03:11.000000000","message":"\".\" at EOL","commit_id":"8766236214fa2e31fe9c3f3f196262bdfc3bd0a4"}],"cinder/volume/manager.py":[{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"65e8070fe481af4704a5fb878a1cc9b14b65340c","unresolved":false,"context_lines":[{"line_number":1401,"context_line":"                 resource\u003dvolume)"},{"line_number":1402,"context_line":"        return volume[\u0027id\u0027]"},{"line_number":1403,"context_line":""},{"line_number":1404,"context_line":"    def _log_notify_migration_progress(self, context, volume):"},{"line_number":1405,"context_line":"        progress \u003d self.driver.get_volume_copy_progress(context, volume)"},{"line_number":1406,"context_line":"        if not progress:"},{"line_number":1407,"context_line":"            LOG.info(_LI(\u0027The source volume %(volume_id)s has been \u0027"}],"source_content_type":"text/x-python","patch_set":15,"id":"fa32b979_ac7b56f4","line":1404,"updated":"2015-06-17 13:18:58.000000000","message":"I think this method won\u0027t be needed if _log_notify_migration_progress in the driver would be done in a generic way.","commit_id":"9d5947addd1a0cfbeaf0fb0d6b090ae6620eb93c"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"1c344d0b298f81b4c23d51beed3f88382157d695","unresolved":false,"context_lines":[{"line_number":1401,"context_line":"                 resource\u003dvolume)"},{"line_number":1402,"context_line":"        return volume[\u0027id\u0027]"},{"line_number":1403,"context_line":""},{"line_number":1404,"context_line":"    def _log_notify_migration_progress(self, context, volume):"},{"line_number":1405,"context_line":"        progress \u003d self.driver.get_volume_copy_progress(context, volume)"},{"line_number":1406,"context_line":"        if not progress:"},{"line_number":1407,"context_line":"            LOG.info(_LI(\u0027The source volume %(volume_id)s has been \u0027"}],"source_content_type":"text/x-python","patch_set":15,"id":"fa32b979_932e8ef9","line":1404,"in_reply_to":"fa32b979_ac7b56f4","updated":"2015-06-18 03:07:54.000000000","message":"I agree.\nTrying to merge today.","commit_id":"9d5947addd1a0cfbeaf0fb0d6b090ae6620eb93c"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"65e8070fe481af4704a5fb878a1cc9b14b65340c","unresolved":false,"context_lines":[{"line_number":1445,"context_line":"                    migration_progress_report \u003d True"},{"line_number":1446,"context_line":"                    timer \u003d loopingcall.FixedIntervalLoopingCall("},{"line_number":1447,"context_line":"                        self._log_notify_migration_progress, ctxt, volume_ref)"},{"line_number":1448,"context_line":"                    LOG.error(_LE(\u0027The timer started.\u0027))"},{"line_number":1449,"context_line":"                    timer.start(interval\u003d"},{"line_number":1450,"context_line":"                                CONF.migration_progress_report_interval)"},{"line_number":1451,"context_line":"                moved, model_update \u003d self.driver.migrate_volume(ctxt,"}],"source_content_type":"text/x-python","patch_set":15,"id":"fa32b979_8c01b26c","line":1448,"updated":"2015-06-17 13:18:58.000000000","message":"Is this an error?","commit_id":"9d5947addd1a0cfbeaf0fb0d6b090ae6620eb93c"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"1c344d0b298f81b4c23d51beed3f88382157d695","unresolved":false,"context_lines":[{"line_number":1445,"context_line":"                    migration_progress_report \u003d True"},{"line_number":1446,"context_line":"                    timer \u003d loopingcall.FixedIntervalLoopingCall("},{"line_number":1447,"context_line":"                        self._log_notify_migration_progress, ctxt, volume_ref)"},{"line_number":1448,"context_line":"                    LOG.error(_LE(\u0027The timer started.\u0027))"},{"line_number":1449,"context_line":"                    timer.start(interval\u003d"},{"line_number":1450,"context_line":"                                CONF.migration_progress_report_interval)"},{"line_number":1451,"context_line":"                moved, model_update \u003d self.driver.migrate_volume(ctxt,"}],"source_content_type":"text/x-python","patch_set":15,"id":"fa32b979_d34896ce","line":1448,"in_reply_to":"fa32b979_8c01b26c","updated":"2015-06-18 03:07:54.000000000","message":"Remove it soon. Set it here for me to test only.","commit_id":"9d5947addd1a0cfbeaf0fb0d6b090ae6620eb93c"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"65e8070fe481af4704a5fb878a1cc9b14b65340c","unresolved":false,"context_lines":[{"line_number":1452,"context_line":"                                                                 volume_ref,"},{"line_number":1453,"context_line":"                                                                 host)"},{"line_number":1454,"context_line":"                if migration_progress_report:"},{"line_number":1455,"context_line":"                    LOG.error(_LE(\u0027The timer stopped.\u0027))"},{"line_number":1456,"context_line":"                    timer.stop()"},{"line_number":1457,"context_line":"                if moved:"},{"line_number":1458,"context_line":"                    LOG.info(_LI(\u0027The source volume %(volume_id)s has been \u0027"}],"source_content_type":"text/x-python","patch_set":15,"id":"fa32b979_4cf88a7b","line":1455,"updated":"2015-06-17 13:18:58.000000000","message":"ditto","commit_id":"9d5947addd1a0cfbeaf0fb0d6b090ae6620eb93c"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"1c344d0b298f81b4c23d51beed3f88382157d695","unresolved":false,"context_lines":[{"line_number":1452,"context_line":"                                                                 volume_ref,"},{"line_number":1453,"context_line":"                                                                 host)"},{"line_number":1454,"context_line":"                if migration_progress_report:"},{"line_number":1455,"context_line":"                    LOG.error(_LE(\u0027The timer stopped.\u0027))"},{"line_number":1456,"context_line":"                    timer.stop()"},{"line_number":1457,"context_line":"                if moved:"},{"line_number":1458,"context_line":"                    LOG.info(_LI(\u0027The source volume %(volume_id)s has been \u0027"}],"source_content_type":"text/x-python","patch_set":15,"id":"fa32b979_f3435aad","line":1455,"in_reply_to":"fa32b979_4cf88a7b","updated":"2015-06-18 03:07:54.000000000","message":"Remove it soon. Set it here for me to test only.","commit_id":"9d5947addd1a0cfbeaf0fb0d6b090ae6620eb93c"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"a341383f389f764409f9b17585911e89ecee3618","unresolved":false,"context_lines":[{"line_number":105,"context_line":"                    \u0027allow the user to select by these different \u0027"},{"line_number":106,"context_line":"                    \u0027properties.\u0027),"},{"line_number":107,"context_line":"    cfg.IntOpt(\u0027migration_progress_report_interval\u0027,"},{"line_number":108,"context_line":"               default\u003d5,"},{"line_number":109,"context_line":"               help\u003d\u0027Interval, in seconds, between two migration progress \u0027"},{"line_number":110,"context_line":"                    \u0027notifications reporting the migration percentage\u0027),"},{"line_number":111,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":37,"id":"ba3cc151_7c92004d","line":108,"updated":"2015-07-07 22:14:16.000000000","message":"Is 5 a reasonable default?  Do we need to check this frequently?  Maybe it isn\u0027t a big deal if it isn\u0027t a heavy process.","commit_id":"d09f5a59c34a451df319625e603cb82b4a613f8d"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"a2b27276c79bb1d6d194cd3a3a29cddaf5906c17","unresolved":false,"context_lines":[{"line_number":105,"context_line":"                    \u0027allow the user to select by these different \u0027"},{"line_number":106,"context_line":"                    \u0027properties.\u0027),"},{"line_number":107,"context_line":"    cfg.IntOpt(\u0027migration_progress_report_interval\u0027,"},{"line_number":108,"context_line":"               default\u003d5,"},{"line_number":109,"context_line":"               help\u003d\u0027Interval, in seconds, between two migration progress \u0027"},{"line_number":110,"context_line":"                    \u0027notifications reporting the migration percentage\u0027),"},{"line_number":111,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":37,"id":"ba3cc151_abcd9232","line":108,"in_reply_to":"ba3cc151_7c92004d","updated":"2015-07-08 07:39:39.000000000","message":"We need to have a more rational number in future.\nI am just using 5 to test some extreme case to see if the timer is really started and stopped.","commit_id":"d09f5a59c34a451df319625e603cb82b4a613f8d"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"a341383f389f764409f9b17585911e89ecee3618","unresolved":false,"context_lines":[{"line_number":107,"context_line":"    cfg.IntOpt(\u0027migration_progress_report_interval\u0027,"},{"line_number":108,"context_line":"               default\u003d5,"},{"line_number":109,"context_line":"               help\u003d\u0027Interval, in seconds, between two migration progress \u0027"},{"line_number":110,"context_line":"                    \u0027notifications reporting the migration percentage\u0027),"},{"line_number":111,"context_line":"]"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":37,"id":"ba3cc151_7c8be01e","line":110,"updated":"2015-07-07 22:14:16.000000000","message":"Need \u0027.\u0027 at EOL.","commit_id":"d09f5a59c34a451df319625e603cb82b4a613f8d"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"a2b27276c79bb1d6d194cd3a3a29cddaf5906c17","unresolved":false,"context_lines":[{"line_number":107,"context_line":"    cfg.IntOpt(\u0027migration_progress_report_interval\u0027,"},{"line_number":108,"context_line":"               default\u003d5,"},{"line_number":109,"context_line":"               help\u003d\u0027Interval, in seconds, between two migration progress \u0027"},{"line_number":110,"context_line":"                    \u0027notifications reporting the migration percentage\u0027),"},{"line_number":111,"context_line":"]"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":37,"id":"ba3cc151_6ba1ca45","line":110,"in_reply_to":"ba3cc151_7c8be01e","updated":"2015-07-08 07:39:39.000000000","message":"Done","commit_id":"d09f5a59c34a451df319625e603cb82b4a613f8d"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"a341383f389f764409f9b17585911e89ecee3618","unresolved":false,"context_lines":[{"line_number":1447,"context_line":"                        volume_ref, None, self.driver.DRIVER_BASED)"},{"line_number":1448,"context_line":"                    self.driver._migration_mode[volume_ref[\u0027id\u0027]] \u003d\\"},{"line_number":1449,"context_line":"                        self.driver.DRIVER_BASED"},{"line_number":1450,"context_line":"                    LOG.error(_LE(\u0027The timer started.\u0027))"},{"line_number":1451,"context_line":"                    timer.start(interval\u003d"},{"line_number":1452,"context_line":"                                CONF.migration_progress_report_interval)"},{"line_number":1453,"context_line":"                moved, model_update \u003d self.driver.migrate_volume(ctxt,"}],"source_content_type":"text/x-python","patch_set":37,"id":"ba3cc151_dcca2c4f","line":1450,"updated":"2015-07-07 22:14:16.000000000","message":"This shouldn\u0027t be an error LOG.debug(\"migration_progress_report timer started.\")","commit_id":"d09f5a59c34a451df319625e603cb82b4a613f8d"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"a2b27276c79bb1d6d194cd3a3a29cddaf5906c17","unresolved":false,"context_lines":[{"line_number":1447,"context_line":"                        volume_ref, None, self.driver.DRIVER_BASED)"},{"line_number":1448,"context_line":"                    self.driver._migration_mode[volume_ref[\u0027id\u0027]] \u003d\\"},{"line_number":1449,"context_line":"                        self.driver.DRIVER_BASED"},{"line_number":1450,"context_line":"                    LOG.error(_LE(\u0027The timer started.\u0027))"},{"line_number":1451,"context_line":"                    timer.start(interval\u003d"},{"line_number":1452,"context_line":"                                CONF.migration_progress_report_interval)"},{"line_number":1453,"context_line":"                moved, model_update \u003d self.driver.migrate_volume(ctxt,"}],"source_content_type":"text/x-python","patch_set":37,"id":"ba3cc151_4bb3a69a","line":1450,"in_reply_to":"ba3cc151_dcca2c4f","updated":"2015-07-08 07:39:39.000000000","message":"For test use, red is more obvious for me to catch. :-)\nWill remove it.","commit_id":"d09f5a59c34a451df319625e603cb82b4a613f8d"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"a341383f389f764409f9b17585911e89ecee3618","unresolved":false,"context_lines":[{"line_number":1454,"context_line":"                                                                 volume_ref,"},{"line_number":1455,"context_line":"                                                                 host)"},{"line_number":1456,"context_line":"                if migration_progress_report:"},{"line_number":1457,"context_line":"                    LOG.error(_LE(\u0027The timer stopped.\u0027))"},{"line_number":1458,"context_line":"                    timer.stop()"},{"line_number":1459,"context_line":"                    self.driver._migration_mode(volume_ref[\u0027id\u0027], None)"},{"line_number":1460,"context_line":"                if moved:"}],"source_content_type":"text/x-python","patch_set":37,"id":"ba3cc151_fcf3709d","line":1457,"updated":"2015-07-07 22:14:16.000000000","message":"This shouldn\u0027t be an error LOG.debug(\"migration_progress_report timer stopped.\")","commit_id":"d09f5a59c34a451df319625e603cb82b4a613f8d"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"a2b27276c79bb1d6d194cd3a3a29cddaf5906c17","unresolved":false,"context_lines":[{"line_number":1454,"context_line":"                                                                 volume_ref,"},{"line_number":1455,"context_line":"                                                                 host)"},{"line_number":1456,"context_line":"                if migration_progress_report:"},{"line_number":1457,"context_line":"                    LOG.error(_LE(\u0027The timer stopped.\u0027))"},{"line_number":1458,"context_line":"                    timer.stop()"},{"line_number":1459,"context_line":"                    self.driver._migration_mode(volume_ref[\u0027id\u0027], None)"},{"line_number":1460,"context_line":"                if moved:"}],"source_content_type":"text/x-python","patch_set":37,"id":"ba3cc151_6bb8ea75","line":1457,"in_reply_to":"ba3cc151_fcf3709d","updated":"2015-07-08 07:39:39.000000000","message":"For test use, red is more obvious for me to catch. :-)\nWill remove it.","commit_id":"d09f5a59c34a451df319625e603cb82b4a613f8d"},{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"5047bf60e287a320e09a428cc97f5212216200fb","unresolved":false,"context_lines":[{"line_number":1460,"context_line":"                if moved:"},{"line_number":1461,"context_line":"                    LOG.info(_LI(\u0027The source volume %(volume_id)s has been \u0027"},{"line_number":1462,"context_line":"                                 \u0027completely copied to the destination pool.\u0027),"},{"line_number":1463,"context_line":"                             {\u0027volume_id\u0027: volume_ref[\u0027id\u0027]})"},{"line_number":1464,"context_line":"                    updates \u003d {\u0027host\u0027: host[\u0027host\u0027],"},{"line_number":1465,"context_line":"                               \u0027migration_status\u0027: None}"},{"line_number":1466,"context_line":"                    if status_update:"}],"source_content_type":"text/x-python","patch_set":37,"id":"ba3cc151_7d6d3703","line":1463,"updated":"2015-07-07 13:42:40.000000000","message":"We can add resource tag to logging. Below is reference for that: https://github.com/openstack/cinder/commit/386e2858a4e76fafc1d78737154859a3c1618b20#diff-724c53b8cd580ae533b4fb301df7c3e9","commit_id":"d09f5a59c34a451df319625e603cb82b4a613f8d"},{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"021f9d09d42f4a4d4110ec8498b5f3584d13c529","unresolved":false,"context_lines":[{"line_number":1460,"context_line":"                if moved:"},{"line_number":1461,"context_line":"                    LOG.info(_LI(\u0027The source volume %(volume_id)s has been \u0027"},{"line_number":1462,"context_line":"                                 \u0027completely copied to the destination pool.\u0027),"},{"line_number":1463,"context_line":"                             {\u0027volume_id\u0027: volume_ref[\u0027id\u0027]})"},{"line_number":1464,"context_line":"                    updates \u003d {\u0027host\u0027: host[\u0027host\u0027],"},{"line_number":1465,"context_line":"                               \u0027migration_status\u0027: None}"},{"line_number":1466,"context_line":"                    if status_update:"}],"source_content_type":"text/x-python","patch_set":37,"id":"ba3cc151_f73c8dc9","line":1463,"in_reply_to":"ba3cc151_0bb27e94","updated":"2015-07-09 11:06:35.000000000","message":"how about this ?\n\nLOG.info(_LI(\u0027The source volume has been \u0027\n             \u0027completely copied to the destination pool.\u0027),\n         resource\u003d{\u0027volume_id\u0027: volume_ref[\u0027id\u0027]})","commit_id":"d09f5a59c34a451df319625e603cb82b4a613f8d"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"a2b27276c79bb1d6d194cd3a3a29cddaf5906c17","unresolved":false,"context_lines":[{"line_number":1460,"context_line":"                if moved:"},{"line_number":1461,"context_line":"                    LOG.info(_LI(\u0027The source volume %(volume_id)s has been \u0027"},{"line_number":1462,"context_line":"                                 \u0027completely copied to the destination pool.\u0027),"},{"line_number":1463,"context_line":"                             {\u0027volume_id\u0027: volume_ref[\u0027id\u0027]})"},{"line_number":1464,"context_line":"                    updates \u003d {\u0027host\u0027: host[\u0027host\u0027],"},{"line_number":1465,"context_line":"                               \u0027migration_status\u0027: None}"},{"line_number":1466,"context_line":"                    if status_update:"}],"source_content_type":"text/x-python","patch_set":37,"id":"ba3cc151_0bb27e94","line":1463,"in_reply_to":"ba3cc151_7d6d3703","updated":"2015-07-08 07:39:39.000000000","message":"Shall I use:\n                    LOG.info(_LI(\u0027The source volume_ref has been \u0027\n                                 \u0027completely copied to the destination pool.\u0027),\n                             resource\u003dvolume_ref)\n\n\nbecause volume is not the variable, but volume_ref.","commit_id":"d09f5a59c34a451df319625e603cb82b4a613f8d"},{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"90079cc93a331de4da57311efec6499f336b45db","unresolved":false,"context_lines":[{"line_number":1460,"context_line":"                if moved:"},{"line_number":1461,"context_line":"                    LOG.info(_LI(\u0027The source volume %(volume_id)s has been \u0027"},{"line_number":1462,"context_line":"                                 \u0027completely copied to the destination pool.\u0027),"},{"line_number":1463,"context_line":"                             {\u0027volume_id\u0027: volume_ref[\u0027id\u0027]})"},{"line_number":1464,"context_line":"                    updates \u003d {\u0027host\u0027: host[\u0027host\u0027],"},{"line_number":1465,"context_line":"                               \u0027migration_status\u0027: None}"},{"line_number":1466,"context_line":"                    if status_update:"}],"source_content_type":"text/x-python","patch_set":37,"id":"ba3cc151_4bc26a35","line":1463,"in_reply_to":"ba3cc151_f73c8dc9","updated":"2015-07-09 15:16:52.000000000","message":"LOG.info(_LI(\u0027The source volume has been \u0027\n             \u0027completely copied to the destination pool.\u0027),\n         resource\u003d{\u0027type\u0027: \u0027volume\u0027, \u0027volume_id\u0027: volume_ref[\u0027id\u0027]})","commit_id":"d09f5a59c34a451df319625e603cb82b4a613f8d"}],"cinder/volume/utils.py":[{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"65e8070fe481af4704a5fb878a1cc9b14b65340c","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import math"},{"line_number":19,"context_line":"from proc.core import find_processes"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from Crypto.Random import random"},{"line_number":22,"context_line":"from oslo_concurrency import processutils"}],"source_content_type":"text/x-python","patch_set":15,"id":"fa32b979_cc6a5aee","line":19,"updated":"2015-06-17 13:18:58.000000000","message":"You would need to get proc to global-requirements... Isn\u0027t it easier to use psutil.process_iter which is already there?","commit_id":"9d5947addd1a0cfbeaf0fb0d6b090ae6620eb93c"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"1c344d0b298f81b4c23d51beed3f88382157d695","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import math"},{"line_number":19,"context_line":"from proc.core import find_processes"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from Crypto.Random import random"},{"line_number":22,"context_line":"from oslo_concurrency import processutils"}],"source_content_type":"text/x-python","patch_set":15,"id":"fa32b979_d3dad616","line":19,"in_reply_to":"fa32b979_cc6a5aee","updated":"2015-06-18 03:07:54.000000000","message":"Thank you so much. My favorite comment EVER!\nI was searching something like this, and I got a lib named proc. I will switch to psutil.","commit_id":"9d5947addd1a0cfbeaf0fb0d6b090ae6620eb93c"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"c591ba024f004fa5b1a48e345e97ba8ff793439d","unresolved":false,"context_lines":[{"line_number":338,"context_line":"               \"dest\": deststr,"},{"line_number":339,"context_line":"               \"sz\": size_in_m,"},{"line_number":340,"context_line":"               \"duration\": duration})"},{"line_number":341,"context_line":"    LOG.info(_LI(\"Volume copy %(size_in_m).2f MB at %(mbps).2f MB/s\"),"},{"line_number":342,"context_line":"             {\u0027size_in_m\u0027: size_in_m, \u0027mbps\u0027: mbps})"},{"line_number":343,"context_line":""},{"line_number":344,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"fa32b979_19241cc3","line":341,"updated":"2015-06-23 15:03:11.000000000","message":"\".\" at EOL","commit_id":"8766236214fa2e31fe9c3f3f196262bdfc3bd0a4"}]}
