)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":17405,"name":"Jacob Gregor","email":"jgregor@us.ibm.com","username":"jgregor"},"change_message_id":"0a11590d971a2a18db04dc166562679dc8106dd2","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    Implements: blueprint disco-driver-cinder"},{"line_number":22,"context_line":"    Depends-On: I96456e19051addac1421d037126aafb8a10adc7f"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"Change-Id: I0168af34364343246a2855bdbd4a9f5ed5b05438"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"7a740942_497ad4be","line":23,"updated":"2015-12-07 19:38:33.000000000","message":"We need a DocImpact tag here since we are adding config options.","commit_id":"24a2d1d42d17dc797534bc10637a5366a2288e36"},{"author":{"_account_id":17405,"name":"Jacob Gregor","email":"jgregor@us.ibm.com","username":"jgregor"},"change_message_id":"4cff69b9085b1c886d777f533a99499bcb82b2a1","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    Implements: blueprint disco-driver-cinder"},{"line_number":22,"context_line":"    Depends-On: I96456e19051addac1421d037126aafb8a10adc7f"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"This patchset also includes the unit tests."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Change-Id: I0168af34364343246a2855bdbd4a9f5ed5b05438"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"1a7b0d38_80ad8433","line":23,"updated":"2015-12-22 17:08:44.000000000","message":"We should add a DocImpact tag here since we are adding config options.","commit_id":"f92657152ddb5003e842598bfc2807a02ea242f4"}],"cinder/tests/unit/volume/drivers/disco/test_create_cloned_volume.py":[{"author":{"_account_id":17405,"name":"Jacob Gregor","email":"jgregor@us.ibm.com","username":"jgregor"},"change_message_id":"4cff69b9085b1c886d777f533a99499bcb82b2a1","unresolved":false,"context_lines":[{"line_number":51,"context_line":"                {\u0027volumeId\u0027: 1234567}"},{"line_number":52,"context_line":"        }"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        clone_success \u003d \\"},{"line_number":55,"context_line":"            copy.deepcopy(self.FAKE_SOAP_RESPONSE[\u0027standard\u0027][\u0027success\u0027])"},{"line_number":56,"context_line":"        clone_pending \u003d \\"},{"line_number":57,"context_line":"            copy.deepcopy(self.FAKE_SOAP_RESPONSE[\u0027standard\u0027][\u0027success\u0027])"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a7b0d38_a00be07c","line":54,"range":{"start_line":54,"start_character":24,"end_line":54,"end_character":25},"updated":"2015-12-22 17:08:44.000000000","message":"Please do not use \\ for line continuation. Use () instead.","commit_id":"f92657152ddb5003e842598bfc2807a02ea242f4"},{"author":{"_account_id":14377,"name":"Apoorva","email":"apps.desh@gmail.com","username":"apoorvad"},"change_message_id":"0a61bf48a9a4a2acaf232685bc8a4c8383500d47","unresolved":false,"context_lines":[{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def test_create_cloned_volume(self):"},{"line_number":106,"context_line":"        \"\"\"Normal case.\"\"\""},{"line_number":107,"context_line":"        self.driver.create_cloned_volume(self.dest_volume, self.volume)"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    def test_create_clone_volume_fail(self):"},{"line_number":110,"context_line":"        \"\"\"Clone volume request to DISCO fails.\"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"fa69d971_a03c4330","line":107,"updated":"2015-12-30 04:27:49.000000000","message":"assert on expected values","commit_id":"1b43624aef9b273834686dab61a229f21e8dd8b2"}],"cinder/tests/unit/volume/drivers/disco/test_create_snapshot.py":[{"author":{"_account_id":17405,"name":"Jacob Gregor","email":"jgregor@us.ibm.com","username":"jgregor"},"change_message_id":"4cff69b9085b1c886d777f533a99499bcb82b2a1","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        snap_pending \u003d copy.deepcopy(snapshot_detail_response)"},{"line_number":66,"context_line":"        snap_fail \u003d copy.deepcopy(snapshot_detail_response)"},{"line_number":67,"context_line":"        snap_response_fail \u003d copy.deepcopy(snapshot_detail_response)"},{"line_number":68,"context_line":"        snap_success[\u0027snapshotInfoResult\u0027][\u0027status\u0027] \u003d \\"},{"line_number":69,"context_line":"            self.DETAIL_OPTIONS[\u0027success\u0027]"},{"line_number":70,"context_line":"        snap_pending[\u0027snapshotInfoResult\u0027][\u0027status\u0027] \u003d \\"},{"line_number":71,"context_line":"            self.DETAIL_OPTIONS[\u0027pending\u0027]"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a7b0d38_40747cfc","line":68,"range":{"start_line":68,"start_character":55,"end_line":68,"end_character":56},"updated":"2015-12-22 17:08:44.000000000","message":"Please do not use \\ for line continuation. Use () instead.","commit_id":"f92657152ddb5003e842598bfc2807a02ea242f4"},{"author":{"_account_id":14377,"name":"Apoorva","email":"apps.desh@gmail.com","username":"apoorvad"},"change_message_id":"0a61bf48a9a4a2acaf232685bc8a4c8383500d47","unresolved":false,"context_lines":[{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    def test_create_snapshot(self):"},{"line_number":108,"context_line":"        \"\"\"Normal test case.\"\"\""},{"line_number":109,"context_line":"        self.driver.create_snapshot(self.volume)"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    def test_create_snapshot_fail(self):"},{"line_number":112,"context_line":"        \"\"\"Request to DISCO failed.\"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"fa69d971_60ef2bb1","line":109,"updated":"2015-12-30 04:27:49.000000000","message":"Assert on expected value","commit_id":"1b43624aef9b273834686dab61a229f21e8dd8b2"},{"author":{"_account_id":14377,"name":"Apoorva","email":"apps.desh@gmail.com","username":"apoorvad"},"change_message_id":"0a61bf48a9a4a2acaf232685bc8a4c8383500d47","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        self.assertRaises(exception.VolumeBackendAPIException,"},{"line_number":131,"context_line":"                          self.test_create_snapshot)"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"    def test_create_snapshot_detail_pending(self):"},{"line_number":134,"context_line":"        \"\"\"Request to get the snapshot detail return pending then success.\"\"\""},{"line_number":135,"context_line":"        self.response \u003d self.FAKE_SOAP_RESPONSE[\u0027standard\u0027][\u0027success\u0027]"},{"line_number":136,"context_line":"        self.test_pending \u003d True"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa69d971_c00b777c","line":133,"updated":"2015-12-30 04:27:49.000000000","message":"You can assert that expected functions got executed","commit_id":"1b43624aef9b273834686dab61a229f21e8dd8b2"}],"cinder/tests/unit/volume/drivers/disco/test_create_volume_from_snapshot.py":[{"author":{"_account_id":17405,"name":"Jacob Gregor","email":"jgregor@us.ibm.com","username":"jgregor"},"change_message_id":"4cff69b9085b1c886d777f533a99499bcb82b2a1","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        rest_pending \u003d copy.deepcopy(restore_detail_response)"},{"line_number":68,"context_line":"        rest_fail \u003d copy.deepcopy(restore_detail_response)"},{"line_number":69,"context_line":"        rest_response_fail \u003d copy.deepcopy(restore_detail_response)"},{"line_number":70,"context_line":"        rest_success[\u0027restoreInfoResult\u0027][\u0027status\u0027] \u003d \\"},{"line_number":71,"context_line":"            self.DETAIL_OPTIONS[\u0027success\u0027]"},{"line_number":72,"context_line":"        rest_pending[\u0027restoreInfoResult\u0027][\u0027status\u0027] \u003d \\"},{"line_number":73,"context_line":"            self.DETAIL_OPTIONS[\u0027pending\u0027]"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a7b0d38_e05fa873","line":70,"range":{"start_line":70,"start_character":54,"end_line":70,"end_character":55},"updated":"2015-12-22 17:08:44.000000000","message":"Please do not use \\ for line continuation. Use () instead.","commit_id":"f92657152ddb5003e842598bfc2807a02ea242f4"},{"author":{"_account_id":14377,"name":"Apoorva","email":"apps.desh@gmail.com","username":"apoorvad"},"change_message_id":"0a61bf48a9a4a2acaf232685bc8a4c8383500d47","unresolved":false,"context_lines":[{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    def test_create_volume_from_snapshot(self):"},{"line_number":114,"context_line":"        \"\"\"Normal case.\"\"\""},{"line_number":115,"context_line":"        self.driver.create_volume_from_snapshot(self.volume, self.snapshot)"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    def test_create_volume_from_snapshot_fail(self):"},{"line_number":118,"context_line":"        \"\"\"Create volume from snapshot request fails.\"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"fa69d971_40db071c","line":115,"updated":"2015-12-30 04:27:49.000000000","message":"You need to assert on expected return value","commit_id":"1b43624aef9b273834686dab61a229f21e8dd8b2"}],"cinder/volume/drivers/disco/disco.py":[{"author":{"_account_id":10439,"name":"Xi Yang","email":"yang.xi@99cloud.net","username":"phenom"},"change_message_id":"4ba081a02c977683cd1a0132483d1379bcc3e5cd","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    cfg.StrOpt(\u0027disco_config\u0027,"},{"line_number":39,"context_line":"               default\u003dNone,"},{"line_number":40,"context_line":"               help\u003d\u0027Path or URL to Disco configuration file\u0027),"},{"line_number":41,"context_line":"    cfg.StrOpt(\u0027disco_client\u0027,"},{"line_number":42,"context_line":"               default\u003d\u0027127.0.0.1\u0027,"},{"line_number":43,"context_line":"               help\u003d\u0027The IP of DMS client socket server\u0027),"},{"line_number":44,"context_line":"    cfg.StrOpt(\u0027disco_client_port\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a740942_29017aaf","line":41,"updated":"2015-12-08 01:41:58.000000000","message":"Use cfg.IPOpt","commit_id":"24a2d1d42d17dc797534bc10637a5366a2288e36"},{"author":{"_account_id":10439,"name":"Xi Yang","email":"yang.xi@99cloud.net","username":"phenom"},"change_message_id":"4ba081a02c977683cd1a0132483d1379bcc3e5cd","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    cfg.StrOpt(\u0027disco_client\u0027,"},{"line_number":42,"context_line":"               default\u003d\u0027127.0.0.1\u0027,"},{"line_number":43,"context_line":"               help\u003d\u0027The IP of DMS client socket server\u0027),"},{"line_number":44,"context_line":"    cfg.StrOpt(\u0027disco_client_port\u0027,"},{"line_number":45,"context_line":"               default\u003d\u00279898\u0027,"},{"line_number":46,"context_line":"               help\u003d\u0027The port to connect DMS client socket server\u0027),"},{"line_number":47,"context_line":"    cfg.StrOpt(\u0027disco_wsdl_path\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a740942_69c6a29b","line":44,"updated":"2015-12-08 01:41:58.000000000","message":"Please use cfg.PortOpt","commit_id":"24a2d1d42d17dc797534bc10637a5366a2288e36"},{"author":{"_account_id":10439,"name":"Xi Yang","email":"yang.xi@99cloud.net","username":"phenom"},"change_message_id":"4ba081a02c977683cd1a0132483d1379bcc3e5cd","unresolved":false,"context_lines":[{"line_number":54,"context_line":"               help\u003d\u0027Prefix before volume name to differenciate \u0027"},{"line_number":55,"context_line":"                    \u0027DISCO volume created through openstack \u0027"},{"line_number":56,"context_line":"                    \u0027and the other ones\u0027),"},{"line_number":57,"context_line":"    cfg.StrOpt(\u0027snapshot_reserve_days\u0027,"},{"line_number":58,"context_line":"               default\u003d1000,"},{"line_number":59,"context_line":"               help\u003d\u0027Number of day we want to keep a snapshot\u0027),"},{"line_number":60,"context_line":"    cfg.StrOpt(\u0027snapshot_check_timeout\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a740942_c95a36f2","line":57,"updated":"2015-12-08 01:41:58.000000000","message":"Use cfg.IntOpt here.","commit_id":"24a2d1d42d17dc797534bc10637a5366a2288e36"},{"author":{"_account_id":10439,"name":"Xi Yang","email":"yang.xi@99cloud.net","username":"phenom"},"change_message_id":"4ba081a02c977683cd1a0132483d1379bcc3e5cd","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    cfg.StrOpt(\u0027snapshot_reserve_days\u0027,"},{"line_number":58,"context_line":"               default\u003d1000,"},{"line_number":59,"context_line":"               help\u003d\u0027Number of day we want to keep a snapshot\u0027),"},{"line_number":60,"context_line":"    cfg.StrOpt(\u0027snapshot_check_timeout\u0027,"},{"line_number":61,"context_line":"               default\u003d3600,"},{"line_number":62,"context_line":"               help\u003d\u0027How long we check whether a snapshot \u0027"},{"line_number":63,"context_line":"                    \u0027is finished before we give up\u0027),"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a740942_e90612cd","line":60,"updated":"2015-12-08 01:41:58.000000000","message":"Ditto","commit_id":"24a2d1d42d17dc797534bc10637a5366a2288e36"},{"author":{"_account_id":10439,"name":"Xi Yang","email":"yang.xi@99cloud.net","username":"phenom"},"change_message_id":"4ba081a02c977683cd1a0132483d1379bcc3e5cd","unresolved":false,"context_lines":[{"line_number":61,"context_line":"               default\u003d3600,"},{"line_number":62,"context_line":"               help\u003d\u0027How long we check whether a snapshot \u0027"},{"line_number":63,"context_line":"                    \u0027is finished before we give up\u0027),"},{"line_number":64,"context_line":"    cfg.StrOpt(\u0027restore_check_timeout\u0027,"},{"line_number":65,"context_line":"               default\u003d3600,"},{"line_number":66,"context_line":"               help\u003d\u0027How long we check whether a restore \u0027"},{"line_number":67,"context_line":"                    \u0027is finished before we give up\u0027),"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a740942_69fb02c2","line":64,"updated":"2015-12-08 01:41:58.000000000","message":"Ditto","commit_id":"24a2d1d42d17dc797534bc10637a5366a2288e36"},{"author":{"_account_id":10439,"name":"Xi Yang","email":"yang.xi@99cloud.net","username":"phenom"},"change_message_id":"4ba081a02c977683cd1a0132483d1379bcc3e5cd","unresolved":false,"context_lines":[{"line_number":65,"context_line":"               default\u003d3600,"},{"line_number":66,"context_line":"               help\u003d\u0027How long we check whether a restore \u0027"},{"line_number":67,"context_line":"                    \u0027is finished before we give up\u0027),"},{"line_number":68,"context_line":"    cfg.StrOpt(\u0027clone_check_timeout\u0027,"},{"line_number":69,"context_line":"               default\u003d3600,"},{"line_number":70,"context_line":"               help\u003d\u0027How long we check whether a clone \u0027"},{"line_number":71,"context_line":"                    \u0027is finished before we give up\u0027),"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a740942_c911d605","line":68,"updated":"2015-12-08 01:41:58.000000000","message":"Ditto","commit_id":"24a2d1d42d17dc797534bc10637a5366a2288e36"},{"author":{"_account_id":10439,"name":"Xi Yang","email":"yang.xi@99cloud.net","username":"phenom"},"change_message_id":"4ba081a02c977683cd1a0132483d1379bcc3e5cd","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        self.client \u003d client.Client(path, cache\u003dNone)"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    def check_for_setup_error(self):"},{"line_number":103,"context_line":"        \"\"\"Return an error if prerequisites aren\u0027t met.\"\"\""},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def create_volume(self, volume):"},{"line_number":106,"context_line":"        \"\"\"Create a disco volume.\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"7a740942_09da7e4c","line":103,"updated":"2015-12-08 01:41:58.000000000","message":"If you really do nothing here, better to add \u0027pass\u0027 here","commit_id":"24a2d1d42d17dc797534bc10637a5366a2288e36"},{"author":{"_account_id":10439,"name":"Xi Yang","email":"yang.xi@99cloud.net","username":"phenom"},"change_message_id":"4ba081a02c977683cd1a0132483d1379bcc3e5cd","unresolved":false,"context_lines":[{"line_number":176,"context_line":"        start_time \u003d int(time.time())"},{"line_number":177,"context_line":"        snapshot_timeout \u003d int(self.configuration.snapshot_check_timeout)"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"        while True:"},{"line_number":180,"context_line":"            reply \u003d self.client.service.snapshotDetail(long(snapshot_id))"},{"line_number":181,"context_line":"            status \u003d reply[\u0027status\u0027]"},{"line_number":182,"context_line":"            snap_status \u003d reply.snapshotInfoResult[\u0027status\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a740942_49d646f2","line":179,"updated":"2015-12-08 01:41:58.000000000","message":"Please use oslo_service.loopingcall if possible","commit_id":"24a2d1d42d17dc797534bc10637a5366a2288e36"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"fd4491dc0f951641e3020c4eacb300afa4384b3a","unresolved":false,"context_lines":[{"line_number":210,"context_line":""},{"line_number":211,"context_line":"    def delete_snapshot(self, snapshot):"},{"line_number":212,"context_line":"        \"\"\"Delete a disco snapshot.\"\"\""},{"line_number":213,"context_line":"        LOG.debug(\"Enter in delete a disco snapshot\")"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"        try:"},{"line_number":216,"context_line":"            snap_id \u003d snapshot[\u0027provider_location\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a740942_f553ce6a","line":213,"updated":"2015-12-09 21:59:20.000000000","message":"\".\" at EOL","commit_id":"24a2d1d42d17dc797534bc10637a5366a2288e36"},{"author":{"_account_id":10439,"name":"Xi Yang","email":"yang.xi@99cloud.net","username":"phenom"},"change_message_id":"4ba081a02c977683cd1a0132483d1379bcc3e5cd","unresolved":false,"context_lines":[{"line_number":225,"context_line":"            if status !\u003d 0:"},{"line_number":226,"context_line":"                msg \u003d (_(\"Error while deleting snapshot \""},{"line_number":227,"context_line":"                         \"[status] %(stat)s - [result] %(res)s\") %"},{"line_number":228,"context_line":"                       {\u0027stat\u0027: format(status), \u0027res\u0027: result})"},{"line_number":229,"context_line":"                raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":230,"context_line":"        except Exception:"},{"line_number":231,"context_line":"            return {\u0027status\u0027: \u0027available\u0027}"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a740942_a9a80a8d","line":228,"updated":"2015-12-08 01:41:58.000000000","message":"Log an error msg here as you did in other apis","commit_id":"24a2d1d42d17dc797534bc10637a5366a2288e36"},{"author":{"_account_id":10439,"name":"Xi Yang","email":"yang.xi@99cloud.net","username":"phenom"},"change_message_id":"4ba081a02c977683cd1a0132483d1379bcc3e5cd","unresolved":false,"context_lines":[{"line_number":260,"context_line":"        restore_id \u003d result"},{"line_number":261,"context_line":"        restore_timeout \u003d int(self.configuration.restore_check_timeout)"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"        while True:"},{"line_number":264,"context_line":"            reply \u003d self.client.service.restoreDetail(long(restore_id))"},{"line_number":265,"context_line":"            status \u003d reply[\u0027status\u0027]"},{"line_number":266,"context_line":"            restore_status \u003d reply.restoreInfoResult[\u0027status\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a740942_a9fb2a7a","line":263,"updated":"2015-12-08 01:41:58.000000000","message":"Use oslo_service.loopingcall if possible","commit_id":"24a2d1d42d17dc797534bc10637a5366a2288e36"},{"author":{"_account_id":10439,"name":"Xi Yang","email":"yang.xi@99cloud.net","username":"phenom"},"change_message_id":"4ba081a02c977683cd1a0132483d1379bcc3e5cd","unresolved":false,"context_lines":[{"line_number":335,"context_line":"        start_time \u003d int(time.time())"},{"line_number":336,"context_line":"        clone_id \u003d result"},{"line_number":337,"context_line":""},{"line_number":338,"context_line":"        while True:"},{"line_number":339,"context_line":"            reply \u003d self.client.service.cloneDetail(long(clone_id), vol_name)"},{"line_number":340,"context_line":"            status \u003d reply[\u0027status\u0027]"},{"line_number":341,"context_line":"            if status !\u003d 0:"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a740942_89f74e8a","line":338,"updated":"2015-12-08 01:41:58.000000000","message":"oslo_service.loopingcall","commit_id":"24a2d1d42d17dc797534bc10637a5366a2288e36"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"fd4491dc0f951641e3020c4eacb300afa4384b3a","unresolved":false,"context_lines":[{"line_number":373,"context_line":"            return {\u0027provider_location\u0027: new_vol_id}"},{"line_number":374,"context_line":"        elif (status \u003d\u003d DISCO_CODE_MAPPING[\u0027clone.failure\u0027] or"},{"line_number":375,"context_line":"              status \u003d\u003d DISCO_CODE_MAPPING[\u0027clone.ongoing\u0027]):"},{"line_number":376,"context_line":"            LOG.error(_LE(\"Couldn\u0027t clone volume %s\"), status)"},{"line_number":377,"context_line":"            return {\u0027status\u0027: \u0027error\u0027}"},{"line_number":378,"context_line":""},{"line_number":379,"context_line":"        msg \u003d (_(\"Unknown clone status : %(clone_status)s\""}],"source_content_type":"text/x-python","patch_set":1,"id":"7a740942_98c081e2","line":376,"updated":"2015-12-09 21:59:20.000000000","message":"\".\" at EOL","commit_id":"24a2d1d42d17dc797534bc10637a5366a2288e36"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"fd4491dc0f951641e3020c4eacb300afa4384b3a","unresolved":false,"context_lines":[{"line_number":383,"context_line":""},{"line_number":384,"context_line":"    def copy_image_to_volume(self, context, volume, image_service, image_id):"},{"line_number":385,"context_line":"        \"\"\"Fetch the image from image_service and write it to the volume.\"\"\""},{"line_number":386,"context_line":"        LOG.debug(\"Enter in copy image to volume for disco\")"},{"line_number":387,"context_line":"        # [Step 1] : attach volume if needed"},{"line_number":388,"context_line":"        disco_uuid \u003d volume[\u0027provider_location\u0027]"},{"line_number":389,"context_line":"        name \u003d \u0027/dev/dms\u0027, format(disco_uuid)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a740942_f8af4529","line":386,"updated":"2015-12-09 21:59:20.000000000","message":"\".\" at EOL","commit_id":"24a2d1d42d17dc797534bc10637a5366a2288e36"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"fd4491dc0f951641e3020c4eacb300afa4384b3a","unresolved":false,"context_lines":[{"line_number":403,"context_line":""},{"line_number":404,"context_line":"    def copy_volume_to_image(self, context, volume, image_service, image_meta):"},{"line_number":405,"context_line":"        \"\"\"Copy a  volume to a new image.\"\"\""},{"line_number":406,"context_line":"        LOG.debug(\"Enter in copy image to volume for disco\")"},{"line_number":407,"context_line":"        # [Step 1] : attach volume if needed"},{"line_number":408,"context_line":"        disco_uuid \u003d volume[\u0027provider_location\u0027]"},{"line_number":409,"context_line":"        disco_device \u003d \u0027/dev/dms%s\u0027 % (disco_uuid)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a740942_78627518","line":406,"updated":"2015-12-09 21:59:20.000000000","message":"\".\" at EOL","commit_id":"24a2d1d42d17dc797534bc10637a5366a2288e36"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"fd4491dc0f951641e3020c4eacb300afa4384b3a","unresolved":false,"context_lines":[{"line_number":439,"context_line":""},{"line_number":440,"context_line":"    def initialize_connection(self, volume, connector):"},{"line_number":441,"context_line":"        \"\"\"Function called before attaching a volume.\"\"\""},{"line_number":442,"context_line":"        LOG.debug(\"Enter in initialize connection with disco\")"},{"line_number":443,"context_line":"        data \u003d {"},{"line_number":444,"context_line":"            \u0027driver_volume_type\u0027: \u0027disco\u0027,"},{"line_number":445,"context_line":"            \u0027data\u0027: {"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a740942_5871b9df","line":442,"updated":"2015-12-09 21:59:20.000000000","message":"\".\" at EOL","commit_id":"24a2d1d42d17dc797534bc10637a5366a2288e36"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"fd4491dc0f951641e3020c4eacb300afa4384b3a","unresolved":false,"context_lines":[{"line_number":454,"context_line":""},{"line_number":455,"context_line":"    def terminate_connection(self, volume, connector, **kwargs):"},{"line_number":456,"context_line":"        \"\"\"Function called after attaching a volume.\"\"\""},{"line_number":457,"context_line":"        LOG.debug(\"Enter in terminate connection with disco\")"},{"line_number":458,"context_line":""},{"line_number":459,"context_line":"    def _update_volume_stats(self):"},{"line_number":460,"context_line":"        LOG.debug(\"Enter in update volume stats\")"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a740942_b880dd8c","line":457,"updated":"2015-12-09 21:59:20.000000000","message":"\".\" at EOL","commit_id":"24a2d1d42d17dc797534bc10637a5366a2288e36"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"fd4491dc0f951641e3020c4eacb300afa4384b3a","unresolved":false,"context_lines":[{"line_number":457,"context_line":"        LOG.debug(\"Enter in terminate connection with disco\")"},{"line_number":458,"context_line":""},{"line_number":459,"context_line":"    def _update_volume_stats(self):"},{"line_number":460,"context_line":"        LOG.debug(\"Enter in update volume stats\")"},{"line_number":461,"context_line":"        stats \u003d {}"},{"line_number":462,"context_line":"        stats[\u0027volume_backend_name\u0027] \u003d \u0027disco\u0027"},{"line_number":463,"context_line":"        stats[\u0027storage_protocol\u0027] \u003d \u0027disco\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a740942_984e4195","line":460,"updated":"2015-12-09 21:59:20.000000000","message":"\".\" at EOL","commit_id":"24a2d1d42d17dc797534bc10637a5366a2288e36"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"fd4491dc0f951641e3020c4eacb300afa4384b3a","unresolved":false,"context_lines":[{"line_number":496,"context_line":"        return self._stats"},{"line_number":497,"context_line":""},{"line_number":498,"context_line":"    def _mount_disco_volume(self, path, id_volume):"},{"line_number":499,"context_line":"        LOG.debug(\"Enter in mount disco volume %s\", id_volume)"},{"line_number":500,"context_line":"        client_ip \u003d self.configuration.disco_client"},{"line_number":501,"context_line":"        client_port \u003d int(self.configuration.disco_client_port)"},{"line_number":502,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7a740942_f85d0549","line":499,"updated":"2015-12-09 21:59:20.000000000","message":"\".\" at EOL","commit_id":"24a2d1d42d17dc797534bc10637a5366a2288e36"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"fd4491dc0f951641e3020c4eacb300afa4384b3a","unresolved":false,"context_lines":[{"line_number":512,"context_line":""},{"line_number":513,"context_line":"        else:"},{"line_number":514,"context_line":"            LOG.info(_LI(\"Volume already attached to host : %s\"), id_volume)"},{"line_number":515,"context_line":"        LOG.debug(\"disco volume %s mounted\", id_volume)"},{"line_number":516,"context_line":""},{"line_number":517,"context_line":"    def _unmount_disco_volume(self, disco_device, disco_uuid):"},{"line_number":518,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7a740942_d854c922","line":515,"updated":"2015-12-09 21:59:20.000000000","message":"\".\" at EOL","commit_id":"24a2d1d42d17dc797534bc10637a5366a2288e36"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"fd4491dc0f951641e3020c4eacb300afa4384b3a","unresolved":false,"context_lines":[{"line_number":529,"context_line":"                msg \u003d _(\"Detach volume %d failed\") % disco_uuid"},{"line_number":530,"context_line":"                raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":531,"context_line":"        else:"},{"line_number":532,"context_line":"            LOG.debug(\"Volume already detached from host\")"},{"line_number":533,"context_line":""},{"line_number":534,"context_line":"        LOG.debug(\"volume detached %(device)s\","},{"line_number":535,"context_line":"                  {\u0027device\u0027: format(disco_device)})"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a740942_9835e1f8","line":532,"updated":"2015-12-09 21:59:20.000000000","message":"\".\" at EOL","commit_id":"24a2d1d42d17dc797534bc10637a5366a2288e36"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"fd4491dc0f951641e3020c4eacb300afa4384b3a","unresolved":false,"context_lines":[{"line_number":583,"context_line":"            break"},{"line_number":584,"context_line":""},{"line_number":585,"context_line":"        if sock is None:"},{"line_number":586,"context_line":"            LOG.error(_LE(\"Cannot connect to DISCO client\"))"},{"line_number":587,"context_line":""},{"line_number":588,"context_line":"        LOG.info(_LI(\"TCP socket connected %s\"), format(sock))"},{"line_number":589,"context_line":"        return sock"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a740942_b82e9da3","line":586,"updated":"2015-12-09 21:59:20.000000000","message":"\".\" at EOL","commit_id":"24a2d1d42d17dc797534bc10637a5366a2288e36"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"fd4491dc0f951641e3020c4eacb300afa4384b3a","unresolved":false,"context_lines":[{"line_number":585,"context_line":"        if sock is None:"},{"line_number":586,"context_line":"            LOG.error(_LE(\"Cannot connect to DISCO client\"))"},{"line_number":587,"context_line":""},{"line_number":588,"context_line":"        LOG.info(_LI(\"TCP socket connected %s\"), format(sock))"},{"line_number":589,"context_line":"        return sock"},{"line_number":590,"context_line":""},{"line_number":591,"context_line":"    def _send_dms_vol_cmd(self, ip, port, op, vol_uuid):"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a740942_58169956","line":588,"updated":"2015-12-09 21:59:20.000000000","message":"\".\" at EOL","commit_id":"24a2d1d42d17dc797534bc10637a5366a2288e36"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"993ef94c399b5a101536fc671bcf0ec7cede2920","unresolved":false,"context_lines":[{"line_number":606,"context_line":"            ret \u003d s.recv(4)"},{"line_number":607,"context_line":"            s.close()"},{"line_number":608,"context_line":"            LOG.debug(\"Received ret len\u003d%d, ret\u003d%s\","},{"line_number":609,"context_line":"                      (len(repr(ret)), (repr(ret))))"},{"line_number":610,"context_line":"            ret_val \u003d str(\"\".join(\"%02x\" % ord(c) for c in ret))"},{"line_number":611,"context_line":"            LOG.debug(\"ret_val\u003d%s\", (ret_val))"},{"line_number":612,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7a740942_65e025fb","line":609,"updated":"2015-12-07 14:16:02.000000000","message":"Remove outer parentheses from the logging args.","commit_id":"24a2d1d42d17dc797534bc10637a5366a2288e36"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"993ef94c399b5a101536fc671bcf0ec7cede2920","unresolved":false,"context_lines":[{"line_number":608,"context_line":"            LOG.debug(\"Received ret len\u003d%d, ret\u003d%s\","},{"line_number":609,"context_line":"                      (len(repr(ret)), (repr(ret))))"},{"line_number":610,"context_line":"            ret_val \u003d str(\"\".join(\"%02x\" % ord(c) for c in ret))"},{"line_number":611,"context_line":"            LOG.debug(\"ret_val\u003d%s\", (ret_val))"},{"line_number":612,"context_line":""},{"line_number":613,"context_line":"            if ret_val !\u003d \u002700000000\u0027:"},{"line_number":614,"context_line":"                return \u0027ERROR\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a740942_c5ef99e7","line":611,"updated":"2015-12-07 14:16:02.000000000","message":"Here too.","commit_id":"24a2d1d42d17dc797534bc10637a5366a2288e36"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"c6ac54d6e15f61bf2c829117c1297b1e3610e5d1","unresolved":false,"context_lines":[{"line_number":47,"context_line":"                default\u003d\u00279898\u0027,"},{"line_number":48,"context_line":"                help\u003d\u0027The port to connect DMS client socket server\u0027),"},{"line_number":49,"context_line":"    cfg.StrOpt(\u0027disco_wsdl_path\u0027,"},{"line_number":50,"context_line":"               default\u003d\u0027/opt/stack/cinder/cinder\u0027"},{"line_number":51,"context_line":"                       \u0027/volume/drivers/disco/DISCOService.wsdl\u0027,"},{"line_number":52,"context_line":"               help\u003d\u0027Path to the wsdl file \u0027"},{"line_number":53,"context_line":"                    \u0027to communicate with DISCO request manager\u0027),"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a7b0d38_9bb31ce9","line":50,"updated":"2015-12-28 17:08:48.000000000","message":"Could we use something like /etc/cinder instead of devstack path?","commit_id":"a10116f6303ebc19d14b6826b179efeee29b90a3"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"c6ac54d6e15f61bf2c829117c1297b1e3610e5d1","unresolved":false,"context_lines":[{"line_number":52,"context_line":"               help\u003d\u0027Path to the wsdl file \u0027"},{"line_number":53,"context_line":"                    \u0027to communicate with DISCO request manager\u0027),"},{"line_number":54,"context_line":"    cfg.StrOpt(\u0027volume_name_prefix\u0027,"},{"line_number":55,"context_line":"               default\u003d\u0027openstack-\u0027,"},{"line_number":56,"context_line":"               help\u003d\u0027Prefix before volume name to differenciate \u0027"},{"line_number":57,"context_line":"                    \u0027DISCO volume created through openstack \u0027"},{"line_number":58,"context_line":"                    \u0027and the other ones\u0027),"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a7b0d38_fb47c0b9","line":55,"updated":"2015-12-28 17:08:48.000000000","message":"It would be better to have something like\ncfg.StrOpt(\u0027volume_name_tamplete\u0027, default\u003d\u0027openstack-{0}\u0027, help\u003d..)","commit_id":"a10116f6303ebc19d14b6826b179efeee29b90a3"},{"author":{"_account_id":1207,"name":"Duncan Thomas","email":"duncan.thomas@gmail.com","username":"duncan-thomas"},"change_message_id":"d97ea3dfa8a1b572ba8fe6de90e234ebb4508638","unresolved":false,"context_lines":[{"line_number":52,"context_line":"               help\u003d\u0027Path to the wsdl file \u0027"},{"line_number":53,"context_line":"                    \u0027to communicate with DISCO request manager\u0027),"},{"line_number":54,"context_line":"    cfg.StrOpt(\u0027volume_name_prefix\u0027,"},{"line_number":55,"context_line":"               default\u003d\u0027openstack-\u0027,"},{"line_number":56,"context_line":"               help\u003d\u0027Prefix before volume name to differenciate \u0027"},{"line_number":57,"context_line":"                    \u0027DISCO volume created through openstack \u0027"},{"line_number":58,"context_line":"                    \u0027and the other ones\u0027),"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a7b0d38_72044549","line":55,"in_reply_to":"1a7b0d38_748bda68","updated":"2015-12-29 09:59:00.000000000","message":"Worth noting that solidfire uses a prefix, and I couldn\u0027t spot a template being used elsewhere (though it wasn\u0027t an exhaustive look)","commit_id":"a10116f6303ebc19d14b6826b179efeee29b90a3"},{"author":{"_account_id":19151,"name":"Thelo Gaultier","email":"thelo.gaultier@gmail.com","username":"Thelo"},"change_message_id":"61c94baf61b6b2b9f558444d8bde9039e4883d2d","unresolved":false,"context_lines":[{"line_number":52,"context_line":"               help\u003d\u0027Path to the wsdl file \u0027"},{"line_number":53,"context_line":"                    \u0027to communicate with DISCO request manager\u0027),"},{"line_number":54,"context_line":"    cfg.StrOpt(\u0027volume_name_prefix\u0027,"},{"line_number":55,"context_line":"               default\u003d\u0027openstack-\u0027,"},{"line_number":56,"context_line":"               help\u003d\u0027Prefix before volume name to differenciate \u0027"},{"line_number":57,"context_line":"                    \u0027DISCO volume created through openstack \u0027"},{"line_number":58,"context_line":"                    \u0027and the other ones\u0027),"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a7b0d38_748bda68","line":55,"in_reply_to":"1a7b0d38_fb47c0b9","updated":"2015-12-29 09:28:40.000000000","message":"You mean, the problem here for you is the naming? you would prefer template instead of prefix?","commit_id":"a10116f6303ebc19d14b6826b179efeee29b90a3"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"c6ac54d6e15f61bf2c829117c1297b1e3610e5d1","unresolved":false,"context_lines":[{"line_number":57,"context_line":"                    \u0027DISCO volume created through openstack \u0027"},{"line_number":58,"context_line":"                    \u0027and the other ones\u0027),"},{"line_number":59,"context_line":"    cfg.IntOpt(\u0027snapshot_reserve_days\u0027,"},{"line_number":60,"context_line":"               default\u003d1000,"},{"line_number":61,"context_line":"               help\u003d\u0027Number of day we want to keep a snapshot\u0027),"},{"line_number":62,"context_line":"    cfg.IntOpt(\u0027snapshot_check_timeout\u0027,"},{"line_number":63,"context_line":"               default\u003d3600,"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a7b0d38_9b86bcd9","line":60,"updated":"2015-12-28 17:08:48.000000000","message":"IMO, we should not have snapshot expiration date. Is it storage requirement?","commit_id":"a10116f6303ebc19d14b6826b179efeee29b90a3"},{"author":{"_account_id":1207,"name":"Duncan Thomas","email":"duncan.thomas@gmail.com","username":"duncan-thomas"},"change_message_id":"a4ab795e2a9dba2e99e258555cfcdf29afd9e1f4","unresolved":false,"context_lines":[{"line_number":57,"context_line":"                    \u0027DISCO volume created through openstack \u0027"},{"line_number":58,"context_line":"                    \u0027and the other ones\u0027),"},{"line_number":59,"context_line":"    cfg.IntOpt(\u0027snapshot_reserve_days\u0027,"},{"line_number":60,"context_line":"               default\u003d1000,"},{"line_number":61,"context_line":"               help\u003d\u0027Number of day we want to keep a snapshot\u0027),"},{"line_number":62,"context_line":"    cfg.IntOpt(\u0027snapshot_check_timeout\u0027,"},{"line_number":63,"context_line":"               default\u003d3600,"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a7b0d38_9f53076b","line":60,"in_reply_to":"1a7b0d38_9b86bcd9","updated":"2015-12-28 17:35:31.000000000","message":"Very much agreed. The cinder API is that snapshots hang around until the user deletes them. That\u0027s it.","commit_id":"a10116f6303ebc19d14b6826b179efeee29b90a3"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"c6ac54d6e15f61bf2c829117c1297b1e3610e5d1","unresolved":false,"context_lines":[{"line_number":376,"context_line":""},{"line_number":377,"context_line":"    def initialize_connection(self, volume, connector):"},{"line_number":378,"context_line":"        \"\"\"Function called before attaching a volume.\"\"\""},{"line_number":379,"context_line":"        LOG.debug(\"Enter in initialize connection with disco.\")"},{"line_number":380,"context_line":"        data \u003d {"},{"line_number":381,"context_line":"            \u0027driver_volume_type\u0027: \u0027disco\u0027,"},{"line_number":382,"context_line":"            \u0027data\u0027: {"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a7b0d38_7bb43081","line":379,"updated":"2015-12-28 17:08:48.000000000","message":"It will be helpful to get data logged too","commit_id":"a10116f6303ebc19d14b6826b179efeee29b90a3"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"c6ac54d6e15f61bf2c829117c1297b1e3610e5d1","unresolved":false,"context_lines":[{"line_number":432,"context_line":"            self._update_volume_stats()"},{"line_number":433,"context_line":"        return self._stats"},{"line_number":434,"context_line":""},{"line_number":435,"context_line":"    def _mount_disco_volume(self, path, id_volume):"},{"line_number":436,"context_line":"        LOG.debug(\"Enter in mount disco volume %s.\", id_volume)"},{"line_number":437,"context_line":"        client_ip \u003d self.configuration.disco_client"},{"line_number":438,"context_line":"        client_port \u003d self.configuration.disco_client_port"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a7b0d38_7b6bd0f1","line":435,"range":{"start_line":435,"start_character":15,"end_line":435,"end_character":16},"updated":"2015-12-28 17:08:48.000000000","message":"Should we add new connector to os-brick to mount/umount this type of volumes?","commit_id":"a10116f6303ebc19d14b6826b179efeee29b90a3"},{"author":{"_account_id":19151,"name":"Thelo Gaultier","email":"thelo.gaultier@gmail.com","username":"Thelo"},"change_message_id":"61c94baf61b6b2b9f558444d8bde9039e4883d2d","unresolved":false,"context_lines":[{"line_number":432,"context_line":"            self._update_volume_stats()"},{"line_number":433,"context_line":"        return self._stats"},{"line_number":434,"context_line":""},{"line_number":435,"context_line":"    def _mount_disco_volume(self, path, id_volume):"},{"line_number":436,"context_line":"        LOG.debug(\"Enter in mount disco volume %s.\", id_volume)"},{"line_number":437,"context_line":"        client_ip \u003d self.configuration.disco_client"},{"line_number":438,"context_line":"        client_port \u003d self.configuration.disco_client_port"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a7b0d38_d9e527a4","line":435,"range":{"start_line":435,"start_character":15,"end_line":435,"end_character":16},"in_reply_to":"1a7b0d38_7b6bd0f1","updated":"2015-12-29 09:28:40.000000000","message":"There is already a commit for that. ( waiting for review)","commit_id":"a10116f6303ebc19d14b6826b179efeee29b90a3"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"c6ac54d6e15f61bf2c829117c1297b1e3610e5d1","unresolved":false,"context_lines":[{"line_number":488,"context_line":"        pass"},{"line_number":489,"context_line":""},{"line_number":490,"context_line":"    @staticmethod"},{"line_number":491,"context_line":"    def _path_exists(path):"},{"line_number":492,"context_line":"        \"\"\"Check path.\"\"\""},{"line_number":493,"context_line":"        exist \u003d False"},{"line_number":494,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a7b0d38_5b25b4be","line":491,"updated":"2015-12-28 17:08:48.000000000","message":"Why do we need this method? os.path.exists should be enough.","commit_id":"a10116f6303ebc19d14b6826b179efeee29b90a3"},{"author":{"_account_id":14377,"name":"Apoorva","email":"apps.desh@gmail.com","username":"apoorvad"},"change_message_id":"0a61bf48a9a4a2acaf232685bc8a4c8383500d47","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":"disco_opts \u003d ["},{"line_number":39,"context_line":"    cfg.StrOpt(\u0027disco_config\u0027,"},{"line_number":40,"context_line":"               default\u003dNone,"},{"line_number":41,"context_line":"               help\u003d\u0027Path or URL to Disco configuration file\u0027),"},{"line_number":42,"context_line":"    cfg.IPOpt(\u0027disco_client\u0027,"},{"line_number":43,"context_line":"              default\u003d\u0027127.0.0.1\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa69d971_e02a3b2c","line":40,"updated":"2015-12-30 04:27:49.000000000","message":"No need of mentioning default\u003dNone","commit_id":"1b43624aef9b273834686dab61a229f21e8dd8b2"},{"author":{"_account_id":14377,"name":"Apoorva","email":"apps.desh@gmail.com","username":"apoorvad"},"change_message_id":"0a61bf48a9a4a2acaf232685bc8a4c8383500d47","unresolved":false,"context_lines":[{"line_number":73,"context_line":"                    \u0027is finished before we give up\u0027),"},{"line_number":74,"context_line":"    cfg.IntOpt(\u0027retry_interval\u0027,"},{"line_number":75,"context_line":"               default\u003d1,"},{"line_number":76,"context_line":"               help\u003d\u0027How long we wait before retrying to\u0027"},{"line_number":77,"context_line":"                    \u0027get an item detail\u0027)"},{"line_number":78,"context_line":"]"},{"line_number":79,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"fa69d971_002c2f49","line":76,"updated":"2015-12-30 04:27:49.000000000","message":"Space at the end of line","commit_id":"1b43624aef9b273834686dab61a229f21e8dd8b2"},{"author":{"_account_id":14377,"name":"Apoorva","email":"apps.desh@gmail.com","username":"apoorvad"},"change_message_id":"0a61bf48a9a4a2acaf232685bc8a4c8383500d47","unresolved":false,"context_lines":[{"line_number":198,"context_line":"            self.configuration.snapshot_check_timeout,"},{"line_number":199,"context_line":"            \u0027snapshot_detail\u0027,"},{"line_number":200,"context_line":"            params)"},{"line_number":201,"context_line":"        reply \u003d timer.start(interval\u003dself.configuration.retry_interval).wait()"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"        snapshot[\u0027provider_location\u0027] \u003d result"},{"line_number":204,"context_line":"        LOG.debug(\"snapshot taken successfully on volume : %(volume)s.\","}],"source_content_type":"text/x-python","patch_set":5,"id":"fa69d971_80957f41","line":201,"updated":"2015-12-30 04:27:49.000000000","message":"Do you want to check here if snapshot failed as per comment on line #191\n\nresult \u003d reply[\u0027result\u0027]","commit_id":"1b43624aef9b273834686dab61a229f21e8dd8b2"},{"author":{"_account_id":19151,"name":"Thelo Gaultier","email":"thelo.gaultier@gmail.com","username":"Thelo"},"change_message_id":"ca28298e3e868142c3f731a654a09e170477827f","unresolved":false,"context_lines":[{"line_number":198,"context_line":"            self.configuration.snapshot_check_timeout,"},{"line_number":199,"context_line":"            \u0027snapshot_detail\u0027,"},{"line_number":200,"context_line":"            params)"},{"line_number":201,"context_line":"        reply \u003d timer.start(interval\u003dself.configuration.retry_interval).wait()"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"        snapshot[\u0027provider_location\u0027] \u003d result"},{"line_number":204,"context_line":"        LOG.debug(\"snapshot taken successfully on volume : %(volume)s.\","}],"source_content_type":"text/x-python","patch_set":5,"id":"fa69d971_bbc9d8ae","line":201,"in_reply_to":"fa69d971_80957f41","updated":"2015-12-30 05:27:06.000000000","message":"the loopingcall will raise an exception if the snapshot has failed. Hence there is no need to check again","commit_id":"1b43624aef9b273834686dab61a229f21e8dd8b2"},{"author":{"_account_id":14377,"name":"Apoorva","email":"apps.desh@gmail.com","username":"apoorvad"},"change_message_id":"0a61bf48a9a4a2acaf232685bc8a4c8383500d47","unresolved":false,"context_lines":[{"line_number":262,"context_line":"            params)"},{"line_number":263,"context_line":"        reply \u003d timer.start(interval\u003dself.configuration.retry_interval).wait()"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"        reply \u003d self.client.service.volumeDetailByName(vol_name)"},{"line_number":266,"context_line":"        status \u003d reply[\u0027status\u0027]"},{"line_number":267,"context_line":"        new_vol_id \u003d reply[\u0027volumeInfoResult\u0027][\u0027volumeId\u0027]"},{"line_number":268,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"fa69d971_6073ab4e","line":265,"updated":"2015-12-30 04:27:49.000000000","message":"Cinder does not uniquely identify volumes by names. There could be volumes with same name","commit_id":"1b43624aef9b273834686dab61a229f21e8dd8b2"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"f903d71af01cac630fa9709bfdbc87a94e3452dc","unresolved":false,"context_lines":[{"line_number":52,"context_line":"                    \u0027DISCO volume created through openstack \u0027"},{"line_number":53,"context_line":"                    \u0027and the other ones\u0027),"},{"line_number":54,"context_line":"    cfg.IntOpt(\u0027snapshot_reserve_days\u0027,"},{"line_number":55,"context_line":"               default\u003d-1,"},{"line_number":56,"context_line":"               help\u003d\u0027Number of day we want to keep a snapshot, \u0027"},{"line_number":57,"context_line":"                    \u0027-1 means that we keep the snapshot until \u0027"},{"line_number":58,"context_line":"                    \u0027the user delete it.\u0027),"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa69d971_17588931","line":55,"range":{"start_line":55,"start_character":25,"end_line":55,"end_character":26},"updated":"2016-01-04 20:10:42.000000000","message":"Snapshots should always be kept on the array until they are deleted from Cinder.  I suspect this should not be configurable and should always be -1.","commit_id":"77cfdd42d497c193f31ccc725c853c269212d46a"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"f903d71af01cac630fa9709bfdbc87a94e3452dc","unresolved":false,"context_lines":[{"line_number":71,"context_line":"    cfg.IntOpt(\u0027retry_interval\u0027,"},{"line_number":72,"context_line":"               default\u003d1,"},{"line_number":73,"context_line":"               help\u003d\u0027How long we wait before retrying to \u0027"},{"line_number":74,"context_line":"                    \u0027get an item detail\u0027)"},{"line_number":75,"context_line":"]"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"DISCO_CODE_MAPPING \u003d {"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa69d971_7778e58f","line":74,"range":{"start_line":74,"start_character":39,"end_line":74,"end_character":41},"updated":"2016-01-04 20:10:42.000000000","message":"Please note that this is in seconds.","commit_id":"77cfdd42d497c193f31ccc725c853c269212d46a"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"f903d71af01cac630fa9709bfdbc87a94e3452dc","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        self.configuration.append_config_values(disco_opts)"},{"line_number":95,"context_line":"        self.ctxt \u003d context.get_admin_context()"},{"line_number":96,"context_line":"        path \u003d \u0027\u0027.join([\u0027file:\u0027, self.configuration.disco_wsdl_path])"},{"line_number":97,"context_line":"        self.client \u003d client.Client(path, cache\u003dNone)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"        self.connector \u003d connector.InitiatorConnector.factory("},{"line_number":100,"context_line":"            self._get_connector_identifier(), utils.get_root_helper(),"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa69d971_77ba25c2","line":97,"range":{"start_line":97,"start_character":52,"end_line":97,"end_character":53},"updated":"2016-01-04 20:10:42.000000000","message":"Please do self.client \u003d None here, and instantiate the client in a do_setup() method rather than __init__.","commit_id":"77cfdd42d497c193f31ccc725c853c269212d46a"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"f903d71af01cac630fa9709bfdbc87a94e3452dc","unresolved":false,"context_lines":[{"line_number":420,"context_line":"        stats \u003d {}"},{"line_number":421,"context_line":"        stats[\u0027volume_backend_name\u0027] \u003d \u0027disco\u0027"},{"line_number":422,"context_line":"        stats[\u0027storage_protocol\u0027] \u003d \u0027disco\u0027"},{"line_number":423,"context_line":"        stats[\u0027driver_version\u0027] \u003d \u00271.0.0\u0027"},{"line_number":424,"context_line":"        stats[\u0027reserved_percentage\u0027] \u003d 0"},{"line_number":425,"context_line":"        stats[\u0027vendor_name\u0027] \u003d \u0027ITRI\u0027"},{"line_number":426,"context_line":"        stats[\u0027QoS_support\u0027] \u003d False"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa69d971_b7ff3da9","line":423,"range":{"start_line":423,"start_character":40,"end_line":423,"end_character":41},"updated":"2016-01-04 20:10:42.000000000","message":"This should be a static variable defined as VERSION in the top of the driver class.","commit_id":"77cfdd42d497c193f31ccc725c853c269212d46a"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e264bcff1a3069afa28d3cd93fbcd0e493747569","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        \"\"\"Create a disco volume.\"\"\""},{"line_number":131,"context_line":"        name \u003d self.configuration.volume_name_prefix, volume[\"id\"]"},{"line_number":132,"context_line":"        vol_name \u003d \u0027\u0027.join(name)"},{"line_number":133,"context_line":"        vol_size \u003d volume[\u0027size\u0027] * 1024"},{"line_number":134,"context_line":"        LOG.debug(\"Create volume : [name] %(vname)s - [size] %(vsize)s.\","},{"line_number":135,"context_line":"                  {\u0027vname\u0027: vol_name, \u0027vsize\u0027: six.text_type(vol_size)})"},{"line_number":136,"context_line":"        reply \u003d self.client.service.volumeCreate(vol_name, vol_size)"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa69d971_38b5e0cf","line":133,"updated":"2016-01-07 20:18:31.000000000","message":"from oslo_utils import units\n\nThen you can use units.Ki for 1024.\n\nhttps://github.com/openstack/oslo.utils/blob/master/oslo_utils/units.py#L21","commit_id":"4af468d30c2c19de025d420c1d0aac81fd4d34bc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e264bcff1a3069afa28d3cd93fbcd0e493747569","unresolved":false,"context_lines":[{"line_number":238,"context_line":"        # Trigger an asynchronous restore operation"},{"line_number":239,"context_line":"        LOG.debug(\"[start] Create volume from snapshot : \""},{"line_number":240,"context_line":"                  \"%(snap_id)s - name : %(vol_name)s.\","},{"line_number":241,"context_line":"                  {\u0027snap_id\u0027: six.text_type(snap_id), \u0027vol_name\u0027: vol_name})"},{"line_number":242,"context_line":"        reply \u003d self.client.service.restoreFromSnapshot(snap_id, vol_name)"},{"line_number":243,"context_line":"        status \u003d reply[\u0027status\u0027]"},{"line_number":244,"context_line":"        result \u003d reply[\u0027result\u0027]"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa69d971_33e8a116","line":241,"updated":"2016-01-07 20:18:31.000000000","message":"snapshot[\u0027provider_location\u0027] should be a string already.  No need to use six.text_type to convert it.  Same comments in a few other places.","commit_id":"4af468d30c2c19de025d420c1d0aac81fd4d34bc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e264bcff1a3069afa28d3cd93fbcd0e493747569","unresolved":false,"context_lines":[{"line_number":287,"context_line":"        LOG.debug(\"Creating clone of volume: %s.\", src_vref[\u0027id\u0027])"},{"line_number":288,"context_line":"        name \u003d self.configuration.volume_name_prefix, volume[\u0027id\u0027]"},{"line_number":289,"context_line":"        vol_name \u003d \u0027\u0027.join(name)"},{"line_number":290,"context_line":"        vol_size \u003d volume[\u0027size\u0027] * 1024"},{"line_number":291,"context_line":"        src_vol_id \u003d src_vref[\u0027provider_location\u0027]"},{"line_number":292,"context_line":"        LOG.debug(\"Clone volume : \""},{"line_number":293,"context_line":"                  \"[name] %(name)s - [source] %(source)s - [size] %(size)s.\","}],"source_content_type":"text/x-python","patch_set":7,"id":"fa69d971_58677425","line":290,"updated":"2016-01-07 20:18:31.000000000","message":"Same as earlier comment.","commit_id":"4af468d30c2c19de025d420c1d0aac81fd4d34bc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e264bcff1a3069afa28d3cd93fbcd0e493747569","unresolved":false,"context_lines":[{"line_number":305,"context_line":"                     \"[status] %(stat)s - [result] %(res)s.\") %"},{"line_number":306,"context_line":"                   {\u0027stat\u0027: six.text_type(status), \u0027res\u0027: result})"},{"line_number":307,"context_line":"            LOG.error(msg)"},{"line_number":308,"context_line":"            raise exception.VolumeBackendAPIException(msg)"},{"line_number":309,"context_line":""},{"line_number":310,"context_line":"        # Monitor the status until it becomes"},{"line_number":311,"context_line":"        # either success, fail or timeout"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa69d971_98540c22","line":308,"updated":"2016-01-07 20:18:31.000000000","message":"Should be the same as line 279: data\u003dmsg","commit_id":"4af468d30c2c19de025d420c1d0aac81fd4d34bc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e264bcff1a3069afa28d3cd93fbcd0e493747569","unresolved":false,"context_lines":[{"line_number":380,"context_line":"        vol_id \u003d volume[\u0027provider_location\u0027]"},{"line_number":381,"context_line":"        LOG.debug(\"Extends volume : %(id)s, new size : %(size)s.\","},{"line_number":382,"context_line":"                  {\u0027id\u0027: vol_id, \u0027size\u0027: new_size})"},{"line_number":383,"context_line":"        new_size_mb \u003d new_size * 1024"},{"line_number":384,"context_line":"        reply \u003d self.client.service.volumeExtend(vol_id, new_size_mb)"},{"line_number":385,"context_line":"        status \u003d reply[\u0027status\u0027]"},{"line_number":386,"context_line":"        result \u003d reply[\u0027result\u0027]"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa69d971_782ef8a6","line":383,"updated":"2016-01-07 20:18:31.000000000","message":"same","commit_id":"4af468d30c2c19de025d420c1d0aac81fd4d34bc"}]}
