)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"494d7f640f1b9a895ff796e342991432ed149b2f","unresolved":false,"context_lines":[{"line_number":17,"context_line":"* Copy Image to Volume"},{"line_number":18,"context_line":"* Copy Volume to Image"},{"line_number":19,"context_line":"* Clone Volume"},{"line_number":20,"context_line":"* Extend volume"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Change-Id: I0ad0b046dcbb4996c28d0c24992bc73569e6f52d"},{"line_number":23,"context_line":"Implements: blueprint disco-driver-cinder"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"7a740942_37384fa0","line":20,"updated":"2015-12-04 19:51:43.000000000","message":"Please reference your patch in os-brick here:\n\nhttps://review.openstack.org/#/c/253352/","commit_id":"a9dcada4b20918330374179ae97e34cef302cd54"},{"author":{"_account_id":17405,"name":"Jacob Gregor","email":"jgregor@us.ibm.com","username":"jgregor"},"change_message_id":"3cc8f3df9f50f4ff6ffa279ed0473acab86c3ad5","unresolved":false,"context_lines":[{"line_number":18,"context_line":"* Copy Volume to Image"},{"line_number":19,"context_line":"* Clone Volume"},{"line_number":20,"context_line":"* Extend volume"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Change-Id: I0ad0b046dcbb4996c28d0c24992bc73569e6f52d"},{"line_number":23,"context_line":"Implements: blueprint disco-driver-cinder"},{"line_number":24,"context_line":"Depends-On: Idd7900f879626f5b6a7ddfbcf02b113d83166986"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"9a8ffd7b_f894eee8","line":21,"updated":"2015-12-01 19:35:47.000000000","message":"Add a DocImpact tag here since we are adding config options.","commit_id":"a9dcada4b20918330374179ae97e34cef302cd54"}],"cinder/volume/drivers/disco/disco.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"2a60a6afab75c918711a505d49275e689fb88f14","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\"\"\"DISCO Block device Driver. \"\"\""},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"import os"},{"line_number":4,"context_line":"import socket"},{"line_number":5,"context_line":"import struct"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_bc9e6d52","line":2,"updated":"2015-12-01 14:41:16.000000000","message":"Please add Apache license header.","commit_id":"a9dcada4b20918330374179ae97e34cef302cd54"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"2a60a6afab75c918711a505d49275e689fb88f14","unresolved":false,"context_lines":[{"line_number":6,"context_line":"import time"},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"from oslo_config import cfg"},{"line_number":9,"context_line":"from suds.client import Client"},{"line_number":10,"context_line":"from cinder import context"},{"line_number":11,"context_line":"from cinder import exception"},{"line_number":12,"context_line":"from cinder.db.sqlalchemy import api"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_7c1b25cb","line":9,"updated":"2015-12-01 14:41:16.000000000","message":"Please don\u0027t import classes directly, import the module.","commit_id":"a9dcada4b20918330374179ae97e34cef302cd54"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"2a60a6afab75c918711a505d49275e689fb88f14","unresolved":false,"context_lines":[{"line_number":12,"context_line":"from cinder.db.sqlalchemy import api"},{"line_number":13,"context_line":"from cinder.i18n import _, _LE, _LI"},{"line_number":14,"context_line":"from cinder.image import image_utils"},{"line_number":15,"context_line":"from oslo_log import log as logging"},{"line_number":16,"context_line":"from cinder.volume import driver"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_1c2bf9ec","line":15,"updated":"2015-12-01 14:41:16.000000000","message":"You\u0027ll need to separate out the imports into three different groups: stdlibs, third party libs, then local cinder imports. So suds and oslo imports should be grouped above the cinder imports.","commit_id":"a9dcada4b20918330374179ae97e34cef302cd54"},{"author":{"_account_id":17405,"name":"Jacob Gregor","email":"jgregor@us.ibm.com","username":"jgregor"},"change_message_id":"3cc8f3df9f50f4ff6ffa279ed0473acab86c3ad5","unresolved":false,"context_lines":[{"line_number":36,"context_line":"                    \u0027to communicate with Discos request manager\u0027),"},{"line_number":37,"context_line":"    cfg.StrOpt(\u0027volume_name_prefix\u0027,"},{"line_number":38,"context_line":"               default\u003d\u0027openstack-\u0027,"},{"line_number":39,"context_line":"               help\u003d\u0027prefix before volume name to differenciate \u0027"},{"line_number":40,"context_line":"                    \u0027disco volume created through openstack \u0027"},{"line_number":41,"context_line":"                    \u0027and the other ones\u0027),"},{"line_number":42,"context_line":"    cfg.StrOpt(\u0027snapshot_reserve_days\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_38811690","line":39,"updated":"2015-12-01 19:35:47.000000000","message":"Capitalize \u0027prefix\u0027.","commit_id":"a9dcada4b20918330374179ae97e34cef302cd54"},{"author":{"_account_id":17405,"name":"Jacob Gregor","email":"jgregor@us.ibm.com","username":"jgregor"},"change_message_id":"3cc8f3df9f50f4ff6ffa279ed0473acab86c3ad5","unresolved":false,"context_lines":[{"line_number":44,"context_line":"               help\u003d\u0027number of day we want to keep a snapshot\u0027),"},{"line_number":45,"context_line":"    cfg.StrOpt(\u0027snapshot_check_timeout\u0027,"},{"line_number":46,"context_line":"               default\u003d60*60,"},{"line_number":47,"context_line":"               help\u003d\u0027how long we check whether a snapshot \u0027"},{"line_number":48,"context_line":"                    \u0027is finished before we give up\u0027),"},{"line_number":49,"context_line":"    cfg.StrOpt(\u0027restore_check_timeout\u0027,"},{"line_number":50,"context_line":"               default\u003d60*60,"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_78779ed4","line":47,"updated":"2015-12-01 19:35:47.000000000","message":"Capitalize \u0027how\u0027.","commit_id":"a9dcada4b20918330374179ae97e34cef302cd54"},{"author":{"_account_id":17405,"name":"Jacob Gregor","email":"jgregor@us.ibm.com","username":"jgregor"},"change_message_id":"3cc8f3df9f50f4ff6ffa279ed0473acab86c3ad5","unresolved":false,"context_lines":[{"line_number":48,"context_line":"                    \u0027is finished before we give up\u0027),"},{"line_number":49,"context_line":"    cfg.StrOpt(\u0027restore_check_timeout\u0027,"},{"line_number":50,"context_line":"               default\u003d60*60,"},{"line_number":51,"context_line":"               help\u003d\u0027how long we check whether a restore \u0027"},{"line_number":52,"context_line":"                    \u0027is finished before we give up\u0027),"},{"line_number":53,"context_line":"    cfg.StrOpt(\u0027clone_check_timeout\u0027,"},{"line_number":54,"context_line":"               default\u003d60*60,"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_58a5fa44","line":51,"updated":"2015-12-01 19:35:47.000000000","message":"Capitalize \u0027how\u0027.","commit_id":"a9dcada4b20918330374179ae97e34cef302cd54"},{"author":{"_account_id":17405,"name":"Jacob Gregor","email":"jgregor@us.ibm.com","username":"jgregor"},"change_message_id":"3cc8f3df9f50f4ff6ffa279ed0473acab86c3ad5","unresolved":false,"context_lines":[{"line_number":52,"context_line":"                    \u0027is finished before we give up\u0027),"},{"line_number":53,"context_line":"    cfg.StrOpt(\u0027clone_check_timeout\u0027,"},{"line_number":54,"context_line":"               default\u003d60*60,"},{"line_number":55,"context_line":"               help\u003d\u0027how long we check whether a clone \u0027"},{"line_number":56,"context_line":"                    \u0027is finished before we give up\u0027),"},{"line_number":57,"context_line":"]"},{"line_number":58,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_d86faafa","line":55,"updated":"2015-12-01 19:35:47.000000000","message":"Capitalize \u0027how\u0027.","commit_id":"a9dcada4b20918330374179ae97e34cef302cd54"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"494d7f640f1b9a895ff796e342991432ed149b2f","unresolved":false,"context_lines":[{"line_number":72,"context_line":"CONF.register_opts(disco_opts)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"#Driver to communicate with Disco storage solution"},{"line_number":76,"context_line":"class DiscoDriver(driver.VolumeDriver):"},{"line_number":77,"context_line":"    \"\"\"Executes commands relating to Disco Volumes\"\"\""},{"line_number":78,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7a740942_1c5c5aec","line":75,"updated":"2015-12-04 19:51:43.000000000","message":"Add a space after #.","commit_id":"a9dcada4b20918330374179ae97e34cef302cd54"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"2a60a6afab75c918711a505d49275e689fb88f14","unresolved":false,"context_lines":[{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    def create_volume(self, volume):"},{"line_number":90,"context_line":"        \"\"\"Creates a disco volume\"\"\""},{"line_number":91,"context_line":"        #name \u003d self.configuration.volume_name_prefix, volume[\"name\"]"},{"line_number":92,"context_line":"        name \u003d self.configuration.volume_name_prefix, volume[\"id\"]"},{"line_number":93,"context_line":"        vol_name \u003d \u0027\u0027.join(name)"},{"line_number":94,"context_line":"        vol_size \u003d volume[\u0027size\u0027] * 1024"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_dcd011cc","line":91,"updated":"2015-12-01 14:41:16.000000000","message":"Remove commented out code.","commit_id":"a9dcada4b20918330374179ae97e34cef302cd54"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"494d7f640f1b9a895ff796e342991432ed149b2f","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        vol_name \u003d \u0027\u0027.join(name)"},{"line_number":94,"context_line":"        vol_size \u003d volume[\u0027size\u0027] * 1024"},{"line_number":95,"context_line":"        LOG.debug(\"Create volume : [name] %(vname)s - [size] %(vsize)s\","},{"line_number":96,"context_line":"                  {\u0027vname\u0027: vol_name, \u0027vsize\u0027: format(vol_size)})"},{"line_number":97,"context_line":"        reply \u003d self.client.service.volumeCreate(vol_name, vol_size)"},{"line_number":98,"context_line":"        status \u003d reply.status"},{"line_number":99,"context_line":"        result \u003d reply.result"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a740942_7c047ebf","line":96,"updated":"2015-12-04 19:51:43.000000000","message":"Please use six.text_type() instead of format().  Same with other places using format().","commit_id":"a9dcada4b20918330374179ae97e34cef302cd54"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"98935554414e87b5f39a0ad1749459c21e3d447b","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        reply \u003d self.client.service.volumeCreate(vol_name, vol_size)"},{"line_number":98,"context_line":"        status \u003d reply.status"},{"line_number":99,"context_line":"        result \u003d reply.result"},{"line_number":100,"context_line":"        LOG.debug(\"Create volume : [status] %(stat)s - [result] %(res)s \","},{"line_number":101,"context_line":"                  {\u0027stat\u0027:format(status), \u0027res\u0027:result})"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"        if status !\u003d 0:"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_4d196787","line":100,"updated":"2015-12-03 02:00:53.000000000","message":"Remove space at the end of the string","commit_id":"a9dcada4b20918330374179ae97e34cef302cd54"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"98935554414e87b5f39a0ad1749459c21e3d447b","unresolved":false,"context_lines":[{"line_number":117,"context_line":"        status \u003d reply.status"},{"line_number":118,"context_line":"        result \u003d reply.result"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"        LOG.debug(\"Delete volume [status] %(stat)s - [result] %(res)s \","},{"line_number":121,"context_line":"                  {\u0027stat\u0027: format(status), \u0027res\u0027: result})"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"        if status !\u003d 0:"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_8d2c2fad","line":120,"updated":"2015-12-03 02:00:53.000000000","message":"Remove space at the end of the string","commit_id":"a9dcada4b20918330374179ae97e34cef302cd54"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"98935554414e87b5f39a0ad1749459c21e3d447b","unresolved":false,"context_lines":[{"line_number":135,"context_line":"        description \u003d snapshot[\u0027display_description\u0027]"},{"line_number":136,"context_line":"        vol_id \u003d volume[\u0027provider_location\u0027]"},{"line_number":137,"context_line":"        LOG.debug(\"Create snapshot of volume : %(id)s, \""},{"line_number":138,"context_line":"                  \"description : %(desc)s \","},{"line_number":139,"context_line":"                  {\u0027id\u0027: vol_id, \u0027desc\u0027: description})"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"        #Trigger an asynchronous local snapshot"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_cd26b7cd","line":138,"updated":"2015-12-03 02:00:53.000000000","message":"Remove space at the end of the string","commit_id":"a9dcada4b20918330374179ae97e34cef302cd54"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"2a60a6afab75c918711a505d49275e689fb88f14","unresolved":false,"context_lines":[{"line_number":138,"context_line":"                  \"description : %(desc)s \","},{"line_number":139,"context_line":"                  {\u0027id\u0027: vol_id, \u0027desc\u0027: description})"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"        #Trigger an asynchronous local snapshot"},{"line_number":142,"context_line":"        reserve_days \u003d self.configuration.snapshot_reserve_days"},{"line_number":143,"context_line":"        reply \u003d self.client.service.snapshotCreate(vol_id,"},{"line_number":144,"context_line":"                                                   reserve_days,"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_fca15547","line":141,"updated":"2015-12-01 14:41:16.000000000","message":"Space needed after the #.","commit_id":"a9dcada4b20918330374179ae97e34cef302cd54"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"98935554414e87b5f39a0ad1749459c21e3d447b","unresolved":false,"context_lines":[{"line_number":146,"context_line":"                                                   description)"},{"line_number":147,"context_line":"        status \u003d reply[\u0027status\u0027]"},{"line_number":148,"context_line":"        result \u003d reply[\u0027result\u0027]"},{"line_number":149,"context_line":"        LOG.debug(\"Create snapshot : [status] %(stat)s - [result] %(res)s \","},{"line_number":150,"context_line":"                  {\u0027stat\u0027: format(status), \u0027res\u0027: result})"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"        if status !\u003d 0:"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_6d378bff","line":149,"updated":"2015-12-03 02:00:53.000000000","message":"Remove space at the end of the string","commit_id":"a9dcada4b20918330374179ae97e34cef302cd54"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"98935554414e87b5f39a0ad1749459c21e3d447b","unresolved":false,"context_lines":[{"line_number":156,"context_line":"            LOG.error(msg)"},{"line_number":157,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"        #Monitor the status until it becomes either success or fail"},{"line_number":160,"context_line":"        snapshot_id \u003d result"},{"line_number":161,"context_line":"        start_time \u003d int(time.time())"},{"line_number":162,"context_line":"        snapshot_timeout \u003d int(self.configuration.snapshot_check_timeout)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_4d4ba787","line":159,"updated":"2015-12-03 02:00:53.000000000","message":"Needs space after #","commit_id":"a9dcada4b20918330374179ae97e34cef302cd54"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"98935554414e87b5f39a0ad1749459c21e3d447b","unresolved":false,"context_lines":[{"line_number":175,"context_line":"                break"},{"line_number":176,"context_line":"            elif self.is_timeout(start_time, snapshot_timeout):"},{"line_number":177,"context_line":"                break"},{"line_number":178,"context_line":"        #At this point the status should be success,"},{"line_number":179,"context_line":"        #failed, or still ongoing but timeout"},{"line_number":180,"context_line":"        status \u003d reply.snapshotInfoResult[\u0027status\u0027]"},{"line_number":181,"context_line":"        if status \u003d\u003d DISCO_CODE_MAPPING[\u0027snapshot.success\u0027]:"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_8d7e6fad","line":178,"updated":"2015-12-03 02:00:53.000000000","message":"Needs space after #","commit_id":"a9dcada4b20918330374179ae97e34cef302cd54"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"98935554414e87b5f39a0ad1749459c21e3d447b","unresolved":false,"context_lines":[{"line_number":176,"context_line":"            elif self.is_timeout(start_time, snapshot_timeout):"},{"line_number":177,"context_line":"                break"},{"line_number":178,"context_line":"        #At this point the status should be success,"},{"line_number":179,"context_line":"        #failed, or still ongoing but timeout"},{"line_number":180,"context_line":"        status \u003d reply.snapshotInfoResult[\u0027status\u0027]"},{"line_number":181,"context_line":"        if status \u003d\u003d DISCO_CODE_MAPPING[\u0027snapshot.success\u0027]:"},{"line_number":182,"context_line":"            snapshot[\u0027provider_location\u0027] \u003d result"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_ed75bbca","line":179,"updated":"2015-12-03 02:00:53.000000000","message":"Needs space after #","commit_id":"a9dcada4b20918330374179ae97e34cef302cd54"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"2a60a6afab75c918711a505d49275e689fb88f14","unresolved":false,"context_lines":[{"line_number":185,"context_line":"            return {\u0027provider_location\u0027: result}"},{"line_number":186,"context_line":"        elif (status \u003d\u003d DISCO_CODE_MAPPING[\u0027snapshot.failure\u0027] or"},{"line_number":187,"context_line":"              status \u003d\u003d DISCO_CODE_MAPPING[\u0027snapshot.ongoing\u0027]):"},{"line_number":188,"context_line":"            LOG.error(\"snapshot failed : %s\", status)"},{"line_number":189,"context_line":"            snapshot[\u0027status\u0027] \u003d \u0027error\u0027"},{"line_number":190,"context_line":"            return {\u0027status\u0027: \u0027error\u0027}"},{"line_number":191,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_fcb87577","line":188,"updated":"2015-12-01 14:41:16.000000000","message":"Needs _LE() translation marker around the string.","commit_id":"a9dcada4b20918330374179ae97e34cef302cd54"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"494d7f640f1b9a895ff796e342991432ed149b2f","unresolved":false,"context_lines":[{"line_number":191,"context_line":"        else:"},{"line_number":192,"context_line":"            msg \u003d _(\"unknown snapshot status : %s\") % (format(status))"},{"line_number":193,"context_line":"            LOG.error(msg)"},{"line_number":194,"context_line":"            raise exception.VolumeBackendAPIException(msg)"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"    def delete_snapshot(self, snapshot):"},{"line_number":197,"context_line":"        \"\"\"Deletes a disco snapshot\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"7a740942_3c891627","line":194,"updated":"2015-12-04 19:51:43.000000000","message":"exception.VolumeBackendAPIException(data\u003dmsg)","commit_id":"a9dcada4b20918330374179ae97e34cef302cd54"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"2a60a6afab75c918711a505d49275e689fb88f14","unresolved":false,"context_lines":[{"line_number":199,"context_line":""},{"line_number":200,"context_line":"        try:"},{"line_number":201,"context_line":"            snap_id \u003d snapshot[\u0027provider_location\u0027]"},{"line_number":202,"context_line":"            LOG.debug(\"[start] Delete snapshot : %s  \", snap_id)"},{"line_number":203,"context_line":"            reply \u003d self.client.service.snapshotDelete(snap_id)"},{"line_number":204,"context_line":"            status \u003d reply[\u0027status\u0027]"},{"line_number":205,"context_line":"            result \u003d reply[\u0027result\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_5c81818e","line":202,"updated":"2015-12-01 14:41:16.000000000","message":"Extra space at the end should be removed.","commit_id":"a9dcada4b20918330374179ae97e34cef302cd54"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"494d7f640f1b9a895ff796e342991432ed149b2f","unresolved":false,"context_lines":[{"line_number":213,"context_line":"                       {\u0027stat\u0027:format(status), \u0027res\u0027:result})"},{"line_number":214,"context_line":"                raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":215,"context_line":"        except Exception:"},{"line_number":216,"context_line":"            return {\u0027status\u0027: \u0027available\u0027}"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"    def create_volume_from_snapshot(self, volume, snapshot):"},{"line_number":219,"context_line":"        \"\"\"Creates a  volume from a snapshot.\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"7a740942_bcd2e6fe","line":216,"updated":"2015-12-04 19:51:43.000000000","message":"The delete_snapshot function in manager.py doesn\u0027t use return values from the driver function.  So here you can just do a \"pass\".","commit_id":"a9dcada4b20918330374179ae97e34cef302cd54"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"98935554414e87b5f39a0ad1749459c21e3d447b","unresolved":false,"context_lines":[{"line_number":228,"context_line":"        status \u003d reply[\u0027status\u0027]"},{"line_number":229,"context_line":"        result \u003d reply[\u0027result\u0027]"},{"line_number":230,"context_line":"        LOG.debug(\"Restore  volume from snapshot \""},{"line_number":231,"context_line":"                  \"[status] %(stat)s - [result] %(res)s \","},{"line_number":232,"context_line":"                  {\u0027stat\u0027: format(status), \u0027res\u0027: result})"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"        if status !\u003d 0:"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_cd0d573f","line":231,"updated":"2015-12-03 02:00:53.000000000","message":"Remove space at the end of the string","commit_id":"a9dcada4b20918330374179ae97e34cef302cd54"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"98935554414e87b5f39a0ad1749459c21e3d447b","unresolved":false,"context_lines":[{"line_number":233,"context_line":""},{"line_number":234,"context_line":"        if status !\u003d 0:"},{"line_number":235,"context_line":"            msg \u003d (_(\"Error[%(stat)s - %(res)s] while restoring snapshot \""},{"line_number":236,"context_line":"                     \"[%(snap_id)s] into volume [%(vol)s] \") %"},{"line_number":237,"context_line":"                   {\u0027stat\u0027: format(status), \u0027res\u0027: result,"},{"line_number":238,"context_line":"                    \u0027snap_id\u0027: format(snap_id), \u0027vol\u0027: vol_name})"},{"line_number":239,"context_line":"            LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_8d03cf0f","line":236,"updated":"2015-12-03 02:00:53.000000000","message":"Remove space at the end of the string","commit_id":"a9dcada4b20918330374179ae97e34cef302cd54"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"98935554414e87b5f39a0ad1749459c21e3d447b","unresolved":false,"context_lines":[{"line_number":272,"context_line":""},{"line_number":273,"context_line":"            if status !\u003d 0:"},{"line_number":274,"context_line":"                msg \u003d (_(\"Error[status] %(stat)s - [result] %(res)s] \""},{"line_number":275,"context_line":"                         \"while getting volume id \") %"},{"line_number":276,"context_line":"                       {\u0027stat\u0027: format(status), \u0027res\u0027: result})"},{"line_number":277,"context_line":"                LOG.error(msg)"},{"line_number":278,"context_line":"                raise exception.VolumeBackendAPIException(data\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_d0140c45","line":275,"updated":"2015-12-03 02:00:53.000000000","message":"Remove space at the end of the string","commit_id":"a9dcada4b20918330374179ae97e34cef302cd54"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"2a60a6afab75c918711a505d49275e689fb88f14","unresolved":false,"context_lines":[{"line_number":281,"context_line":"            return  {\u0027provider_location\u0027: new_vol_id}"},{"line_number":282,"context_line":"        elif (status \u003d\u003d DISCO_CODE_MAPPING[\u0027restore.failure\u0027] or"},{"line_number":283,"context_line":"              status \u003d\u003d DISCO_CODE_MAPPING[\u0027restore.ongoing\u0027]):"},{"line_number":284,"context_line":"            msg \u003d (_LE(\"Couldn\u0027t restore snapshot %(status)s\"),"},{"line_number":285,"context_line":"                   {\u0027status\u0027: status})"},{"line_number":286,"context_line":"            LOG.error(msg)"},{"line_number":287,"context_line":"            return {\u0027status\u0027: \u0027error\u0027}"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_701d8965","line":284,"updated":"2015-12-01 14:41:16.000000000","message":"Get rid of the msg variable and move this directly into the LOG.error() call.","commit_id":"a9dcada4b20918330374179ae97e34cef302cd54"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"494d7f640f1b9a895ff796e342991432ed149b2f","unresolved":false,"context_lines":[{"line_number":330,"context_line":"                LOG.error(msg)"},{"line_number":331,"context_line":"                raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":332,"context_line":""},{"line_number":333,"context_line":"            elif reply[\u0027result\u0027] !\u003d str(DISCO_CODE_MAPPING[\u0027clone.ongoing\u0027]):"},{"line_number":334,"context_line":"                break"},{"line_number":335,"context_line":"            elif self.is_timeout(start_time, clone_timeout):"},{"line_number":336,"context_line":"                break"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a740942_9cee0ab3","line":333,"updated":"2015-12-04 19:51:43.000000000","message":"str() -\u003e six.text_type()","commit_id":"a9dcada4b20918330374179ae97e34cef302cd54"},{"author":{"_account_id":17405,"name":"Jacob Gregor","email":"jgregor@us.ibm.com","username":"jgregor"},"change_message_id":"3cc8f3df9f50f4ff6ffa279ed0473acab86c3ad5","unresolved":false,"context_lines":[{"line_number":361,"context_line":"            LOG.error(_LE(\"Couldn\u0027t clone volume %s\"), status)"},{"line_number":362,"context_line":"            return {\u0027status\u0027: \u0027error\u0027}"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"        raise Exception(\"unknown clone status : %s\" % (format(status)))"},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"    def copy_image_to_volume(self, context, volume, image_service, image_id):"},{"line_number":367,"context_line":"        \"\"\"Fetch the image from image_service and write it to the volume.\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_9bccbc62","line":364,"updated":"2015-12-01 19:35:47.000000000","message":"Could you make this  a more specific exception? Also capitalize \u0027unknown\u0027.","commit_id":"a9dcada4b20918330374179ae97e34cef302cd54"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"98935554414e87b5f39a0ad1749459c21e3d447b","unresolved":false,"context_lines":[{"line_number":404,"context_line":"    def extend_volume(self, volume, new_size):"},{"line_number":405,"context_line":"        \"\"\"Extend an existing volume\u0027s size.\"\"\""},{"line_number":406,"context_line":"        vol_id \u003d volume[\u0027provider_location\u0027]"},{"line_number":407,"context_line":"        LOG.debug(\"Extends volume : %(id)s , new size : %(size)s \","},{"line_number":408,"context_line":"                  {\u0027id\u0027:vol_id, \u0027size\u0027:new_size})"},{"line_number":409,"context_line":"        new_size_mb \u003d new_size * 1024"},{"line_number":410,"context_line":"        reply \u003d self.client.service.volumeExtend(vol_id, new_size_mb)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_908d247e","line":407,"updated":"2015-12-03 02:00:53.000000000","message":"Remove space at the end of the string","commit_id":"a9dcada4b20918330374179ae97e34cef302cd54"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"494d7f640f1b9a895ff796e342991432ed149b2f","unresolved":false,"context_lines":[{"line_number":425,"context_line":"        \"\"\"Function called before attaching a volume \"\"\""},{"line_number":426,"context_line":"        LOG.debug(\"Enter in initialize connection with disco\")"},{"line_number":427,"context_line":"        data \u003d {"},{"line_number":428,"context_line":"            \u0027driver_volume_type\u0027: \u0027disco\u0027,"},{"line_number":429,"context_line":"            \u0027data\u0027: {"},{"line_number":430,"context_line":"                \u0027name\u0027: volume[\u0027name\u0027],"},{"line_number":431,"context_line":"                \u0027disco_id\u0027: volume[\u0027provider_location\u0027],"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a740942_9c4a8aab","line":428,"updated":"2015-12-04 19:51:43.000000000","message":"Do you have a connector in os-brick?  This is a protocol.","commit_id":"a9dcada4b20918330374179ae97e34cef302cd54"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"2a60a6afab75c918711a505d49275e689fb88f14","unresolved":false,"context_lines":[{"line_number":440,"context_line":"    def terminate_connection(self, volume, connector, **kwargs):"},{"line_number":441,"context_line":"        \"\"\" function called after attaching a volume \"\"\""},{"line_number":442,"context_line":"        LOG.debug(\"Enter in terminate connection with disco\")"},{"line_number":443,"context_line":"        pass"},{"line_number":444,"context_line":""},{"line_number":445,"context_line":"    def _update_volume_stats(self):"},{"line_number":446,"context_line":"        LOG.debug(\"Enter in update volume stats \")"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_503ac599","line":443,"updated":"2015-12-01 14:41:16.000000000","message":"pass not needed.","commit_id":"a9dcada4b20918330374179ae97e34cef302cd54"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"98935554414e87b5f39a0ad1749459c21e3d447b","unresolved":false,"context_lines":[{"line_number":482,"context_line":""},{"line_number":483,"context_line":"    def _mount_disco_volume(self, path, id_volume):"},{"line_number":484,"context_line":"        ensure \u003d False"},{"line_number":485,"context_line":"        LOG.debug(\"Enter in mount disco volume %s \", id_volume)"},{"line_number":486,"context_line":"        client_ip \u003d self.configuration.disco_client"},{"line_number":487,"context_line":"        client_port \u003d int(self.configuration.disco_client_port)"},{"line_number":488,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_70ef601e","line":485,"updated":"2015-12-03 02:00:53.000000000","message":"Remove space at the end of the string","commit_id":"a9dcada4b20918330374179ae97e34cef302cd54"},{"author":{"_account_id":17405,"name":"Jacob Gregor","email":"jgregor@us.ibm.com","username":"jgregor"},"change_message_id":"3cc8f3df9f50f4ff6ffa279ed0473acab86c3ad5","unresolved":false,"context_lines":[{"line_number":500,"context_line":"            LOG.info(_LI(\"Volume already attached to host : %s\"), id_volume)"},{"line_number":501,"context_line":"        LOG.debug(\"disco volume %s mounted\", id_volume)"},{"line_number":502,"context_line":""},{"line_number":503,"context_line":"    def _umount_disco_volume(self, disco_device, disco_uuid):"},{"line_number":504,"context_line":""},{"line_number":505,"context_line":"        LOG.debug(\"detaching %s\", format(disco_device))"},{"line_number":506,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_dbea4474","line":503,"updated":"2015-12-01 19:35:47.000000000","message":"umount -\u003e unmount?","commit_id":"a9dcada4b20918330374179ae97e34cef302cd54"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"494d7f640f1b9a895ff796e342991432ed149b2f","unresolved":false,"context_lines":[{"line_number":546,"context_line":"            return False"},{"line_number":547,"context_line":"        return exist"},{"line_number":548,"context_line":""},{"line_number":549,"context_line":"    def _connect_tcp_socket(self, ip, port):"},{"line_number":550,"context_line":"        \"\"\"Connect to TCP socket\"\"\""},{"line_number":551,"context_line":"        sock \u003d None"},{"line_number":552,"context_line":"        for res in socket.getaddrinfo(ip,"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a740942_d7478b1b","line":549,"updated":"2015-12-04 19:51:43.000000000","message":"Are you not using os-brick connector for this?  This is the same function there.\n\nhttps://review.openstack.org/#/c/253352/1/os_brick/initiator/connector.py\n\nIf you are planning to submit a follow up patch to use os-brick in the Cinder volume driver and remove the redundant code, that is fine.  Please add a TODO note here.","commit_id":"a9dcada4b20918330374179ae97e34cef302cd54"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"494d7f640f1b9a895ff796e342991432ed149b2f","unresolved":false,"context_lines":[{"line_number":574,"context_line":"        LOG.info(_LI(\"TCP socket connected %s\"), format(sock))"},{"line_number":575,"context_line":"        return sock"},{"line_number":576,"context_line":""},{"line_number":577,"context_line":"    def _send_dms_vol_cmd(self, ip, port, op, vol_uuid):"},{"line_number":578,"context_line":"        \"\"\"Send DMS client socket command\"\"\""},{"line_number":579,"context_line":"        LOG.info(_LI(\"send dms vol_cmd \"))"},{"line_number":580,"context_line":"        s \u003d self._connect_tcp_socket(ip, port)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a740942_375fefe6","line":577,"updated":"2015-12-04 19:51:43.000000000","message":"Same","commit_id":"a9dcada4b20918330374179ae97e34cef302cd54"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"2a60a6afab75c918711a505d49275e689fb88f14","unresolved":false,"context_lines":[{"line_number":583,"context_line":"            inst_uuid \u003d \u0027DEFAULT-INSTID\u0027"},{"line_number":584,"context_line":"            pktlen \u003d 2 + 8 + len(inst_uuid)"},{"line_number":585,"context_line":"            LOG.debug(\"pktlen\u003d%(len)s op\u003d%(op)s \""},{"line_number":586,"context_line":"                      \"vol_uuid\u003d%(v_id)s, inst_uuid\u003d%(i_id)s\" %"},{"line_number":587,"context_line":"                      {\u0027len\u0027: pktlen, \u0027op\u0027: op,"},{"line_number":588,"context_line":"                       \u0027v_id\u0027: vol_uuid, \u0027i_id\u0027: inst_uuid})"},{"line_number":589,"context_line":"            data \u003d struct.pack(\"!HHQ14s\", pktlen, op, int(vol_uuid), inst_uuid)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_b072117b","line":586,"updated":"2015-12-01 14:41:16.000000000","message":"Change % to ,","commit_id":"a9dcada4b20918330374179ae97e34cef302cd54"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"2a60a6afab75c918711a505d49275e689fb88f14","unresolved":false,"context_lines":[{"line_number":587,"context_line":"                      {\u0027len\u0027: pktlen, \u0027op\u0027: op,"},{"line_number":588,"context_line":"                       \u0027v_id\u0027: vol_uuid, \u0027i_id\u0027: inst_uuid})"},{"line_number":589,"context_line":"            data \u003d struct.pack(\"!HHQ14s\", pktlen, op, int(vol_uuid), inst_uuid)"},{"line_number":590,"context_line":"            LOG.debug(\"\\t%s\" % (str(struct.unpack(\"!HHQ14s\", data))))"},{"line_number":591,"context_line":"            s.sendall(data)"},{"line_number":592,"context_line":"            ret \u003d s.recv(4)"},{"line_number":593,"context_line":"            s.close()"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_90feedac","line":590,"updated":"2015-12-01 14:41:16.000000000","message":"% \u003e ,","commit_id":"a9dcada4b20918330374179ae97e34cef302cd54"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"494d7f640f1b9a895ff796e342991432ed149b2f","unresolved":false,"context_lines":[{"line_number":587,"context_line":"                      {\u0027len\u0027: pktlen, \u0027op\u0027: op,"},{"line_number":588,"context_line":"                       \u0027v_id\u0027: vol_uuid, \u0027i_id\u0027: inst_uuid})"},{"line_number":589,"context_line":"            data \u003d struct.pack(\"!HHQ14s\", pktlen, op, int(vol_uuid), inst_uuid)"},{"line_number":590,"context_line":"            LOG.debug(\"\\t%s\" % (str(struct.unpack(\"!HHQ14s\", data))))"},{"line_number":591,"context_line":"            s.sendall(data)"},{"line_number":592,"context_line":"            ret \u003d s.recv(4)"},{"line_number":593,"context_line":"            s.close()"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a740942_bc8ae6bd","line":590,"in_reply_to":"9a8ffd7b_90feedac","updated":"2015-12-04 19:51:43.000000000","message":"str() -\u003e six.text_type()","commit_id":"a9dcada4b20918330374179ae97e34cef302cd54"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"2a60a6afab75c918711a505d49275e689fb88f14","unresolved":false,"context_lines":[{"line_number":591,"context_line":"            s.sendall(data)"},{"line_number":592,"context_line":"            ret \u003d s.recv(4)"},{"line_number":593,"context_line":"            s.close()"},{"line_number":594,"context_line":"            LOG.debug(\"Received ret len\u003d%d, ret\u003d%s\" %"},{"line_number":595,"context_line":"                      (len(repr(ret)), (repr(ret))))"},{"line_number":596,"context_line":"            ret_val \u003d str(\"\".join(\"%02x\" % ord(c) for c in ret))"},{"line_number":597,"context_line":"            LOG.debug(\"ret_val\u003d%s\" % (ret_val))"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_1012fd09","line":594,"updated":"2015-12-01 14:41:16.000000000","message":"% \u003e ,","commit_id":"a9dcada4b20918330374179ae97e34cef302cd54"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"494d7f640f1b9a895ff796e342991432ed149b2f","unresolved":false,"context_lines":[{"line_number":593,"context_line":"            s.close()"},{"line_number":594,"context_line":"            LOG.debug(\"Received ret len\u003d%d, ret\u003d%s\" %"},{"line_number":595,"context_line":"                      (len(repr(ret)), (repr(ret))))"},{"line_number":596,"context_line":"            ret_val \u003d str(\"\".join(\"%02x\" % ord(c) for c in ret))"},{"line_number":597,"context_line":"            LOG.debug(\"ret_val\u003d%s\" % (ret_val))"},{"line_number":598,"context_line":""},{"line_number":599,"context_line":"            if ret_val !\u003d \u002700000000\u0027:"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a740942_fc9f0e01","line":596,"updated":"2015-12-04 19:51:43.000000000","message":"str() -\u003e six.text_type()","commit_id":"a9dcada4b20918330374179ae97e34cef302cd54"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"2a60a6afab75c918711a505d49275e689fb88f14","unresolved":false,"context_lines":[{"line_number":594,"context_line":"            LOG.debug(\"Received ret len\u003d%d, ret\u003d%s\" %"},{"line_number":595,"context_line":"                      (len(repr(ret)), (repr(ret))))"},{"line_number":596,"context_line":"            ret_val \u003d str(\"\".join(\"%02x\" % ord(c) for c in ret))"},{"line_number":597,"context_line":"            LOG.debug(\"ret_val\u003d%s\" % (ret_val))"},{"line_number":598,"context_line":""},{"line_number":599,"context_line":"            if ret_val !\u003d \u002700000000\u0027:"},{"line_number":600,"context_line":"                return \u0027ERROR\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_302ce149","line":597,"updated":"2015-12-01 14:41:16.000000000","message":"% \u003e ,","commit_id":"a9dcada4b20918330374179ae97e34cef302cd54"}]}
