)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"44ff1acc8395ce4951db04d90273b0aa948c1dc4","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Zohar Mamedov \u003czohar.mamedov@nexenta.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-10-16 23:42:41 -0700"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Nexenta Edge iSCSI backend driver."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Nexenta Edge project supports iSCSI block level storage."},{"line_number":10,"context_line":"This patch implements a driver for Nexenta Edge iSCSI backend."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"5a2ca52d_dba73ebb","line":7,"updated":"2015-10-17 09:04:54.000000000","message":"The first line should not end with a period.","commit_id":"7dd58e123543ae8cfd5c894709be167d39761dc7"},{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"c9bb41be51db306df3a9f77bb23f33c1bb106c36","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Zohar Mamedov \u003czohar.mamedov@nexenta.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-10-17 23:12:51 -0700"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Nexenta Edge iSCSI backend driver."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Nexenta Edge project supports iSCSI block level storage."},{"line_number":10,"context_line":"This patch implements a driver for Nexenta Edge iSCSI backend."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"3a29b11f_d47111e2","line":7,"updated":"2015-10-18 09:20:12.000000000","message":"The first line should not end with a period.\nPlease remove dot.","commit_id":"94f15b56897fe2c360d6b8dc805eb7b03c116723"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"34da708d2441dcbb21bd91b787a6ca17c61e4c67","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Nexenta Edge project supports iSCSI block level storage."},{"line_number":10,"context_line":"This patch implements a driver for Nexenta Edge iSCSI backend."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Implements: blueprint nexentaedge-iscsi-volume-driver"},{"line_number":13,"context_line":"Change-Id: I82c215ba85e9d49723e792d88d86553b3a75d3ac"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":29,"id":"fa80f949_c3d7a2eb","line":11,"updated":"2015-11-05 17:32:55.000000000","message":"This could use a DocImpact since you are adding a new driver.","commit_id":"7fe8620f73e654c0eb8596d04c6bf3ec19f26a36"},{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"20e5cbb11417402aba606623bd78a2be74bf8965","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Nexenta Edge project supports iSCSI block level storage."},{"line_number":10,"context_line":"This patch implements a driver for Nexenta Edge iSCSI backend."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Implements: blueprint nexentaedge-iscsi-volume-driver"},{"line_number":13,"context_line":"Change-Id: I82c215ba85e9d49723e792d88d86553b3a75d3ac"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":29,"id":"fa80f949_a28fe328","line":11,"in_reply_to":"fa80f949_a0a9297d","updated":"2015-11-06 07:04:31.000000000","message":"You can use this link for adding that flag\nhttps://wiki.openstack.org/wiki/GitCommitMessages\n\nHere, they have a sample commit message, where they are adding this flag.","commit_id":"7fe8620f73e654c0eb8596d04c6bf3ec19f26a36"},{"author":{"_account_id":16721,"name":"Zohar Mamedov","email":"zohar.cloud@gmail.com","username":"zohar"},"change_message_id":"fd404186981f155cc6d2b0940254104d147a4bd5","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Nexenta Edge project supports iSCSI block level storage."},{"line_number":10,"context_line":"This patch implements a driver for Nexenta Edge iSCSI backend."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Implements: blueprint nexentaedge-iscsi-volume-driver"},{"line_number":13,"context_line":"Change-Id: I82c215ba85e9d49723e792d88d86553b3a75d3ac"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":29,"id":"fa80f949_a0a9297d","line":11,"in_reply_to":"fa80f949_c3d7a2eb","updated":"2015-11-05 22:03:47.000000000","message":"What is the right form to add DocImpact in?\n\nI looked at https://wiki.openstack.org/wiki/Documentation/DocImpact\n\nWhere I found in the example:\n\ndocimpact-group: Project\n\nBut I\u0027m not sure if it is the right form to put in here.","commit_id":"7fe8620f73e654c0eb8596d04c6bf3ec19f26a36"}],"cinder/tests/unit/test_nexenta_edge.py":[{"author":{"_account_id":13203,"name":"Wilson Liu","email":"295988511@qq.com","username":"Bob-OpenStack"},"change_message_id":"29d6b2db4b55901be205b5a5969d12b00f462706","unresolved":false,"context_lines":[{"line_number":72,"context_line":"        self.addCleanup(self.api_patcher.stop)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def test_check_do_setup(self):"},{"line_number":75,"context_line":"        self.assertEqual(self.driver.target_name, ISCSI_TARGET_NAME)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    def test_create_volume(self):"},{"line_number":78,"context_line":"        self.assertIsNone(self.driver.create_volume(MOCK_VOL))"}],"source_content_type":"text/x-python","patch_set":22,"id":"1a26ad4f_903ac5cc","line":75,"updated":"2015-10-27 14:14:24.000000000","message":"Change the arg \"ISCSI_TARGET_NAME\" as the first arg if it\u0027s the expected value.","commit_id":"cf546e093859d93cf87561e412d2d64ce59a0fe0"},{"author":{"_account_id":14305,"name":"Yuriy Nesenenko","email":"ynesenenko@mirantis.com","username":"yuriy_n"},"change_message_id":"b1d8f535dab969a66cf23f02916b7608a85c27f6","unresolved":false,"context_lines":[{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    def test_extend_volume(self):"},{"line_number":92,"context_line":"        self.assertIsNone(self.driver.extend_volume(MOCK_VOL, NEW_VOL_SIZE))"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    def test_create_snapshot(self):"},{"line_number":95,"context_line":"        self.assertIsNone(self.driver.create_snapshot(MOCK_SNAP))"},{"line_number":96,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"1a26ad4f_fa428a3d","line":93,"updated":"2015-10-30 14:28:55.000000000","message":"Please add the other tests with failed status not only test_create_volume_fail and def test_delete_volume_fail\n\ndef test_extend_volume_fail(self):\n      self.mock_api.side_effect \u003d RuntimeError\n      self.assertRaises(RuntimeError, self.driver.extend_volume,\n                                   MOCK_VOL, NEW_VOL_SIZE)\n\nand test_create_snapshot_fail and so on...","commit_id":"cb251f0b4f68d570622b69c839704261c2e9cf8b"}],"cinder/volume/drivers/nexenta/nexentaedge/__init__.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"65ad1ab04a111341aa95fe40ad092957047682d7","unresolved":false,"context_lines":[{"line_number":1,"context_line":""},{"line_number":2,"context_line":"class NexentaException(Exception):"},{"line_number":3,"context_line":"    pass"}],"source_content_type":"text/x-python","patch_set":10,"id":"1af86dd1_7773814e","line":2,"updated":"2015-06-12 13:47:03.000000000","message":"Move to exceptions.py and inherit from CinderException. This doesn\u0027t really add anything either, so I would suggest going with existing exceptions.","commit_id":"dcea81ba800b993222d05922d0263932c24cecae"}],"cinder/volume/drivers/nexenta/nexentaedge/iscsi.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"65ad1ab04a111341aa95fe40ad092957047682d7","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2014 Nexenta Systems, Inc."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":10,"id":"1af86dd1_f7489189","line":1,"updated":"2015-06-12 13:47:03.000000000","message":"Update to 2015?","commit_id":"dcea81ba800b993222d05922d0263932c24cecae"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"65ad1ab04a111341aa95fe40ad092957047682d7","unresolved":false,"context_lines":[{"line_number":58,"context_line":"               help\u003d\u0027NexentaEdge iSCSI service name\u0027),"},{"line_number":59,"context_line":"    cfg.StrOpt(\u0027nexenta_client_address\u0027,"},{"line_number":60,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":61,"context_line":"               help\u003d\u0027NexentaEdge iSCSI Gateway client \u0027 +"},{"line_number":62,"context_line":"               \u0027address for non-VIP service\u0027)"},{"line_number":63,"context_line":"]"},{"line_number":64,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"1af86dd1_d7f8f57e","line":61,"updated":"2015-06-12 13:47:03.000000000","message":"\" +\" not needed. This is in () so you can just continue the string on the next line and the string will be automatically concatenated.","commit_id":"dcea81ba800b993222d05922d0263932c24cecae"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"65ad1ab04a111341aa95fe40ad092957047682d7","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"class NexentaEdgeISCSIDriver(driver.ISCSIDriver):  # pylint: disable\u003dR0921"},{"line_number":72,"context_line":"    \"\"\"Executes volume driver commands on NexentaEdge cluster."},{"line_number":73,"context_line":"    Version history:"},{"line_number":74,"context_line":"        1.0.0 - Initial driver version."},{"line_number":75,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":10,"id":"1af86dd1_d726b515","line":72,"updated":"2015-06-12 13:47:03.000000000","message":"Please add a blank line after the first comment to follow docstring guidelines.","commit_id":"dcea81ba800b993222d05922d0263932c24cecae"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"65ad1ab04a111341aa95fe40ad092957047682d7","unresolved":false,"context_lines":[{"line_number":91,"context_line":"        self.iscsi_service \u003d self.configuration.nexenta_iscsi_service"},{"line_number":92,"context_line":"        self.bucket_path \u003d self.configuration.nexenta_lun_container"},{"line_number":93,"context_line":"        self.cluster, self.tenant, self.bucket \u003d self.bucket_path.split(\u0027/\u0027)"},{"line_number":94,"context_line":"        self.bucket_url \u003d \u0027clusters/\u0027 + self.cluster + \u0027/tenants/\u0027 + \\"},{"line_number":95,"context_line":"            self.tenant + \u0027/buckets/\u0027 + self.bucket"},{"line_number":96,"context_line":"        self.iscsi_target_portal_port \u003d \\"},{"line_number":97,"context_line":"            self.configuration.nexenta_iscsi_target_portal_port"}],"source_content_type":"text/x-python","patch_set":10,"id":"1af86dd1_17832dce","line":94,"updated":"2015-06-12 13:47:03.000000000","message":"Using \\ for line continuation is discouraged. Please wrap assignment in () so it can span multiple lines without needing it.","commit_id":"dcea81ba800b993222d05922d0263932c24cecae"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"65ad1ab04a111341aa95fe40ad092957047682d7","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        self.cluster, self.tenant, self.bucket \u003d self.bucket_path.split(\u0027/\u0027)"},{"line_number":94,"context_line":"        self.bucket_url \u003d \u0027clusters/\u0027 + self.cluster + \u0027/tenants/\u0027 + \\"},{"line_number":95,"context_line":"            self.tenant + \u0027/buckets/\u0027 + self.bucket"},{"line_number":96,"context_line":"        self.iscsi_target_portal_port \u003d \\"},{"line_number":97,"context_line":"            self.configuration.nexenta_iscsi_target_portal_port"},{"line_number":98,"context_line":"        self.target_vip \u003d None"},{"line_number":99,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"1af86dd1_f78771d5","line":96,"updated":"2015-06-12 13:47:03.000000000","message":"Same.","commit_id":"dcea81ba800b993222d05922d0263932c24cecae"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"65ad1ab04a111341aa95fe40ad092957047682d7","unresolved":false,"context_lines":[{"line_number":134,"context_line":"                    \u0027nexenta_client_address\u0027)"},{"line_number":135,"context_line":"                if not self.target_vip:"},{"line_number":136,"context_line":"                    LOG.error(_LE(\u0027No VIP configured for service %s\u0027)"},{"line_number":137,"context_line":"                              % self.iscsi_service)"},{"line_number":138,"context_line":"                    raise Exception(\u0027No service VIP configured and \u0027 +"},{"line_number":139,"context_line":"                                    \u0027no nexenta_client_address\u0027)"},{"line_number":140,"context_line":"        except Exception as exc:"}],"source_content_type":"text/x-python","patch_set":10,"id":"1af86dd1_d7db55ec","line":137,"updated":"2015-06-12 13:47:03.000000000","message":"Replace % with , so self.iscsi_service is passed in as an argument to the logger. The logger will take care of formatting the string if/when needed and handling and unicode translation if necessary.","commit_id":"dcea81ba800b993222d05922d0263932c24cecae"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"65ad1ab04a111341aa95fe40ad092957047682d7","unresolved":false,"context_lines":[{"line_number":135,"context_line":"                if not self.target_vip:"},{"line_number":136,"context_line":"                    LOG.error(_LE(\u0027No VIP configured for service %s\u0027)"},{"line_number":137,"context_line":"                              % self.iscsi_service)"},{"line_number":138,"context_line":"                    raise Exception(\u0027No service VIP configured and \u0027 +"},{"line_number":139,"context_line":"                                    \u0027no nexenta_client_address\u0027)"},{"line_number":140,"context_line":"        except Exception as exc:"},{"line_number":141,"context_line":"            LOG.error(_LE(\u0027Error verifying iSCSI service %(serv)s on \u0027"}],"source_content_type":"text/x-python","patch_set":10,"id":"1af86dd1_77e261a1","line":138,"updated":"2015-06-12 13:47:03.000000000","message":"Exception string _() translation marker.","commit_id":"dcea81ba800b993222d05922d0263932c24cecae"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"65ad1ab04a111341aa95fe40ad092957047682d7","unresolved":false,"context_lines":[{"line_number":186,"context_line":"                \u0027chunkSize\u0027: self.LUN_CHUNKSIZE"},{"line_number":187,"context_line":"            })"},{"line_number":188,"context_line":"        except nexenta.NexentaException as e:"},{"line_number":189,"context_line":"            LOG.error(_LE(\u0027Error creating volume: %s\u0027) % e)"},{"line_number":190,"context_line":"            raise"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"    def delete_volume(self, volume):"}],"source_content_type":"text/x-python","patch_set":10,"id":"1af86dd1_97fcbd3f","line":189,"updated":"2015-06-12 13:47:03.000000000","message":"% \u003d\u003e ,","commit_id":"dcea81ba800b993222d05922d0263932c24cecae"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"65ad1ab04a111341aa95fe40ad092957047682d7","unresolved":false,"context_lines":[{"line_number":195,"context_line":"                                \u0027/iscsi\u0027, {\u0027objectPath\u0027: self.bucket_path +"},{"line_number":196,"context_line":"                                           \u0027/\u0027 + volume[\u0027name\u0027]})"},{"line_number":197,"context_line":"        except nexenta.NexentaException as e:"},{"line_number":198,"context_line":"            LOG.error(_LE(\u0027Error deleting volume: %s\u0027) % e)"},{"line_number":199,"context_line":"            raise"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"    def extend_volume(self, volume, new_size):"}],"source_content_type":"text/x-python","patch_set":10,"id":"1af86dd1_77f9414d","line":198,"updated":"2015-06-12 13:47:03.000000000","message":"% \u003d\u003e ,","commit_id":"dcea81ba800b993222d05922d0263932c24cecae"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"65ad1ab04a111341aa95fe40ad092957047682d7","unresolved":false,"context_lines":[{"line_number":204,"context_line":"                             {\u0027objectPath\u0027: self.bucket_path + \u0027/\u0027 +"},{"line_number":205,"context_line":"                              volume[\u0027name\u0027], \u0027newSizeMB\u0027: new_size * 1024})"},{"line_number":206,"context_line":"        except nexenta.NexentaException as e:"},{"line_number":207,"context_line":"            LOG.error(_LE(\u0027Error extending volume: %s\u0027) % e)"},{"line_number":208,"context_line":"            raise"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"    def create_volume_from_snapshot(self, volume, snapshot):"}],"source_content_type":"text/x-python","patch_set":10,"id":"1af86dd1_179fad04","line":207,"updated":"2015-06-12 13:47:03.000000000","message":"% \u003d\u003e ,","commit_id":"dcea81ba800b993222d05922d0263932c24cecae"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"65ad1ab04a111341aa95fe40ad092957047682d7","unresolved":false,"context_lines":[{"line_number":218,"context_line":"                    \u0027snapName\u0027: snapshot[\u0027name\u0027]"},{"line_number":219,"context_line":"                })"},{"line_number":220,"context_line":"        except nexenta.NexentaException as e:"},{"line_number":221,"context_line":"            LOG.error(_LE(\u0027Error cloning volume: %s\u0027) % e)"},{"line_number":222,"context_line":"            raise"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"    def create_snapshot(self, snapshot):"}],"source_content_type":"text/x-python","patch_set":10,"id":"1af86dd1_f7a3f14d","line":221,"updated":"2015-06-12 13:47:03.000000000","message":"% \u003d\u003e ,","commit_id":"dcea81ba800b993222d05922d0263932c24cecae"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"65ad1ab04a111341aa95fe40ad092957047682d7","unresolved":false,"context_lines":[{"line_number":231,"context_line":"                    \u0027snapName\u0027: snapshot[\u0027name\u0027]"},{"line_number":232,"context_line":"                })"},{"line_number":233,"context_line":"        except nexenta.NexentaException as e:"},{"line_number":234,"context_line":"            LOG.error(_LE(\u0027Error creating snapshot: %s\u0027) % e)"},{"line_number":235,"context_line":"            raise"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"    def delete_snapshot(self, snapshot):"}],"source_content_type":"text/x-python","patch_set":10,"id":"1af86dd1_d78915cc","line":234,"updated":"2015-06-12 13:47:03.000000000","message":"% \u003d\u003e ,","commit_id":"dcea81ba800b993222d05922d0263932c24cecae"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"65ad1ab04a111341aa95fe40ad092957047682d7","unresolved":false,"context_lines":[{"line_number":244,"context_line":"                    \u0027snapName\u0027: snapshot[\u0027name\u0027]"},{"line_number":245,"context_line":"                })"},{"line_number":246,"context_line":"        except nexenta.NexentaException as e:"},{"line_number":247,"context_line":"            LOG.error(_LE(\u0027Error deleting snapshot: %s\u0027) % e)"},{"line_number":248,"context_line":"            raise"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"    def create_cloned_volume(self, volume, src_vref):"}],"source_content_type":"text/x-python","patch_set":10,"id":"1af86dd1_97939dfa","line":247,"updated":"2015-06-12 13:47:03.000000000","message":"% \u003d\u003e ,","commit_id":"dcea81ba800b993222d05922d0263932c24cecae"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"65ad1ab04a111341aa95fe40ad092957047682d7","unresolved":false,"context_lines":[{"line_number":248,"context_line":"            raise"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"    def create_cloned_volume(self, volume, src_vref):"},{"line_number":251,"context_line":"        vol_url \u003d self.bucket_url + \u0027/objects/\u0027 + \\"},{"line_number":252,"context_line":"            src_vref[\u0027name\u0027] + \u0027/clone\u0027"},{"line_number":253,"context_line":"        clone_body \u003d {"},{"line_number":254,"context_line":"            \u0027tenant_name\u0027: self.tenant,"}],"source_content_type":"text/x-python","patch_set":10,"id":"1af86dd1_57bc056c","line":251,"updated":"2015-06-12 13:47:03.000000000","message":"Wrap in () instead of using \\","commit_id":"dcea81ba800b993222d05922d0263932c24cecae"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"65ad1ab04a111341aa95fe40ad092957047682d7","unresolved":false,"context_lines":[{"line_number":264,"context_line":"                \u0027chunkSize\u0027: self.LUN_CHUNKSIZE,"},{"line_number":265,"context_line":"            })"},{"line_number":266,"context_line":"        except nexenta.NexentaException as e:"},{"line_number":267,"context_line":"            LOG.error(_LE(\u0027Error creating cloned volume: %s\u0027) % e)"},{"line_number":268,"context_line":"            raise"},{"line_number":269,"context_line":""},{"line_number":270,"context_line":"    def create_export(self, context, volume):"}],"source_content_type":"text/x-python","patch_set":10,"id":"1af86dd1_37c189e5","line":267,"updated":"2015-06-12 13:47:03.000000000","message":"% \u003d\u003e ,","commit_id":"dcea81ba800b993222d05922d0263932c24cecae"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"65ad1ab04a111341aa95fe40ad092957047682d7","unresolved":false,"context_lines":[{"line_number":279,"context_line":"    def initialize_connection(self, volume, connector):"},{"line_number":280,"context_line":"        lunNumber \u003d self._get_lun_number(volume[\u0027name\u0027])"},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"        target_portal \u003d self._get_target_address(volume[\u0027name\u0027]) + \u0027:\u0027 + \\"},{"line_number":283,"context_line":"            str(self.configuration.nexenta_iscsi_target_portal_port)"},{"line_number":284,"context_line":"        return {"},{"line_number":285,"context_line":"            \u0027driver_volume_type\u0027: \u0027iscsi\u0027,"}],"source_content_type":"text/x-python","patch_set":10,"id":"1af86dd1_f7bad16d","line":282,"updated":"2015-06-12 13:47:03.000000000","message":"Same.","commit_id":"dcea81ba800b993222d05922d0263932c24cecae"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"65ad1ab04a111341aa95fe40ad092957047682d7","unresolved":false,"context_lines":[{"line_number":300,"context_line":"    def local_path(self, volume):"},{"line_number":301,"context_line":"        return self.bucket_path + \u0027/\u0027 + volume[\u0027name\u0027]"},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"    def backup_volume(self, context, backup, backup_service):"},{"line_number":304,"context_line":"        raise NotImplementedError()"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"    def restore_backup(self, context, backup, volume, backup_service):"}],"source_content_type":"text/x-python","patch_set":10,"id":"1af86dd1_97815d92","line":303,"updated":"2015-06-12 13:47:03.000000000","message":"This overrides and blocks the default inherited handling. Remove backup and restore calls.","commit_id":"dcea81ba800b993222d05922d0263932c24cecae"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"6ae4a8782bfacf9952f877c920f62921326efc83","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from cinder.i18n import _, _LE"},{"line_number":24,"context_line":"from cinder.volume import driver"},{"line_number":25,"context_line":"from cinder.volume.drivers.nexenta.nexentaedge import jsonrpc"},{"line_number":26,"context_line":"import json"},{"line_number":27,"context_line":"from oslo_config import cfg"},{"line_number":28,"context_line":"from oslo_log import log as logging"},{"line_number":29,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"3a29b11f_80db53ed","line":26,"updated":"2015-10-18 16:24:32.000000000","message":"Not sure why the pep8 checks didn\u0027t catch this, but the imports should be in the order:\n\nstdlibs\n\nadd-on libs\n\nlocal libs\n\nSo in this case, please restructure to be:\n\n    import json\n\n    from oslo_config import cfg\n    from oslo_log import log as logging\n\n    from cinder...\n\nPretty minor thing, so I\u0027m not too concerned about it. But if you\u0027re updating anyway it would be nice to keep consistent.","commit_id":"4b9efca87e6e91564d779dc3a605162e96703418"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"6ae4a8782bfacf9952f877c920f62921326efc83","unresolved":false,"context_lines":[{"line_number":124,"context_line":"            rsp \u003d self.restapi.get(\u0027service/\u0027 + self.iscsi_service)"},{"line_number":125,"context_line":"            if (\u0027X-VIPS\u0027 in rsp[\u0027data\u0027]):"},{"line_number":126,"context_line":"                vips \u003d json.loads(rsp[\u0027data\u0027][\u0027X-VIPS\u0027])"},{"line_number":127,"context_line":"                if (len(vips[0]) \u003d\u003d 1):"},{"line_number":128,"context_line":"                    self.target_vip \u003d vips[0][0][\u0027ip\u0027].split(\u0027/\u0027, 1)[0]"},{"line_number":129,"context_line":"                else:"},{"line_number":130,"context_line":"                    self.target_vip \u003d vips[0][1][\u0027ip\u0027].split(\u0027/\u0027, 1)[0]"}],"source_content_type":"text/x-python","patch_set":17,"id":"3a29b11f_60e2b7a1","line":127,"updated":"2015-10-18 16:24:32.000000000","message":"() not necessary around conditional.","commit_id":"4b9efca87e6e91564d779dc3a605162e96703418"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"6ae4a8782bfacf9952f877c920f62921326efc83","unresolved":false,"context_lines":[{"line_number":138,"context_line":"                                    \u0027no nexenta_client_address\u0027))"},{"line_number":139,"context_line":"        except Exception as exc:"},{"line_number":140,"context_line":"            LOG.error(_LE(\u0027Error verifying iSCSI service %(serv)s on \u0027"},{"line_number":141,"context_line":"                          \u0027host %(hst)s: %(err)s\u0027),"},{"line_number":142,"context_line":"                      {\u0027serv\u0027: self.iscsi_service, \u0027hst\u0027: self.restapi_host,"},{"line_number":143,"context_line":"                       \u0027err\u0027: exc})"},{"line_number":144,"context_line":"            raise"}],"source_content_type":"text/x-python","patch_set":17,"id":"3a29b11f_00ee638b","line":141,"updated":"2015-10-18 16:24:32.000000000","message":"You could use LOG.exception instead of LOG.error to avoid the need to format the exception into the log message. LOG.exception will log at the ERROR level, but also include any in-scope exceptions into the output.\n\nCertainly not something that has to be changed. Just pointing it out as an option when I see LOG.error(\"...%s..\", ex).","commit_id":"4b9efca87e6e91564d779dc3a605162e96703418"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"6ae4a8782bfacf9952f877c920f62921326efc83","unresolved":false,"context_lines":[{"line_number":203,"context_line":"                             {\u0027objectPath\u0027: self.bucket_path + \u0027/\u0027 +"},{"line_number":204,"context_line":"                              volume[\u0027name\u0027], \u0027newSizeMB\u0027: new_size * 1024})"},{"line_number":205,"context_line":"        except Exception as e:"},{"line_number":206,"context_line":"            LOG.error(_LE(\u0027Error extending volume: %s\u0027) % e)"},{"line_number":207,"context_line":"            raise"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"    def create_volume_from_snapshot(self, volume, snapshot):"}],"source_content_type":"text/x-python","patch_set":17,"id":"3a29b11f_e0ec8791","line":206,"updated":"2015-10-18 16:24:32.000000000","message":"% \u003d\u003e , or change to LOG.exception.","commit_id":"4b9efca87e6e91564d779dc3a605162e96703418"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"6ae4a8782bfacf9952f877c920f62921326efc83","unresolved":false,"context_lines":[{"line_number":263,"context_line":"                \u0027chunkSize\u0027: self.LUN_CHUNKSIZE,"},{"line_number":264,"context_line":"            })"},{"line_number":265,"context_line":"        except Exception as e:"},{"line_number":266,"context_line":"            LOG.error(_LE(\u0027Error creating cloned volume: %s\u0027), e)"},{"line_number":267,"context_line":"            raise"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"    def create_export(self, context, volume, connector\u003dNone):"}],"source_content_type":"text/x-python","patch_set":17,"id":"3a29b11f_209a7f15","line":266,"updated":"2015-10-18 16:24:32.000000000","message":"I\u0027m not sure this pattern of except-log-raise is needed in most of these. When the exception raises from the driver it will likely be logged in most cases by a higher level. This may end up being a little redundant.","commit_id":"4b9efca87e6e91564d779dc3a605162e96703418"},{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"f753f437a94d7f22a4f2a8c21614217532560813","unresolved":false,"context_lines":[{"line_number":140,"context_line":"                                    \u0027no nexenta_client_address\u0027))"},{"line_number":141,"context_line":"        except Exception:"},{"line_number":142,"context_line":"            LOG.exception(_LE(\u0027Error verifying iSCSI service %(serv)s on \u0027"},{"line_number":143,"context_line":"                          \u0027host %(hst)s\u0027), {\u0027serv\u0027: self.iscsi_service,"},{"line_number":144,"context_line":"                          \u0027hst\u0027: self.restapi_host})"},{"line_number":145,"context_line":"            raise"},{"line_number":146,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"3a29b11f_d0958f40","line":143,"updated":"2015-10-19 07:13:51.000000000","message":"Generally i saw in many reviews to use dot at the end of message.\n\nLOG.exception(\"some message.\")\n\nsame comment for other places.","commit_id":"dd2db957357d3635a2d4d56e1691a0b1cc10ff36"},{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"f753f437a94d7f22a4f2a8c21614217532560813","unresolved":false,"context_lines":[{"line_number":142,"context_line":"            LOG.exception(_LE(\u0027Error verifying iSCSI service %(serv)s on \u0027"},{"line_number":143,"context_line":"                          \u0027host %(hst)s\u0027), {\u0027serv\u0027: self.iscsi_service,"},{"line_number":144,"context_line":"                          \u0027hst\u0027: self.restapi_host})"},{"line_number":145,"context_line":"            raise"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"    def check_for_setup_error(self):"},{"line_number":148,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":18,"id":"3a29b11f_508f3f23","line":145,"updated":"2015-10-19 07:13:51.000000000","message":"Is it not good to raise exception with some useful message?\nJust wanted to know input on this from reviewers. :)\n\nsame comment for other places","commit_id":"dd2db957357d3635a2d4d56e1691a0b1cc10ff36"},{"author":{"_account_id":10439,"name":"Xi Yang","email":"yang.xi@99cloud.net","username":"phenom"},"change_message_id":"5d72fe0d6df7ab033cc5a5d6af27b94deee30164","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"nexenta_edge_opts \u003d ["},{"line_number":34,"context_line":"    cfg.StrOpt(\u0027nexenta_rest_address\u0027,"},{"line_number":35,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":36,"context_line":"               help\u003d\u0027IP address of NexentaEdge management REST API endpoint\u0027),"},{"line_number":37,"context_line":"    cfg.IntOpt(\u0027nexenta_rest_port\u0027,"}],"source_content_type":"text/x-python","patch_set":19,"id":"3a29b11f_333ee2da","line":34,"updated":"2015-10-21 01:25:41.000000000","message":"Cinder has a \u0027san_ip\u0027 option, I think it is better to use it than defining another option.","commit_id":"ece4206c74d184d77091f0320ddf278a708a3bc1"},{"author":{"_account_id":16721,"name":"Zohar Mamedov","email":"zohar.cloud@gmail.com","username":"zohar"},"change_message_id":"1580d80d3f5170473afa6ea33d112a185b2224ce","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"nexenta_edge_opts \u003d ["},{"line_number":34,"context_line":"    cfg.StrOpt(\u0027nexenta_rest_address\u0027,"},{"line_number":35,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":36,"context_line":"               help\u003d\u0027IP address of NexentaEdge management REST API endpoint\u0027),"},{"line_number":37,"context_line":"    cfg.IntOpt(\u0027nexenta_rest_port\u0027,"}],"source_content_type":"text/x-python","patch_set":19,"id":"3a29b11f_241e975f","line":34,"in_reply_to":"3a29b11f_216be9f2","updated":"2015-10-21 05:34:29.000000000","message":"I found this:\nhttps://github.com/openstack/cinder/blob/master/cinder/volume/drivers/san/san.py\n\nAnd this comment at line 173:\n\"# The san_ip must always be set, because we use it for the target\"\n\nI believe in the case of iSCSI, SAN refers to the network over which target-initiator traffic is passing, which may or may not be the same network as the management network which is used for REST calls.","commit_id":"ece4206c74d184d77091f0320ddf278a708a3bc1"},{"author":{"_account_id":10439,"name":"Xi Yang","email":"yang.xi@99cloud.net","username":"phenom"},"change_message_id":"ebca117a7418e6728073573b486c0a76619d7128","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"nexenta_edge_opts \u003d ["},{"line_number":34,"context_line":"    cfg.StrOpt(\u0027nexenta_rest_address\u0027,"},{"line_number":35,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":36,"context_line":"               help\u003d\u0027IP address of NexentaEdge management REST API endpoint\u0027),"},{"line_number":37,"context_line":"    cfg.IntOpt(\u0027nexenta_rest_port\u0027,"}],"source_content_type":"text/x-python","patch_set":19,"id":"3a29b11f_216be9f2","line":34,"in_reply_to":"3a29b11f_2197693b","updated":"2015-10-21 05:28:41.000000000","message":"I believe that \u0027san_ip\u0027 is the management network address.","commit_id":"ece4206c74d184d77091f0320ddf278a708a3bc1"},{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"9fc28de3cca5a12f2f78e3549310727f87436d3a","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"nexenta_edge_opts \u003d ["},{"line_number":34,"context_line":"    cfg.StrOpt(\u0027nexenta_rest_address\u0027,"},{"line_number":35,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":36,"context_line":"               help\u003d\u0027IP address of NexentaEdge management REST API endpoint\u0027),"},{"line_number":37,"context_line":"    cfg.IntOpt(\u0027nexenta_rest_port\u0027,"}],"source_content_type":"text/x-python","patch_set":19,"id":"3a29b11f_0f2bf634","line":34,"in_reply_to":"3a29b11f_241e975f","updated":"2015-10-23 19:22:02.000000000","message":"san_ip is for IP address of SAN controller","commit_id":"ece4206c74d184d77091f0320ddf278a708a3bc1"},{"author":{"_account_id":16721,"name":"Zohar Mamedov","email":"zohar.cloud@gmail.com","username":"zohar"},"change_message_id":"441220a6a2af4e0de23153bdfa57bf923d35df33","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"nexenta_edge_opts \u003d ["},{"line_number":34,"context_line":"    cfg.StrOpt(\u0027nexenta_rest_address\u0027,"},{"line_number":35,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":36,"context_line":"               help\u003d\u0027IP address of NexentaEdge management REST API endpoint\u0027),"},{"line_number":37,"context_line":"    cfg.IntOpt(\u0027nexenta_rest_port\u0027,"}],"source_content_type":"text/x-python","patch_set":19,"id":"3a29b11f_2197693b","line":34,"in_reply_to":"3a29b11f_333ee2da","updated":"2015-10-21 05:13:19.000000000","message":"We have two IP addresses in the config, the one above is for management network, which may be separate from the iSCSI portal network which is where the block IO is going on (nexenta_client_address)\n\nWould it be more correct to rename nexenta_client_address to san_ip then? Or is it OK to keep it this way for clearer distinction?","commit_id":"ece4206c74d184d77091f0320ddf278a708a3bc1"},{"author":{"_account_id":14305,"name":"Yuriy Nesenenko","email":"ynesenenko@mirantis.com","username":"yuriy_n"},"change_message_id":"8f5df22b4351a7fbbd1d6d282dbe98a24e6f022f","unresolved":false,"context_lines":[{"line_number":181,"context_line":"        try:"},{"line_number":182,"context_line":"            self.restapi.post(\u0027service/\u0027 + self.iscsi_service + \u0027/iscsi\u0027, {"},{"line_number":183,"context_line":"                \u0027objectPath\u0027: self.bucket_path + \u0027/\u0027 + volume[\u0027name\u0027],"},{"line_number":184,"context_line":"                \u0027volSizeMB\u0027: int(volume[\u0027size\u0027]) * 1024,"},{"line_number":185,"context_line":"                \u0027blockSize\u0027: self.LUN_BLOCKSIZE,"},{"line_number":186,"context_line":"                \u0027chunkSize\u0027: self.LUN_CHUNKSIZE"},{"line_number":187,"context_line":"            })"}],"source_content_type":"text/x-python","patch_set":19,"id":"3a29b11f_0c1584e3","line":184,"updated":"2015-10-22 10:16:59.000000000","message":"Please, use oslo.units here and below. Use units.Ki instead of 1024","commit_id":"ece4206c74d184d77091f0320ddf278a708a3bc1"},{"author":{"_account_id":14305,"name":"Yuriy Nesenenko","email":"ynesenenko@mirantis.com","username":"yuriy_n"},"change_message_id":"8f5df22b4351a7fbbd1d6d282dbe98a24e6f022f","unresolved":false,"context_lines":[{"line_number":202,"context_line":"        try:"},{"line_number":203,"context_line":"            self.restapi.put(\u0027service/\u0027 + self.iscsi_service + \u0027/iscsi/resize\u0027,"},{"line_number":204,"context_line":"                             {\u0027objectPath\u0027: self.bucket_path + \u0027/\u0027 +"},{"line_number":205,"context_line":"                              volume[\u0027name\u0027], \u0027newSizeMB\u0027: new_size * 1024})"},{"line_number":206,"context_line":"        except Exception:"},{"line_number":207,"context_line":"            LOG.exception(_LE(\u0027Error extending volume\u0027))"},{"line_number":208,"context_line":"            raise"}],"source_content_type":"text/x-python","patch_set":19,"id":"3a29b11f_4ca29c9a","line":205,"updated":"2015-10-22 10:16:59.000000000","message":"The same, units.Ki","commit_id":"ece4206c74d184d77091f0320ddf278a708a3bc1"},{"author":{"_account_id":14305,"name":"Yuriy Nesenenko","email":"ynesenenko@mirantis.com","username":"yuriy_n"},"change_message_id":"8f5df22b4351a7fbbd1d6d282dbe98a24e6f022f","unresolved":false,"context_lines":[{"line_number":259,"context_line":"            self.restapi.post(vol_url, clone_body)"},{"line_number":260,"context_line":"            self.restapi.post(\u0027service/\u0027 + self.iscsi_service + \u0027/iscsi\u0027, {"},{"line_number":261,"context_line":"                \u0027objectPath\u0027: self.bucket_path + \u0027/\u0027 + volume[\u0027name\u0027],"},{"line_number":262,"context_line":"                \u0027volSizeMB\u0027: int(src_vref[\u0027size\u0027]) * 1024,"},{"line_number":263,"context_line":"                \u0027blockSize\u0027: self.LUN_BLOCKSIZE,"},{"line_number":264,"context_line":"                \u0027chunkSize\u0027: self.LUN_CHUNKSIZE,"},{"line_number":265,"context_line":"            })"}],"source_content_type":"text/x-python","patch_set":19,"id":"3a29b11f_2cce4063","line":262,"updated":"2015-10-22 10:16:59.000000000","message":"The same, units.Ki","commit_id":"ece4206c74d184d77091f0320ddf278a708a3bc1"},{"author":{"_account_id":13203,"name":"Wilson Liu","email":"295988511@qq.com","username":"Bob-OpenStack"},"change_message_id":"8b508aa9b16a372288de4f3f4ce98ba982155ecc","unresolved":false,"context_lines":[{"line_number":127,"context_line":"            rsp \u003d self.restapi.get(\u0027service/\u0027 + self.iscsi_service)"},{"line_number":128,"context_line":"            if \u0027X-VIPS\u0027 in rsp[\u0027data\u0027]:"},{"line_number":129,"context_line":"                vips \u003d json.loads(rsp[\u0027data\u0027][\u0027X-VIPS\u0027])"},{"line_number":130,"context_line":"                if (len(vips[0]) \u003d\u003d 1):"},{"line_number":131,"context_line":"                    self.target_vip \u003d vips[0][0][\u0027ip\u0027].split(\u0027/\u0027, 1)[0]"},{"line_number":132,"context_line":"                else:"},{"line_number":133,"context_line":"                    self.target_vip \u003d vips[0][1][\u0027ip\u0027].split(\u0027/\u0027, 1)[0]"}],"source_content_type":"text/x-python","patch_set":24,"id":"1a26ad4f_66458a15","line":130,"updated":"2015-10-30 13:54:48.000000000","message":"No need the outside parenthesis.","commit_id":"cb251f0b4f68d570622b69c839704261c2e9cf8b"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e2bb7511d4d8da674dbd73f364cb6b33b248147b","unresolved":false,"context_lines":[{"line_number":17,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":18,"context_line":".. automodule:: nexenta.volume"},{"line_number":19,"context_line":".. moduleauthor:: Zohar Mamedov \u003czohar.mamedov@nexenta.com\u003e"},{"line_number":20,"context_line":".. moduleauthor:: Kyle Schochenmaier \u003ckyle.schochenmaier@nexenta.com\u003e"},{"line_number":21,"context_line":"\"\"\""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"import json"}],"source_content_type":"text/x-python","patch_set":25,"id":"1a26ad4f_b78e60ce","line":20,"updated":"2015-10-31 06:57:10.000000000","message":"We are not adding author names to the files any more.","commit_id":"473a0761dedf30abaaadd582253bebe9d0d8b250"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e2bb7511d4d8da674dbd73f364cb6b33b248147b","unresolved":false,"context_lines":[{"line_number":69,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"class NexentaEdgeISCSIDriver(driver.ISCSIDriver):  # pylint: disable\u003dR0921"},{"line_number":73,"context_line":"    \"\"\"Executes volume driver commands on NexentaEdge cluster."},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    Version history:"}],"source_content_type":"text/x-python","patch_set":25,"id":"1a26ad4f_d7b2fc93","line":72,"updated":"2015-10-31 06:57:10.000000000","message":"What is the pylint error that you are trying to ignore?","commit_id":"473a0761dedf30abaaadd582253bebe9d0d8b250"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e2bb7511d4d8da674dbd73f364cb6b33b248147b","unresolved":false,"context_lines":[{"line_number":137,"context_line":"                if not self.target_vip:"},{"line_number":138,"context_line":"                    LOG.error(_LE(\u0027No VIP configured for service %s\u0027),"},{"line_number":139,"context_line":"                              self.iscsi_service)"},{"line_number":140,"context_line":"                    raise Exception(_(\u0027No service VIP configured and \u0027"},{"line_number":141,"context_line":"                                    \u0027no nexenta_client_address\u0027))"},{"line_number":142,"context_line":"        except Exception:"},{"line_number":143,"context_line":"            LOG.exception(_LE(\u0027Error verifying iSCSI service %(serv)s on \u0027"}],"source_content_type":"text/x-python","patch_set":25,"id":"1a26ad4f_57658c1b","line":140,"updated":"2015-10-31 06:57:10.000000000","message":"Please use a specific exception.  You can use VolumeBackendAPIException or VolumeDriverException here.","commit_id":"473a0761dedf30abaaadd582253bebe9d0d8b250"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e2bb7511d4d8da674dbd73f364cb6b33b248147b","unresolved":false,"context_lines":[{"line_number":151,"context_line":"        except Exception:"},{"line_number":152,"context_line":"            LOG.exception(_LE(\u0027Error verifying LUN container %(bkt)s\u0027),"},{"line_number":153,"context_line":"                          {\u0027bkt\u0027: self.bucket_path})"},{"line_number":154,"context_line":"            raise"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    def _get_lun_number(self, volname):"},{"line_number":157,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":25,"id":"1a26ad4f_776a08f0","line":154,"updated":"2015-10-31 06:57:10.000000000","message":"Should raise VolumeBackendAPIException here.","commit_id":"473a0761dedf30abaaadd582253bebe9d0d8b250"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e2bb7511d4d8da674dbd73f364cb6b33b248147b","unresolved":false,"context_lines":[{"line_number":163,"context_line":"        except Exception:"},{"line_number":164,"context_line":"            LOG.exception(_LE(\u0027Error retrieving LUN %(vol)s number\u0027),"},{"line_number":165,"context_line":"                          {\u0027vol\u0027: volname})"},{"line_number":166,"context_line":"            raise"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"        return rsp[\u0027data\u0027]"},{"line_number":169,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"1a26ad4f_176b94f2","line":166,"updated":"2015-10-31 06:57:10.000000000","message":"Same","commit_id":"473a0761dedf30abaaadd582253bebe9d0d8b250"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e2bb7511d4d8da674dbd73f364cb6b33b248147b","unresolved":false,"context_lines":[{"line_number":188,"context_line":"            })"},{"line_number":189,"context_line":"        except Exception:"},{"line_number":190,"context_line":"            LOG.exception(_LE(\u0027Error creating volume\u0027))"},{"line_number":191,"context_line":"            raise"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"    def delete_volume(self, volume):"},{"line_number":194,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":25,"id":"1a26ad4f_377010dc","line":191,"updated":"2015-10-31 06:57:10.000000000","message":"Same","commit_id":"473a0761dedf30abaaadd582253bebe9d0d8b250"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e2bb7511d4d8da674dbd73f364cb6b33b248147b","unresolved":false,"context_lines":[{"line_number":197,"context_line":"                                           \u0027/\u0027 + volume[\u0027name\u0027]})"},{"line_number":198,"context_line":"        except Exception:"},{"line_number":199,"context_line":"            LOG.exception(_LE(\u0027Error deleting volume\u0027))"},{"line_number":200,"context_line":"            raise"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"    def extend_volume(self, volume, new_size):"},{"line_number":203,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":25,"id":"1a26ad4f_d7799cc9","line":200,"updated":"2015-10-31 06:57:10.000000000","message":"If you cannot delete a volume because it doesn\u0027t exist, you should treat it as success.","commit_id":"473a0761dedf30abaaadd582253bebe9d0d8b250"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e2bb7511d4d8da674dbd73f364cb6b33b248147b","unresolved":false,"context_lines":[{"line_number":207,"context_line":"                              \u0027newSizeMB\u0027: new_size * units.Ki})"},{"line_number":208,"context_line":"        except Exception:"},{"line_number":209,"context_line":"            LOG.exception(_LE(\u0027Error extending volume\u0027))"},{"line_number":210,"context_line":"            raise"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"    def create_volume_from_snapshot(self, volume, snapshot):"},{"line_number":213,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":25,"id":"1a26ad4f_f77618d6","line":210,"updated":"2015-10-31 06:57:10.000000000","message":"Same.  Also applies to the rest of the file.","commit_id":"473a0761dedf30abaaadd582253bebe9d0d8b250"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e2bb7511d4d8da674dbd73f364cb6b33b248147b","unresolved":false,"context_lines":[{"line_number":247,"context_line":"                })"},{"line_number":248,"context_line":"        except Exception:"},{"line_number":249,"context_line":"            LOG.exception(_LE(\u0027Error deleting snapshot\u0027))"},{"line_number":250,"context_line":"            raise"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"    def create_cloned_volume(self, volume, src_vref):"},{"line_number":253,"context_line":"        vol_url \u003d (self.bucket_url + \u0027/objects/\u0027 +"}],"source_content_type":"text/x-python","patch_set":25,"id":"1a26ad4f_977fa4aa","line":250,"updated":"2015-10-31 06:57:10.000000000","message":"If you cannot delete snapshot because it doesn\u0027t exist, it should be successful instead of raise.","commit_id":"473a0761dedf30abaaadd582253bebe9d0d8b250"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e2bb7511d4d8da674dbd73f364cb6b33b248147b","unresolved":false,"context_lines":[{"line_number":292,"context_line":"            \u0027driver_version\u0027: self.VERSION,"},{"line_number":293,"context_line":"            \u0027storage_protocol\u0027: \u0027iSCSI\u0027,"},{"line_number":294,"context_line":"            \u0027reserved_percentage\u0027: 0,"},{"line_number":295,"context_line":"            \u0027total_capacity_gb\u0027: \u0027infinite\u0027,"},{"line_number":296,"context_line":"            \u0027free_capacity_gb\u0027: \u0027infinite\u0027,"},{"line_number":297,"context_line":"            \u0027QoS_support\u0027: False,"},{"line_number":298,"context_line":"            \u0027volume_backend_name\u0027: self.backend_name,"}],"source_content_type":"text/x-python","patch_set":25,"id":"1a26ad4f_b77c20b6","line":295,"updated":"2015-10-31 06:57:10.000000000","message":"Can you find out the real capacities?\n\nIf you cannot, please report \u0027unknown\u0027.  We don\u0027t recommend the usage of \u0027infinite\u0027 any more.\n\nNow the common code supports oversubscription.  You should take a look to see if you can support it.","commit_id":"473a0761dedf30abaaadd582253bebe9d0d8b250"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e2bb7511d4d8da674dbd73f364cb6b33b248147b","unresolved":false,"context_lines":[{"line_number":293,"context_line":"            \u0027storage_protocol\u0027: \u0027iSCSI\u0027,"},{"line_number":294,"context_line":"            \u0027reserved_percentage\u0027: 0,"},{"line_number":295,"context_line":"            \u0027total_capacity_gb\u0027: \u0027infinite\u0027,"},{"line_number":296,"context_line":"            \u0027free_capacity_gb\u0027: \u0027infinite\u0027,"},{"line_number":297,"context_line":"            \u0027QoS_support\u0027: False,"},{"line_number":298,"context_line":"            \u0027volume_backend_name\u0027: self.backend_name,"},{"line_number":299,"context_line":"            \u0027location_info\u0027: location_info,"}],"source_content_type":"text/x-python","patch_set":25,"id":"1a26ad4f_574cac9d","line":296,"updated":"2015-10-31 06:57:10.000000000","message":"Same","commit_id":"473a0761dedf30abaaadd582253bebe9d0d8b250"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"46d6e770d6ea8140eea32897697c81a0ffd62f8b","unresolved":false,"context_lines":[{"line_number":135,"context_line":"                        _(\u0027No service VIP configured and \u0027"},{"line_number":136,"context_line":"                          \u0027no nexenta_client_address\u0027))"},{"line_number":137,"context_line":"        except exception.VolumeBackendAPIException:"},{"line_number":138,"context_line":"            LOG.exception(_LE(\u0027Error verifying iSCSI service %(serv)s on \u0027"},{"line_number":139,"context_line":"                          \u0027host %(hst)s\u0027), {\u0027serv\u0027: self.iscsi_service,"},{"line_number":140,"context_line":"                          \u0027hst\u0027: self.restapi_host})"},{"line_number":141,"context_line":"            raise"}],"source_content_type":"text/x-python","patch_set":28,"id":"fa80f949_51672b25","line":138,"updated":"2015-11-04 19:11:49.000000000","message":"Please, use save_and_reraise method here and below","commit_id":"c98c40ce105805bb60ddd0e7b82f630fde64d191"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"dc084623f80216acafe0f8a734764435dcc7cba0","unresolved":false,"context_lines":[{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    @property"},{"line_number":103,"context_line":"    def backend_name(self):"},{"line_number":104,"context_line":"        backend_name \u003d None"},{"line_number":105,"context_line":"        if self.configuration:"},{"line_number":106,"context_line":"            backend_name \u003d self.configuration.safe_get(\u0027volume_backend_name\u0027)"},{"line_number":107,"context_line":"        if not backend_name:"}],"source_content_type":"text/x-python","patch_set":35,"id":"9a8ffd7b_1aedefee","line":104,"updated":"2015-11-26 14:45:15.000000000","message":"This assignment is not needed and could be removed in a next patch","commit_id":"ee352dcf03a5fdc4a9d029c7c01f318e32029fef"}],"cinder/volume/drivers/nexenta/nexentaedge/jsonrpc.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"65ad1ab04a111341aa95fe40ad092957047682d7","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        if not self.method:"},{"line_number":57,"context_line":"            method \u003d name"},{"line_number":58,"context_line":"        else:"},{"line_number":59,"context_line":"            raise Exception(\"Wrong resource call syntax\")"},{"line_number":60,"context_line":"        return NexentaEdgeJSONProxy("},{"line_number":61,"context_line":"            self.protocol, self.host, self.port, self.path,"},{"line_number":62,"context_line":"            self.user, self.password, self.auto, method)"}],"source_content_type":"text/x-python","patch_set":10,"id":"1af86dd1_d23a43cd","line":59,"updated":"2015-06-12 13:47:03.000000000","message":"Exception strings should have _() translation markers.","commit_id":"dcea81ba800b993222d05922d0263932c24cecae"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"65ad1ab04a111341aa95fe40ad092957047682d7","unresolved":false,"context_lines":[{"line_number":79,"context_line":"            \u0027Authorization\u0027: \u0027Basic %s\u0027 % auth"},{"line_number":80,"context_line":"        }"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"        LOG.info(_LI(\u0027Sending JSON data: %s\u0027) % self.url)"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"        try:"},{"line_number":85,"context_line":"            request \u003d urllib2.Request(self.url, data, headers)"}],"source_content_type":"text/x-python","patch_set":10,"id":"1af86dd1_d26803bd","line":82,"updated":"2015-06-12 13:47:03.000000000","message":"% \u003d\u003e ,\n\nAlso, this seems like it should probably be a debug level call.","commit_id":"dcea81ba800b993222d05922d0263932c24cecae"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"65ad1ab04a111341aa95fe40ad092957047682d7","unresolved":false,"context_lines":[{"line_number":98,"context_line":"            if response_obj.info().status \u003d\u003d \u0027EOF in headers\u0027:"},{"line_number":99,"context_line":"                if not self.auto or self.protocol !\u003d \u0027http\u0027:"},{"line_number":100,"context_line":"                    LOG.error(_LE(\u0027No headers in server response\u0027))"},{"line_number":101,"context_line":"                    raise NexentaJSONException(_LE(\u0027Bad response from server\u0027))"},{"line_number":102,"context_line":"                LOG.info("},{"line_number":103,"context_line":"                    _LI(\u0027Auto switching to HTTPS connection to %s\u0027) % self.url)"},{"line_number":104,"context_line":"                self.protocol \u003d \u0027https\u0027"}],"source_content_type":"text/x-python","patch_set":10,"id":"1af86dd1_b2ac67ee","line":101,"updated":"2015-06-12 13:47:03.000000000","message":"Exception strings should use _(), not _LE().","commit_id":"dcea81ba800b993222d05922d0263932c24cecae"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"65ad1ab04a111341aa95fe40ad092957047682d7","unresolved":false,"context_lines":[{"line_number":100,"context_line":"                    LOG.error(_LE(\u0027No headers in server response\u0027))"},{"line_number":101,"context_line":"                    raise NexentaJSONException(_LE(\u0027Bad response from server\u0027))"},{"line_number":102,"context_line":"                LOG.info("},{"line_number":103,"context_line":"                    _LI(\u0027Auto switching to HTTPS connection to %s\u0027) % self.url)"},{"line_number":104,"context_line":"                self.protocol \u003d \u0027https\u0027"},{"line_number":105,"context_line":"                request \u003d urllib2.Request(self.url, data, headers)"},{"line_number":106,"context_line":"                if self.method \u003d\u003d \u0027get\u0027:"}],"source_content_type":"text/x-python","patch_set":10,"id":"1af86dd1_32875763","line":103,"updated":"2015-06-12 13:47:03.000000000","message":"% \u003d\u003e ,","commit_id":"dcea81ba800b993222d05922d0263932c24cecae"},{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"6248706d907ada72e7b1a89d0ccaa7327511d2b4","unresolved":false,"context_lines":[{"line_number":46,"context_line":"                    _delay *\u003d backoff"},{"line_number":47,"context_line":"                    LOG.debug(_(\u0027Retrying %s, (%s attempts remaining)...\u0027),"},{"line_number":48,"context_line":"                              (args, _tries))"},{"line_number":49,"context_line":"            msg \u003d (_(\u0027Retry count exceeded for command: %s\u0027), (args,))"},{"line_number":50,"context_line":"            LOG.error(msg)"},{"line_number":51,"context_line":"            raise Exception(msg)"},{"line_number":52,"context_line":"        return func_retry"}],"source_content_type":"text/x-python","patch_set":14,"id":"5a2ca52d_fbac7a8d","line":49,"updated":"2015-10-17 10:28:31.000000000","message":"% instead of comma in _()\nhttp://docs.openstack.org/developer/oslo.i18n/guidelines.html","commit_id":"7dd58e123543ae8cfd5c894709be167d39761dc7"},{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"6248706d907ada72e7b1a89d0ccaa7327511d2b4","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        rsp \u003d req.json()"},{"line_number":119,"context_line":"        req.close()"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"        LOG.info(_LI(\u0027Got response: %s\u0027) % rsp)"},{"line_number":122,"context_line":"        if rsp.get(\u0027response\u0027) is None:"},{"line_number":123,"context_line":"            raise Exception(_LE(\u0027Bad response: %s\u0027) % rsp)"},{"line_number":124,"context_line":"        return rsp.get(\u0027response\u0027)"}],"source_content_type":"text/x-python","patch_set":14,"id":"5a2ca52d_1ba85676","line":121,"updated":"2015-10-17 10:28:31.000000000","message":"http://docs.openstack.org/developer/oslo.i18n/guidelines.html\nuse comma in place of %","commit_id":"7dd58e123543ae8cfd5c894709be167d39761dc7"},{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"6248706d907ada72e7b1a89d0ccaa7327511d2b4","unresolved":false,"context_lines":[{"line_number":120,"context_line":""},{"line_number":121,"context_line":"        LOG.info(_LI(\u0027Got response: %s\u0027) % rsp)"},{"line_number":122,"context_line":"        if rsp.get(\u0027response\u0027) is None:"},{"line_number":123,"context_line":"            raise Exception(_LE(\u0027Bad response: %s\u0027) % rsp)"},{"line_number":124,"context_line":"        return rsp.get(\u0027response\u0027)"}],"source_content_type":"text/x-python","patch_set":14,"id":"5a2ca52d_bbb922ce","line":123,"updated":"2015-10-17 10:28:31.000000000","message":"http://docs.openstack.org/developer/oslo.i18n/guidelines.html\n_() is preferred for any user facing message","commit_id":"7dd58e123543ae8cfd5c894709be167d39761dc7"},{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"c9bb41be51db306df3a9f77bb23f33c1bb106c36","unresolved":false,"context_lines":[{"line_number":45,"context_line":"                    _tries -\u003d 1"},{"line_number":46,"context_line":"                    _delay *\u003d backoff"},{"line_number":47,"context_line":"                    LOG.debug(\u0027Retrying %(arg)s, %(n)s attempts remaining...\u0027 %"},{"line_number":48,"context_line":"                              {\"arg\": args, \"n\": _tries})"},{"line_number":49,"context_line":"            msg \u003d (_(\u0027Retry count exceeded for command: %s\u0027) % (args,))"},{"line_number":50,"context_line":"            LOG.error(msg)"},{"line_number":51,"context_line":"            raise Exception(msg)"}],"source_content_type":"text/x-python","patch_set":16,"id":"3a29b11f_3493a5fc","line":48,"updated":"2015-10-18 09:20:12.000000000","message":"http://docs.openstack.org/developer/oslo.i18n/guidelines.html\n\nDonot use % in LOG\n\nLOG.loglevel(          %        ) wrong\n\nLOG.loglevel(           ,          )  correct\n\n% is used in user facing scenario like used in below line","commit_id":"94f15b56897fe2c360d6b8dc805eb7b03c116723"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"6ae4a8782bfacf9952f877c920f62921326efc83","unresolved":false,"context_lines":[{"line_number":19,"context_line":".. moduleauthor:: Zohar Mamedov \u003czohar.mamedov@nexenta.com\u003e"},{"line_number":20,"context_line":".. moduleauthor:: Kyle Schochenmaier \u003ckyle.schochenmaier@nexenta.com\u003e"},{"line_number":21,"context_line":"\"\"\""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from cinder.i18n import _, _LI"},{"line_number":24,"context_line":"import json"},{"line_number":25,"context_line":"from oslo_log import log as logging"}],"source_content_type":"text/x-python","patch_set":17,"id":"3a29b11f_e0a3274e","line":22,"updated":"2015-10-18 16:24:32.000000000","message":"Same note on import ordering as previous file.","commit_id":"4b9efca87e6e91564d779dc3a605162e96703418"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"6ae4a8782bfacf9952f877c920f62921326efc83","unresolved":false,"context_lines":[{"line_number":32,"context_line":"socket.setdefaulttimeout(100)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"def retry(exc_tuple, tries\u003d5, delay\u003d1, backoff\u003d2):"},{"line_number":36,"context_line":"    def retry_dec(f):"},{"line_number":37,"context_line":"        @wraps(f)"},{"line_number":38,"context_line":"        def func_retry(*args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":17,"id":"3a29b11f_808913cd","line":35,"updated":"2015-10-18 16:24:32.000000000","message":"Please use the retry mechanism from the utils module rather than reimplementing here.\n\nhttps://github.com/openstack/cinder/blob/master/cinder/utils.py#L731","commit_id":"4b9efca87e6e91564d779dc3a605162e96703418"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"6ae4a8782bfacf9952f877c920f62921326efc83","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        rsp \u003d req.json()"},{"line_number":119,"context_line":"        req.close()"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"        LOG.info(_LI(\u0027Got response: %s\u0027), rsp)"},{"line_number":122,"context_line":"        if rsp.get(\u0027response\u0027) is None:"},{"line_number":123,"context_line":"            raise Exception(_(\u0027Bad response: %s\u0027) % rsp)"},{"line_number":124,"context_line":"        return rsp.get(\u0027response\u0027)"}],"source_content_type":"text/x-python","patch_set":17,"id":"3a29b11f_20c11fe5","line":121,"updated":"2015-10-18 16:24:32.000000000","message":"This seems like something better done at a debug level.","commit_id":"4b9efca87e6e91564d779dc3a605162e96703418"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e2bb7511d4d8da674dbd73f364cb6b33b248147b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2011 Nexenta Systems, Inc."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":25,"id":"1a26ad4f_b7e0a097","line":1,"updated":"2015-10-31 06:57:10.000000000","message":"Should be 2015","commit_id":"473a0761dedf30abaaadd582253bebe9d0d8b250"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e2bb7511d4d8da674dbd73f364cb6b33b248147b","unresolved":false,"context_lines":[{"line_number":17,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":18,"context_line":".. automodule:: nexentaedge.jsonrpc"},{"line_number":19,"context_line":".. moduleauthor:: Zohar Mamedov \u003czohar.mamedov@nexenta.com\u003e"},{"line_number":20,"context_line":".. moduleauthor:: Kyle Schochenmaier \u003ckyle.schochenmaier@nexenta.com\u003e"},{"line_number":21,"context_line":"\"\"\""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"import json"}],"source_content_type":"text/x-python","patch_set":25,"id":"1a26ad4f_f7013839","line":20,"updated":"2015-10-31 06:57:10.000000000","message":"We are not adding author name in the files any more.","commit_id":"473a0761dedf30abaaadd582253bebe9d0d8b250"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e2bb7511d4d8da674dbd73f364cb6b33b248147b","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        if not self.method:"},{"line_number":61,"context_line":"            method \u003d name"},{"line_number":62,"context_line":"        else:"},{"line_number":63,"context_line":"            raise Exception(_(\"Wrong resource call syntax\"))"},{"line_number":64,"context_line":"        return NexentaEdgeJSONProxy("},{"line_number":65,"context_line":"            self.protocol, self.host, self.port, self.path,"},{"line_number":66,"context_line":"            self.user, self.password, self.auto, method)"}],"source_content_type":"text/x-python","patch_set":25,"id":"1a26ad4f_f78858c7","line":63,"updated":"2015-10-31 06:57:10.000000000","message":"Please use a specific exception.  You can use VolumeBackendAPIException or VolumeDriverException here.","commit_id":"473a0761dedf30abaaadd582253bebe9d0d8b250"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e2bb7511d4d8da674dbd73f364cb6b33b248147b","unresolved":false,"context_lines":[{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        LOG.debug(\u0027Got response: %s\u0027, rsp)"},{"line_number":102,"context_line":"        if rsp.get(\u0027response\u0027) is None:"},{"line_number":103,"context_line":"            raise Exception(_(\u0027Bad response: %s\u0027) % rsp)"},{"line_number":104,"context_line":"        return rsp.get(\u0027response\u0027)"}],"source_content_type":"text/x-python","patch_set":25,"id":"1a26ad4f_9791e4f3","line":103,"updated":"2015-10-31 06:57:10.000000000","message":"Same","commit_id":"473a0761dedf30abaaadd582253bebe9d0d8b250"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"dc084623f80216acafe0f8a734764435dcc7cba0","unresolved":false,"context_lines":[{"line_number":70,"context_line":"    def __call__(self, *args):"},{"line_number":71,"context_line":"        self.path +\u003d args[0]"},{"line_number":72,"context_line":"        data \u003d None"},{"line_number":73,"context_line":"        if len(args) \u003e 1:"},{"line_number":74,"context_line":"            data \u003d json.dumps(args[1])"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        auth \u003d (\u0027%s:%s\u0027 % (self.user, self.password)).encode(\u0027base64\u0027)[:-1]"}],"source_content_type":"text/x-python","patch_set":35,"id":"9a8ffd7b_5a02973e","line":73,"updated":"2015-11-26 14:45:15.000000000","message":"It could be simplified to:\nif len(args):","commit_id":"ee352dcf03a5fdc4a9d029c7c01f318e32029fef"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"58361a72e3094605cfc4240769db7885d4cf74a8","unresolved":false,"context_lines":[{"line_number":70,"context_line":"    def __call__(self, *args):"},{"line_number":71,"context_line":"        self.path +\u003d args[0]"},{"line_number":72,"context_line":"        data \u003d None"},{"line_number":73,"context_line":"        if len(args) \u003e 1:"},{"line_number":74,"context_line":"            data \u003d json.dumps(args[1])"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        auth \u003d (\u0027%s:%s\u0027 % (self.user, self.password)).encode(\u0027base64\u0027)[:-1]"}],"source_content_type":"text/x-python","patch_set":35,"id":"9a8ffd7b_65e580da","line":73,"in_reply_to":"9a8ffd7b_5a02973e","updated":"2015-11-26 15:13:28.000000000","message":"\"if len(args)\" is the same as \"if len(args) \u003e 0\".  Here it is \"if len(args) \u003e 1\".  So I think \"\u003e 1\" is still needed.","commit_id":"ee352dcf03a5fdc4a9d029c7c01f318e32029fef"}]}
