)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"2952e79e9b75213eb4d54451b7059b22f2816eb3","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     hallur, parashuram \u003cparashuram.hallur@emc.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-05-17 23:06:01 +0530"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Implements : Blueprint CoprHD Cinder Drivers -"},{"line_number":8,"context_line":"https://blueprints.launchpad.net/cinder/+spec/coprhd-cinder-drivers"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"Submitting following drivers"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"dab17558_08076eca","line":7,"updated":"2016-05-17 17:54:29.000000000","message":"First line should just be \"CoprHD drivers\" or similar.\n\nAdd \"Implements: blueprint coprhd-cinder-drivers\" near the bottom of the message","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     hallur, parashuram \u003cparashuram.hallur@emc.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-05-17 23:06:01 +0530"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Implements : Blueprint CoprHD Cinder Drivers -"},{"line_number":8,"context_line":"https://blueprints.launchpad.net/cinder/+spec/coprhd-cinder-drivers"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"Submitting following drivers"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"dab17558_08b80ec7","line":7,"updated":"2016-05-17 19:09:51.000000000","message":"Please update the commit message to follow the OpenStack guidelines here:\n\nhttps://wiki.openstack.org/wiki/GitCommitMessages#Summary_of_Git_commit_message_structure","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"6816ed1001639380e73b690ace27f28a34690934","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2016-05-17 23:06:01 +0530"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Implements : Blueprint CoprHD Cinder Drivers -"},{"line_number":8,"context_line":"https://blueprints.launchpad.net/cinder/+spec/coprhd-cinder-drivers"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"Submitting following drivers"},{"line_number":11,"context_line":"1-\tCinder iSCSI Block Volume Driver for CoprHD"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"dab17558_f799266e","line":8,"updated":"2016-05-17 20:33:32.000000000","message":"Replace the above with the following and put it right above the change-id.\n\nImplements: blueprint coprhd-cinder-drivers","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"6816ed1001639380e73b690ace27f28a34690934","unresolved":false,"context_lines":[{"line_number":10,"context_line":"Submitting following drivers"},{"line_number":11,"context_line":"1-\tCinder iSCSI Block Volume Driver for CoprHD"},{"line_number":12,"context_line":"2-\tCinder FC Block Volume Driver for CoprHD"},{"line_number":13,"context_line":"3-\tCinder ScaleIO Block Volume Driver for CoprHD"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: I5fe7ac8190edb2405981c4750dcecde00159a3ec"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"dab17558_97d9ba24","line":13,"updated":"2016-05-17 20:33:32.000000000","message":"Remove \"tabs\".","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"13925596a33eaec6d554636a5f92acfc09eab0f8","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     hallur, parashuram \u003cparashuram.hallur@emc.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-05-19 21:30:19 +0530"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Implementation for CoprHD Cinder Drivers."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch set includes following CoprHD Cinder drivers."},{"line_number":10,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"bab6814e_ef65cf1d","line":7,"range":{"start_line":7,"start_character":40,"end_line":7,"end_character":41},"updated":"2016-05-23 15:33:55.000000000","message":"Summary line shouldn\u0027t have a \u0027.\u0027","commit_id":"fb58b794d7780a614b2aaf0ff8fde6e3217862f5"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"debc7afeea1d32fe63a779ef0fe4b26cd37053dd","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     hallur, parashuram \u003cparashuram.hallur@emc.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-06-06 15:10:44 +0530"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Implementation for CoprHD Cinder Drivers."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch set includes following CoprHD Cinder drivers."},{"line_number":10,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"7aa08908_2961043a","line":7,"range":{"start_line":7,"start_character":40,"end_line":7,"end_character":41},"updated":"2016-06-07 14:49:59.000000000","message":"Summary line shouldn\u0027t end with a \u0027.\u0027","commit_id":"6883853fe29cafea5bfd348cd4b6de6eaddede67"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"debc7afeea1d32fe63a779ef0fe4b26cd37053dd","unresolved":false,"context_lines":[{"line_number":11,"context_line":"1-Cinder iSCSI Block Volume Driver for CoprHD"},{"line_number":12,"context_line":"2-Cinder FC Block Volume Driver for CoprHD"},{"line_number":13,"context_line":"3-Cinder ScaleIO Block Volume Driver for CoprHD"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Implements: blueprint coprhd-cinder-drivers"},{"line_number":16,"context_line":"Change-Id: I5fe7ac8190edb2405981c4750dcecde00159a3ec"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"7aa08908_4480b546","line":14,"updated":"2016-06-07 14:49:59.000000000","message":"Should this have a DocImpact tag?","commit_id":"6883853fe29cafea5bfd348cd4b6de6eaddede67"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9b0e5dcf382e3d91da1ab95027e537d98383da0d","unresolved":false,"context_lines":[{"line_number":11,"context_line":"1-Cinder iSCSI Block Volume Driver for CoprHD"},{"line_number":12,"context_line":"2-Cinder FC Block Volume Driver for CoprHD"},{"line_number":13,"context_line":"3-Cinder ScaleIO Block Volume Driver for CoprHD"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"DocImpact"},{"line_number":16,"context_line":"Implements: blueprint coprhd-cinder-drivers"},{"line_number":17,"context_line":"Change-Id: I5fe7ac8190edb2405981c4750dcecde00159a3ec"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"3aaa91ec_29d53de4","line":14,"updated":"2016-06-30 14:50:11.000000000","message":"Please add this here:\n\nCI trigger: run emc-coprhd","commit_id":"3809b0c8c5e71d98c8be2eb9ee2d9053baf04945"}],"cinder/tests/unit/test_coprhd.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"fc303d1dba5518c26cff391b09e584715e73afaa","unresolved":false,"context_lines":[{"line_number":1,"context_line":""},{"line_number":2,"context_line":"# Copyright (c) 2012 - 2014 EMC Corporation, Inc."},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":22,"id":"1aa78d24_3d893276","line":1,"updated":"2016-07-06 06:27:50.000000000","message":"Minor nit, but if you do an update, please remove this extra blank line at the beginning.","commit_id":"cf3788db2912b91defa757733a2fadc339a4e5fe"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"fc303d1dba5518c26cff391b09e584715e73afaa","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from cinder import context"},{"line_number":19,"context_line":"from cinder import test"},{"line_number":20,"context_line":"from cinder.volume import volume_types"},{"line_number":21,"context_line":"from mock import Mock"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from cinder.volume.drivers.coprhd import common as coprhd_common"},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"1aa78d24_bd952288","line":21,"updated":"2016-07-06 06:27:50.000000000","message":"mock import should be above the local cinder imports in its own third party lib import group.","commit_id":"cf3788db2912b91defa757733a2fadc339a4e5fe"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4dc1a7dd9413be15ad4486ab3ae52ac81dab1784","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from cinder.volume import volume_types"},{"line_number":21,"context_line":"from mock import Mock"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from cinder.volume.drivers.coprhd import common as coprhd_common"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"\u0027\u0027\u0027"},{"line_number":26,"context_line":"Test Data required for mocking"}],"source_content_type":"text/x-python","patch_set":22,"id":"1aa78d24_4d49b5cf","line":23,"updated":"2016-07-07 01:47:34.000000000","message":"This line should move up and be in the same import group as other cinder imports.","commit_id":"cf3788db2912b91defa757733a2fadc339a4e5fe"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"fc303d1dba5518c26cff391b09e584715e73afaa","unresolved":false,"context_lines":[{"line_number":655,"context_line":""},{"line_number":656,"context_line":"        self.volume_type_id \u003d self.create_coprhd_volume_type()"},{"line_number":657,"context_line":""},{"line_number":658,"context_line":"        from cinder.volume.drivers.coprhd import scaleio as coprhd_scaleio"},{"line_number":659,"context_line":""},{"line_number":660,"context_line":"        self.stubs.Set(coprhd_scaleio.EMCCoprHDScaleIODriver,"},{"line_number":661,"context_line":"                       \u0027_get_common_driver\u0027,"}],"source_content_type":"text/x-python","patch_set":22,"id":"1aa78d24_3df012fe","line":658,"updated":"2016-07-06 06:27:50.000000000","message":"Please move this up with the rest of the imports.","commit_id":"cf3788db2912b91defa757733a2fadc339a4e5fe"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4dc1a7dd9413be15ad4486ab3ae52ac81dab1784","unresolved":false,"context_lines":[{"line_number":768,"context_line":""},{"line_number":769,"context_line":"        self.driver.terminate_connection("},{"line_number":770,"context_line":"            volume_data, connector_data)"},{"line_number":771,"context_line":"        self.driver.delete_volume(volume_data)"}],"source_content_type":"text/x-python","patch_set":22,"id":"1aa78d24_0d584d87","line":771,"updated":"2016-07-07 01:47:34.000000000","message":"I don\u0027t see any unit tests for consistencygroups and cgsnapshots functions.  Can you add them please?","commit_id":"cf3788db2912b91defa757733a2fadc339a4e5fe"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"8b75ed3ab4f00ad88c889474d02a925e7a9b0d5e","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2012 - 2014 EMC Corporation, 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":23,"id":"1aa78d24_cf0fe22c","line":1,"updated":"2016-07-08 22:12:24.000000000","message":"2016","commit_id":"251bc5ef48be1678013a1599ac71260c2092ab3f"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"8b75ed3ab4f00ad88c889474d02a925e7a9b0d5e","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from cinder.volume.drivers.coprhd import scaleio as coprhd_scaleio"},{"line_number":24,"context_line":"from cinder.volume import volume_types"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"\u0027\u0027\u0027"},{"line_number":27,"context_line":"Test Data required for mocking"},{"line_number":28,"context_line":"\u0027\u0027\u0027"},{"line_number":29,"context_line":"export_group_details_data \u003d {"}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_0f1a8a6e","line":26,"updated":"2016-07-08 22:12:24.000000000","message":"Use \"\"\"","commit_id":"251bc5ef48be1678013a1599ac71260c2092ab3f"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"8b75ed3ab4f00ad88c889474d02a925e7a9b0d5e","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"\u0027\u0027\u0027"},{"line_number":27,"context_line":"Test Data required for mocking"},{"line_number":28,"context_line":"\u0027\u0027\u0027"},{"line_number":29,"context_line":"export_group_details_data \u003d {"},{"line_number":30,"context_line":"    \"inactive\": False,"},{"line_number":31,"context_line":"    \"initiators\": [{\"creation_time\": 1392194176020,"}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_6f250ead","line":28,"updated":"2016-07-08 22:12:24.000000000","message":"Same here.","commit_id":"251bc5ef48be1678013a1599ac71260c2092ab3f"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"8b75ed3ab4f00ad88c889474d02a925e7a9b0d5e","unresolved":false,"context_lines":[{"line_number":289,"context_line":"    data."},{"line_number":290,"context_line":"    Refer -"},{"line_number":291,"context_line":"    http://www.voidspace.org.uk/python/mock/index.html#user-guide"},{"line_number":292,"context_line":"    \u0027\u0027\u0027"},{"line_number":293,"context_line":""},{"line_number":294,"context_line":"    def init_coprhd_api_components(self):"},{"line_number":295,"context_line":"        self.volume_obj \u003d Mock()"}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_af56d603","line":292,"updated":"2016-07-08 22:12:24.000000000","message":"Can you remove comments from line 286-292?","commit_id":"251bc5ef48be1678013a1599ac71260c2092ab3f"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"8b75ed3ab4f00ad88c889474d02a925e7a9b0d5e","unresolved":false,"context_lines":[{"line_number":763,"context_line":""},{"line_number":764,"context_line":"        self.driver.terminate_connection("},{"line_number":765,"context_line":"            volume_data, connector_data)"},{"line_number":766,"context_line":"        self.driver.delete_volume(volume_data)"}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_8fa95ae2","line":766,"updated":"2016-07-08 22:12:24.000000000","message":"Please add unit tests for consistencygroups and cgsnapshots.  Don\u0027t forget to use fields.ConsistencyGroupStatus here:\n\nhttps://github.com/openstack/cinder/blob/master/cinder/objects/fields.py#L46","commit_id":"251bc5ef48be1678013a1599ac71260c2092ab3f"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"6fe731609da2cc52c2f6ef42e6a30ed6e8a5cdf1","unresolved":false,"context_lines":[{"line_number":878,"context_line":"        cg_data \u003d get_test_CG_data(self.volume_type_id)"},{"line_number":879,"context_line":"        ctx \u003d context.get_admin_context()"},{"line_number":880,"context_line":"        self.driver.create_consistencygroup(ctx, cg_data)"},{"line_number":881,"context_line":"        model_update, volumes_model_update \u003d \\"},{"line_number":882,"context_line":"            self.driver.delete_consistencygroup(ctx, cg_data, [])"},{"line_number":883,"context_line":"        self.assertEqual([], volumes_model_update, \u0027Unexpected return data\u0027)"},{"line_number":884,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"1aa78d24_1f3565d9","line":881,"updated":"2016-07-11 13:45:10.000000000","message":"nit: use () instead of \\ for a statement stretched to multiple lines.\n\nSame for the functions below this one.\n\nUpdate it only if you need to do another patch.","commit_id":"a7c715b4d08d369ad1246e23b54c36cf89d44a78"}],"cinder/volume/drivers/coprhd/common.py":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"f6adf4fc90e9eec02f2d68acfc881402dc7ca184","unresolved":false,"context_lines":[{"line_number":18,"context_line":"import string"},{"line_number":19,"context_line":"import sys"},{"line_number":20,"context_line":"import time"},{"line_number":21,"context_line":"import traceback"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from oslo_config import cfg"},{"line_number":24,"context_line":"from oslo_log import log as logging"}],"source_content_type":"text/x-python","patch_set":4,"id":"9abb7d3a_c96e99c8","line":21,"updated":"2016-06-03 15:29:14.000000000","message":"Remove traceback","commit_id":"15cafc6a9bc8d330b6a8b36534d399fec521e78a"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"f6adf4fc90e9eec02f2d68acfc881402dc7ca184","unresolved":false,"context_lines":[{"line_number":85,"context_line":"               default\u003dNone,"},{"line_number":86,"context_line":"               help\u003d\u0027Rest Gateway Password\u0027,"},{"line_number":87,"context_line":"               secret\u003dTrue),"},{"line_number":88,"context_line":"    cfg.StrOpt(\u0027scaleio_verify_server_certificate\u0027,"},{"line_number":89,"context_line":"               default\u003d\u0027False\u0027,"},{"line_number":90,"context_line":"               help\u003d\u0027verify server certificate\u0027),"},{"line_number":91,"context_line":"    cfg.StrOpt(\u0027scaleio_server_certificate_path\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"9abb7d3a_49e629b5","line":88,"updated":"2016-06-03 15:29:14.000000000","message":"Should be a BoolOpt instead of StrOpt.","commit_id":"15cafc6a9bc8d330b6a8b36534d399fec521e78a"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"f6adf4fc90e9eec02f2d68acfc881402dc7ca184","unresolved":false,"context_lines":[{"line_number":91,"context_line":"    cfg.StrOpt(\u0027scaleio_server_certificate_path\u0027,"},{"line_number":92,"context_line":"               default\u003dNone,"},{"line_number":93,"context_line":"               help\u003d\u0027Server certificate path\u0027),"},{"line_number":94,"context_line":"    cfg.StrOpt(\u0027coprhd_emulate_snapshot\u0027,"},{"line_number":95,"context_line":"               default\u003d\u0027False\u0027,"},{"line_number":96,"context_line":"               help\u003d\u0027True | False to indicate if the storage array \u0027"},{"line_number":97,"context_line":"               \u0027in CoprHD is VMAX or VPLEX\u0027),"}],"source_content_type":"text/x-python","patch_set":4,"id":"9abb7d3a_c90cd996","line":94,"updated":"2016-06-03 15:29:14.000000000","message":"Should be a BoolOpt instead of StrOpt.","commit_id":"15cafc6a9bc8d330b6a8b36534d399fec521e78a"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"f6adf4fc90e9eec02f2d68acfc881402dc7ca184","unresolved":false,"context_lines":[{"line_number":126,"context_line":"                exception_message \u003d (_(\"\\nCoprHD Exception: %(err_text)s\\n\""},{"line_number":127,"context_line":"                                       \" Stack Trace:\\n%(traceback)s\"),"},{"line_number":128,"context_line":"                                     {\u0027err_text\u0027: e.err_text,"},{"line_number":129,"context_line":"                                      \u0027traceback\u0027: traceback.format_exc()})"},{"line_number":130,"context_line":"                raise exception.VolumeBackendAPIException("},{"line_number":131,"context_line":"                    data\u003dexception_message)"},{"line_number":132,"context_line":"        except Exception:"}],"source_content_type":"text/x-python","patch_set":4,"id":"9abb7d3a_0942613e","line":129,"updated":"2016-06-03 15:29:14.000000000","message":"Use LOG.exception, which will give you a stack trace.\n\nThis file should not need to import the traceback module.","commit_id":"15cafc6a9bc8d330b6a8b36534d399fec521e78a"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"f6adf4fc90e9eec02f2d68acfc881402dc7ca184","unresolved":false,"context_lines":[{"line_number":133,"context_line":"            exception_message \u003d (_(\"\\nGeneral Exception: %(exec_info)s\\nStack\""},{"line_number":134,"context_line":"                                   \" Trace:\\n%(traceback_format)s\"),"},{"line_number":135,"context_line":"                                 {\u0027exec_info\u0027: sys.exc_info()[0],"},{"line_number":136,"context_line":"                                  \u0027traceback_format\u0027: traceback.format_exc()})"},{"line_number":137,"context_line":"            raise exception.VolumeBackendAPIException("},{"line_number":138,"context_line":"                data\u003dexception_message)"},{"line_number":139,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9abb7d3a_0969c1be","line":136,"updated":"2016-06-03 15:29:14.000000000","message":"Same re: traceback.","commit_id":"15cafc6a9bc8d330b6a8b36534d399fec521e78a"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"f6adf4fc90e9eec02f2d68acfc881402dc7ca184","unresolved":false,"context_lines":[{"line_number":146,"context_line":"class EMCCoprHDDriverCommon(object):"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    OPENSTACK_TAG \u003d \u0027OpenStack\u0027"},{"line_number":149,"context_line":"    AUTHENTICATED \u003d False"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"    def __init__(self, protocol, default_backend_name, configuration\u003dNone):"},{"line_number":152,"context_line":"        self.protocol \u003d protocol"}],"source_content_type":"text/x-python","patch_set":4,"id":"9abb7d3a_cc57c700","line":149,"updated":"2016-06-03 15:29:14.000000000","message":"This should be an instance variable defined in __init__ instead of the class.","commit_id":"15cafc6a9bc8d330b6a8b36534d399fec521e78a"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"f6adf4fc90e9eec02f2d68acfc881402dc7ca184","unresolved":false,"context_lines":[{"line_number":222,"context_line":""},{"line_number":223,"context_line":"        if self.configuration.coprhd_varray is None:"},{"line_number":224,"context_line":"            message \u003d _(\"coprhd_varray is not set in cinder configuration\")"},{"line_number":225,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmessage)"},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"    def authenticate_user(self):"},{"line_number":228,"context_line":"        # we should check to see if we are already authenticated before blindly"}],"source_content_type":"text/x-python","patch_set":4,"id":"9abb7d3a_ec0e0b31","line":225,"updated":"2016-06-03 15:29:14.000000000","message":"This should ensure that coprhd_security_file exists if it was set in config.","commit_id":"15cafc6a9bc8d330b6a8b36534d399fec521e78a"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"f6adf4fc90e9eec02f2d68acfc881402dc7ca184","unresolved":false,"context_lines":[{"line_number":227,"context_line":"    def authenticate_user(self):"},{"line_number":228,"context_line":"        # we should check to see if we are already authenticated before blindly"},{"line_number":229,"context_line":"        # doing it again"},{"line_number":230,"context_line":"        if EMCCoprHDDriverCommon.AUTHENTICATED is False:"},{"line_number":231,"context_line":"            obj \u003d CoprHD_auth.Authentication("},{"line_number":232,"context_line":"                self.configuration.coprhd_hostname,"},{"line_number":233,"context_line":"                self.configuration.coprhd_port)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9abb7d3a_ac2363a6","line":230,"updated":"2016-06-03 15:29:14.000000000","message":"Should reference self.AUTHENTICATED.","commit_id":"15cafc6a9bc8d330b6a8b36534d399fec521e78a"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"f6adf4fc90e9eec02f2d68acfc881402dc7ca184","unresolved":false,"context_lines":[{"line_number":254,"context_line":"            CoprHD_utils.AUTH_TOKEN \u003d obj.authenticate_user(username,"},{"line_number":255,"context_line":"                                                            password)"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"            EMCCoprHDDriverCommon.AUTHENTICATED \u003d True"},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"    def create_volume(self, vol, driver):"},{"line_number":260,"context_line":"        self.authenticate_user()"}],"source_content_type":"text/x-python","patch_set":4,"id":"9abb7d3a_ec356bdb","line":257,"updated":"2016-06-03 15:29:14.000000000","message":"Should reference self.AUTHENTICATED.","commit_id":"15cafc6a9bc8d330b6a8b36534d399fec521e78a"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"f6adf4fc90e9eec02f2d68acfc881402dc7ca184","unresolved":false,"context_lines":[{"line_number":765,"context_line":"                                  volume_name)"},{"line_number":766,"context_line":""},{"line_number":767,"context_line":"    @retry_wrapper"},{"line_number":768,"context_line":"    def create_volume_from_snapshot(self, snapshot, volume, volume_db):"},{"line_number":769,"context_line":"        \"\"\"Creates volume from given snapshot ( snapshot clone to volume )\"\"\""},{"line_number":770,"context_line":"        self.authenticate_user()"},{"line_number":771,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9abb7d3a_ccca27a1","line":768,"updated":"2016-06-03 15:29:14.000000000","message":"This should not take volume_db as a parameter.  I believe you can get the volume from snapshot[\u0027volume\u0027].","commit_id":"15cafc6a9bc8d330b6a8b36534d399fec521e78a"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"f6adf4fc90e9eec02f2d68acfc881402dc7ca184","unresolved":false,"context_lines":[{"line_number":863,"context_line":"                LOG.exception(_LE(\"List volumes failed\"))"},{"line_number":864,"context_line":""},{"line_number":865,"context_line":"    @retry_wrapper"},{"line_number":866,"context_line":"    def create_snapshot(self, snapshot, volume_db):"},{"line_number":867,"context_line":"        self.authenticate_user()"},{"line_number":868,"context_line":""},{"line_number":869,"context_line":"        ctxt \u003d context.get_admin_context()"}],"source_content_type":"text/x-python","patch_set":4,"id":"9abb7d3a_6c3a1b9a","line":866,"updated":"2016-06-03 15:29:14.000000000","message":"This should not take volume_db as a parameter.  You can get the volume from snapshot[\u0027volume\u0027].","commit_id":"15cafc6a9bc8d330b6a8b36534d399fec521e78a"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"a1cec0e53a5a6fc196c20c341f6b9302ba39dc16","unresolved":false,"context_lines":[{"line_number":115,"context_line":"            # if we got an http error and"},{"line_number":116,"context_line":"            # the string contains 401 or if the string contains the word cookie"},{"line_number":117,"context_line":"            if (e.err_code \u003d\u003d CoprHD_utils.CoprHdError.HTTP_ERR and"},{"line_number":118,"context_line":"                (e.err_text.find(\u0027401\u0027) !\u003d -"},{"line_number":119,"context_line":"                 1 or"},{"line_number":120,"context_line":"                 e.err_text.lower().find(\u0027cookie\u0027) !\u003d -1)):"},{"line_number":121,"context_line":"                retry \u003d True"}],"source_content_type":"text/x-python","patch_set":7,"id":"7aa08908_4b526168","line":118,"updated":"2016-06-13 16:01:35.000000000","message":"!\u003d -1\n\nshould be on one line so that this is readable.","commit_id":"17e87a91cb87522276e9ab5c1905f11b379f9646"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"a1cec0e53a5a6fc196c20c341f6b9302ba39dc16","unresolved":false,"context_lines":[{"line_number":151,"context_line":""},{"line_number":152,"context_line":"        self.init_coprhd_api_components()"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"        self.stats \u003d {\u0027driver_version\u0027: \u00271.0\u0027,"},{"line_number":155,"context_line":"                      \u0027free_capacity_gb\u0027: \u0027unknown\u0027,"},{"line_number":156,"context_line":"                      \u0027reserved_percentage\u0027: \u00270\u0027,"},{"line_number":157,"context_line":"                      \u0027storage_protocol\u0027: protocol,"}],"source_content_type":"text/x-python","patch_set":7,"id":"7aa08908_8b8d69d5","line":154,"updated":"2016-06-13 16:01:35.000000000","message":"Most drivers use a major.minor.revision format here, would probably be best to make this \u00271.0.0\u0027.","commit_id":"17e87a91cb87522276e9ab5c1905f11b379f9646"},{"author":{"_account_id":11676,"name":"wuyuting","email":"wytdahu@gmail.com","username":"wuyuting"},"change_message_id":"8748b63770f0dfa6de50af4d6bc94beb6efa1716","unresolved":false,"context_lines":[{"line_number":784,"context_line":"        self.authenticate_user()"},{"line_number":785,"context_line":""},{"line_number":786,"context_line":"        if self.configuration.coprhd_emulate_snapshot \u003d\u003d \u0027True\u0027:"},{"line_number":787,"context_line":"            self.create_cloned_volume(volume, snapshot)"},{"line_number":788,"context_line":"            return"},{"line_number":789,"context_line":""},{"line_number":790,"context_line":"        src_snapshot_name \u003d None"}],"source_content_type":"text/x-python","patch_set":7,"id":"7aa08908_e29b72c7","line":787,"range":{"start_line":787,"start_character":46,"end_line":787,"end_character":54},"updated":"2016-06-13 14:46:07.000000000","message":"This para should be a volume ref not a snapshot, so please check is this ok.","commit_id":"17e87a91cb87522276e9ab5c1905f11b379f9646"},{"author":{"_account_id":11676,"name":"wuyuting","email":"wytdahu@gmail.com","username":"wuyuting"},"change_message_id":"8748b63770f0dfa6de50af4d6bc94beb6efa1716","unresolved":false,"context_lines":[{"line_number":813,"context_line":"                new_volume_name,"},{"line_number":814,"context_line":"                resource_id,"},{"line_number":815,"context_line":"                sync\u003dTrue)"},{"line_number":816,"context_line":""},{"line_number":817,"context_line":"        except CoprHD_utils.CoprHdError as e:"},{"line_number":818,"context_line":"            if e.err_code \u003d\u003d CoprHD_utils.CoprHdError.SOS_FAILURE_ERR:"},{"line_number":819,"context_line":"                raise CoprHD_utils.CoprHdError("}],"source_content_type":"text/x-python","patch_set":7,"id":"7aa08908_c23116a4","line":816,"range":{"start_line":816,"start_character":0,"end_line":816,"end_character":0},"updated":"2016-06-13 14:46:07.000000000","message":"The volume created from snapshot can have larger size than snapshot. So it\u0027s necessary to expand the volume if it is larger than snapshot.","commit_id":"17e87a91cb87522276e9ab5c1905f11b379f9646"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5238207f10e98d8153686ed93ab837ecc213a8dd","unresolved":false,"context_lines":[{"line_number":74,"context_line":"    cfg.StrOpt(\u0027coprhd_varray\u0027,"},{"line_number":75,"context_line":"               default\u003dNone,"},{"line_number":76,"context_line":"               help\u003d\u0027Virtual Array to utilize within the CoprHD Instance\u0027),"},{"line_number":77,"context_line":"    cfg.StrOpt(\u0027coprhd_scaleio_rest_gateway_ip\u0027,"},{"line_number":78,"context_line":"               default\u003d\u0027None\u0027,"},{"line_number":79,"context_line":"               help\u003d\u0027Rest Gateway for Scaleio\u0027),"},{"line_number":80,"context_line":"    cfg.PortOpt(\u0027coprhd_scaleio_rest_gateway_port\u0027,"},{"line_number":81,"context_line":"                default\u003d4984,"},{"line_number":82,"context_line":"                help\u003d\u0027Rest Gateway Port for Scaleio\u0027),"},{"line_number":83,"context_line":"    cfg.StrOpt(\u0027coprhd_scaleio_rest_server_username\u0027,"},{"line_number":84,"context_line":"               default\u003dNone,"},{"line_number":85,"context_line":"               help\u003d\u0027Username for Rest Gateway\u0027),"},{"line_number":86,"context_line":"    cfg.StrOpt(\u0027coprhd_scaleio_rest_server_password\u0027,"},{"line_number":87,"context_line":"               default\u003dNone,"},{"line_number":88,"context_line":"               help\u003d\u0027Rest Gateway Password\u0027,"},{"line_number":89,"context_line":"               secret\u003dTrue),"},{"line_number":90,"context_line":"    cfg.BoolOpt(\u0027scaleio_verify_server_certificate\u0027,"},{"line_number":91,"context_line":"                default\u003dFalse,"},{"line_number":92,"context_line":"                help\u003d\u0027verify server certificate\u0027),"},{"line_number":93,"context_line":"    cfg.StrOpt(\u0027scaleio_server_certificate_path\u0027,"},{"line_number":94,"context_line":"               default\u003dNone,"},{"line_number":95,"context_line":"               help\u003d\u0027Server certificate path\u0027),"},{"line_number":96,"context_line":"    cfg.BoolOpt(\u0027coprhd_emulate_snapshot\u0027,"},{"line_number":97,"context_line":"                default\u003dFalse,"},{"line_number":98,"context_line":"                help\u003d\u0027True | False to indicate if the storage array \u0027"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_3bc91527","line":95,"range":{"start_line":77,"start_character":0,"end_line":95,"end_character":47},"updated":"2016-06-24 13:24:47.000000000","message":"Shouldn\u0027t we define ScaleIO options in ScaleIO version of the driver?\n\nNo hard leaning from my side here, just asking.","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5238207f10e98d8153686ed93ab837ecc213a8dd","unresolved":false,"context_lines":[{"line_number":128,"context_line":"                    data\u003dexception_message)"},{"line_number":129,"context_line":"        except Exception:"},{"line_number":130,"context_line":"            exception_message \u003d (_LE(\"\\nGeneral Exception: %(exec_info)s\\n\"),"},{"line_number":131,"context_line":"                                 {\u0027exec_info\u0027: sys.exc_info()[0]})"},{"line_number":132,"context_line":"            LOG.exception(exception_message)"},{"line_number":133,"context_line":"            raise exception.VolumeBackendAPIException("},{"line_number":134,"context_line":"                data\u003dexception_message)"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_7b427d69","line":131,"range":{"start_line":131,"start_character":47,"end_line":131,"end_character":61},"updated":"2016-06-24 13:24:47.000000000","message":"Use of sys.exc_info() in exception handlers is dangerous in Python 3 [1].\n\n[1] https://review.openstack.org/#/c/332686/","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5238207f10e98d8153686ed93ab837ecc213a8dd","unresolved":false,"context_lines":[{"line_number":235,"context_line":"                self.configuration.coprhd_hostname,"},{"line_number":236,"context_line":"                self.configuration.coprhd_port)"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"            username \u003d None"},{"line_number":239,"context_line":"            password \u003d None"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"            username \u003d self.configuration.coprhd_username"},{"line_number":242,"context_line":"            password \u003d self.configuration.coprhd_password"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_8640b035","line":239,"range":{"start_line":238,"start_character":0,"end_line":239,"end_character":27},"updated":"2016-06-24 13:24:47.000000000","message":"These two lines are not needed.","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5238207f10e98d8153686ed93ab837ecc213a8dd","unresolved":false,"context_lines":[{"line_number":260,"context_line":"                cgid \u003d vol[\u0027consistencygroup_id\u0027]"},{"line_number":261,"context_line":"                if cgid:"},{"line_number":262,"context_line":"                    CoprHD_cgid \u003d self._get_coprhd_cgid(cgid)"},{"line_number":263,"context_line":"            except AttributeError as e:"},{"line_number":264,"context_line":"                CoprHD_cgid \u003d None"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"            self.volume_obj.create("}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_06a200fd","line":263,"range":{"start_line":263,"start_character":33,"end_line":263,"end_character":38},"updated":"2016-06-24 13:24:47.000000000","message":"You aren\u0027t using e here.","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5238207f10e98d8153686ed93ab837ecc213a8dd","unresolved":false,"context_lines":[{"line_number":264,"context_line":"                CoprHD_cgid \u003d None"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"            self.volume_obj.create("},{"line_number":267,"context_line":"                self.configuration.coprhd_tenant + \"/\" +"},{"line_number":268,"context_line":"                self.configuration.coprhd_project,"},{"line_number":269,"context_line":"                name, size, self.configuration.coprhd_varray,"},{"line_number":270,"context_line":"                self.vpool,"},{"line_number":271,"context_line":"                # no longer specified in volume creation"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_a6984cc1","line":268,"range":{"start_line":267,"start_character":16,"end_line":268,"end_character":49},"updated":"2016-06-24 13:24:47.000000000","message":"Would be better to use % operator to join strings. Also parameter name says \"project\", but you\u0027re supplying both project and tenant.","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5238207f10e98d8153686ed93ab837ecc213a8dd","unresolved":false,"context_lines":[{"line_number":273,"context_line":"                # no longer specified in volume creation"},{"line_number":274,"context_line":"                consistencygroup\u003dCoprHD_cgid)"},{"line_number":275,"context_line":"        except CoprHD_utils.CoprHdError as e:"},{"line_number":276,"context_line":"            if e.err_code \u003d\u003d CoprHD_utils.CoprHdError.SOS_FAILURE_ERR:"},{"line_number":277,"context_line":"                raise CoprHD_utils.CoprHdError("},{"line_number":278,"context_line":"                    CoprHD_utils.CoprHdError.SOS_FAILURE_ERR,"},{"line_number":279,"context_line":"                    (_(\"Volume %(name)s: create failed\\n%(err)s\"),"},{"line_number":280,"context_line":"                     {\u0027name\u0027: name, \u0027err\u0027: six.text_type(e.msg)}))"},{"line_number":281,"context_line":"            else:"},{"line_number":282,"context_line":"                with excutils.save_and_reraise_exception():"},{"line_number":283,"context_line":"                    LOG.exception(_LE(\"Volume : %s creation failed\"), name)"},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"    @retry_wrapper"},{"line_number":286,"context_line":"    def create_consistencygroup(self, context, group, truncate_name\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_a64dec3f","line":283,"range":{"start_line":276,"start_character":0,"end_line":283,"end_character":75},"updated":"2016-06-24 13:24:47.000000000","message":"Looks like you\u0027re reusing this pattern often. It would be better to move it to a helper method.","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5238207f10e98d8153686ed93ab837ecc213a8dd","unresolved":false,"context_lines":[{"line_number":368,"context_line":"                vol_name \u003d self._get_coprhd_volume_name(vol)"},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"                self.volume_obj.delete("},{"line_number":371,"context_line":"                    self.configuration.coprhd_tenant +"},{"line_number":372,"context_line":"                    \"/\" +"},{"line_number":373,"context_line":"                    self.configuration.coprhd_project +"},{"line_number":374,"context_line":"                    \"/\" +"},{"line_number":375,"context_line":"                    vol_name,"},{"line_number":376,"context_line":"                    sync\u003dTrue,"},{"line_number":377,"context_line":"                    force_delete\u003dTrue)"},{"line_number":378,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_c66758b5","line":375,"range":{"start_line":371,"start_character":0,"end_line":375,"end_character":29},"updated":"2016-06-24 13:24:47.000000000","message":"Please use % operator to format strings.","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5238207f10e98d8153686ed93ab837ecc213a8dd","unresolved":false,"context_lines":[{"line_number":415,"context_line":"            CoprHD_cgid \u003d self._get_coprhd_cgid(cg_id)"},{"line_number":416,"context_line":"            cg_name \u003d self._get_consistencygroup_name(driver, context, cg_id)"},{"line_number":417,"context_line":""},{"line_number":418,"context_line":"        model_update \u003d {}"},{"line_number":419,"context_line":"        LOG.info(_LI(\u0027Start to create cgsnapshot for consistency group\u0027"},{"line_number":420,"context_line":"                     \u0027: %(group_name)s\u0027),"},{"line_number":421,"context_line":"                 {\u0027group_name\u0027: cg_name})"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_4629a836","line":418,"range":{"start_line":418,"start_character":0,"end_line":418,"end_character":25},"updated":"2016-06-24 13:24:47.000000000","message":"Looks like this will be overwritten anyway in line 498.","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5238207f10e98d8153686ed93ab837ecc213a8dd","unresolved":false,"context_lines":[{"line_number":456,"context_line":"                        volUri,"},{"line_number":457,"context_line":"                        snapUri[\u0027id\u0027])"},{"line_number":458,"context_line":""},{"line_number":459,"context_line":"                    if(False \u003d\u003d (CoprHD_utils.get_node_value(snapshot_obj,"},{"line_number":460,"context_line":"                                                             \u0027inactive\u0027))):"},{"line_number":461,"context_line":""},{"line_number":462,"context_line":"                        \"\"\"Creating snapshot for a consistency group"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_06da004c","line":459,"range":{"start_line":459,"start_character":22,"end_line":459,"end_character":23},"updated":"2016-06-24 13:24:47.000000000","message":"Outer parentheses are redundant.","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5238207f10e98d8153686ed93ab837ecc213a8dd","unresolved":false,"context_lines":[{"line_number":459,"context_line":"                    if(False \u003d\u003d (CoprHD_utils.get_node_value(snapshot_obj,"},{"line_number":460,"context_line":"                                                             \u0027inactive\u0027))):"},{"line_number":461,"context_line":""},{"line_number":462,"context_line":"                        \"\"\"Creating snapshot for a consistency group"},{"line_number":463,"context_line":""},{"line_number":464,"context_line":"                           When we create a consistency group snapshot on"},{"line_number":465,"context_line":"                           coprhd then each snapshot of volume in the"},{"line_number":466,"context_line":"                           consistencygroup will be given a subscript. Ex if"},{"line_number":467,"context_line":"                           the snapshot name is cgsnap1 and lets say there are"},{"line_number":468,"context_line":"                           three vols(a,b,c) in CG. Then the names of snapshots"},{"line_number":469,"context_line":"                           of the volumes in cg on coprhd end will be like"},{"line_number":470,"context_line":"                           cgsnap1-1 cgsnap1-2 cgsnap1-3. So, we list the"},{"line_number":471,"context_line":"                           snapshots of the volume under consideration and then"},{"line_number":472,"context_line":"                           split the name  using - from the ending as prefix"},{"line_number":473,"context_line":"                           and postfix. We compare the prefix to the cgsnapshot"},{"line_number":474,"context_line":"                           name and filter our the snapshots that correspond to"},{"line_number":475,"context_line":"                           the cgsnapshot"},{"line_number":476,"context_line":"                        \"\"\""},{"line_number":477,"context_line":"                        if \u0027-\u0027 in snapshot_obj[\u0027name\u0027]:"},{"line_number":478,"context_line":"                            (prefix, postfix) \u003d snapshot_obj["}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_26bc5cdb","line":475,"range":{"start_line":462,"start_character":0,"end_line":475,"end_character":41},"updated":"2016-06-24 13:24:47.000000000","message":"nit: Normally we tend to add such block comments using # sign.","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5238207f10e98d8153686ed93ab837ecc213a8dd","unresolved":false,"context_lines":[{"line_number":491,"context_line":"                                snapUri[\u0027id\u0027],"},{"line_number":492,"context_line":"                                snapshot)"},{"line_number":493,"context_line":""},{"line_number":494,"context_line":"                snapshot[\u0027status\u0027] \u003d \u0027available\u0027"},{"line_number":495,"context_line":"                snapshots_model_update.append("},{"line_number":496,"context_line":"                    {\u0027id\u0027: snapshot[\u0027id\u0027], \u0027status\u0027: \u0027available\u0027})"},{"line_number":497,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_c6711846","line":494,"range":{"start_line":494,"start_character":37,"end_line":494,"end_character":48},"updated":"2016-06-24 13:24:47.000000000","message":"fields.SnapshotStatus.AVAILABLE","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5238207f10e98d8153686ed93ab837ecc213a8dd","unresolved":false,"context_lines":[{"line_number":495,"context_line":"                snapshots_model_update.append("},{"line_number":496,"context_line":"                    {\u0027id\u0027: snapshot[\u0027id\u0027], \u0027status\u0027: \u0027available\u0027})"},{"line_number":497,"context_line":""},{"line_number":498,"context_line":"            model_update \u003d {\u0027status\u0027: fields.ConsistencyGroupStatus.AVAILABLE}"},{"line_number":499,"context_line":""},{"line_number":500,"context_line":"            return model_update, snapshots_model_update"},{"line_number":501,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_867b9027","line":498,"range":{"start_line":498,"start_character":38,"end_line":498,"end_character":77},"updated":"2016-06-24 13:24:47.000000000","message":"That\u0027s actually a CGSnapshotStatus, not ConsistencyGroupStatus. I don\u0027t think we\u0027ve already merged an enum for that.","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5238207f10e98d8153686ed93ab837ecc213a8dd","unresolved":false,"context_lines":[{"line_number":555,"context_line":"            for snapshot in snapshots:"},{"line_number":556,"context_line":"                # snapshot[\u0027status\u0027] \u003d \u0027deleted\u0027"},{"line_number":557,"context_line":"                snapshots_model_update.append("},{"line_number":558,"context_line":"                    {\u0027id\u0027: snapshot[\u0027id\u0027], \u0027status\u0027: \u0027deleted\u0027})"},{"line_number":559,"context_line":""},{"line_number":560,"context_line":"            return model_update, snapshots_model_update"},{"line_number":561,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_2691fc47","line":558,"range":{"start_line":558,"start_character":54,"end_line":558,"end_character":61},"updated":"2016-06-24 13:24:47.000000000","message":"fields.SnapshotStatus.DELETED","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5238207f10e98d8153686ed93ab837ecc213a8dd","unresolved":false,"context_lines":[{"line_number":583,"context_line":"        name \u003d self._get_resource_name(vol, truncate_name)"},{"line_number":584,"context_line":""},{"line_number":585,"context_line":"        vol_uri \u003d self.volume_obj.volume_query("},{"line_number":586,"context_line":"            self.configuration.coprhd_tenant +"},{"line_number":587,"context_line":"            \"/\" +"},{"line_number":588,"context_line":"            self.configuration.coprhd_project +"},{"line_number":589,"context_line":"            \"/\" + name)"},{"line_number":590,"context_line":""},{"line_number":591,"context_line":"        self.set_tags_for_resource("},{"line_number":592,"context_line":"            CoprHD_vol.Volume.URI_TAG_VOLUME, vol_uri, vol, exemptTags)"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_e61ed4b9","line":589,"range":{"start_line":586,"start_character":0,"end_line":589,"end_character":22},"updated":"2016-06-24 13:24:47.000000000","message":"Please use % operator to format string.","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5238207f10e98d8153686ed93ab837ecc213a8dd","unresolved":false,"context_lines":[{"line_number":641,"context_line":"                    # the current transaction"},{"line_number":642,"context_line":"                    if ((not prop.startswith(\"status\") and not"},{"line_number":643,"context_line":"                         prop.startswith(\"obj_status\") and"},{"line_number":644,"context_line":"                         prop !\u003d \"obj_volume\") and (value)):"},{"line_number":645,"context_line":"                        add_tags.append("},{"line_number":646,"context_line":"                            self.OPENSTACK_TAG +"},{"line_number":647,"context_line":"                            \":\" +"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_0667a04d","line":644,"range":{"start_line":644,"start_character":51,"end_line":644,"end_character":52},"updated":"2016-06-24 13:24:47.000000000","message":"redundant parentheses","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5238207f10e98d8153686ed93ab837ecc213a8dd","unresolved":false,"context_lines":[{"line_number":643,"context_line":"                         prop.startswith(\"obj_status\") and"},{"line_number":644,"context_line":"                         prop !\u003d \"obj_volume\") and (value)):"},{"line_number":645,"context_line":"                        add_tags.append("},{"line_number":646,"context_line":"                            self.OPENSTACK_TAG +"},{"line_number":647,"context_line":"                            \":\" +"},{"line_number":648,"context_line":"                            prop +"},{"line_number":649,"context_line":"                            \":\" +"},{"line_number":650,"context_line":"                            str(value))"},{"line_number":651,"context_line":"                except TypeError:"},{"line_number":652,"context_line":"                    LOG.debug(\"Error tagging the resource property %s\", prop)"},{"line_number":653,"context_line":"        except TypeError:"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_a6568c59","line":650,"range":{"start_line":646,"start_character":0,"end_line":650,"end_character":38},"updated":"2016-06-24 13:24:47.000000000","message":"Please use % operator to format strings.","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5238207f10e98d8153686ed93ab837ecc213a8dd","unresolved":false,"context_lines":[{"line_number":663,"context_line":"                None)"},{"line_number":664,"context_line":"        except CoprHD_utils.CoprHdError as e:"},{"line_number":665,"context_line":"            if e.err_code \u003d\u003d CoprHD_utils.CoprHdError.SOS_FAILURE_ERR:"},{"line_number":666,"context_line":"                LOG.debug("},{"line_number":667,"context_line":"                    \"CoprHdError adding the tag: %s\","},{"line_number":668,"context_line":"                    six.text_type(e.msg))"},{"line_number":669,"context_line":""},{"line_number":670,"context_line":"        return CoprHD_tag.list_tags(self.configuration.coprhd_hostname,"},{"line_number":671,"context_line":"                                    self.configuration.coprhd_port,"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_069cc00d","line":668,"range":{"start_line":666,"start_character":0,"end_line":668,"end_character":41},"updated":"2016-06-24 13:24:47.000000000","message":"Would be great to mention that this adding failed.","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5238207f10e98d8153686ed93ab837ecc213a8dd","unresolved":false,"context_lines":[{"line_number":684,"context_line":"                    CoprHD_utils.CoprHdError.SOS_FAILURE_ERR,"},{"line_number":685,"context_line":"                    _(\"Clone can\u0027t be taken individually on a volume\""},{"line_number":686,"context_line":"                      \" that is part of a Consistency Group\"))"},{"line_number":687,"context_line":"        except AttributeError as e:"},{"line_number":688,"context_line":"            LOG.info(_LI(\"No Consistency Group associated with the volume\"))"},{"line_number":689,"context_line":""},{"line_number":690,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_a6b20c92","line":687,"range":{"start_line":687,"start_character":15,"end_line":687,"end_character":29},"updated":"2016-06-24 13:24:47.000000000","message":"Won\u0027t this be KeyError? This is actually super strange that you\u0027re expecting an exception here.","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5238207f10e98d8153686ed93ab837ecc213a8dd","unresolved":false,"context_lines":[{"line_number":685,"context_line":"                    _(\"Clone can\u0027t be taken individually on a volume\""},{"line_number":686,"context_line":"                      \" that is part of a Consistency Group\"))"},{"line_number":687,"context_line":"        except AttributeError as e:"},{"line_number":688,"context_line":"            LOG.info(_LI(\"No Consistency Group associated with the volume\"))"},{"line_number":689,"context_line":""},{"line_number":690,"context_line":"        try:"},{"line_number":691,"context_line":"            (storageresType,"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_e1535ee0","line":688,"range":{"start_line":688,"start_character":0,"end_line":688,"end_character":76},"updated":"2016-06-24 13:24:47.000000000","message":"This isn\u0027t really a useful info. If it was otherwise we would raised, so why log that on info?","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5238207f10e98d8153686ed93ab837ecc213a8dd","unresolved":false,"context_lines":[{"line_number":705,"context_line":"                resource_id,"},{"line_number":706,"context_line":"                sync\u003dTrue)"},{"line_number":707,"context_line":""},{"line_number":708,"context_line":"            clone_vol_path \u003d self.configuration.coprhd_tenant + \\"},{"line_number":709,"context_line":"                \"/\" + self.configuration.coprhd_project + \"/\" + name"},{"line_number":710,"context_line":"            detachable \u003d self.volume_obj.is_volume_detachable(clone_vol_path)"},{"line_number":711,"context_line":"            LOG.debug(\"Is volume detachable : %s\","},{"line_number":712,"context_line":"                      six.text_type(detachable))"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_467088dc","line":709,"range":{"start_line":708,"start_character":0,"end_line":709,"end_character":68},"updated":"2016-06-24 13:24:47.000000000","message":"Please use % operator to format strings and don\u0027t wrap lines using backslash.","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5238207f10e98d8153686ed93ab837ecc213a8dd","unresolved":false,"context_lines":[{"line_number":728,"context_line":"                with excutils.save_and_reraise_exception():"},{"line_number":729,"context_line":"                    LOG.exception(_LE(\"Volume : {%s} clone failed\"), name)"},{"line_number":730,"context_line":""},{"line_number":731,"context_line":"        src_vol_size \u003d None"},{"line_number":732,"context_line":"        if src_vref.volume_size:"},{"line_number":733,"context_line":"            src_vol_size \u003d src_vref.volume_size"},{"line_number":734,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_865d5049","line":731,"range":{"start_line":731,"start_character":0,"end_line":731,"end_character":27},"updated":"2016-06-24 13:24:47.000000000","message":"nit: This assignment is redundant in Python.","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5238207f10e98d8153686ed93ab837ecc213a8dd","unresolved":false,"context_lines":[{"line_number":739,"context_line":"                six.text_type(vol.size) + \"G\")"},{"line_number":740,"context_line":"            try:"},{"line_number":741,"context_line":"                self.volume_obj.expand("},{"line_number":742,"context_line":"                    self.configuration.coprhd_tenant +"},{"line_number":743,"context_line":"                    \"/\" +"},{"line_number":744,"context_line":"                    self.configuration.coprhd_project +"},{"line_number":745,"context_line":"                    \"/\" +"},{"line_number":746,"context_line":"                    name,"},{"line_number":747,"context_line":"                    size_in_bytes,"},{"line_number":748,"context_line":"                    True)"},{"line_number":749,"context_line":"            except CoprHD_utils.CoprHdError as e:"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_e62d34a9","line":746,"range":{"start_line":742,"start_character":0,"end_line":746,"end_character":25},"updated":"2016-06-24 13:24:47.000000000","message":"%","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5238207f10e98d8153686ed93ab837ecc213a8dd","unresolved":false,"context_lines":[{"line_number":767,"context_line":""},{"line_number":768,"context_line":"        try:"},{"line_number":769,"context_line":"            self.volume_obj.expand("},{"line_number":770,"context_line":"                self.configuration.coprhd_tenant +"},{"line_number":771,"context_line":"                \"/\" +"},{"line_number":772,"context_line":"                self.configuration.coprhd_project +"},{"line_number":773,"context_line":"                \"/\" +"},{"line_number":774,"context_line":"                volume_name,"},{"line_number":775,"context_line":"                size_in_bytes,"},{"line_number":776,"context_line":"                True)"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_e6041419","line":773,"range":{"start_line":770,"start_character":0,"end_line":773,"end_character":21},"updated":"2016-06-24 13:24:47.000000000","message":"%","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5238207f10e98d8153686ed93ab837ecc213a8dd","unresolved":false,"context_lines":[{"line_number":842,"context_line":"                six.text_type(volume.size) + \"G\")"},{"line_number":843,"context_line":"            try:"},{"line_number":844,"context_line":"                self.volume_obj.expand("},{"line_number":845,"context_line":"                    self.configuration.coprhd_tenant +"},{"line_number":846,"context_line":"                    \"/\" +"},{"line_number":847,"context_line":"                    self.configuration.coprhd_project +"},{"line_number":848,"context_line":"                    \"/\" +"},{"line_number":849,"context_line":"                    new_volume_name,"},{"line_number":850,"context_line":"                    size_in_bytes,"},{"line_number":851,"context_line":"                    True)"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_a13cb6c8","line":848,"range":{"start_line":845,"start_character":0,"end_line":848,"end_character":25},"updated":"2016-06-24 13:24:47.000000000","message":"%","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5238207f10e98d8153686ed93ab837ecc213a8dd","unresolved":false,"context_lines":[{"line_number":867,"context_line":"        name \u003d self._get_coprhd_volume_name(vol)"},{"line_number":868,"context_line":"        try:"},{"line_number":869,"context_line":"            self.volume_obj.delete("},{"line_number":870,"context_line":"                self.configuration.coprhd_tenant +"},{"line_number":871,"context_line":"                \"/\" +"},{"line_number":872,"context_line":"                self.configuration.coprhd_project +"},{"line_number":873,"context_line":"                \"/\" +"},{"line_number":874,"context_line":"                name,"},{"line_number":875,"context_line":"                sync\u003dTrue)"},{"line_number":876,"context_line":"        except CoprHD_utils.CoprHdError as e:"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_8139bad9","line":873,"range":{"start_line":870,"start_character":0,"end_line":873,"end_character":21},"updated":"2016-06-24 13:24:47.000000000","message":"%","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5238207f10e98d8153686ed93ab837ecc213a8dd","unresolved":false,"context_lines":[{"line_number":878,"context_line":"                LOG.info(_LI("},{"line_number":879,"context_line":"                    \"Volume %s\""},{"line_number":880,"context_line":"                    \" no longer exists; volume deletion is\""},{"line_number":881,"context_line":"                    \" considered success.\"), name)"},{"line_number":882,"context_line":"            elif e.err_code \u003d\u003d CoprHD_utils.CoprHdError.SOS_FAILURE_ERR:"},{"line_number":883,"context_line":"                raise CoprHD_utils.CoprHdError("},{"line_number":884,"context_line":"                    CoprHD_utils.CoprHdError.SOS_FAILURE_ERR,"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_a1431641","line":881,"range":{"start_line":881,"start_character":33,"end_line":881,"end_character":40},"updated":"2016-06-24 13:24:47.000000000","message":"\"successful\" would fit better.","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5238207f10e98d8153686ed93ab837ecc213a8dd","unresolved":false,"context_lines":[{"line_number":888,"context_line":"                with excutils.save_and_reraise_exception():"},{"line_number":889,"context_line":"                    LOG.exception(_LE(\"Volume : %s delete failed\"), name)"},{"line_number":890,"context_line":""},{"line_number":891,"context_line":"    @retry_wrapper"},{"line_number":892,"context_line":"    def list_volume(self):"},{"line_number":893,"context_line":"        try:"},{"line_number":894,"context_line":"            uris \u003d self.volume_obj.list_volumes("},{"line_number":895,"context_line":"                self.configuration.coprhd_tenant +"},{"line_number":896,"context_line":"                \"/\" +"},{"line_number":897,"context_line":"                self.configuration.coprhd_project)"},{"line_number":898,"context_line":"            if len(uris) \u003e 0:"},{"line_number":899,"context_line":"                output \u003d []"},{"line_number":900,"context_line":"                for uri in uris:"},{"line_number":901,"context_line":"                    output.append(self.volume_obj.show_by_uri(uri))"},{"line_number":902,"context_line":""},{"line_number":903,"context_line":"                return CoprHD_utils.format_json_object(output)"},{"line_number":904,"context_line":"            else:"},{"line_number":905,"context_line":"                return"},{"line_number":906,"context_line":"        except CoprHD_utils.CoprHdError:"},{"line_number":907,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":908,"context_line":"                LOG.exception(_LE(\"List volumes failed\"))"},{"line_number":909,"context_line":""},{"line_number":910,"context_line":"    @retry_wrapper"},{"line_number":911,"context_line":"    def create_snapshot(self, snapshot, truncate_name\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_617ace78","line":908,"range":{"start_line":891,"start_character":0,"end_line":908,"end_character":57},"updated":"2016-06-24 13:24:47.000000000","message":"This is unused.","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5238207f10e98d8153686ed93ab837ecc213a8dd","unresolved":false,"context_lines":[{"line_number":919,"context_line":"                    CoprHD_utils.CoprHdError.SOS_FAILURE_ERR,"},{"line_number":920,"context_line":"                    _(\"Snapshot can\u0027t be taken individually on a volume\""},{"line_number":921,"context_line":"                      \" that is part of a Consistency Group\"))"},{"line_number":922,"context_line":"        except AttributeError as e:"},{"line_number":923,"context_line":"            LOG.info(_LI(\"No Consistency Group associated with the volume\"))"},{"line_number":924,"context_line":""},{"line_number":925,"context_line":"        if self.configuration.coprhd_emulate_snapshot:"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_01f02afd","line":922,"range":{"start_line":922,"start_character":29,"end_line":922,"end_character":34},"updated":"2016-06-24 13:24:47.000000000","message":"You\u0027re not using this e.","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5238207f10e98d8153686ed93ab837ecc213a8dd","unresolved":false,"context_lines":[{"line_number":968,"context_line":"                raise CoprHD_utils.CoprHdError("},{"line_number":969,"context_line":"                    CoprHD_utils.CoprHdError.SOS_FAILURE_ERR,"},{"line_number":970,"context_line":"                    (_(\"Snapshot: %(snapshotname)s, create failed\\n%(err)s\"),"},{"line_number":971,"context_line":"                     {\u0027snapshotname\u0027: snapshotname,"},{"line_number":972,"context_line":"                      \u0027err\u0027: six.text_type(e.msg)})"},{"line_number":973,"context_line":"                )"},{"line_number":974,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_61dbee4f","line":971,"range":{"start_line":971,"start_character":38,"end_line":971,"end_character":50},"updated":"2016-06-24 13:24:47.000000000","message":"If self._get_resource_name in line 932 failed, this will raise another exception.","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5238207f10e98d8153686ed93ab837ecc213a8dd","unresolved":false,"context_lines":[{"line_number":989,"context_line":"                    CoprHD_utils.CoprHdError.SOS_FAILURE_ERR,"},{"line_number":990,"context_line":"                    _(\"Snapshot delete can\u0027t be done individually on a volume\""},{"line_number":991,"context_line":"                      \" that is part of a Consistency Group\"))"},{"line_number":992,"context_line":"        except AttributeError as e:"},{"line_number":993,"context_line":"            LOG.info(_LI(\"No Consistency Group associated with the volume\"))"},{"line_number":994,"context_line":""},{"line_number":995,"context_line":"        if self.configuration.coprhd_emulate_snapshot:"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_81f89ac4","line":992,"range":{"start_line":992,"start_character":0,"end_line":992,"end_character":35},"updated":"2016-06-24 13:24:47.000000000","message":"Why you\u0027re expecting AttributeError? And e is unused.","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5238207f10e98d8153686ed93ab837ecc213a8dd","unresolved":false,"context_lines":[{"line_number":1035,"context_line":"                        _LE(\"Snapshot : %s delete failed\"), snapshotname)"},{"line_number":1036,"context_line":""},{"line_number":1037,"context_line":"    @retry_wrapper"},{"line_number":1038,"context_line":"    def initialize_connection(self,"},{"line_number":1039,"context_line":"                              volume,"},{"line_number":1040,"context_line":"                              protocol,"},{"line_number":1041,"context_line":"                              initiatorPorts,"},{"line_number":1042,"context_line":"                              hostname):"},{"line_number":1043,"context_line":""},{"line_number":1044,"context_line":"        try:"},{"line_number":1045,"context_line":"            self.authenticate_user()"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_a1d03620","line":1042,"range":{"start_line":1038,"start_character":0,"end_line":1042,"end_character":40},"updated":"2016-06-24 13:24:47.000000000","message":"Why format parameters like this? Why not just:\n\n    def initialize_connection(self, volume, protocol, initiatorPorts,\n                              hostname):","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5238207f10e98d8153686ed93ab837ecc213a8dd","unresolved":false,"context_lines":[{"line_number":1053,"context_line":"                    LOG.debug("},{"line_number":1054,"context_line":"                        \"checking for initiator port: %s\", initiatorPorts[i])"},{"line_number":1055,"context_line":"                    foundhostname \u003d self._find_host(initiatorPorts[i])"},{"line_number":1056,"context_line":"                    if (foundhostname is None and"},{"line_number":1057,"context_line":"                            i + 1 \u003d\u003d len(initiatorPorts)):"},{"line_number":1058,"context_line":"                        LOG.error(_LE(\"Auto host creation not supported\"))"},{"line_number":1059,"context_line":"                    else:"},{"line_number":1060,"context_line":"                        LOG.info(_LI(\"Found host %s\"), foundhostname)"},{"line_number":1061,"context_line":"                # create an export group for this host"},{"line_number":1062,"context_line":"                foundgroupname \u003d foundhostname + \u0027SG\u0027"},{"line_number":1063,"context_line":"                # create a unique name"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_a17e7616","line":1060,"range":{"start_line":1056,"start_character":0,"end_line":1060,"end_character":69},"updated":"2016-06-24 13:24:47.000000000","message":"Why not simply check if foundhostname isn\u0027t None *after* the loop? This i + 1 \u003d\u003d len is totally confusing.","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5238207f10e98d8153686ed93ab837ecc213a8dd","unresolved":false,"context_lines":[{"line_number":1119,"context_line":"                        None,"},{"line_number":1120,"context_line":"                        None,"},{"line_number":1121,"context_line":"                        self.configuration.coprhd_project,"},{"line_number":1122,"context_line":"                        [volumename + \":\" + str(next_lun_id)],"},{"line_number":1123,"context_line":"                        None,"},{"line_number":1124,"context_line":"                        None)"},{"line_number":1125,"context_line":"                    break"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_a17956ca","line":1122,"range":{"start_line":1122,"start_character":25,"end_line":1122,"end_character":60},"updated":"2016-06-24 13:24:47.000000000","message":"%","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5238207f10e98d8153686ed93ab837ecc213a8dd","unresolved":false,"context_lines":[{"line_number":1167,"context_line":"        try:"},{"line_number":1168,"context_line":"            self.authenticate_user()"},{"line_number":1169,"context_line":"            volumename \u003d self._get_coprhd_volume_name(volume)"},{"line_number":1170,"context_line":"            tenantproject \u003d (self.configuration.coprhd_tenant +"},{"line_number":1171,"context_line":"                             \u0027/\u0027 + self.configuration.coprhd_project)"},{"line_number":1172,"context_line":"            voldetails \u003d self.volume_obj.show(tenantproject + \u0027/\u0027 + volumename)"},{"line_number":1173,"context_line":"            volid \u003d voldetails[\u0027id\u0027]"},{"line_number":1174,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_a1603602","line":1171,"range":{"start_line":1170,"start_character":29,"end_line":1171,"end_character":68},"updated":"2016-06-24 13:24:47.000000000","message":"%\n\nBTW - you\u0027re using such concatenation in a lot of places. Why not just prepare it in constructor?","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5238207f10e98d8153686ed93ab837ecc213a8dd","unresolved":false,"context_lines":[{"line_number":1278,"context_line":"        return itls"},{"line_number":1279,"context_line":""},{"line_number":1280,"context_line":"    def _get_coprhd_cgid(self, cgid):"},{"line_number":1281,"context_line":"        tagname \u003d \"OpenStack:id:\" + cgid"},{"line_number":1282,"context_line":"        rslt \u003d CoprHD_utils.search_by_tag("},{"line_number":1283,"context_line":"            CoprHD_cg.ConsistencyGroup.URI_SEARCH_CONSISTENCY_GROUPS_BY_TAG."},{"line_number":1284,"context_line":"            format(tagname),"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_cc2f7986","line":1281,"range":{"start_line":1281,"start_character":19,"end_line":1281,"end_character":28},"updated":"2016-06-24 13:24:47.000000000","message":"Don\u0027t you have OPENSTACK_TAG constant for that?","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5238207f10e98d8153686ed93ab837ecc213a8dd","unresolved":false,"context_lines":[{"line_number":1289,"context_line":"        # \"OpenStack:obj_id\" the openstack attribute for id can be obj_id"},{"line_number":1290,"context_line":"        # instead of id. this depends on the version"},{"line_number":1291,"context_line":"        if rslt is None or len(rslt) \u003d\u003d 0:"},{"line_number":1292,"context_line":"            tagname \u003d \"OpenStack:obj_id:\" + cgid"},{"line_number":1293,"context_line":"            rslt \u003d CoprHD_utils.search_by_tag("},{"line_number":1294,"context_line":"                CoprHD_cg.ConsistencyGroup"},{"line_number":1295,"context_line":"                .URI_SEARCH_CONSISTENCY_GROUPS_BY_TAG."}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_cc5db916","line":1292,"range":{"start_line":1292,"start_character":23,"end_line":1292,"end_character":32},"updated":"2016-06-24 13:24:47.000000000","message":"ditto","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5238207f10e98d8153686ed93ab837ecc213a8dd","unresolved":false,"context_lines":[{"line_number":1314,"context_line":"        return cgname"},{"line_number":1315,"context_line":""},{"line_number":1316,"context_line":"    def _get_CoprHD_snapshot_name(self, snapshot, resUri):"},{"line_number":1317,"context_line":"        tagname \u003d \"OpenStack:id:\" + snapshot[\u0027id\u0027]"},{"line_number":1318,"context_line":"        rslt \u003d CoprHD_utils.search_by_tag("},{"line_number":1319,"context_line":"            CoprHD_snap.Snapshot.URI_SEARCH_SNAPSHOT_BY_TAG.format(tagname),"},{"line_number":1320,"context_line":"            self.configuration.coprhd_hostname,"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_6c6c85d0","line":1317,"range":{"start_line":1317,"start_character":19,"end_line":1317,"end_character":28},"updated":"2016-06-24 13:24:47.000000000","message":"ditto.","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5238207f10e98d8153686ed93ab837ecc213a8dd","unresolved":false,"context_lines":[{"line_number":1324,"context_line":"        # as \"OpenStack:obj_id\""},{"line_number":1325,"context_line":"        # as snapshots will be having the obj_id instead of just id."},{"line_number":1326,"context_line":"        if not rslt:"},{"line_number":1327,"context_line":"            tagname \u003d \"OpenStack:obj_id:\" + snapshot[\u0027id\u0027]"},{"line_number":1328,"context_line":"            rslt \u003d CoprHD_utils.search_by_tag("},{"line_number":1329,"context_line":"                CoprHD_snap.Snapshot.URI_SEARCH_SNAPSHOT_BY_TAG.format("},{"line_number":1330,"context_line":"                    tagname),"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_ccb49936","line":1327,"range":{"start_line":1327,"start_character":23,"end_line":1327,"end_character":32},"updated":"2016-06-24 13:24:47.000000000","message":"ditto","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5238207f10e98d8153686ed93ab837ecc213a8dd","unresolved":false,"context_lines":[{"line_number":1341,"context_line":"            return rsltSnap[\u0027name\u0027]"},{"line_number":1342,"context_line":""},{"line_number":1343,"context_line":"    def _get_coprhd_volume_name(self, vol, verbose\u003dFalse):"},{"line_number":1344,"context_line":"        tagname \u003d \"OpenStack:id:\" + vol[\u0027id\u0027]"},{"line_number":1345,"context_line":"        rslt \u003d CoprHD_utils.search_by_tag("},{"line_number":1346,"context_line":"            CoprHD_vol.Volume.URI_SEARCH_VOLUMES_BY_TAG.format(tagname),"},{"line_number":1347,"context_line":"            self.configuration.coprhd_hostname,"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_8c6731e8","line":1344,"range":{"start_line":1344,"start_character":19,"end_line":1344,"end_character":28},"updated":"2016-06-24 13:24:47.000000000","message":"ditto","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5238207f10e98d8153686ed93ab837ecc213a8dd","unresolved":false,"context_lines":[{"line_number":1351,"context_line":"        # as \"OpenStack:obj_id\""},{"line_number":1352,"context_line":"        # as snapshots will be having the obj_id instead of just id."},{"line_number":1353,"context_line":"        if len(rslt) \u003d\u003d 0:"},{"line_number":1354,"context_line":"            tagname \u003d \"OpenStack:obj_id:\" + vol[\u0027id\u0027]"},{"line_number":1355,"context_line":"            rslt \u003d CoprHD_utils.search_by_tag("},{"line_number":1356,"context_line":"                CoprHD_vol.Volume.URI_SEARCH_VOLUMES_BY_TAG.format(tagname),"},{"line_number":1357,"context_line":"                self.configuration.coprhd_hostname,"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_6c7ac578","line":1354,"range":{"start_line":1354,"start_character":23,"end_line":1354,"end_character":32},"updated":"2016-06-24 13:24:47.000000000","message":"ditto","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5238207f10e98d8153686ed93ab837ecc213a8dd","unresolved":false,"context_lines":[{"line_number":1360,"context_line":"        if len(rslt) \u003e 0:"},{"line_number":1361,"context_line":"            rsltVol \u003d self.volume_obj.show_by_uri(rslt[0])"},{"line_number":1362,"context_line":""},{"line_number":1363,"context_line":"            if verbose is True:"},{"line_number":1364,"context_line":"                return rsltVol[\u0027name\u0027], rslt[0]"},{"line_number":1365,"context_line":"            else:"},{"line_number":1366,"context_line":"                return rsltVol[\u0027name\u0027]"},{"line_number":1367,"context_line":"        else:"},{"line_number":1368,"context_line":"            raise CoprHD_utils.CoprHdError("},{"line_number":1369,"context_line":"                CoprHD_utils.CoprHdError.NOT_FOUND_ERR,"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_cc8bf966","line":1366,"range":{"start_line":1363,"start_character":0,"end_line":1366,"end_character":38},"updated":"2016-06-24 13:24:47.000000000","message":"Varying number of returned values on a parameter is not a very good code design.","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5238207f10e98d8153686ed93ab837ecc213a8dd","unresolved":false,"context_lines":[{"line_number":1372,"context_line":"    def _get_resource_name(self, resource, truncate_name\u003dFalse):"},{"line_number":1373,"context_line":"        name \u003d resource.get(\u0027display_name\u0027, None)"},{"line_number":1374,"context_line":""},{"line_number":1375,"context_line":"        if name is None or len(name) \u003d\u003d 0:"},{"line_number":1376,"context_line":"            name \u003d resource[\u0027name\u0027]"},{"line_number":1377,"context_line":""},{"line_number":1378,"context_line":"        if truncate_name and len(name) \u003e 32:"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_4cf6e9f9","line":1375,"range":{"start_line":1375,"start_character":8,"end_line":1375,"end_character":42},"updated":"2016-06-24 13:24:47.000000000","message":"if not name:\n\nI think that will give you same condition.","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4f876a01cb4230eadb98210c492f04c024962d85","unresolved":false,"context_lines":[{"line_number":125,"context_line":"                                     {\u0027msg\u0027: e.msg})"},{"line_number":126,"context_line":"                LOG.exception(exception_message)"},{"line_number":127,"context_line":"                raise exception.VolumeBackendAPIException("},{"line_number":128,"context_line":"                    data\u003dexception_message)"},{"line_number":129,"context_line":"        except Exception:"},{"line_number":130,"context_line":"            exception_message \u003d (_LE(\"\\nGeneral Exception: %(exec_info)s\\n\"),"},{"line_number":131,"context_line":"                                 {\u0027exec_info\u0027: sys.exc_info()[0]})"}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_f3ee5b20","line":128,"updated":"2016-06-27 02:22:58.000000000","message":"Please use _ instead of _LE because this message goes to an exception.\nFor the message to be displayed correctly, you should use % here instead of “,”.  See example below:\nhttps://github.com/openstack/cinder/blob/master/cinder/volume/drivers/emc/emc_vmax_common.py#L233-L237\n\nNote: Please check all the places in all the files where you raise an exception.  I see the same issue in all other places as well.  Let me know if you have any questions.\n\nexception_message \u003d (_(\"\\nCoprHD Exception: %(msg)s\\n\") %\n                                     {\u0027msg\u0027: e.msg})\n\nDoc on message for an exception:\nhttp://docs.openstack.org/developer/oslo.i18n/guidelines.html#adding-variables-to-translated-messages\n\nDoc on message for other places (not exception):\nhttp://docs.openstack.org/developer/oslo.i18n/guidelines.html#adding-variables-to-log-messages","commit_id":"14f3ecd4d0317cf6529d3502118e9344f7b36261"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4f876a01cb4230eadb98210c492f04c024962d85","unresolved":false,"context_lines":[{"line_number":361,"context_line":"        name \u003d self._get_resource_name(group, truncate_name)"},{"line_number":362,"context_line":""},{"line_number":363,"context_line":"        try:"},{"line_number":364,"context_line":"            volumes \u003d driver.db.volume_get_all_by_group("},{"line_number":365,"context_line":"                context, group[\u0027id\u0027])"},{"line_number":366,"context_line":""},{"line_number":367,"context_line":"            for vol in volumes:"}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_58702e72","line":364,"updated":"2016-06-27 02:22:58.000000000","message":"You should not be getting volumes from db.  The delete CG interface was changed to pass volumes to the driver.  See example here:\n\nhttps://github.com/openstack/cinder/blob/master/cinder/volume/drivers/emc/scaleio.py#L1149","commit_id":"14f3ecd4d0317cf6529d3502118e9344f7b36261"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4f876a01cb4230eadb98210c492f04c024962d85","unresolved":false,"context_lines":[{"line_number":386,"context_line":"            model_update \u003d {}"},{"line_number":387,"context_line":"            model_update[\u0027status\u0027] \u003d group[\u0027status\u0027]"},{"line_number":388,"context_line":""},{"line_number":389,"context_line":"            return model_update, volumes"},{"line_number":390,"context_line":""},{"line_number":391,"context_line":"        except CoprHD_utils.CoprHdError as e:"},{"line_number":392,"context_line":"            if e.err_code \u003d\u003d CoprHD_utils.CoprHdError.SOS_FAILURE_ERR:"}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_b802f2b1","line":389,"updated":"2016-06-27 02:22:58.000000000","message":"See the example I gave you above.  \"volumes\" should be replaced with an array of dicts constructed by this function.","commit_id":"14f3ecd4d0317cf6529d3502118e9344f7b36261"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4f876a01cb4230eadb98210c492f04c024962d85","unresolved":false,"context_lines":[{"line_number":473,"context_line":"                           and postfix. We compare the prefix to the cgsnapshot"},{"line_number":474,"context_line":"                           name and filter our the snapshots that correspond to"},{"line_number":475,"context_line":"                           the cgsnapshot"},{"line_number":476,"context_line":"                        \"\"\""},{"line_number":477,"context_line":"                        if \u0027-\u0027 in snapshot_obj[\u0027name\u0027]:"},{"line_number":478,"context_line":"                            (prefix, postfix) \u003d snapshot_obj["},{"line_number":479,"context_line":"                                \u0027name\u0027].rsplit(\u0027-\u0027, 1)"}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_d831bea3","line":476,"updated":"2016-06-27 02:22:58.000000000","message":"Please use # instead of \"\"\" for comments in the middle of a function.","commit_id":"14f3ecd4d0317cf6529d3502118e9344f7b36261"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4f876a01cb4230eadb98210c492f04c024962d85","unresolved":false,"context_lines":[{"line_number":553,"context_line":"                0)"},{"line_number":554,"context_line":""},{"line_number":555,"context_line":"            for snapshot in snapshots:"},{"line_number":556,"context_line":"                # snapshot[\u0027status\u0027] \u003d \u0027deleted\u0027"},{"line_number":557,"context_line":"                snapshots_model_update.append("},{"line_number":558,"context_line":"                    {\u0027id\u0027: snapshot[\u0027id\u0027], \u0027status\u0027: \u0027deleted\u0027})"},{"line_number":559,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_3825625b","line":556,"updated":"2016-06-27 02:22:58.000000000","message":"Remove commented out line.","commit_id":"14f3ecd4d0317cf6529d3502118e9344f7b36261"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4f876a01cb4230eadb98210c492f04c024962d85","unresolved":false,"context_lines":[{"line_number":647,"context_line":"                            \":\" +"},{"line_number":648,"context_line":"                            prop +"},{"line_number":649,"context_line":"                            \":\" +"},{"line_number":650,"context_line":"                            str(value))"},{"line_number":651,"context_line":"                except TypeError:"},{"line_number":652,"context_line":"                    LOG.debug(\"Error tagging the resource property %s\", prop)"},{"line_number":653,"context_line":"        except TypeError:"}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_b8195224","line":650,"updated":"2016-06-27 02:22:58.000000000","message":"str() -\u003e six.text_type()","commit_id":"14f3ecd4d0317cf6529d3502118e9344f7b36261"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4f876a01cb4230eadb98210c492f04c024962d85","unresolved":false,"context_lines":[{"line_number":1241,"context_line":"        # completed."},{"line_number":1242,"context_line":""},{"line_number":1243,"context_line":"        itls \u003d []"},{"line_number":1244,"context_line":"        for x in xrange(10):"},{"line_number":1245,"context_line":"            exports \u003d self.volume_obj.get_exports_by_uri(vol_uri)"},{"line_number":1246,"context_line":"            LOG.debug(\"Volume exports: \")"},{"line_number":1247,"context_line":"            LOG.info(vol_uri)"}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_38af227e","line":1244,"updated":"2016-06-27 02:22:58.000000000","message":"Please use a constant for \"10\".","commit_id":"14f3ecd4d0317cf6529d3502118e9344f7b36261"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4f876a01cb4230eadb98210c492f04c024962d85","unresolved":false,"context_lines":[{"line_number":1263,"context_line":"            else:"},{"line_number":1264,"context_line":"                LOG.debug(\"Device Number not found yet.\""},{"line_number":1265,"context_line":"                          \" Retrying after 10 seconds...\")"},{"line_number":1266,"context_line":"                time.sleep(10)"},{"line_number":1267,"context_line":""},{"line_number":1268,"context_line":"        if itls is None:"},{"line_number":1269,"context_line":"            # No device number found after 10 tries; return an empty itl"}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_3898c269","line":1266,"updated":"2016-06-27 02:22:58.000000000","message":"Please use eventlet.sleep which does not block io.  Also suggest to make the wait time configurable or at least use a constant.\n\nhttps://github.com/openstack/cinder/blob/master/cinder/volume/drivers/emc/emc_vnx_cli.py#L1446","commit_id":"14f3ecd4d0317cf6529d3502118e9344f7b36261"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4f876a01cb4230eadb98210c492f04c024962d85","unresolved":false,"context_lines":[{"line_number":1273,"context_line":"                \"volume volumename\u003d%(volumename)s to\""},{"line_number":1274,"context_line":"                \" initiator  initiator_ports\u003d%(initiator_ports)s\"),"},{"line_number":1275,"context_line":"                {\u0027volumename\u0027: volumename,"},{"line_number":1276,"context_line":"                    \u0027initiator_ports\u0027: str(initiator_ports)})"},{"line_number":1277,"context_line":""},{"line_number":1278,"context_line":"        return itls"},{"line_number":1279,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_78cd2a65","line":1276,"updated":"2016-06-27 02:22:58.000000000","message":"str() -\u003e six.text_type()","commit_id":"14f3ecd4d0317cf6529d3502118e9344f7b36261"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4f876a01cb4230eadb98210c492f04c024962d85","unresolved":false,"context_lines":[{"line_number":1547,"context_line":"                self.stats[\u0027total_capacity_gb\u0027] \u003d free_gb + used_gb"},{"line_number":1548,"context_line":"                self.stats[\u0027reserved_percentage\u0027] \u003d (100 *"},{"line_number":1549,"context_line":"                                                     provisioned_gb / ("},{"line_number":1550,"context_line":"                                                         free_gb + used_gb))"},{"line_number":1551,"context_line":""},{"line_number":1552,"context_line":"            return self.stats"},{"line_number":1553,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_98d576e6","line":1550,"updated":"2016-06-27 02:22:58.000000000","message":"This formula does not look right.  Reserved_percentage is the capacity that you do not want to use to provision a lun over the total capacity, so I don\u0027t understand why \"provisioned_db\" is the numerator.\n\nThere is already a reserved_percentage in cinder.conf.  Can you use that like other driver?\n\nhttps://github.com/openstack/cinder/blob/master/cinder/volume/drivers/lvm.py#L251","commit_id":"14f3ecd4d0317cf6529d3502118e9344f7b36261"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c17eb8d495c181dc358fc858cc79732c4ee920ad","unresolved":false,"context_lines":[{"line_number":1248,"context_line":"        if type_id is not None:"},{"line_number":1249,"context_line":"            volume_type \u003d volume_types.get_volume_type(ctxt, type_id)"},{"line_number":1250,"context_line":"            specs \u003d volume_type.get(\u0027extra_specs\u0027)"},{"line_number":1251,"context_line":"            for key, value in specs.iteritems():"},{"line_number":1252,"context_line":"                vpool[key] \u003d value"},{"line_number":1253,"context_line":""},{"line_number":1254,"context_line":"        return vpool"}],"source_content_type":"text/x-python","patch_set":20,"id":"3aaa91ec_f30bdf22","line":1251,"updated":"2016-07-01 15:31:55.000000000","message":"iteritems() is removed in py3.  Please use specs.items() instead.","commit_id":"1ebb8d4f15fcab74bc7c36bc718b7a654c7d5d58"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"fc303d1dba5518c26cff391b09e584715e73afaa","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    commoncoprhdapi as CoprHD_utils)"},{"line_number":39,"context_line":"from cinder.volume.drivers.coprhd.helpers import ("},{"line_number":40,"context_line":"    consistencygroup as CoprHD_cg)"},{"line_number":41,"context_line":"from cinder.volume.drivers.coprhd.helpers import exportgroup as CoprHD_eg"},{"line_number":42,"context_line":"from cinder.volume.drivers.coprhd.helpers import host as CoprHD_host"},{"line_number":43,"context_line":"from cinder.volume.drivers.coprhd.helpers import snapshot as CoprHD_snap"},{"line_number":44,"context_line":"from cinder.volume.drivers.coprhd.helpers import tag as CoprHD_tag"}],"source_content_type":"text/x-python","patch_set":22,"id":"1aa78d24_9d58268c","line":41,"updated":"2016-07-06 06:27:50.000000000","message":"Can we replace all modules names and variables to be lowercase coprhd_* to follow python variable naming conventions?","commit_id":"cf3788db2912b91defa757733a2fadc339a4e5fe"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"fc303d1dba5518c26cff391b09e584715e73afaa","unresolved":false,"context_lines":[{"line_number":91,"context_line":"EXPORT_RETRY_COUNT \u003d 5"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"def retry_wrapper(func):"},{"line_number":95,"context_line":"    def try_and_retry(*args, **kwargs):"},{"line_number":96,"context_line":"        retry \u003d False"},{"line_number":97,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":22,"id":"1aa78d24_3dce522e","line":94,"updated":"2016-07-06 06:27:50.000000000","message":"Did you look at the existing retry wrapper to see if it would work?\n\nhttps://github.com/openstack/cinder/blob/master/cinder/utils.py#L776","commit_id":"cf3788db2912b91defa757733a2fadc339a4e5fe"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"fc303d1dba5518c26cff391b09e584715e73afaa","unresolved":false,"context_lines":[{"line_number":255,"context_line":"            coprhd_err_msg \u003d (_(\"Volume %(name)s: create failed\\n%(err)s\") %"},{"line_number":256,"context_line":"                              {\u0027name\u0027: name, \u0027err\u0027: six.text_type(e.msg)})"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"            log_err_msg \u003d (_LE(\"Volume : %s creation failed\"), name)"},{"line_number":259,"context_line":"            self._raise_or_log_exception("},{"line_number":260,"context_line":"                e.err_code, coprhd_err_msg, log_err_msg)"},{"line_number":261,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"1aa78d24_7d129a0a","line":258,"range":{"start_line":258,"start_character":61,"end_line":258,"end_character":62},"updated":"2016-07-06 06:27:50.000000000","message":"In this case you will need to do the string formatting up front, so change the , to % so log_err_msg contains the final formatted string. Otherwise this creates a variable that holds a tuple, which will not get formatted as expected with the logging call.","commit_id":"cf3788db2912b91defa757733a2fadc339a4e5fe"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"fc303d1dba5518c26cff391b09e584715e73afaa","unresolved":false,"context_lines":[{"line_number":284,"context_line":"                                \" create failed\\n%(err)s\") %"},{"line_number":285,"context_line":"                              {\u0027name\u0027: name, \u0027err\u0027: six.text_type(e.msg)})"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"            log_err_msg \u003d (_LE(\"Consistency Group : %s creation failed\"),"},{"line_number":288,"context_line":"                           name)"},{"line_number":289,"context_line":"            self._raise_or_log_exception(e.err_code, coprhd_err_msg,"},{"line_number":290,"context_line":"                                         log_err_msg)"}],"source_content_type":"text/x-python","patch_set":22,"id":"1aa78d24_ddfbcebf","line":287,"range":{"start_line":287,"start_character":72,"end_line":287,"end_character":73},"updated":"2016-07-06 06:27:50.000000000","message":", \u003e %","commit_id":"cf3788db2912b91defa757733a2fadc339a4e5fe"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"21a25e4723639b9446f879d2741e66d0e7720022","unresolved":false,"context_lines":[{"line_number":293,"context_line":"    def update_consistencygroup(self, group, add_volumes,"},{"line_number":294,"context_line":"                                remove_volumes):"},{"line_number":295,"context_line":"        self.authenticate_user()"},{"line_number":296,"context_line":"        model_update \u003d {\u0027status\u0027: \u0027available\u0027}"},{"line_number":297,"context_line":"        cg_uri \u003d self._get_coprhd_cgid(group[\u0027id\u0027])"},{"line_number":298,"context_line":"        add_volnames \u003d []"},{"line_number":299,"context_line":"        remove_volnames \u003d []"}],"source_content_type":"text/x-python","patch_set":22,"id":"1aa78d24_4df1b5cc","line":296,"updated":"2016-07-07 01:43:24.000000000","message":"Please use fields.ConsistencyGroupStatus.AVAILABLE for \u0027available\u0027.\n\nSee definition here:\nhttps://github.com/openstack/cinder/blob/master/cinder/objects/fields.py#L46\n\nPlease change all status used for consistency groups and cgsnapshots using fields.ConsistencyGroupStatus.","commit_id":"cf3788db2912b91defa757733a2fadc339a4e5fe"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"fc303d1dba5518c26cff391b09e584715e73afaa","unresolved":false,"context_lines":[{"line_number":322,"context_line":"                                \" update failed\\n%(err)s\") %"},{"line_number":323,"context_line":"                              {\u0027cg_uri\u0027: cg_uri, \u0027err\u0027: six.text_type(e.msg)})"},{"line_number":324,"context_line":""},{"line_number":325,"context_line":"            log_err_msg \u003d (_LE(\"Consistency Group : %s update failed\"),"},{"line_number":326,"context_line":"                           cg_uri)"},{"line_number":327,"context_line":"            self._raise_or_log_exception(e.err_code, coprhd_err_msg,"},{"line_number":328,"context_line":"                                         log_err_msg)"}],"source_content_type":"text/x-python","patch_set":22,"id":"1aa78d24_bdf882c4","line":325,"range":{"start_line":325,"start_character":70,"end_line":325,"end_character":71},"updated":"2016-07-06 06:27:50.000000000","message":", \u003e %","commit_id":"cf3788db2912b91defa757733a2fadc339a4e5fe"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"fc303d1dba5518c26cff391b09e584715e73afaa","unresolved":false,"context_lines":[{"line_number":356,"context_line":"                    volumes_model_update.append(update_item)"},{"line_number":357,"context_line":""},{"line_number":358,"context_line":"                    LOG.error(_LE(\"Failed to delete the volume %(vol)s of CG.\""},{"line_number":359,"context_line":"                                  \"Exception: %(exception)s.\"),"},{"line_number":360,"context_line":"                              {\u0027vol\u0027: vol[\u0027name\u0027], \u0027exception\u0027: err})"},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"            self.consistencygroup_obj.delete("}],"source_content_type":"text/x-python","patch_set":22,"id":"1aa78d24_9ddb064f","line":359,"range":{"start_line":359,"start_character":34,"end_line":359,"end_character":61},"updated":"2016-07-06 06:27:50.000000000","message":"I think it would be better to just remove this line and change this to LOG.exception so the exception gets automatically logged rather than formatted into the log string.","commit_id":"cf3788db2912b91defa757733a2fadc339a4e5fe"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"fc303d1dba5518c26cff391b09e584715e73afaa","unresolved":false,"context_lines":[{"line_number":374,"context_line":"                                \" delete failed\\n%(err)s\") %"},{"line_number":375,"context_line":"                              {\u0027name\u0027: name, \u0027err\u0027: six.text_type(e.msg)})"},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"            log_err_msg \u003d (_LE(\"Consistency Group : %s deletion failed\"),"},{"line_number":378,"context_line":"                           name)"},{"line_number":379,"context_line":"            self._raise_or_log_exception(e.err_code, coprhd_err_msg,"},{"line_number":380,"context_line":"                                         log_err_msg)"}],"source_content_type":"text/x-python","patch_set":22,"id":"1aa78d24_7de0dafa","line":377,"range":{"start_line":377,"start_character":72,"end_line":377,"end_character":73},"updated":"2016-07-06 06:27:50.000000000","message":"%","commit_id":"cf3788db2912b91defa757733a2fadc339a4e5fe"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"fc303d1dba5518c26cff391b09e584715e73afaa","unresolved":false,"context_lines":[{"line_number":434,"context_line":"                        volUri,"},{"line_number":435,"context_line":"                        snapUri[\u0027id\u0027])"},{"line_number":436,"context_line":""},{"line_number":437,"context_line":"                    if False \u003d\u003d (CoprHD_utils.get_node_value(snapshot_obj,"},{"line_number":438,"context_line":"                                                             \u0027inactive\u0027)):"},{"line_number":439,"context_line":""},{"line_number":440,"context_line":"                        # Creating snapshot for a consistency group."}],"source_content_type":"text/x-python","patch_set":22,"id":"1aa78d24_3dc13255","line":437,"range":{"start_line":437,"start_character":33,"end_line":437,"end_character":60},"updated":"2016-07-06 06:27:50.000000000","message":"if not CoprHD_utils.get_node_value(...):","commit_id":"cf3788db2912b91defa757733a2fadc339a4e5fe"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"fc303d1dba5518c26cff391b09e584715e73afaa","unresolved":false,"context_lines":[{"line_number":483,"context_line":"                               \u0027err\u0027: six.text_type(e.msg)})"},{"line_number":484,"context_line":""},{"line_number":485,"context_line":"            log_err_msg \u003d (_LE(\"Snapshot %(name)s for Consistency\""},{"line_number":486,"context_line":"                               \" Group: %(cg_name)s creation failed\"),"},{"line_number":487,"context_line":"                           {\u0027cg_name\u0027: cg_name,"},{"line_number":488,"context_line":"                            \u0027name\u0027: cgsnapshot_name})"},{"line_number":489,"context_line":"            self._raise_or_log_exception(e.err_code, coprhd_err_msg,"}],"source_content_type":"text/x-python","patch_set":22,"id":"1aa78d24_1dc71665","line":486,"range":{"start_line":486,"start_character":69,"end_line":486,"end_character":70},"updated":"2016-07-06 06:27:50.000000000","message":"%","commit_id":"cf3788db2912b91defa757733a2fadc339a4e5fe"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"fc303d1dba5518c26cff391b09e584715e73afaa","unresolved":false,"context_lines":[{"line_number":544,"context_line":"                               \u0027err\u0027: six.text_type(e.msg)})"},{"line_number":545,"context_line":""},{"line_number":546,"context_line":"            log_err_msg \u003d (_LE(\"Snapshot %(name)s for Consistency\""},{"line_number":547,"context_line":"                               \" Group: %(cg_name)s deletion failed\"),"},{"line_number":548,"context_line":"                           {\u0027cg_name\u0027: cg_name,"},{"line_number":549,"context_line":"                            \u0027name\u0027: cgsnapshot_name})"},{"line_number":550,"context_line":"            self._raise_or_log_exception(e.err_code, coprhd_err_msg,"}],"source_content_type":"text/x-python","patch_set":22,"id":"1aa78d24_5da35eb2","line":547,"range":{"start_line":547,"start_character":69,"end_line":547,"end_character":70},"updated":"2016-07-06 06:27:50.000000000","message":"%","commit_id":"cf3788db2912b91defa757733a2fadc339a4e5fe"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"fc303d1dba5518c26cff391b09e584715e73afaa","unresolved":false,"context_lines":[{"line_number":585,"context_line":"                remove_tags.append(cTag)"},{"line_number":586,"context_line":""},{"line_number":587,"context_line":"        try:"},{"line_number":588,"context_line":"            if len(remove_tags) \u003e 0:"},{"line_number":589,"context_line":"                self.tag_obj.tag_resource(uri,"},{"line_number":590,"context_line":"                                          resourceId,"},{"line_number":591,"context_line":"                                          None,"}],"source_content_type":"text/x-python","patch_set":22,"id":"1aa78d24_7dae1a99","line":588,"updated":"2016-07-06 06:27:50.000000000","message":"Could be simplified to just be:\n\nif remove_tags:","commit_id":"cf3788db2912b91defa757733a2fadc339a4e5fe"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"fc303d1dba5518c26cff391b09e584715e73afaa","unresolved":false,"context_lines":[{"line_number":593,"context_line":"        except CoprHD_utils.CoprHdError as e:"},{"line_number":594,"context_line":"            if e.err_code \u003d\u003d CoprHD_utils.CoprHdError.SOS_FAILURE_ERR:"},{"line_number":595,"context_line":"                LOG.debug(\"CoprHdError adding the tag:\\n %s\","},{"line_number":596,"context_line":"                          six.text_type(e.msg))"},{"line_number":597,"context_line":""},{"line_number":598,"context_line":"        # now add the tags for the resource"},{"line_number":599,"context_line":"        add_tags \u003d []"}],"source_content_type":"text/x-python","patch_set":22,"id":"1aa78d24_1d9ef662","line":596,"range":{"start_line":596,"start_character":26,"end_line":596,"end_character":39},"updated":"2016-07-06 06:27:50.000000000","message":"Not needed when passing in to the logger to format the string. The logger will take care of any conversion necessary.","commit_id":"cf3788db2912b91defa757733a2fadc339a4e5fe"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"fc303d1dba5518c26cff391b09e584715e73afaa","unresolved":false,"context_lines":[{"line_number":619,"context_line":"                except TypeError:"},{"line_number":620,"context_line":"                    LOG.debug(\"Error tagging the resource property %s\", prop)"},{"line_number":621,"context_line":"        except TypeError:"},{"line_number":622,"context_line":"            LOG.debug(\"Error tagging the resource properties\")"},{"line_number":623,"context_line":""},{"line_number":624,"context_line":"        try:"},{"line_number":625,"context_line":"            self.tag_obj.tag_resource("}],"source_content_type":"text/x-python","patch_set":22,"id":"1aa78d24_9d8026f9","line":622,"updated":"2016-07-06 06:27:50.000000000","message":"Should this be more than a debug level message?","commit_id":"cf3788db2912b91defa757733a2fadc339a4e5fe"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"fc303d1dba5518c26cff391b09e584715e73afaa","unresolved":false,"context_lines":[{"line_number":631,"context_line":"            if e.err_code \u003d\u003d CoprHD_utils.CoprHdError.SOS_FAILURE_ERR:"},{"line_number":632,"context_line":"                LOG.debug("},{"line_number":633,"context_line":"                    \"Adding the tag failed. CoprHdError: %s\","},{"line_number":634,"context_line":"                    six.text_type(e.msg))"},{"line_number":635,"context_line":""},{"line_number":636,"context_line":"        return self.tag_obj.list_tags(formattedUri)"},{"line_number":637,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"1aa78d24_bd7b6227","line":634,"updated":"2016-07-06 06:27:50.000000000","message":"Same as above.","commit_id":"cf3788db2912b91defa757733a2fadc339a4e5fe"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"fc303d1dba5518c26cff391b09e584715e73afaa","unresolved":false,"context_lines":[{"line_number":675,"context_line":"            detachable \u003d self.volume_obj.is_volume_detachable("},{"line_number":676,"context_line":"                full_project_name, name)"},{"line_number":677,"context_line":"            LOG.debug(\"Is volume detachable : %s\","},{"line_number":678,"context_line":"                      six.text_type(detachable))"},{"line_number":679,"context_line":""},{"line_number":680,"context_line":"            # detach it from the source volume immediately after creation"},{"line_number":681,"context_line":"            if detachable:"}],"source_content_type":"text/x-python","patch_set":22,"id":"1aa78d24_fd716a45","line":678,"updated":"2016-07-06 06:27:50.000000000","message":"Same as above.","commit_id":"cf3788db2912b91defa757733a2fadc339a4e5fe"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"fc303d1dba5518c26cff391b09e584715e73afaa","unresolved":false,"context_lines":[{"line_number":689,"context_line":"            coprhd_err_msg \u003d (_(\"Volume %(name)s: clone failed\\n%(err)s\") %"},{"line_number":690,"context_line":"                              {\u0027name\u0027: name, \u0027err\u0027: six.text_type(e.msg)})"},{"line_number":691,"context_line":""},{"line_number":692,"context_line":"            log_err_msg \u003d (_LE(\"Volume : {%s} clone failed\"), name)"},{"line_number":693,"context_line":"            self._raise_or_log_exception(e.err_code, coprhd_err_msg,"},{"line_number":694,"context_line":"                                         log_err_msg)"},{"line_number":695,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"1aa78d24_3d96523f","line":692,"range":{"start_line":692,"start_character":60,"end_line":692,"end_character":61},"updated":"2016-07-06 06:27:50.000000000","message":"%","commit_id":"cf3788db2912b91defa757733a2fadc339a4e5fe"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"fc303d1dba5518c26cff391b09e584715e73afaa","unresolved":false,"context_lines":[{"line_number":713,"context_line":"                                  {\u0027volume_name\u0027: name,"},{"line_number":714,"context_line":"                                   \u0027err\u0027: six.text_type(e.msg)})"},{"line_number":715,"context_line":""},{"line_number":716,"context_line":"                log_err_msg \u003d (_LE(\"Volume : %s expand failed\"), name)"},{"line_number":717,"context_line":"                self._raise_or_log_exception(e.err_code, coprhd_err_msg,"},{"line_number":718,"context_line":"                                             log_err_msg)"},{"line_number":719,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"1aa78d24_7d9c5a5d","line":716,"range":{"start_line":716,"start_character":63,"end_line":716,"end_character":64},"updated":"2016-07-06 06:27:50.000000000","message":"%","commit_id":"cf3788db2912b91defa757733a2fadc339a4e5fe"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"fc303d1dba5518c26cff391b09e584715e73afaa","unresolved":false,"context_lines":[{"line_number":722,"context_line":"        \"\"\"expands the volume to new_size specified.\"\"\""},{"line_number":723,"context_line":"        self.authenticate_user()"},{"line_number":724,"context_line":"        volume_name \u003d self._get_coprhd_volume_name(vol)"},{"line_number":725,"context_line":"        size_in_bytes \u003d CoprHD_utils.to_bytes(six.text_type(new_size) + \"G\")"},{"line_number":726,"context_line":""},{"line_number":727,"context_line":"        try:"},{"line_number":728,"context_line":"            self.volume_obj.expand("}],"source_content_type":"text/x-python","patch_set":22,"id":"1aa78d24_5db87ec8","line":725,"range":{"start_line":725,"start_character":46,"end_line":725,"end_character":75},"updated":"2016-07-06 06:27:50.000000000","message":"Just a suggestion, but I would just do:\n\n\"%sG\" % new_size","commit_id":"cf3788db2912b91defa757733a2fadc339a4e5fe"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"fc303d1dba5518c26cff391b09e584715e73afaa","unresolved":false,"context_lines":[{"line_number":736,"context_line":"                              {\u0027volume_name\u0027: volume_name,"},{"line_number":737,"context_line":"                               \u0027err\u0027: six.text_type(e.msg)})"},{"line_number":738,"context_line":""},{"line_number":739,"context_line":"            log_err_msg \u003d (_LE(\"Volume : %s expand failed\"),"},{"line_number":740,"context_line":"                           volume_name)"},{"line_number":741,"context_line":"            self._raise_or_log_exception(e.err_code, coprhd_err_msg,"},{"line_number":742,"context_line":"                                         log_err_msg)"}],"source_content_type":"text/x-python","patch_set":22,"id":"1aa78d24_9dae667f","line":739,"range":{"start_line":739,"start_character":59,"end_line":739,"end_character":60},"updated":"2016-07-06 06:27:50.000000000","message":"%","commit_id":"cf3788db2912b91defa757733a2fadc339a4e5fe"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"fc303d1dba5518c26cff391b09e584715e73afaa","unresolved":false,"context_lines":[{"line_number":784,"context_line":"                              {\u0027src_snapshot_name\u0027: src_snapshot_name,"},{"line_number":785,"context_line":"                               \u0027err\u0027: six.text_type(e.msg)})"},{"line_number":786,"context_line":""},{"line_number":787,"context_line":"            log_err_msg \u003d (_LE(\"Snapshot : %s clone failed\"),"},{"line_number":788,"context_line":"                           src_snapshot_name)"},{"line_number":789,"context_line":"            self._raise_or_log_exception(e.err_code, coprhd_err_msg,"},{"line_number":790,"context_line":"                                         log_err_msg)"}],"source_content_type":"text/x-python","patch_set":22,"id":"1aa78d24_5ddfde0c","line":787,"range":{"start_line":787,"start_character":60,"end_line":787,"end_character":61},"updated":"2016-07-06 06:27:50.000000000","message":"%","commit_id":"cf3788db2912b91defa757733a2fadc339a4e5fe"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"fc303d1dba5518c26cff391b09e584715e73afaa","unresolved":false,"context_lines":[{"line_number":791,"context_line":""},{"line_number":792,"context_line":"        if volume[\u0027size\u0027] \u003e snapshot[\u0027volume_size\u0027]:"},{"line_number":793,"context_line":"            size_in_bytes \u003d CoprHD_utils.to_bytes("},{"line_number":794,"context_line":"                six.text_type(volume[\u0027size\u0027]) + \"G\")"},{"line_number":795,"context_line":"            try:"},{"line_number":796,"context_line":"                self.volume_obj.expand("},{"line_number":797,"context_line":"                    (\"%s/%s\" % (self.configuration.coprhd_tenant,"}],"source_content_type":"text/x-python","patch_set":22,"id":"1aa78d24_bdd082f7","line":794,"updated":"2016-07-06 06:27:50.000000000","message":"Same suggestion as above.","commit_id":"cf3788db2912b91defa757733a2fadc339a4e5fe"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"fc303d1dba5518c26cff391b09e584715e73afaa","unresolved":false,"context_lines":[{"line_number":804,"context_line":"                                  {\u0027volume_name\u0027: new_volume_name,"},{"line_number":805,"context_line":"                                   \u0027err\u0027: six.text_type(e.msg)})"},{"line_number":806,"context_line":""},{"line_number":807,"context_line":"                log_err_msg \u003d (_LE(\"Volume : %s expand failed\"),"},{"line_number":808,"context_line":"                               new_volume_name)"},{"line_number":809,"context_line":"                self._raise_or_log_exception(e.err_code, coprhd_err_msg,"},{"line_number":810,"context_line":"                                             log_err_msg)"}],"source_content_type":"text/x-python","patch_set":22,"id":"1aa78d24_3d0bf28f","line":807,"range":{"start_line":807,"start_character":63,"end_line":807,"end_character":64},"updated":"2016-07-06 06:27:50.000000000","message":"%","commit_id":"cf3788db2912b91defa757733a2fadc339a4e5fe"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"fc303d1dba5518c26cff391b09e584715e73afaa","unresolved":false,"context_lines":[{"line_number":829,"context_line":"                                    \"\\n%(err)s\") %"},{"line_number":830,"context_line":"                                  {\u0027name\u0027: name, \u0027err\u0027: six.text_type(e.msg)})"},{"line_number":831,"context_line":""},{"line_number":832,"context_line":"                log_err_msg \u003d (_LE(\"Volume : %s delete failed\"), name)"},{"line_number":833,"context_line":"                self._raise_or_log_exception(e.err_code, coprhd_err_msg,"},{"line_number":834,"context_line":"                                             log_err_msg)"},{"line_number":835,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"1aa78d24_ddfaae74","line":832,"range":{"start_line":832,"start_character":63,"end_line":832,"end_character":64},"updated":"2016-07-06 06:27:50.000000000","message":"%","commit_id":"cf3788db2912b91defa757733a2fadc339a4e5fe"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"fc303d1dba5518c26cff391b09e584715e73afaa","unresolved":false,"context_lines":[{"line_number":894,"context_line":"                                \"\\n%(err)s\") % {\u0027snapshotname\u0027: snapshotname,"},{"line_number":895,"context_line":"                                                \u0027err\u0027: six.text_type(e.msg)})"},{"line_number":896,"context_line":""},{"line_number":897,"context_line":"            log_err_msg \u003d (_LE(\"Snapshot : %s create failed\"), snapshotname)"},{"line_number":898,"context_line":"            self._raise_or_log_exception(e.err_code, coprhd_err_msg,"},{"line_number":899,"context_line":"                                         log_err_msg)"},{"line_number":900,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"1aa78d24_1df1d695","line":897,"range":{"start_line":897,"start_character":61,"end_line":897,"end_character":62},"updated":"2016-07-06 06:27:50.000000000","message":"%","commit_id":"cf3788db2912b91defa757733a2fadc339a4e5fe"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"fc303d1dba5518c26cff391b09e584715e73afaa","unresolved":false,"context_lines":[{"line_number":949,"context_line":"            coprhd_err_msg \u003d (_(\"Snapshot %s : Delete Failed\\n\") %"},{"line_number":950,"context_line":"                              snapshotname)"},{"line_number":951,"context_line":""},{"line_number":952,"context_line":"            log_err_msg \u003d (_LE(\"Snapshot : %s delete failed\"), snapshotname)"},{"line_number":953,"context_line":"            self._raise_or_log_exception(e.err_code, coprhd_err_msg,"},{"line_number":954,"context_line":"                                         log_err_msg)"},{"line_number":955,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"1aa78d24_7d38da3d","line":952,"range":{"start_line":952,"start_character":61,"end_line":952,"end_character":62},"updated":"2016-07-06 06:27:50.000000000","message":"%","commit_id":"cf3788db2912b91defa757733a2fadc339a4e5fe"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"fc303d1dba5518c26cff391b09e584715e73afaa","unresolved":false,"context_lines":[{"line_number":1116,"context_line":"                        # 0 is a valid number for found_device_number."},{"line_number":1117,"context_line":"                        # Only loop if it is None or -1"},{"line_number":1118,"context_line":"                        LOG.debug(\"Found Device Number: %s\","},{"line_number":1119,"context_line":"                                  six.text_type(found_device_number))"},{"line_number":1120,"context_line":"                        itls.append(itl)"},{"line_number":1121,"context_line":""},{"line_number":1122,"context_line":"            if itls:"}],"source_content_type":"text/x-python","patch_set":22,"id":"1aa78d24_9d0ae677","line":1119,"range":{"start_line":1119,"start_character":34,"end_line":1119,"end_character":47},"updated":"2016-07-06 06:27:50.000000000","message":"six.text_type not needed.","commit_id":"cf3788db2912b91defa757733a2fadc339a4e5fe"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"fc303d1dba5518c26cff391b09e584715e73afaa","unresolved":false,"context_lines":[{"line_number":1134,"context_line":"                \"volume volumename\u003d%(volumename)s to\""},{"line_number":1135,"context_line":"                \" initiator  initiator_ports\u003d%(initiator_ports)s\"),"},{"line_number":1136,"context_line":"                {\u0027volumename\u0027: volumename,"},{"line_number":1137,"context_line":"                    \u0027initiator_ports\u0027: six.text_type(initiator_ports)})"},{"line_number":1138,"context_line":""},{"line_number":1139,"context_line":"        return itls"},{"line_number":1140,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"1aa78d24_bd25220a","line":1137,"range":{"start_line":1137,"start_character":39,"end_line":1137,"end_character":52},"updated":"2016-07-06 06:27:50.000000000","message":"Same.","commit_id":"cf3788db2912b91defa757733a2fadc339a4e5fe"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"8b75ed3ab4f00ad88c889474d02a925e7a9b0d5e","unresolved":false,"context_lines":[{"line_number":16,"context_line":"import base64"},{"line_number":17,"context_line":"import binascii"},{"line_number":18,"context_line":"import random"},{"line_number":19,"context_line":"import six"},{"line_number":20,"context_line":"import string"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"import eventlet"}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_efc3be88","line":19,"updated":"2016-07-08 22:12:24.000000000","message":"Move \"import six\" to after \"from oslo_utils import units\" because \"six\" is a pypi lib.","commit_id":"251bc5ef48be1678013a1599ac71260c2092ab3f"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"8b75ed3ab4f00ad88c889474d02a925e7a9b0d5e","unresolved":false,"context_lines":[{"line_number":80,"context_line":"    cfg.BoolOpt(\u0027coprhd_emulate_snapshot\u0027,"},{"line_number":81,"context_line":"                default\u003dFalse,"},{"line_number":82,"context_line":"                help\u003d\u0027True | False to indicate if the storage array \u0027"},{"line_number":83,"context_line":"                \u0027in CoprHD is VMAX or VPLEX\u0027)"},{"line_number":84,"context_line":"]"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_4f62d2ae","line":83,"updated":"2016-07-08 22:12:24.000000000","message":"Is this help message correct?","commit_id":"251bc5ef48be1678013a1599ac71260c2092ab3f"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"a56e05b42048822517de37bf165bde9b0924269a","unresolved":false,"context_lines":[{"line_number":233,"context_line":"        self.vpool \u003d vpool[\u0027CoprHD:VPOOL\u0027]"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"        try:"},{"line_number":236,"context_line":"            cgid \u003d None"},{"line_number":237,"context_line":"            coprhd_cgid \u003d None"},{"line_number":238,"context_line":"            try:"},{"line_number":239,"context_line":"                cgid \u003d vol[\u0027consistencygroup_id\u0027]"}],"source_content_type":"text/x-python","patch_set":25,"id":"1aa78d24_c8365702","line":236,"range":{"start_line":236,"start_character":0,"end_line":236,"end_character":23},"updated":"2016-07-12 10:33:05.000000000","message":"nit: This line is redundant.","commit_id":"a7c715b4d08d369ad1246e23b54c36cf89d44a78"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"a56e05b42048822517de37bf165bde9b0924269a","unresolved":false,"context_lines":[{"line_number":270,"context_line":"                self.configuration.coprhd_project,"},{"line_number":271,"context_line":"                self.configuration.coprhd_tenant)"},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"            cgUri \u003d self.consistencygroup_obj.consistencygroup_query("},{"line_number":274,"context_line":"                name,"},{"line_number":275,"context_line":"                self.configuration.coprhd_project,"},{"line_number":276,"context_line":"                self.configuration.coprhd_tenant)"}],"source_content_type":"text/x-python","patch_set":25,"id":"1aa78d24_a82cabac","line":273,"range":{"start_line":273,"start_character":12,"end_line":273,"end_character":17},"updated":"2016-07-12 10:33:05.000000000","message":"nit: cg_uri","commit_id":"a7c715b4d08d369ad1246e23b54c36cf89d44a78"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"a56e05b42048822517de37bf165bde9b0924269a","unresolved":false,"context_lines":[{"line_number":423,"context_line":"                if not rslt:"},{"line_number":424,"context_line":"                    continue"},{"line_number":425,"context_line":""},{"line_number":426,"context_line":"                volUri \u003d rslt[0]"},{"line_number":427,"context_line":""},{"line_number":428,"context_line":"                snapshots_of_volume \u003d self.snapshot_obj.snapshot_list_uri("},{"line_number":429,"context_line":"                    \u0027block\u0027,"}],"source_content_type":"text/x-python","patch_set":25,"id":"1aa78d24_b31a5c6d","line":426,"range":{"start_line":426,"start_character":16,"end_line":426,"end_character":22},"updated":"2016-07-12 10:33:05.000000000","message":"nit: vol_uri","commit_id":"a7c715b4d08d369ad1246e23b54c36cf89d44a78"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"a56e05b42048822517de37bf165bde9b0924269a","unresolved":false,"context_lines":[{"line_number":554,"context_line":"                                         log_err_msg)"},{"line_number":555,"context_line":""},{"line_number":556,"context_line":"    @retry_wrapper"},{"line_number":557,"context_line":"    def set_volume_tags(self, vol, exemptTags\u003dNone, truncate_name\u003dFalse):"},{"line_number":558,"context_line":"        if exemptTags is None:"},{"line_number":559,"context_line":"            exemptTags \u003d []"},{"line_number":560,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"1aa78d24_935c801a","line":557,"range":{"start_line":557,"start_character":35,"end_line":557,"end_character":45},"updated":"2016-07-12 10:33:05.000000000","message":"nit: exempt_tags","commit_id":"a7c715b4d08d369ad1246e23b54c36cf89d44a78"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"a56e05b42048822517de37bf165bde9b0924269a","unresolved":false,"context_lines":[{"line_number":571,"context_line":"            coprhd_vol.Volume.URI_TAG_VOLUME, vol_uri, vol, exemptTags)"},{"line_number":572,"context_line":""},{"line_number":573,"context_line":"    @retry_wrapper"},{"line_number":574,"context_line":"    def set_tags_for_resource(self, uri, resourceId, resource,"},{"line_number":575,"context_line":"                              exemptTags\u003dNone):"},{"line_number":576,"context_line":"        if exemptTags is None:"},{"line_number":577,"context_line":"            exemptTags \u003d []"}],"source_content_type":"text/x-python","patch_set":25,"id":"1aa78d24_73b0f443","line":574,"range":{"start_line":574,"start_character":41,"end_line":574,"end_character":51},"updated":"2016-07-12 10:33:05.000000000","message":"nit: resource_id","commit_id":"a7c715b4d08d369ad1246e23b54c36cf89d44a78"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"a56e05b42048822517de37bf165bde9b0924269a","unresolved":false,"context_lines":[{"line_number":572,"context_line":""},{"line_number":573,"context_line":"    @retry_wrapper"},{"line_number":574,"context_line":"    def set_tags_for_resource(self, uri, resourceId, resource,"},{"line_number":575,"context_line":"                              exemptTags\u003dNone):"},{"line_number":576,"context_line":"        if exemptTags is None:"},{"line_number":577,"context_line":"            exemptTags \u003d []"},{"line_number":578,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"1aa78d24_53adf8e7","line":575,"range":{"start_line":575,"start_character":30,"end_line":575,"end_character":40},"updated":"2016-07-12 10:33:05.000000000","message":"nit: exempt_tags","commit_id":"a7c715b4d08d369ad1246e23b54c36cf89d44a78"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"a56e05b42048822517de37bf165bde9b0924269a","unresolved":false,"context_lines":[{"line_number":653,"context_line":"        except KeyError as e:"},{"line_number":654,"context_line":"            pass"},{"line_number":655,"context_line":"        try:"},{"line_number":656,"context_line":"            (storageresType,"},{"line_number":657,"context_line":"             storageresTypename) \u003d self.volume_obj.get_storageAttributes("},{"line_number":658,"context_line":"                srcname, None, None)"},{"line_number":659,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"1aa78d24_938ac062","line":656,"range":{"start_line":656,"start_character":13,"end_line":656,"end_character":27},"updated":"2016-07-12 10:33:05.000000000","message":"nit: storageres_type","commit_id":"a7c715b4d08d369ad1246e23b54c36cf89d44a78"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"a56e05b42048822517de37bf165bde9b0924269a","unresolved":false,"context_lines":[{"line_number":654,"context_line":"            pass"},{"line_number":655,"context_line":"        try:"},{"line_number":656,"context_line":"            (storageresType,"},{"line_number":657,"context_line":"             storageresTypename) \u003d self.volume_obj.get_storageAttributes("},{"line_number":658,"context_line":"                srcname, None, None)"},{"line_number":659,"context_line":""},{"line_number":660,"context_line":"            resource_id \u003d self.volume_obj.storage_resource_query("}],"source_content_type":"text/x-python","patch_set":25,"id":"1aa78d24_f3e9841b","line":657,"range":{"start_line":657,"start_character":13,"end_line":657,"end_character":31},"updated":"2016-07-12 10:33:05.000000000","message":"nit: storageres_typename","commit_id":"a7c715b4d08d369ad1246e23b54c36cf89d44a78"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"a56e05b42048822517de37bf165bde9b0924269a","unresolved":false,"context_lines":[{"line_number":683,"context_line":"                self.volume_obj.volume_clone_detach("},{"line_number":684,"context_line":"                    \"\", full_project_name, name, True)"},{"line_number":685,"context_line":""},{"line_number":686,"context_line":"        except IndexError as e:"},{"line_number":687,"context_line":"            LOG.exception(_LE(\"Volume clone detach returned empty task list\"))"},{"line_number":688,"context_line":""},{"line_number":689,"context_line":"        except coprhd_utils.CoprHdError as e:"}],"source_content_type":"text/x-python","patch_set":25,"id":"1aa78d24_734c7442","line":686,"range":{"start_line":686,"start_character":29,"end_line":686,"end_character":30},"updated":"2016-07-12 10:33:05.000000000","message":"nit: e is unused","commit_id":"a7c715b4d08d369ad1246e23b54c36cf89d44a78"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"a56e05b42048822517de37bf165bde9b0924269a","unresolved":false,"context_lines":[{"line_number":761,"context_line":"            src_snapshot_name \u003d self._get_coprhd_snapshot_name("},{"line_number":762,"context_line":"                snapshot, coprhd_vol_info[\u0027volume_uri\u0027])"},{"line_number":763,"context_line":""},{"line_number":764,"context_line":"            (storageresType,"},{"line_number":765,"context_line":"             storageresTypename) \u003d self.volume_obj.get_storageAttributes("},{"line_number":766,"context_line":"                coprhd_vol_info[\u0027volume_name\u0027], None, src_snapshot_name)"},{"line_number":767,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"1aa78d24_3355ccc1","line":764,"range":{"start_line":764,"start_character":13,"end_line":764,"end_character":27},"updated":"2016-07-12 10:33:05.000000000","message":"nit: storageres_type","commit_id":"a7c715b4d08d369ad1246e23b54c36cf89d44a78"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"a56e05b42048822517de37bf165bde9b0924269a","unresolved":false,"context_lines":[{"line_number":762,"context_line":"                snapshot, coprhd_vol_info[\u0027volume_uri\u0027])"},{"line_number":763,"context_line":""},{"line_number":764,"context_line":"            (storageresType,"},{"line_number":765,"context_line":"             storageresTypename) \u003d self.volume_obj.get_storageAttributes("},{"line_number":766,"context_line":"                coprhd_vol_info[\u0027volume_name\u0027], None, src_snapshot_name)"},{"line_number":767,"context_line":""},{"line_number":768,"context_line":"            resource_id \u003d self.volume_obj.storage_resource_query("}],"source_content_type":"text/x-python","patch_set":25,"id":"1aa78d24_53705872","line":765,"range":{"start_line":765,"start_character":13,"end_line":765,"end_character":31},"updated":"2016-07-12 10:33:05.000000000","message":"nit: storageres_typename","commit_id":"a7c715b4d08d369ad1246e23b54c36cf89d44a78"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"a56e05b42048822517de37bf165bde9b0924269a","unresolved":false,"context_lines":[{"line_number":861,"context_line":"            volumename \u003d self._get_coprhd_volume_name(vol)"},{"line_number":862,"context_line":"            projectname \u003d self.configuration.coprhd_project"},{"line_number":863,"context_line":"            tenantname \u003d self.configuration.coprhd_tenant"},{"line_number":864,"context_line":"            storageresType \u003d \u0027block\u0027"},{"line_number":865,"context_line":"            storageresTypename \u003d \u0027volumes\u0027"},{"line_number":866,"context_line":"            resourceUri \u003d self.snapshot_obj.storage_resource_query("},{"line_number":867,"context_line":"                storageresType,"}],"source_content_type":"text/x-python","patch_set":25,"id":"1aa78d24_08ea1f74","line":864,"range":{"start_line":864,"start_character":12,"end_line":864,"end_character":26},"updated":"2016-07-12 10:33:05.000000000","message":"nit: storageres_type","commit_id":"a7c715b4d08d369ad1246e23b54c36cf89d44a78"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"a56e05b42048822517de37bf165bde9b0924269a","unresolved":false,"context_lines":[{"line_number":862,"context_line":"            projectname \u003d self.configuration.coprhd_project"},{"line_number":863,"context_line":"            tenantname \u003d self.configuration.coprhd_tenant"},{"line_number":864,"context_line":"            storageresType \u003d \u0027block\u0027"},{"line_number":865,"context_line":"            storageresTypename \u003d \u0027volumes\u0027"},{"line_number":866,"context_line":"            resourceUri \u003d self.snapshot_obj.storage_resource_query("},{"line_number":867,"context_line":"                storageresType,"},{"line_number":868,"context_line":"                volume_name\u003dvolumename,"}],"source_content_type":"text/x-python","patch_set":25,"id":"1aa78d24_88f60f5b","line":865,"range":{"start_line":865,"start_character":12,"end_line":865,"end_character":30},"updated":"2016-07-12 10:33:05.000000000","message":"nit: storageres_typename","commit_id":"a7c715b4d08d369ad1246e23b54c36cf89d44a78"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"a56e05b42048822517de37bf165bde9b0924269a","unresolved":false,"context_lines":[{"line_number":863,"context_line":"            tenantname \u003d self.configuration.coprhd_tenant"},{"line_number":864,"context_line":"            storageresType \u003d \u0027block\u0027"},{"line_number":865,"context_line":"            storageresTypename \u003d \u0027volumes\u0027"},{"line_number":866,"context_line":"            resourceUri \u003d self.snapshot_obj.storage_resource_query("},{"line_number":867,"context_line":"                storageresType,"},{"line_number":868,"context_line":"                volume_name\u003dvolumename,"},{"line_number":869,"context_line":"                cg_name\u003dNone,"}],"source_content_type":"text/x-python","patch_set":25,"id":"1aa78d24_688ac3c0","line":866,"range":{"start_line":866,"start_character":12,"end_line":866,"end_character":23},"updated":"2016-07-12 10:33:05.000000000","message":"nit: resource_uri","commit_id":"a7c715b4d08d369ad1246e23b54c36cf89d44a78"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"a56e05b42048822517de37bf165bde9b0924269a","unresolved":false,"context_lines":[{"line_number":879,"context_line":"                inactive,"},{"line_number":880,"context_line":"                sync)"},{"line_number":881,"context_line":""},{"line_number":882,"context_line":"            snapshotUri \u003d self.snapshot_obj.snapshot_query("},{"line_number":883,"context_line":"                storageresType,"},{"line_number":884,"context_line":"                storageresTypename,"},{"line_number":885,"context_line":"                resourceUri,"}],"source_content_type":"text/x-python","patch_set":25,"id":"1aa78d24_c8c137e6","line":882,"range":{"start_line":882,"start_character":12,"end_line":882,"end_character":23},"updated":"2016-07-12 10:33:05.000000000","message":"nit: snapshot_uri","commit_id":"a7c715b4d08d369ad1246e23b54c36cf89d44a78"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"a56e05b42048822517de37bf165bde9b0924269a","unresolved":false,"context_lines":[{"line_number":922,"context_line":"            volumename \u003d self._get_coprhd_volume_name(vol)"},{"line_number":923,"context_line":"            projectname \u003d self.configuration.coprhd_project"},{"line_number":924,"context_line":"            tenantname \u003d self.configuration.coprhd_tenant"},{"line_number":925,"context_line":"            storageresType \u003d \u0027block\u0027"},{"line_number":926,"context_line":"            storageresTypename \u003d \u0027volumes\u0027"},{"line_number":927,"context_line":"            resourceUri \u003d self.snapshot_obj.storage_resource_query("},{"line_number":928,"context_line":"                storageresType,"}],"source_content_type":"text/x-python","patch_set":25,"id":"1aa78d24_73fab4be","line":925,"range":{"start_line":925,"start_character":12,"end_line":925,"end_character":26},"updated":"2016-07-12 10:33:05.000000000","message":"nit: storageres_type","commit_id":"a7c715b4d08d369ad1246e23b54c36cf89d44a78"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"a56e05b42048822517de37bf165bde9b0924269a","unresolved":false,"context_lines":[{"line_number":923,"context_line":"            projectname \u003d self.configuration.coprhd_project"},{"line_number":924,"context_line":"            tenantname \u003d self.configuration.coprhd_tenant"},{"line_number":925,"context_line":"            storageresType \u003d \u0027block\u0027"},{"line_number":926,"context_line":"            storageresTypename \u003d \u0027volumes\u0027"},{"line_number":927,"context_line":"            resourceUri \u003d self.snapshot_obj.storage_resource_query("},{"line_number":928,"context_line":"                storageresType,"},{"line_number":929,"context_line":"                volume_name\u003dvolumename,"}],"source_content_type":"text/x-python","patch_set":25,"id":"1aa78d24_f32ce44b","line":926,"range":{"start_line":926,"start_character":12,"end_line":926,"end_character":30},"updated":"2016-07-12 10:33:05.000000000","message":"nit: storageres_typename","commit_id":"a7c715b4d08d369ad1246e23b54c36cf89d44a78"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"a56e05b42048822517de37bf165bde9b0924269a","unresolved":false,"context_lines":[{"line_number":954,"context_line":"                                         log_err_msg)"},{"line_number":955,"context_line":""},{"line_number":956,"context_line":"    @retry_wrapper"},{"line_number":957,"context_line":"    def initialize_connection(self, volume, protocol, initiatorPorts,"},{"line_number":958,"context_line":"                              hostname):"},{"line_number":959,"context_line":""},{"line_number":960,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":25,"id":"1aa78d24_53ccd888","line":957,"range":{"start_line":957,"start_character":54,"end_line":957,"end_character":68},"updated":"2016-07-12 10:33:05.000000000","message":"nit: initiator_ports","commit_id":"a7c715b4d08d369ad1246e23b54c36cf89d44a78"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"a56e05b42048822517de37bf165bde9b0924269a","unresolved":false,"context_lines":[{"line_number":1022,"context_line":"            )"},{"line_number":1023,"context_line":""},{"line_number":1024,"context_line":"    @retry_wrapper"},{"line_number":1025,"context_line":"    def terminate_connection(self, volume, protocol, initiatorPorts,"},{"line_number":1026,"context_line":"                             hostname):"},{"line_number":1027,"context_line":"        try:"},{"line_number":1028,"context_line":"            self.authenticate_user()"}],"source_content_type":"text/x-python","patch_set":25,"id":"1aa78d24_13ad309b","line":1025,"range":{"start_line":1025,"start_character":53,"end_line":1025,"end_character":67},"updated":"2016-07-12 10:33:05.000000000","message":"nit: initiator_ports","commit_id":"a7c715b4d08d369ad1246e23b54c36cf89d44a78"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"a56e05b42048822517de37bf165bde9b0924269a","unresolved":false,"context_lines":[{"line_number":1159,"context_line":"                self.configuration.coprhd_port)"},{"line_number":1160,"context_line":""},{"line_number":1161,"context_line":"        if len(rslt) \u003e 0:"},{"line_number":1162,"context_line":"            rsltCg \u003d self.consistencygroup_obj.show("},{"line_number":1163,"context_line":"                rslt[0],"},{"line_number":1164,"context_line":"                self.configuration.coprhd_project,"},{"line_number":1165,"context_line":"                self.configuration.coprhd_tenant)"}],"source_content_type":"text/x-python","patch_set":25,"id":"1aa78d24_9399207c","line":1162,"range":{"start_line":1162,"start_character":12,"end_line":1162,"end_character":18},"updated":"2016-07-12 10:33:05.000000000","message":"nit: rslt_cg","commit_id":"a7c715b4d08d369ad1246e23b54c36cf89d44a78"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"a56e05b42048822517de37bf165bde9b0924269a","unresolved":false,"context_lines":[{"line_number":1193,"context_line":"        if rslt is None or len(rslt) \u003d\u003d 0:"},{"line_number":1194,"context_line":"            return snapshot[\u0027name\u0027]"},{"line_number":1195,"context_line":"        else:"},{"line_number":1196,"context_line":"            rsltSnap \u003d self.snapshot_obj.snapshot_show_uri("},{"line_number":1197,"context_line":"                \u0027block\u0027,"},{"line_number":1198,"context_line":"                resUri,"},{"line_number":1199,"context_line":"                rslt[0])"}],"source_content_type":"text/x-python","patch_set":25,"id":"1aa78d24_93a760a6","line":1196,"range":{"start_line":1196,"start_character":12,"end_line":1196,"end_character":20},"updated":"2016-07-12 10:33:05.000000000","message":"nit: rslt_snap","commit_id":"a7c715b4d08d369ad1246e23b54c36cf89d44a78"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"a56e05b42048822517de37bf165bde9b0924269a","unresolved":false,"context_lines":[{"line_number":1217,"context_line":"                self.configuration.coprhd_port)"},{"line_number":1218,"context_line":""},{"line_number":1219,"context_line":"        if len(rslt) \u003e 0:"},{"line_number":1220,"context_line":"            rsltVol \u003d self.volume_obj.show_by_uri(rslt[0])"},{"line_number":1221,"context_line":""},{"line_number":1222,"context_line":"            if verbose is True:"},{"line_number":1223,"context_line":"                return {\u0027volume_name\u0027: rsltVol[\u0027name\u0027], \u0027volume_uri\u0027: rslt[0]}"}],"source_content_type":"text/x-python","patch_set":25,"id":"1aa78d24_d3bba8c2","line":1220,"range":{"start_line":1220,"start_character":12,"end_line":1220,"end_character":19},"updated":"2016-07-12 10:33:05.000000000","message":"nit: rslt_vol","commit_id":"a7c715b4d08d369ad1246e23b54c36cf89d44a78"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"a56e05b42048822517de37bf165bde9b0924269a","unresolved":false,"context_lines":[{"line_number":1349,"context_line":"                hostname \u003d host[\u0027match\u0027]"},{"line_number":1350,"context_line":"                if host_name \u003d\u003d hostname:"},{"line_number":1351,"context_line":"                    return hostname"},{"line_number":1352,"context_line":"            return hostname"},{"line_number":1353,"context_line":"        LOG.debug(\"no host found for: %s\", host_name)"},{"line_number":1354,"context_line":"        return None"},{"line_number":1355,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"1aa78d24_28571b5b","line":1352,"range":{"start_line":1352,"start_character":12,"end_line":1352,"end_character":27},"updated":"2016-07-12 10:33:05.000000000","message":"I don\u0027t get that statement. We\u0027re returning last hostname in case no host does match? It confuses me, because name of the method suggests this isn\u0027t desired behavior.\n\nThis whole method should be something like:\n\n    @retry_wrapper\n    def _host_exists(self, host_name):\n        \"\"\"Check if Host object with given hostname already exists in CoprHD.\n        \"\"\"\n        hosts \u003d self.host_obj.search_by_name(host_name)\n\n        hostname \u003d next((host for host in hosts if host[\u0027match\u0027] \u003d\u003d hostname), None)\n\n        if hostname is None:\n            LOG.debug(\"no host found for: %s\", host_name)\n\n        return hostname","commit_id":"a7c715b4d08d369ad1246e23b54c36cf89d44a78"}],"cinder/volume/drivers/coprhd/fc.py":[{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"402645491edbc66f06ce86d2a479bbabb18fd87e","unresolved":false,"context_lines":[{"line_number":29,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"@interface.volumedriver"},{"line_number":33,"context_line":"class EMCCoprHDFCDriver(driver.FibreChannelDriver):"},{"line_number":34,"context_line":"    \"\"\"CoprHD FC Driver\"\"\""},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"3aaa91ec_fd541a55","line":32,"range":{"start_line":32,"start_character":0,"end_line":32,"end_character":23},"updated":"2016-06-22 13:42:42.000000000","message":"@cinder.interface.volumedriver","commit_id":"f900e96a28ea208442118bce3a250a16e57ddd6f"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5238207f10e98d8153686ed93ab837ecc213a8dd","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from cinder import interface"},{"line_number":24,"context_line":"from cinder.volume import driver"},{"line_number":25,"context_line":"from cinder.volume.drivers.coprhd import common as CoprHD_common"},{"line_number":26,"context_line":"from cinder.zonemanager.utils import AddFCZone"},{"line_number":27,"context_line":"from cinder.zonemanager.utils import RemoveFCZone"},{"line_number":28,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_b5dfd467","line":25,"range":{"start_line":25,"start_character":51,"end_line":25,"end_character":64},"updated":"2016-06-24 13:24:47.000000000","message":"Please don\u0027t use CamelCase here.","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5238207f10e98d8153686ed93ab837ecc213a8dd","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from cinder import interface"},{"line_number":24,"context_line":"from cinder.volume import driver"},{"line_number":25,"context_line":"from cinder.volume.drivers.coprhd import common as CoprHD_common"},{"line_number":26,"context_line":"from cinder.zonemanager.utils import AddFCZone"},{"line_number":27,"context_line":"from cinder.zonemanager.utils import RemoveFCZone"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":30,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_35ebe414","line":27,"range":{"start_line":26,"start_character":0,"end_line":27,"end_character":49},"updated":"2016-06-24 13:24:47.000000000","message":"We tend not to import objects, just modules [1].\n\n[1] http://docs.openstack.org/developer/hacking/#imports","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5238207f10e98d8153686ed93ab837ecc213a8dd","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        \"\"\"Creates a consistencygroup.\"\"\""},{"line_number":94,"context_line":"        return self.common.create_consistencygroup(context, group)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def update_consistencygroup(self,"},{"line_number":97,"context_line":"                                context,"},{"line_number":98,"context_line":"                                group,"},{"line_number":99,"context_line":"                                add_volumes,"},{"line_number":100,"context_line":"                                remove_volumes):"},{"line_number":101,"context_line":"        \"\"\"Updates volumes in consistency group.\"\"\""},{"line_number":102,"context_line":"        return self.common.update_consistencygroup(self,"},{"line_number":103,"context_line":"                                                   context,"},{"line_number":104,"context_line":"                                                   group,"},{"line_number":105,"context_line":"                                                   add_volumes,"},{"line_number":106,"context_line":"                                                   remove_volumes)"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    def delete_consistencygroup(self, context, group):"},{"line_number":109,"context_line":"        \"\"\"Deletes a consistency group.\"\"\""},{"line_number":110,"context_line":"        return self.common.delete_consistencygroup(self, context, group)"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    def create_cgsnapshot(self, context, cgsnapshot, snapshots):"},{"line_number":113,"context_line":"        \"\"\"Creates a cgsnapshot.\"\"\""}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_f2d97223","line":110,"range":{"start_line":96,"start_character":0,"end_line":110,"end_character":72},"updated":"2016-06-24 13:24:47.000000000","message":"These two methods have different signatures than in base class.","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5238207f10e98d8153686ed93ab837ecc213a8dd","unresolved":false,"context_lines":[{"line_number":161,"context_line":""},{"line_number":162,"context_line":"        protocol \u003d \u0027FC\u0027"},{"line_number":163,"context_line":"        hostname \u003d connector[\u0027host\u0027]"},{"line_number":164,"context_line":"        initPorts \u003d self._build_initport_list(connector)"},{"line_number":165,"context_line":"        itls \u003d self.common.initialize_connection(volume,"},{"line_number":166,"context_line":"                                                 protocol,"},{"line_number":167,"context_line":"                                                 initPorts,"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_b241aaab","line":164,"range":{"start_line":164,"start_character":8,"end_line":164,"end_character":17},"updated":"2016-06-24 13:24:47.000000000","message":"Please use init_ports.","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5238207f10e98d8153686ed93ab837ecc213a8dd","unresolved":false,"context_lines":[{"line_number":171,"context_line":"            target_wwns, initiator_target_map \u003d ("},{"line_number":172,"context_line":"                self._build_initiator_target_map(itls, connector))"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"        properties[\u0027target_wwn\u0027] \u003d target_wwns"},{"line_number":175,"context_line":"        properties[\u0027initiator_target_map\u0027] \u003d initiator_target_map"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"        auth \u003d volume[\u0027provider_auth\u0027]"},{"line_number":178,"context_line":"        if auth:"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_520fa687","line":175,"range":{"start_line":174,"start_character":0,"end_line":175,"end_character":65},"updated":"2016-06-24 13:24:47.000000000","message":"target_wwns and initiator_target_map will be unset if itls resolves to False.","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5238207f10e98d8153686ed93ab837ecc213a8dd","unresolved":false,"context_lines":[{"line_number":193,"context_line":"        \"\"\"Driver entry point to detach a volume from an instance.\"\"\""},{"line_number":194,"context_line":"        protocol \u003d \u0027FC\u0027"},{"line_number":195,"context_line":"        hostname \u003d connector[\u0027host\u0027]"},{"line_number":196,"context_line":"        initPorts \u003d self._build_initport_list(connector)"},{"line_number":197,"context_line":"        itls \u003d self.common.terminate_connection(volume,"},{"line_number":198,"context_line":"                                                protocol,"},{"line_number":199,"context_line":"                                                initPorts,"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_528686db","line":196,"range":{"start_line":196,"start_character":8,"end_line":196,"end_character":17},"updated":"2016-06-24 13:24:47.000000000","message":"init_ports","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5238207f10e98d8153686ed93ab837ecc213a8dd","unresolved":false,"context_lines":[{"line_number":230,"context_line":"        return target_wwns, initiator_target_map"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"    def _build_initport_list(self, connector):"},{"line_number":233,"context_line":"        initPorts \u003d []"},{"line_number":234,"context_line":"        for i in xrange(len(connector[\u0027wwpns\u0027])):"},{"line_number":235,"context_line":"            initiatorPort \u003d \u0027:\u0027.join(re.findall("},{"line_number":236,"context_line":"                \u0027..\u0027,"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_d249d6b8","line":233,"range":{"start_line":233,"start_character":8,"end_line":233,"end_character":17},"updated":"2016-06-24 13:24:47.000000000","message":"init_ports","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5238207f10e98d8153686ed93ab837ecc213a8dd","unresolved":false,"context_lines":[{"line_number":232,"context_line":"    def _build_initport_list(self, connector):"},{"line_number":233,"context_line":"        initPorts \u003d []"},{"line_number":234,"context_line":"        for i in xrange(len(connector[\u0027wwpns\u0027])):"},{"line_number":235,"context_line":"            initiatorPort \u003d \u0027:\u0027.join(re.findall("},{"line_number":236,"context_line":"                \u0027..\u0027,"},{"line_number":237,"context_line":"                connector[\u0027wwpns\u0027][i])).upper()   # Add \":\" every two digits"},{"line_number":238,"context_line":"            initPorts.append(initiatorPort)"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_12cebe2d","line":235,"range":{"start_line":235,"start_character":12,"end_line":235,"end_character":25},"updated":"2016-06-24 13:24:47.000000000","message":"initiator_port","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4f876a01cb4230eadb98210c492f04c024962d85","unresolved":false,"context_lines":[{"line_number":103,"context_line":"                                                   context,"},{"line_number":104,"context_line":"                                                   group,"},{"line_number":105,"context_line":"                                                   add_volumes,"},{"line_number":106,"context_line":"                                                   remove_volumes)"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    def delete_consistencygroup(self, context, group):"},{"line_number":109,"context_line":"        \"\"\"Deletes a consistency group.\"\"\""}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_d8f37e71","line":106,"updated":"2016-06-27 02:22:58.000000000","message":"The interface in common.py is\n\ndef update_consistencygroup(self, driver, context, group, add_volumes, remove_volumes)\n\n\"driver\" is not here but in common.py.","commit_id":"14f3ecd4d0317cf6529d3502118e9344f7b36261"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4f876a01cb4230eadb98210c492f04c024962d85","unresolved":false,"context_lines":[{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    def delete_consistencygroup(self, context, group):"},{"line_number":109,"context_line":"        \"\"\"Deletes a consistency group.\"\"\""},{"line_number":110,"context_line":"        return self.common.delete_consistencygroup(self, context, group)"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    def create_cgsnapshot(self, context, cgsnapshot, snapshots):"},{"line_number":113,"context_line":"        \"\"\"Creates a cgsnapshot.\"\"\""}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_389e0207","line":110,"updated":"2016-06-27 02:22:58.000000000","message":"The interface in common.py has an extra \"driver\" parameter.\n\ndef delete_consistencygroup(self, driver, context, group,\n                                truncate_name\u003dFalse):\n\nAlso look at my comments in common.py as this is missing \"volumes\" which is passed from the volume manager.","commit_id":"14f3ecd4d0317cf6529d3502118e9344f7b36261"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4f876a01cb4230eadb98210c492f04c024962d85","unresolved":false,"context_lines":[{"line_number":112,"context_line":"    def create_cgsnapshot(self, context, cgsnapshot, snapshots):"},{"line_number":113,"context_line":"        \"\"\"Creates a cgsnapshot.\"\"\""},{"line_number":114,"context_line":"        return self.common.create_cgsnapshot(self, context,"},{"line_number":115,"context_line":"                                             cgsnapshot, snapshots)"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    def delete_cgsnapshot(self, context, cgsnapshot, snapshots):"},{"line_number":118,"context_line":"        \"\"\"Deletes a cgsnapshot.\"\"\""}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_58878eb4","line":115,"updated":"2016-06-27 02:22:58.000000000","message":"Again, interface in common.py does not match this call:\n\ndef create_cgsnapshot(self, driver, context, cgsnapshot, snapshots,\n                          truncate_name\u003dFalse):","commit_id":"14f3ecd4d0317cf6529d3502118e9344f7b36261"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4f876a01cb4230eadb98210c492f04c024962d85","unresolved":false,"context_lines":[{"line_number":117,"context_line":"    def delete_cgsnapshot(self, context, cgsnapshot, snapshots):"},{"line_number":118,"context_line":"        \"\"\"Deletes a cgsnapshot.\"\"\""},{"line_number":119,"context_line":"        return self.common.delete_cgsnapshot(self, context,"},{"line_number":120,"context_line":"                                             cgsnapshot, snapshots)"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    def check_for_export(self, context, volume_id):"},{"line_number":123,"context_line":"        \"\"\"Make sure volume is exported.\"\"\""}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_788c0ada","line":120,"updated":"2016-06-27 02:22:58.000000000","message":"Again, interface in common.py does not match this call:\n\ndef delete_cgsnapshot(self, driver, context, cgsnapshot, snapshots,\n                          truncate_name\u003dFalse):","commit_id":"14f3ecd4d0317cf6529d3502118e9344f7b36261"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"fc303d1dba5518c26cff391b09e584715e73afaa","unresolved":false,"context_lines":[{"line_number":148,"context_line":"            properties[\u0027auth_password\u0027] \u003d auth_secret"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"        LOG.debug(\u0027FC properties: \u0027)"},{"line_number":151,"context_line":"        LOG.debug(properties)"},{"line_number":152,"context_line":"        return {"},{"line_number":153,"context_line":"            \u0027driver_volume_type\u0027: \u0027fibre_channel\u0027,"},{"line_number":154,"context_line":"            \u0027data\u0027: properties"}],"source_content_type":"text/x-python","patch_set":22,"id":"1aa78d24_3df5b256","line":151,"updated":"2016-07-06 06:27:50.000000000","message":"Can we combine these two to just be:\n\nLOG.debug(\u0027FC properties: %s\u0027, properties)","commit_id":"cf3788db2912b91defa757733a2fadc339a4e5fe"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"fc303d1dba5518c26cff391b09e584715e73afaa","unresolved":false,"context_lines":[{"line_number":177,"context_line":"                    \u0027target_wwn\u0027: target_wwns,"},{"line_number":178,"context_line":"                    \u0027initiator_target_map\u0027: initiator_target_map}}"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"        LOG.debug(\u0027Return FC data: \u0027)"},{"line_number":181,"context_line":"        LOG.debug(data)"},{"line_number":182,"context_line":"        return data"},{"line_number":183,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"1aa78d24_5dbebe65","line":180,"updated":"2016-07-06 06:27:50.000000000","message":"Same.","commit_id":"cf3788db2912b91defa757733a2fadc339a4e5fe"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"80aefd6c16f7a571c34b27637a06ea871ab0464f","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from cinder import interface"},{"line_number":24,"context_line":"from cinder.volume import driver"},{"line_number":25,"context_line":"from cinder.volume.drivers.coprhd import common as coprhd_common"},{"line_number":26,"context_line":"from cinder.zonemanager import utils"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":29,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"1aa78d24_598ec4d0","line":26,"updated":"2016-07-12 05:45:19.000000000","message":"can we name this fczm_utils.  This is what other FC drivers do, just to be consistent.","commit_id":"a7c715b4d08d369ad1246e23b54c36cf89d44a78"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"a56e05b42048822517de37bf165bde9b0924269a","unresolved":false,"context_lines":[{"line_number":92,"context_line":"        \"\"\"Creates a consistencygroup.\"\"\""},{"line_number":93,"context_line":"        return self.common.create_consistencygroup(context, group)"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    def update_consistencygroup(self, context, group, add_volumes,"},{"line_number":96,"context_line":"                                remove_volumes):"},{"line_number":97,"context_line":"        \"\"\"Updates volumes in consistency group.\"\"\""},{"line_number":98,"context_line":"        return self.common.update_consistencygroup(group, add_volumes,"},{"line_number":99,"context_line":"                                                   remove_volumes)"}],"source_content_type":"text/x-python","patch_set":25,"id":"1aa78d24_ae1af36c","line":96,"range":{"start_line":95,"start_character":0,"end_line":96,"end_character":48},"updated":"2016-07-12 10:33:05.000000000","message":"Still doesn\u0027t match signature in parent class, should be:\n\n\n    def update_consistencygroup(self, context, group,\n                                add_volumes\u003dNone, remove_volumes\u003dNone):","commit_id":"a7c715b4d08d369ad1246e23b54c36cf89d44a78"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"a56e05b42048822517de37bf165bde9b0924269a","unresolved":false,"context_lines":[{"line_number":150,"context_line":"        LOG.debug(\u0027FC properties: %s\u0027, properties)"},{"line_number":151,"context_line":"        return {"},{"line_number":152,"context_line":"            \u0027driver_volume_type\u0027: \u0027fibre_channel\u0027,"},{"line_number":153,"context_line":"            \u0027data\u0027: properties"},{"line_number":154,"context_line":"        }"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    @utils.RemoveFCZone"}],"source_content_type":"text/x-python","patch_set":25,"id":"1aa78d24_8e2e178a","line":153,"updated":"2016-07-12 10:33:05.000000000","message":"nit: missing comma at the end.","commit_id":"a7c715b4d08d369ad1246e23b54c36cf89d44a78"}],"cinder/volume/drivers/coprhd/helpers/authentication.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4f876a01cb4230eadb98210c492f04c024962d85","unresolved":false,"context_lines":[{"line_number":35,"context_line":"               \u0027ACCEPT\u0027: \u0027application/json\u0027, \u0027X-EMC-REST-CLIENT\u0027: \u0027TRUE\u0027}"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def authenticate_user(self, username, password):"},{"line_number":38,"context_line":"        \"\"\"Makes REST API call to generate the authentication token"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        Authentication token is generated for the specified user after"},{"line_number":41,"context_line":"        validation"}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_f3d81b55","line":38,"updated":"2016-06-27 02:22:58.000000000","message":"Period is needed for the first line of docstring.  Same in all other places.","commit_id":"14f3ecd4d0317cf6529d3502118e9344f7b36261"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4f876a01cb4230eadb98210c492f04c024962d85","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        APISVC_PORT \u003d 8443  # Port on which apisvc listens to incoming requests"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        cookiejar \u003d cookielib.LWPCookieJar()"},{"line_number":59,"context_line":"        url \u003d (\u0027https://\u0027 + str(self.ipaddr) + \u0027:\u0027 + str(self.port) +"},{"line_number":60,"context_line":"               self.URI_AUTHENTICATION)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_18b86674","line":59,"updated":"2016-06-27 02:22:58.000000000","message":"str() -\u003e six.text_type()","commit_id":"14f3ecd4d0317cf6529d3502118e9344f7b36261"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"fc303d1dba5518c26cff391b09e584715e73afaa","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        APISVC_PORT \u003d 8443  # Port on which apisvc listens to incoming requests"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        cookiejar \u003d cookie_lib.LWPCookieJar()"},{"line_number":62,"context_line":"        url \u003d (\u0027https://\u0027 + six.text_type(self.ipaddr) + \u0027:\u0027 +"},{"line_number":63,"context_line":"               six.text_type(self.port) + self.URI_AUTHENTICATION)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":22,"id":"1aa78d24_7d473a77","line":62,"range":{"start_line":62,"start_character":28,"end_line":62,"end_character":41},"updated":"2016-07-06 06:27:50.000000000","message":"I would suggest just changing this to:\n\nurl \u003d \u0027https://%(ip)s:%(port)d%(uri)s\u0027 % {\u0027ip\u0027: self.ipaddr, \u0027port\u0027: self.port, \u0027uri\u0027: self.URI_AUTHENTICATION}","commit_id":"cf3788db2912b91defa757733a2fadc339a4e5fe"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"fc303d1dba5518c26cff391b09e584715e73afaa","unresolved":false,"context_lines":[{"line_number":82,"context_line":"                        location, headers\u003dself.HEADERS, verify\u003dFalse,"},{"line_number":83,"context_line":"                        cookies\u003dcookiejar, allow_redirects\u003dFalse,"},{"line_number":84,"context_line":"                        timeout\u003dcommon.TIMEOUT_SEC)"},{"line_number":85,"context_line":"                    if (not (login_response.status_code \u003d\u003d"},{"line_number":86,"context_line":"                             requests.codes[\u0027unauthorized\u0027])):"},{"line_number":87,"context_line":"                        raise common.CoprHdError("},{"line_number":88,"context_line":"                            common.CoprHdError.HTTP_ERR, (_(\"The\""}],"source_content_type":"text/x-python","patch_set":22,"id":"1aa78d24_3d3812ef","line":85,"range":{"start_line":85,"start_character":24,"end_line":85,"end_character":28},"updated":"2016-07-06 06:27:50.000000000","message":"Get rid of \u0027not\u0027 and change to !\u003d","commit_id":"cf3788db2912b91defa757733a2fadc339a4e5fe"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"fc303d1dba5518c26cff391b09e584715e73afaa","unresolved":false,"context_lines":[{"line_number":153,"context_line":"                    (_(\"Incorrect port number. Load balanced port is: \""},{"line_number":154,"context_line":"                       \"%(lb_api_port)s, api service port is: \""},{"line_number":155,"context_line":"                       \"%(apisvc_port)s\") %"},{"line_number":156,"context_line":"                     {\u0027lb_api_port\u0027: six.text_type(LB_API_PORT),"},{"line_number":157,"context_line":"                        \u0027apisvc_port\u0027: six.text_type(APISVC_PORT)}))"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"            if not authtoken:"}],"source_content_type":"text/x-python","patch_set":22,"id":"1aa78d24_9d10265b","line":156,"range":{"start_line":156,"start_character":37,"end_line":156,"end_character":50},"updated":"2016-07-06 06:27:50.000000000","message":"Remove","commit_id":"cf3788db2912b91defa757733a2fadc339a4e5fe"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"fc303d1dba5518c26cff391b09e584715e73afaa","unresolved":false,"context_lines":[{"line_number":154,"context_line":"                       \"%(lb_api_port)s, api service port is: \""},{"line_number":155,"context_line":"                       \"%(apisvc_port)s\") %"},{"line_number":156,"context_line":"                     {\u0027lb_api_port\u0027: six.text_type(LB_API_PORT),"},{"line_number":157,"context_line":"                        \u0027apisvc_port\u0027: six.text_type(APISVC_PORT)}))"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"            if not authtoken:"},{"line_number":160,"context_line":"                details_str \u003d self.extract_error_detail(login_response)"}],"source_content_type":"text/x-python","patch_set":22,"id":"1aa78d24_bd0b6229","line":157,"range":{"start_line":157,"start_character":39,"end_line":157,"end_character":52},"updated":"2016-07-06 06:27:50.000000000","message":"Remove","commit_id":"cf3788db2912b91defa757733a2fadc339a4e5fe"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ef2e8f4fb2118e648c4a41530e8f91ac5ac3f08f","unresolved":false,"context_lines":[{"line_number":22,"context_line":"import socket"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"import requests"},{"line_number":25,"context_line":"from requests import exceptions"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"from cinder.i18n import _"},{"line_number":28,"context_line":"from cinder.volume.drivers.coprhd.helpers import commoncoprhdapi as common"}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_c3dfbe0a","line":25,"updated":"2016-07-09 03:01:16.000000000","message":"\"import six\" should be moved down in the same group as requests.  six is 3rd party lib.\n\n\nSee doc:\nhttp://docs.openstack.org/developer/hacking/#import-order-template","commit_id":"251bc5ef48be1678013a1599ac71260c2092ab3f"}],"cinder/volume/drivers/coprhd/helpers/commoncoprhdapi.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"fc303d1dba5518c26cff391b09e584715e73afaa","unresolved":false,"context_lines":[{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    try:"},{"line_number":116,"context_line":"        protocol \u003d \"https://\""},{"line_number":117,"context_line":"        if str(port) \u003d\u003d \u00278080\u0027:"},{"line_number":118,"context_line":"            protocol \u003d \"http://\""},{"line_number":119,"context_line":"        url \u003d protocol + ip_addr + \":\" + str(port) + uri"},{"line_number":120,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"1aa78d24_d812bc56","line":117,"range":{"start_line":117,"start_character":8,"end_line":117,"end_character":31},"updated":"2016-07-06 06:27:50.000000000","message":"if port \u003d\u003d 8080:","commit_id":"cf3788db2912b91defa757733a2fadc339a4e5fe"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"fc303d1dba5518c26cff391b09e584715e73afaa","unresolved":false,"context_lines":[{"line_number":384,"context_line":"    successfully exit_status_code \u003d 0, means success, its a default behavior"},{"line_number":385,"context_line":"    exit_status_code \u003d integer greater than zero, abnormal termination"},{"line_number":386,"context_line":"    \"\"\""},{"line_number":387,"context_line":"    sys.exit(exit_status_code)"},{"line_number":388,"context_line":""},{"line_number":389,"context_line":""},{"line_number":390,"context_line":"def search_by_tag(resource_search_uri, ipaddr, port):"}],"source_content_type":"text/x-python","patch_set":22,"id":"1aa78d24_787628a5","line":387,"updated":"2016-07-06 06:27:50.000000000","message":"What is this method for? Nothing should be calling sys.exit from within a driver.","commit_id":"cf3788db2912b91defa757733a2fadc339a4e5fe"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ef2e8f4fb2118e648c4a41530e8f91ac5ac3f08f","unresolved":false,"context_lines":[{"line_number":20,"context_line":"    import http.cookiejar as cookie_lib"},{"line_number":21,"context_line":"import json"},{"line_number":22,"context_line":"import re"},{"line_number":23,"context_line":"import six"},{"line_number":24,"context_line":"import socket"},{"line_number":25,"context_line":"import threading"},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_03470678","line":23,"updated":"2016-07-09 03:01:16.000000000","message":"six is 3rd party lib.  Should be moved down to the same group as oslo and requests.","commit_id":"251bc5ef48be1678013a1599ac71260c2092ab3f"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ef2e8f4fb2118e648c4a41530e8f91ac5ac3f08f","unresolved":false,"context_lines":[{"line_number":115,"context_line":"        protocol \u003d \"https://\""},{"line_number":116,"context_line":"        if port \u003d\u003d 8080:"},{"line_number":117,"context_line":"            protocol \u003d \"http://\""},{"line_number":118,"context_line":"        url \u003d protocol + ip_addr + \":\" + str(port) + uri"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"        cookiejar \u003d cookie_lib.LWPCookieJar()"},{"line_number":121,"context_line":"        headers[SEC_AUTHTOKEN_HEADER] \u003d AUTH_TOKEN"}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_57fd443a","line":118,"updated":"2016-07-09 03:01:16.000000000","message":"str() -\u003e six.text_type()","commit_id":"251bc5ef48be1678013a1599ac71260c2092ab3f"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ef2e8f4fb2118e648c4a41530e8f91ac5ac3f08f","unresolved":false,"context_lines":[{"line_number":286,"context_line":""},{"line_number":287,"context_line":"    size_count \u003d int(value)"},{"line_number":288,"context_line":"    if unit in [\u0027K\u0027, \u0027KB\u0027]:"},{"line_number":289,"context_line":"        multiplier \u003d int(1024)"},{"line_number":290,"context_line":"    elif unit in [\u0027M\u0027, \u0027MB\u0027]:"},{"line_number":291,"context_line":"        multiplier \u003d int(1024 * 1024)"},{"line_number":292,"context_line":"    elif unit in [\u0027G\u0027, \u0027GB\u0027]:"}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_d765b41d","line":289,"updated":"2016-07-09 03:01:16.000000000","message":"Use units.Ki for 1024.\n\nhttps://github.com/openstack/oslo.utils/blob/master/oslo_utils/units.py#L21","commit_id":"251bc5ef48be1678013a1599ac71260c2092ab3f"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ef2e8f4fb2118e648c4a41530e8f91ac5ac3f08f","unresolved":false,"context_lines":[{"line_number":288,"context_line":"    if unit in [\u0027K\u0027, \u0027KB\u0027]:"},{"line_number":289,"context_line":"        multiplier \u003d int(1024)"},{"line_number":290,"context_line":"    elif unit in [\u0027M\u0027, \u0027MB\u0027]:"},{"line_number":291,"context_line":"        multiplier \u003d int(1024 * 1024)"},{"line_number":292,"context_line":"    elif unit in [\u0027G\u0027, \u0027GB\u0027]:"},{"line_number":293,"context_line":"        multiplier \u003d int(1024 * 1024 * 1024)"},{"line_number":294,"context_line":"    elif unit in [\u0027T\u0027, \u0027TB\u0027]:"}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_1770dcdb","line":291,"updated":"2016-07-09 03:01:16.000000000","message":"units.Mi","commit_id":"251bc5ef48be1678013a1599ac71260c2092ab3f"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ef2e8f4fb2118e648c4a41530e8f91ac5ac3f08f","unresolved":false,"context_lines":[{"line_number":290,"context_line":"    elif unit in [\u0027M\u0027, \u0027MB\u0027]:"},{"line_number":291,"context_line":"        multiplier \u003d int(1024 * 1024)"},{"line_number":292,"context_line":"    elif unit in [\u0027G\u0027, \u0027GB\u0027]:"},{"line_number":293,"context_line":"        multiplier \u003d int(1024 * 1024 * 1024)"},{"line_number":294,"context_line":"    elif unit in [\u0027T\u0027, \u0027TB\u0027]:"},{"line_number":295,"context_line":"        multiplier \u003d int(1024 * 1024 * 1024 * 1024)"},{"line_number":296,"context_line":"    elif unit \u003d\u003d \"\":"}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_7777a0d4","line":293,"updated":"2016-07-09 03:01:16.000000000","message":"units.Gi","commit_id":"251bc5ef48be1678013a1599ac71260c2092ab3f"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ef2e8f4fb2118e648c4a41530e8f91ac5ac3f08f","unresolved":false,"context_lines":[{"line_number":292,"context_line":"    elif unit in [\u0027G\u0027, \u0027GB\u0027]:"},{"line_number":293,"context_line":"        multiplier \u003d int(1024 * 1024 * 1024)"},{"line_number":294,"context_line":"    elif unit in [\u0027T\u0027, \u0027TB\u0027]:"},{"line_number":295,"context_line":"        multiplier \u003d int(1024 * 1024 * 1024 * 1024)"},{"line_number":296,"context_line":"    elif unit \u003d\u003d \"\":"},{"line_number":297,"context_line":"        return size_count"},{"line_number":298,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_577264e4","line":295,"updated":"2016-07-09 03:01:16.000000000","message":"units.Ti","commit_id":"251bc5ef48be1678013a1599ac71260c2092ab3f"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ef2e8f4fb2118e648c4a41530e8f91ac5ac3f08f","unresolved":false,"context_lines":[{"line_number":357,"context_line":"                             error_message, error_code):"},{"line_number":358,"context_line":"    \"\"\"Method to format error message."},{"line_number":359,"context_line":""},{"line_number":360,"context_line":"    @operation_type create, update, add, etc"},{"line_number":361,"context_line":"    @component storagesystem, vpool, etc"},{"line_number":362,"context_line":"    @error_code Error code from the API call"},{"line_number":363,"context_line":"    @error_message Detailed error message"}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_17473c78","line":360,"updated":"2016-07-09 03:01:16.000000000","message":":param operation_type: create, update, add, etc\n\nhttp://docs.openstack.org/developer/hacking/#docstrings","commit_id":"251bc5ef48be1678013a1599ac71260c2092ab3f"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ef2e8f4fb2118e648c4a41530e8f91ac5ac3f08f","unresolved":false,"context_lines":[{"line_number":360,"context_line":"    @operation_type create, update, add, etc"},{"line_number":361,"context_line":"    @component storagesystem, vpool, etc"},{"line_number":362,"context_line":"    @error_code Error code from the API call"},{"line_number":363,"context_line":"    @error_message Detailed error message"},{"line_number":364,"context_line":"    \"\"\""},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"    formated_err_msg \u003d (_(\"Error: Failed to %(operation_type)s\""}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_5759c45a","line":363,"updated":"2016-07-09 03:01:16.000000000","message":"same","commit_id":"251bc5ef48be1678013a1599ac71260c2092ab3f"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ef2e8f4fb2118e648c4a41530e8f91ac5ac3f08f","unresolved":false,"context_lines":[{"line_number":379,"context_line":"def search_by_tag(resource_search_uri, ipaddr, port):"},{"line_number":380,"context_line":"    \"\"\"Fetches the list of resources with a given tag."},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"    Parameter resource_search_uri : The tag based search uri"},{"line_number":383,"context_line":"                              Example: \u0027/block/volumes/search?tag\u003dtagexample1\u0027"},{"line_number":384,"context_line":"    \"\"\""},{"line_number":385,"context_line":"    # check if the URI passed has both project and name parameters"}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_f730b009","line":382,"updated":"2016-07-09 03:01:16.000000000","message":"see above example","commit_id":"251bc5ef48be1678013a1599ac71260c2092ab3f"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ef2e8f4fb2118e648c4a41530e8f91ac5ac3f08f","unresolved":false,"context_lines":[{"line_number":383,"context_line":"                              Example: \u0027/block/volumes/search?tag\u003dtagexample1\u0027"},{"line_number":384,"context_line":"    \"\"\""},{"line_number":385,"context_line":"    # check if the URI passed has both project and name parameters"},{"line_number":386,"context_line":"    strUri \u003d str(resource_search_uri)"},{"line_number":387,"context_line":"    if strUri.__contains__(\"search\") and strUri.__contains__(\"?tag\u003d\"):"},{"line_number":388,"context_line":"        # Get the project URI"},{"line_number":389,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_373b58ed","line":386,"updated":"2016-07-09 03:01:16.000000000","message":"str-\u003esix.text_type","commit_id":"251bc5ef48be1678013a1599ac71260c2092ab3f"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"a56e05b42048822517de37bf165bde9b0924269a","unresolved":false,"context_lines":[{"line_number":32,"context_line":"from cinder import exception"},{"line_number":33,"context_line":"from cinder.i18n import _"},{"line_number":34,"context_line":"from cinder.volume.drivers.coprhd.helpers.urihelper import ("},{"line_number":35,"context_line":"    singletonURIHelperInstance)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"PROD_NAME \u003d \u0027storageos\u0027"}],"source_content_type":"text/x-python","patch_set":25,"id":"1aa78d24_2ee563a3","line":35,"range":{"start_line":35,"start_character":4,"end_line":35,"end_character":30},"updated":"2016-07-12 10:33:05.000000000","message":"We\u0027re supposed not to import objects.","commit_id":"a7c715b4d08d369ad1246e23b54c36cf89d44a78"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"a56e05b42048822517de37bf165bde9b0924269a","unresolved":false,"context_lines":[{"line_number":77,"context_line":"def json_decode(rsp):"},{"line_number":78,"context_line":"    \"\"\"Used to decode the JSON encoded response.\"\"\""},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    o \u003d \"\""},{"line_number":81,"context_line":"    try:"},{"line_number":82,"context_line":"        o \u003d json.loads(rsp, object_hook\u003d_decode_dict)"},{"line_number":83,"context_line":"    except ValueError:"}],"source_content_type":"text/x-python","patch_set":25,"id":"1aa78d24_cec13fe6","line":80,"range":{"start_line":80,"start_character":4,"end_line":80,"end_character":10},"updated":"2016-07-12 10:33:05.000000000","message":"nit: That\u0027s redundant I think.","commit_id":"a7c715b4d08d369ad1246e23b54c36cf89d44a78"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"a56e05b42048822517de37bf165bde9b0924269a","unresolved":false,"context_lines":[{"line_number":145,"context_line":"        error_msg \u003d None"},{"line_number":146,"context_line":"        if response.status_code \u003d\u003d 500:"},{"line_number":147,"context_line":"            responseText \u003d json_decode(response.text)"},{"line_number":148,"context_line":"            errorDetails \u003d \"\""},{"line_number":149,"context_line":"            if \u0027details\u0027 in responseText:"},{"line_number":150,"context_line":"                errorDetails \u003d responseText[\u0027details\u0027]"},{"line_number":151,"context_line":"            error_msg \u003d (_(\"CoprHD internal server error. Error details: %s\"),"}],"source_content_type":"text/x-python","patch_set":25,"id":"1aa78d24_ae2cb3ac","line":148,"range":{"start_line":148,"start_character":12,"end_line":148,"end_character":24},"updated":"2016-07-12 10:33:05.000000000","message":"nit: error_details","commit_id":"a7c715b4d08d369ad1246e23b54c36cf89d44a78"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"a56e05b42048822517de37bf165bde9b0924269a","unresolved":false,"context_lines":[{"line_number":154,"context_line":"            error_msg \u003d _(\"Access forbidden: Authentication required\")"},{"line_number":155,"context_line":"        elif response.status_code \u003d\u003d 403:"},{"line_number":156,"context_line":"            error_msg \u003d \"\""},{"line_number":157,"context_line":"            errorDetails \u003d \"\""},{"line_number":158,"context_line":"            errorDescription \u003d \"\""},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"            responseText \u003d json_decode(response.text)"}],"source_content_type":"text/x-python","patch_set":25,"id":"1aa78d24_ae03130f","line":157,"range":{"start_line":157,"start_character":12,"end_line":157,"end_character":24},"updated":"2016-07-12 10:33:05.000000000","message":"nit: error_details","commit_id":"a7c715b4d08d369ad1246e23b54c36cf89d44a78"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"a56e05b42048822517de37bf165bde9b0924269a","unresolved":false,"context_lines":[{"line_number":155,"context_line":"        elif response.status_code \u003d\u003d 403:"},{"line_number":156,"context_line":"            error_msg \u003d \"\""},{"line_number":157,"context_line":"            errorDetails \u003d \"\""},{"line_number":158,"context_line":"            errorDescription \u003d \"\""},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"            responseText \u003d json_decode(response.text)"},{"line_number":161,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"1aa78d24_f9ffa3fe","line":158,"range":{"start_line":158,"start_character":12,"end_line":158,"end_character":28},"updated":"2016-07-12 10:33:05.000000000","message":"nit: error_description","commit_id":"a7c715b4d08d369ad1246e23b54c36cf89d44a78"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"a56e05b42048822517de37bf165bde9b0924269a","unresolved":false,"context_lines":[{"line_number":160,"context_line":"            responseText \u003d json_decode(response.text)"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"            if \u0027details\u0027 in responseText:"},{"line_number":163,"context_line":"                errorDetails \u003d responseText[\u0027details\u0027]"},{"line_number":164,"context_line":"                error_msg \u003d (_(\"%(error_msg)s Error details:\""},{"line_number":165,"context_line":"                               \" %(errorDetails)s\"),"},{"line_number":166,"context_line":"                             {\u0027error_msg\u0027: error_msg,"}],"source_content_type":"text/x-python","patch_set":25,"id":"1aa78d24_d9046716","line":163,"range":{"start_line":163,"start_character":16,"end_line":163,"end_character":28},"updated":"2016-07-12 10:33:05.000000000","message":"nit: error_details","commit_id":"a7c715b4d08d369ad1246e23b54c36cf89d44a78"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"a56e05b42048822517de37bf165bde9b0924269a","unresolved":false,"context_lines":[{"line_number":167,"context_line":"                              \u0027errorDetails\u0027: errorDetails"},{"line_number":168,"context_line":"                              })"},{"line_number":169,"context_line":"            elif \u0027description\u0027 in responseText:"},{"line_number":170,"context_line":"                errorDescription \u003d responseText[\u0027description\u0027]"},{"line_number":171,"context_line":"                error_msg \u003d (_(\"%(error_msg)s Error description:\""},{"line_number":172,"context_line":"                               \" %(errorDescription)s\"),"},{"line_number":173,"context_line":"                             {\u0027error_msg\u0027: error_msg,"}],"source_content_type":"text/x-python","patch_set":25,"id":"1aa78d24_190b8f25","line":170,"range":{"start_line":170,"start_character":16,"end_line":170,"end_character":32},"updated":"2016-07-12 10:33:05.000000000","message":"nit: error_description","commit_id":"a7c715b4d08d369ad1246e23b54c36cf89d44a78"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"a56e05b42048822517de37bf165bde9b0924269a","unresolved":false,"context_lines":[{"line_number":191,"context_line":""},{"line_number":192,"context_line":"            if \u0027code\u0027 in responseText:"},{"line_number":193,"context_line":"                errorCode \u003d responseText[\u0027code\u0027]"},{"line_number":194,"context_line":"                error_msg \u003d error_msg + \"Error \" + six.text_type(errorCode)"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"            if \u0027details\u0027 in responseText:"},{"line_number":197,"context_line":"                errorDetails \u003d responseText[\u0027details\u0027]"}],"source_content_type":"text/x-python","patch_set":25,"id":"1aa78d24_79de136e","line":194,"range":{"start_line":194,"start_character":28,"end_line":194,"end_character":37},"updated":"2016-07-12 10:33:05.000000000","message":"Won\u0027t error_msg be empty all the time here?","commit_id":"a7c715b4d08d369ad1246e23b54c36cf89d44a78"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"a56e05b42048822517de37bf165bde9b0924269a","unresolved":false,"context_lines":[{"line_number":381,"context_line":"    :param port: Port number"},{"line_number":382,"context_line":"    \"\"\""},{"line_number":383,"context_line":"    # check if the URI passed has both project and name parameters"},{"line_number":384,"context_line":"    strUri \u003d six.text_type(resource_search_uri)"},{"line_number":385,"context_line":"    if strUri.__contains__(\"search\") and strUri.__contains__(\"?tag\u003d\"):"},{"line_number":386,"context_line":"        # Get the project URI"},{"line_number":387,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"1aa78d24_d9946738","line":384,"range":{"start_line":384,"start_character":4,"end_line":384,"end_character":10},"updated":"2016-07-12 10:33:05.000000000","message":"nit: tr_uri","commit_id":"a7c715b4d08d369ad1246e23b54c36cf89d44a78"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"a56e05b42048822517de37bf165bde9b0924269a","unresolved":false,"context_lines":[{"line_number":382,"context_line":"    \"\"\""},{"line_number":383,"context_line":"    # check if the URI passed has both project and name parameters"},{"line_number":384,"context_line":"    strUri \u003d six.text_type(resource_search_uri)"},{"line_number":385,"context_line":"    if strUri.__contains__(\"search\") and strUri.__contains__(\"?tag\u003d\"):"},{"line_number":386,"context_line":"        # Get the project URI"},{"line_number":387,"context_line":""},{"line_number":388,"context_line":"        (s, h) \u003d service_json_request("}],"source_content_type":"text/x-python","patch_set":25,"id":"1aa78d24_99a77fa6","line":385,"range":{"start_line":385,"start_character":4,"end_line":385,"end_character":70},"updated":"2016-07-12 10:33:05.000000000","message":"if \u0027search\u0027 in str_uri and \u0027?tag\u003d\u0027 in str_uri:","commit_id":"a7c715b4d08d369ad1246e23b54c36cf89d44a78"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"a56e05b42048822517de37bf165bde9b0924269a","unresolved":false,"context_lines":[{"line_number":421,"context_line":"                         ipAddr,"},{"line_number":422,"context_line":"                         port,"},{"line_number":423,"context_line":"                         synctimeout\u003d0):"},{"line_number":424,"context_line":"    global IS_TASK_TIMEOUT"},{"line_number":425,"context_line":"    IS_TASK_TIMEOUT \u003d False"},{"line_number":426,"context_line":"    if synctimeout:"},{"line_number":427,"context_line":"        t \u003d threading.Timer(synctimeout, timeout_handler)"}],"source_content_type":"text/x-python","patch_set":25,"id":"1aa78d24_9499067c","line":424,"range":{"start_line":424,"start_character":0,"end_line":424,"end_character":26},"updated":"2016-07-12 10:33:05.000000000","message":"Eeem… Well… What happens when different greenthreads will start to run multiple operations that are using block_until_complete method? Won\u0027t we see multiple race conditions as different threads are accessing and modifying global variable?","commit_id":"a7c715b4d08d369ad1246e23b54c36cf89d44a78"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"a56e05b42048822517de37bf165bde9b0924269a","unresolved":false,"context_lines":[{"line_number":423,"context_line":"                         synctimeout\u003d0):"},{"line_number":424,"context_line":"    global IS_TASK_TIMEOUT"},{"line_number":425,"context_line":"    IS_TASK_TIMEOUT \u003d False"},{"line_number":426,"context_line":"    if synctimeout:"},{"line_number":427,"context_line":"        t \u003d threading.Timer(synctimeout, timeout_handler)"},{"line_number":428,"context_line":"    else:"},{"line_number":429,"context_line":"        synctimeout \u003d TASK_TIMEOUT"},{"line_number":430,"context_line":"        t \u003d threading.Timer(synctimeout, timeout_handler)"},{"line_number":431,"context_line":"    t.start()"},{"line_number":432,"context_line":"    while True:"},{"line_number":433,"context_line":"        out \u003d get_task_by_resourceuri_and_taskId("}],"source_content_type":"text/x-python","patch_set":25,"id":"1aa78d24_b9f99b50","line":430,"range":{"start_line":426,"start_character":0,"end_line":430,"end_character":57},"updated":"2016-07-12 10:33:05.000000000","message":"How about:\n\n    if not synctimeout:\n        synctimeout \u003d TASK_TIMEOUT\n\n    t \u003d threading.Timer(synctimeout, timeout_handler)","commit_id":"a7c715b4d08d369ad1246e23b54c36cf89d44a78"}],"cinder/volume/drivers/coprhd/helpers/consistencygroup.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ef2e8f4fb2118e648c4a41530e8f91ac5ac3f08f","unresolved":false,"context_lines":[{"line_number":176,"context_line":"               sync, synctimeout\u003d0):"},{"line_number":177,"context_line":"        \"\"\"Function used to add or remove volumes from consistency group."},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"        It will update the consistency  group with given volumes"},{"line_number":180,"context_line":"        Parameters:"},{"line_number":181,"context_line":"           uri           : URI of the consistency group"},{"line_number":182,"context_line":"           project        : Name of the project path"}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_723a0ecf","line":179,"updated":"2016-07-09 03:01:16.000000000","message":"extra space before \"group\".","commit_id":"251bc5ef48be1678013a1599ac71260c2092ab3f"}],"cinder/volume/drivers/coprhd/helpers/exportgroup.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"fc303d1dba5518c26cff391b09e584715e73afaa","unresolved":false,"context_lines":[{"line_number":174,"context_line":"                        host_uri \u003d host_obj.query_by_name("},{"line_number":175,"context_line":"                            export_destination)"},{"line_number":176,"context_line":"                    except common.CoprHdError as ex:"},{"line_number":177,"context_line":"                        raise ex"},{"line_number":178,"context_line":"                    parms[\u0027hosts\u0027] \u003d [host_uri]"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"                body \u003d oslo_serialization.jsonutils.dumps(parms)"}],"source_content_type":"text/x-python","patch_set":22,"id":"1aa78d24_7884685d","line":177,"updated":"2016-07-06 06:27:50.000000000","message":"Should not be catching an exception and just raising it. Remove the try/except block, or if adding additional actions to the exception handling change \"raise ex\" to just be \"raise\".","commit_id":"cf3788db2912b91defa757733a2fadc339a4e5fe"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ef2e8f4fb2118e648c4a41530e8f91ac5ac3f08f","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        return exportgroups"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    def exportgroup_show(self, name, project, tenant, varray\u003dNone):"},{"line_number":112,"context_line":"        \"\"\"This function display the Export group with details."},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"        Parameters:"},{"line_number":115,"context_line":"           name : Name of the export group"}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_326ec6c9","line":112,"updated":"2016-07-09 03:01:16.000000000","message":"displays","commit_id":"251bc5ef48be1678013a1599ac71260c2092ab3f"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ef2e8f4fb2118e648c4a41530e8f91ac5ac3f08f","unresolved":false,"context_lines":[{"line_number":278,"context_line":"                                tenantname, projectname, blockTypeName):"},{"line_number":279,"context_line":"        \"\"\"Function to validate input volumes and return list of ids and luns."},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"        input"},{"line_number":282,"context_line":"            list of volumes in the format name:lun"},{"line_number":283,"context_line":"        \"\"\""},{"line_number":284,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_5291d299","line":281,"updated":"2016-07-09 03:01:16.000000000","message":"Remove \"input\"","commit_id":"251bc5ef48be1678013a1599ac71260c2092ab3f"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ef2e8f4fb2118e648c4a41530e8f91ac5ac3f08f","unresolved":false,"context_lines":[{"line_number":279,"context_line":"        \"\"\"Function to validate input volumes and return list of ids and luns."},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"        input"},{"line_number":282,"context_line":"            list of volumes in the format name:lun"},{"line_number":283,"context_line":"        \"\"\""},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"        copyEntries \u003d []"}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_127f4a67","line":282,"updated":"2016-07-09 03:01:16.000000000","message":"Please either list all inputs in the following format or don\u0027t list them at all.  Listing only one out of six parameters looks incomplete.\n\n:param resources: list of volumes ….","commit_id":"251bc5ef48be1678013a1599ac71260c2092ab3f"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ef2e8f4fb2118e648c4a41530e8f91ac5ac3f08f","unresolved":false,"context_lines":[{"line_number":298,"context_line":"            if not len(copyParam):"},{"line_number":299,"context_line":"                raise common.CoprHdError("},{"line_number":300,"context_line":"                    common.CoprHdError.CMD_LINE_ERR,"},{"line_number":301,"context_line":"                    (_(\"Please provide at least volume for parameter %s\") %"},{"line_number":302,"context_line":"                     resType))"},{"line_number":303,"context_line":"            if resType \u003d\u003d \"volumes\":"},{"line_number":304,"context_line":"                full_project_name \u003d tenantname + \"/\" + projectname"}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_f281de4e","line":301,"updated":"2016-07-09 03:01:16.000000000","message":"Do you mean \"at least one volume\"?","commit_id":"251bc5ef48be1678013a1599ac71260c2092ab3f"}],"cinder/volume/drivers/coprhd/helpers/project.py":[{"author":{"_account_id":20466,"name":"Tin Lam","email":"tin@lam.wtf","username":"tinlam"},"change_message_id":"ea4e9a2281a435609f605761921e8843a168e9fa","unresolved":false,"context_lines":[{"line_number":88,"context_line":"                                             None)"},{"line_number":89,"context_line":"        o \u003d common.json_decode(s)"},{"line_number":90,"context_line":"        inactive \u003d common.get_node_value(o, \u0027inactive\u0027)"},{"line_number":91,"context_line":"        if inactive is True:"},{"line_number":92,"context_line":"            return None"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"        return o"}],"source_content_type":"text/x-python","patch_set":6,"id":"7aa08908_873f3c86","line":91,"range":{"start_line":91,"start_character":20,"end_line":91,"end_character":27},"updated":"2016-06-07 15:30:50.000000000","message":"nit: perhaps this can be just \u0027if inactive:\u0027, .get_note_value() does not return a boolean.","commit_id":"6883853fe29cafea5bfd348cd4b6de6eaddede67"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"fc303d1dba5518c26cff391b09e584715e73afaa","unresolved":false,"context_lines":[{"line_number":37,"context_line":"            return name"},{"line_number":38,"context_line":"        (tenant_name, project_name) \u003d common.get_parent_child_from_xpath(name)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        from cinder.volume.drivers.coprhd.helpers.tenant import Tenant"},{"line_number":41,"context_line":"        tenant_obj \u003d Tenant(self.ipaddr, self.port)"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        tenant_uri \u003d tenant_obj.tenant_query(tenant_name)"}],"source_content_type":"text/x-python","patch_set":22,"id":"1aa78d24_188c447e","line":40,"updated":"2016-07-06 06:27:50.000000000","message":"Move to other imports. Don\u0027t import a class directly, just import the module.","commit_id":"cf3788db2912b91defa757733a2fadc339a4e5fe"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"fc303d1dba5518c26cff391b09e584715e73afaa","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        tenant_uri \u003d tenant_obj.tenant_query(tenant_name)"},{"line_number":44,"context_line":"        projects \u003d self.project_list(tenant_uri)"},{"line_number":45,"context_line":"        if projects and len(projects) \u003e 0:"},{"line_number":46,"context_line":"            for project in projects:"},{"line_number":47,"context_line":"                if project:"},{"line_number":48,"context_line":"                    project_detail \u003d self.project_show_by_uri("}],"source_content_type":"text/x-python","patch_set":22,"id":"1aa78d24_38e66044","line":45,"updated":"2016-07-06 06:27:50.000000000","message":"\"if projects:\" will cover it. \"and len(projects) \u003e 0\" is redundant.","commit_id":"cf3788db2912b91defa757733a2fadc339a4e5fe"}],"cinder/volume/drivers/coprhd/helpers/virtualpool.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4f876a01cb4230eadb98210c492f04c024962d85","unresolved":false,"context_lines":[{"line_number":24,"context_line":"    URI_VPOOL_SEARCH \u003d URI_VPOOL + \"/search?name\u003d{1}\""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def vpool_show_uri(self, vpooltype, uri):"},{"line_number":27,"context_line":"        \"\"\"Makes REST API call and retrieves vpool details based on UUID"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"        This function will take uri as input and returns with"},{"line_number":30,"context_line":"        all parameters of VPOOL like label, urn and type."}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_d3023fb3","line":27,"updated":"2016-06-27 02:22:58.000000000","message":"Need a period at end of the first line doctring.\n\nSame to all other places.","commit_id":"14f3ecd4d0317cf6529d3502118e9344f7b36261"}],"cinder/volume/drivers/coprhd/helpers/volume.py":[{"author":{"_account_id":21420,"name":"Gage Hugo","email":"gagehugo@gmail.com","username":"ghugo"},"change_message_id":"8855d559e277e02c4e19a8212a911bcb31d8b7e8","unresolved":false,"context_lines":[{"line_number":112,"context_line":"                                             None)"},{"line_number":113,"context_line":"        o \u003d common.json_decode(s)"},{"line_number":114,"context_line":"        inactive \u003d common.get_node_value(o, \u0027inactive\u0027)"},{"line_number":115,"context_line":"        if inactive is True:"},{"line_number":116,"context_line":"            return None"},{"line_number":117,"context_line":"        return o"},{"line_number":118,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"7aa08908_943f08b3","line":115,"range":{"start_line":115,"start_character":11,"end_line":115,"end_character":27},"updated":"2016-06-08 21:00:24.000000000","message":"Can just say if inactive:","commit_id":"6883853fe29cafea5bfd348cd4b6de6eaddede67"},{"author":{"_account_id":21420,"name":"Gage Hugo","email":"gagehugo@gmail.com","username":"ghugo"},"change_message_id":"8855d559e277e02c4e19a8212a911bcb31d8b7e8","unresolved":false,"context_lines":[{"line_number":156,"context_line":"            \u0027project\u0027: project_uri,"},{"line_number":157,"context_line":"            \u0027vpool\u0027: vpool_uri"},{"line_number":158,"context_line":"        }"},{"line_number":159,"context_line":"        request[\"count\"] \u003d 1"},{"line_number":160,"context_line":"        if consistencygroup:"},{"line_number":161,"context_line":"            request[\u0027consistency_group\u0027] \u003d consistencygroup"},{"line_number":162,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"7aa08908_895c114c","line":159,"range":{"start_line":159,"start_character":8,"end_line":159,"end_character":28},"updated":"2016-06-08 21:00:24.000000000","message":"Initialize this with the rest above.","commit_id":"6883853fe29cafea5bfd348cd4b6de6eaddede67"},{"author":{"_account_id":21420,"name":"Gage Hugo","email":"gagehugo@gmail.com","username":"ghugo"},"change_message_id":"8855d559e277e02c4e19a8212a911bcb31d8b7e8","unresolved":false,"context_lines":[{"line_number":215,"context_line":"        uris \u003d self.search_volumes(pname)"},{"line_number":216,"context_line":"        for uri in uris:"},{"line_number":217,"context_line":"            volume \u003d self.show_by_uri(uri)"},{"line_number":218,"context_line":"            if volume and \u0027name\u0027 in volume and volume[\u0027name\u0027] \u003d\u003d label:"},{"line_number":219,"context_line":"                return volume[\u0027id\u0027]"},{"line_number":220,"context_line":"        raise common.CoprHdError(common.CoprHdError.NOT_FOUND_ERR,"},{"line_number":221,"context_line":"                                 (_(\"Volume\""},{"line_number":222,"context_line":"                                    \"%s: not found\"), label))"}],"source_content_type":"text/x-python","patch_set":6,"id":"7aa08908_14883870","line":219,"range":{"start_line":218,"start_character":12,"end_line":219,"end_character":35},"updated":"2016-06-08 21:00:24.000000000","message":"Not sure why you are validating if name is in volume, then just returning id with no validation?","commit_id":"6883853fe29cafea5bfd348cd4b6de6eaddede67"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4f876a01cb4230eadb98210c492f04c024962d85","unresolved":false,"context_lines":[{"line_number":119,"context_line":"    # Creates a volume given label, project, vpool and size"},{"line_number":120,"context_line":"    def create(self, project, label, size, varray, vpool,"},{"line_number":121,"context_line":"               sync, consistencygroup, synctimeout\u003d0):"},{"line_number":122,"context_line":"        \"\"\"Makes REST API call to create volume under a project"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"        Parameters:"},{"line_number":125,"context_line":"            project          : name of the project under which the volume will"}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_5325af59","line":122,"updated":"2016-06-27 02:22:58.000000000","message":"Period","commit_id":"14f3ecd4d0317cf6529d3502118e9344f7b36261"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"fc303d1dba5518c26cff391b09e584715e73afaa","unresolved":false,"context_lines":[{"line_number":134,"context_line":"            Created task details in JSON response payload"},{"line_number":135,"context_line":"        \"\"\""},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"        from cinder.volume.drivers.coprhd.helpers.project import Project"},{"line_number":138,"context_line":"        proj_obj \u003d Project(self.ipaddr, self.port)"},{"line_number":139,"context_line":"        project_uri \u003d proj_obj.project_query(project)"},{"line_number":140,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"1aa78d24_7860e8a5","line":137,"updated":"2016-07-06 06:27:50.000000000","message":"Move imports to top.","commit_id":"cf3788db2912b91defa757733a2fadc339a4e5fe"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ef2e8f4fb2118e648c4a41530e8f91ac5ac3f08f","unresolved":false,"context_lines":[{"line_number":408,"context_line":""},{"line_number":409,"context_line":"        volume_detail \u003d self.show(full_project_name, volume_name)"},{"line_number":410,"context_line":"        from decimal import Decimal"},{"line_number":411,"context_line":"        new_size_in_gb \u003d Decimal(Decimal(new_size) / (1024 * 1024 * 1024))"},{"line_number":412,"context_line":"        current_size \u003d Decimal(volume_detail[\"provisioned_capacity_gb\"])"},{"line_number":413,"context_line":"        if new_size_in_gb \u003c\u003d current_size:"},{"line_number":414,"context_line":"            raise common.CoprHdError("}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_526d5298","line":411,"updated":"2016-07-09 03:01:16.000000000","message":"units.Ki","commit_id":"251bc5ef48be1678013a1599ac71260c2092ab3f"}],"cinder/volume/drivers/coprhd/iscsi.py":[{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"18c0e94106a823c0fc079e36ffd3af61f06d7c93","unresolved":false,"context_lines":[{"line_number":26,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"@interface.volumedriver"},{"line_number":30,"context_line":"class EMCCoprHDISCSIDriver(driver.ISCSIDriver):"},{"line_number":31,"context_line":"    \"\"\"CoprHD iSCSI Driver\"\"\""},{"line_number":32,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"3aaa91ec_9d49968e","line":29,"range":{"start_line":29,"start_character":0,"end_line":29,"end_character":23},"updated":"2016-06-22 13:43:18.000000000","message":"@cinder.interface.volumedriver","commit_id":"f900e96a28ea208442118bce3a250a16e57ddd6f"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"25fd0ee03df9fa747fa3445f399f7563bc13db9d","unresolved":false,"context_lines":[{"line_number":26,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"@interface.volumedriver"},{"line_number":30,"context_line":"class EMCCoprHDISCSIDriver(driver.ISCSIDriver):"},{"line_number":31,"context_line":"    \"\"\"CoprHD iSCSI Driver\"\"\""},{"line_number":32,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"3aaa91ec_b9045bc0","line":29,"range":{"start_line":29,"start_character":0,"end_line":29,"end_character":23},"in_reply_to":"3aaa91ec_9d49968e","updated":"2016-06-22 16:21:48.000000000","message":"Actually, since this has \"from cinder import interface\", this should be fine as is.","commit_id":"f900e96a28ea208442118bce3a250a16e57ddd6f"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5238207f10e98d8153686ed93ab837ecc213a8dd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"3aaa91ec_d161d73a","updated":"2016-06-24 13:24:47.000000000","message":"Not 100% sure on these, but you\u0027re not implementing:\n\n * create_consistencygroup_from_src\n * clone_image\n * get_pool","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"5ebabf6c85e088eb37cf03421e958f5ddbdf412a","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"\"\"\"Driver for EMC CoprHD iSCSI volumes\"\"\""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from oslo_log import log as logging"},{"line_number":20,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_351e4e5f","line":17,"range":{"start_line":17,"start_character":0,"end_line":17,"end_character":41},"updated":"2016-06-24 06:26:17.000000000","message":". missing at end of string","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5238207f10e98d8153686ed93ab837ecc213a8dd","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from cinder import interface"},{"line_number":22,"context_line":"from cinder.volume import driver"},{"line_number":23,"context_line":"from cinder.volume.drivers.coprhd import common as CoprHD_common"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_71e0e396","line":23,"range":{"start_line":23,"start_character":51,"end_line":23,"end_character":64},"updated":"2016-06-24 13:24:47.000000000","message":"Can we stick to Python and don\u0027t use CamelCase for identifiers that aren\u0027t class names? This is confusing.","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"5ebabf6c85e088eb37cf03421e958f5ddbdf412a","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"@interface.volumedriver"},{"line_number":30,"context_line":"class EMCCoprHDISCSIDriver(driver.ISCSIDriver):"},{"line_number":31,"context_line":"    \"\"\"CoprHD iSCSI Driver\"\"\""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":34,"context_line":"        super(EMCCoprHDISCSIDriver, self).__init__(*args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_952f4287","line":31,"updated":"2016-06-24 06:26:17.000000000","message":"same","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5238207f10e98d8153686ed93ab837ecc213a8dd","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        \"\"\"Deletes a snapshot.\"\"\""},{"line_number":75,"context_line":"        self.common.delete_snapshot(snapshot)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    def _iscsi_location(self, ip, target, iqn, lun\u003dNone):"},{"line_number":78,"context_line":"        return \"%s:%s,%s %s %s\" % (ip,"},{"line_number":79,"context_line":"                                   self.configuration.iscsi_port,"},{"line_number":80,"context_line":"                                   target,"},{"line_number":81,"context_line":"                                   iqn,"},{"line_number":82,"context_line":"                                   lun)"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    def ensure_export(self, context, volume):"},{"line_number":85,"context_line":"        \"\"\"Driver entry point to get the export info for an existing volume.\"\"\""}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_160a3579","line":82,"range":{"start_line":77,"start_character":0,"end_line":82,"end_character":39},"updated":"2016-06-24 13:24:47.000000000","message":"Am I right this is unused?","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"5ebabf6c85e088eb37cf03421e958f5ddbdf412a","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        pass"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    def create_export(self, context, volume, connector\u003dNone):"},{"line_number":89,"context_line":"        \"\"\"Driver entry point to get the export info for a new volume\"\"\""},{"line_number":90,"context_line":"        pass"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    def remove_export(self, context, volume):"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_35976e3b","line":89,"updated":"2016-06-24 06:26:17.000000000","message":"same","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5238207f10e98d8153686ed93ab837ecc213a8dd","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        pass"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    def remove_export(self, context, volume):"},{"line_number":93,"context_line":"        \"\"\"Driver exntry point to remove an export for a volume\"\"\""},{"line_number":94,"context_line":"        pass"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def create_consistencygroup(self, context, group):"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_56283de2","line":93,"range":{"start_line":93,"start_character":18,"end_line":93,"end_character":24},"updated":"2016-06-24 13:24:47.000000000","message":"entry - typo.","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"5ebabf6c85e088eb37cf03421e958f5ddbdf412a","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        pass"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    def remove_export(self, context, volume):"},{"line_number":93,"context_line":"        \"\"\"Driver exntry point to remove an export for a volume\"\"\""},{"line_number":94,"context_line":"        pass"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def create_consistencygroup(self, context, group):"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_b574fe35","line":93,"range":{"start_line":93,"start_character":63,"end_line":93,"end_character":66},"updated":"2016-06-24 06:26:17.000000000","message":"same","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5238207f10e98d8153686ed93ab837ecc213a8dd","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        \"\"\"Creates a consistencygroup.\"\"\""},{"line_number":98,"context_line":"        return self.common.create_consistencygroup(context, group)"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    def delete_consistencygroup(self, context, group):"},{"line_number":101,"context_line":"        \"\"\"Deletes a consistency group.\"\"\""},{"line_number":102,"context_line":"        return self.common.delete_consistencygroup(self, context, group)"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    def update_consistencygroup(self, context, group,"},{"line_number":105,"context_line":"                                add_volumes, remove_volumes):"},{"line_number":106,"context_line":"        \"\"\"Updates volumes in consistency group.\"\"\""},{"line_number":107,"context_line":"        return self.common.update_consistencygroup(self, context, group,"},{"line_number":108,"context_line":"                                                   add_volumes, remove_volumes)"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    def create_cgsnapshot(self, context, cgsnapshot, snapshots):"},{"line_number":111,"context_line":"        \"\"\"Creates a cgsnapshot.\"\"\""}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_d64b8d85","line":108,"range":{"start_line":100,"start_character":0,"end_line":108,"end_character":79},"updated":"2016-06-24 13:24:47.000000000","message":"Have you\u0027ve tested these two methods? Looks like their signatures in VolumeDriver are different, especially in delete_consistencygroup which has a volumes parameter. I\u0027m pretty sure this will explode when run.","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"5ebabf6c85e088eb37cf03421e958f5ddbdf412a","unresolved":false,"context_lines":[{"line_number":124,"context_line":"    def initialize_connection(self, volume, connector):"},{"line_number":125,"context_line":"        \"\"\"Initializes the connection and returns connection info."},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"        the iscsi driver returns a driver_volume_type of \u0027iscsi\u0027."},{"line_number":128,"context_line":"        the format of the driver data is defined as:"},{"line_number":129,"context_line":"            :target_discovered:    boolean indicating"},{"line_number":130,"context_line":"            whether discovery was used"},{"line_number":131,"context_line":"            :target_iqn:    the IQN of the iSCSI target"},{"line_number":132,"context_line":"            :target_portal:    the portal of the iSCSI target"},{"line_number":133,"context_line":"            :target_lun:    the lun of the iSCSI target"},{"line_number":134,"context_line":"            :volume_id:    the id of the volume (currently used by xen)"},{"line_number":135,"context_line":"            :auth_method:, :auth_username:, :auth_password:"},{"line_number":136,"context_line":"                the authentication details. Right now,"},{"line_number":137,"context_line":"                either auth_method is not"},{"line_number":138,"context_line":"                present meaning no authentication, or auth_method \u003d\u003d `CHAP`"},{"line_number":139,"context_line":"                meaning use CHAP with the specified credentials."},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"        Example return value::"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"            {"},{"line_number":144,"context_line":"                \u0027driver_volume_type\u0027: \u0027iscsi\u0027"},{"line_number":145,"context_line":"                \u0027data\u0027: {"},{"line_number":146,"context_line":"                    \u0027target_discovered\u0027: True,"},{"line_number":147,"context_line":"                    \u0027target_iqn\u0027: \u0027iqn.2010-10.org.openstack:volume-00000001\u0027,"},{"line_number":148,"context_line":"                    \u0027target_portal\u0027: \u0027127.0.0.0.1:3260\u0027,"},{"line_number":149,"context_line":"                    \u0027volume_id\u0027: 1,"},{"line_number":150,"context_line":"                }"},{"line_number":151,"context_line":"            }"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"        \"\"\""},{"line_number":154,"context_line":"        initiatorPorts \u003d []"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_f5896627","line":151,"range":{"start_line":127,"start_character":7,"end_line":151,"end_character":13},"updated":"2016-06-24 06:26:17.000000000","message":"I think no need to describe these.","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5238207f10e98d8153686ed93ab837ecc213a8dd","unresolved":false,"context_lines":[{"line_number":124,"context_line":"    def initialize_connection(self, volume, connector):"},{"line_number":125,"context_line":"        \"\"\"Initializes the connection and returns connection info."},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"        the iscsi driver returns a driver_volume_type of \u0027iscsi\u0027."},{"line_number":128,"context_line":"        the format of the driver data is defined as:"},{"line_number":129,"context_line":"            :target_discovered:    boolean indicating"},{"line_number":130,"context_line":"            whether discovery was used"},{"line_number":131,"context_line":"            :target_iqn:    the IQN of the iSCSI target"},{"line_number":132,"context_line":"            :target_portal:    the portal of the iSCSI target"},{"line_number":133,"context_line":"            :target_lun:    the lun of the iSCSI target"},{"line_number":134,"context_line":"            :volume_id:    the id of the volume (currently used by xen)"},{"line_number":135,"context_line":"            :auth_method:, :auth_username:, :auth_password:"},{"line_number":136,"context_line":"                the authentication details. Right now,"},{"line_number":137,"context_line":"                either auth_method is not"},{"line_number":138,"context_line":"                present meaning no authentication, or auth_method \u003d\u003d `CHAP`"},{"line_number":139,"context_line":"                meaning use CHAP with the specified credentials."},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"        Example return value::"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"            {"},{"line_number":144,"context_line":"                \u0027driver_volume_type\u0027: \u0027iscsi\u0027"},{"line_number":145,"context_line":"                \u0027data\u0027: {"},{"line_number":146,"context_line":"                    \u0027target_discovered\u0027: True,"},{"line_number":147,"context_line":"                    \u0027target_iqn\u0027: \u0027iqn.2010-10.org.openstack:volume-00000001\u0027,"},{"line_number":148,"context_line":"                    \u0027target_portal\u0027: \u0027127.0.0.0.1:3260\u0027,"},{"line_number":149,"context_line":"                    \u0027volume_id\u0027: 1,"},{"line_number":150,"context_line":"                }"},{"line_number":151,"context_line":"            }"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"        \"\"\""},{"line_number":154,"context_line":"        initiatorPorts \u003d []"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_96046518","line":151,"range":{"start_line":127,"start_character":7,"end_line":151,"end_character":13},"in_reply_to":"3aaa91ec_f5896627","updated":"2016-06-24 13:24:47.000000000","message":"Yup, I don\u0027t think we need to copy that from parent class.","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5238207f10e98d8153686ed93ab837ecc213a8dd","unresolved":false,"context_lines":[{"line_number":151,"context_line":"            }"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"        \"\"\""},{"line_number":154,"context_line":"        initiatorPorts \u003d []"},{"line_number":155,"context_line":"        initiatorPort \u003d connector[\u0027initiator\u0027]"},{"line_number":156,"context_line":"        initiatorPorts.append(initiatorPort)"},{"line_number":157,"context_line":"        protocol \u003d \u0027iSCSI\u0027"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_7118e375","line":154,"range":{"start_line":154,"start_character":8,"end_line":154,"end_character":22},"updated":"2016-06-24 13:24:47.000000000","message":"nit: initiator_ports would be more Pythonic.","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5238207f10e98d8153686ed93ab837ecc213a8dd","unresolved":false,"context_lines":[{"line_number":152,"context_line":""},{"line_number":153,"context_line":"        \"\"\""},{"line_number":154,"context_line":"        initiatorPorts \u003d []"},{"line_number":155,"context_line":"        initiatorPort \u003d connector[\u0027initiator\u0027]"},{"line_number":156,"context_line":"        initiatorPorts.append(initiatorPort)"},{"line_number":157,"context_line":"        protocol \u003d \u0027iSCSI\u0027"},{"line_number":158,"context_line":"        hostname \u003d connector[\u0027host\u0027]"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_f12213a2","line":155,"range":{"start_line":155,"start_character":8,"end_line":155,"end_character":21},"updated":"2016-06-24 13:24:47.000000000","message":"…aaand initiator_port here.","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5238207f10e98d8153686ed93ab837ecc213a8dd","unresolved":false,"context_lines":[{"line_number":151,"context_line":"            }"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"        \"\"\""},{"line_number":154,"context_line":"        initiatorPorts \u003d []"},{"line_number":155,"context_line":"        initiatorPort \u003d connector[\u0027initiator\u0027]"},{"line_number":156,"context_line":"        initiatorPorts.append(initiatorPort)"},{"line_number":157,"context_line":"        protocol \u003d \u0027iSCSI\u0027"},{"line_number":158,"context_line":"        hostname \u003d connector[\u0027host\u0027]"},{"line_number":159,"context_line":"        itls \u003d self.common.initialize_connection(volume,"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_11551ff9","line":156,"range":{"start_line":154,"start_character":0,"end_line":156,"end_character":44},"updated":"2016-06-24 13:24:47.000000000","message":"Actually why not simply:\n\n initiator_ports \u003d [connector[\u0027initiator\u0027]]\n\n?","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5238207f10e98d8153686ed93ab837ecc213a8dd","unresolved":false,"context_lines":[{"line_number":165,"context_line":"        properties[\u0027volume_id\u0027] \u003d volume[\u0027id\u0027]"},{"line_number":166,"context_line":"        if itls:"},{"line_number":167,"context_line":"            properties[\u0027target_iqn\u0027] \u003d itls[0][\u0027target\u0027][\u0027port\u0027]"},{"line_number":168,"context_line":"            properties[\u0027target_portal\u0027] \u003d (itls[0][\u0027target\u0027][\u0027ip_address\u0027] +"},{"line_number":169,"context_line":"                                           \u0027:\u0027 + itls[0][\u0027target\u0027][\u0027tcp_port\u0027])"},{"line_number":170,"context_line":"            properties[\u0027target_lun\u0027] \u003d itls[0][\u0027hlu\u0027]"},{"line_number":171,"context_line":"        auth \u003d volume[\u0027provider_auth\u0027]"},{"line_number":172,"context_line":"        if auth:"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_31677bea","line":169,"range":{"start_line":168,"start_character":43,"end_line":169,"end_character":78},"updated":"2016-06-24 13:24:47.000000000","message":"Please use % operator to format strings.","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5238207f10e98d8153686ed93ab837ecc213a8dd","unresolved":false,"context_lines":[{"line_number":175,"context_line":"            properties[\u0027auth_username\u0027] \u003d auth_username"},{"line_number":176,"context_line":"            properties[\u0027auth_password\u0027] \u003d auth_secret"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"        LOG.debug(\"ISCSI properties: \")"},{"line_number":179,"context_line":"        LOG.debug(properties)"},{"line_number":180,"context_line":"        return {"},{"line_number":181,"context_line":"            \u0027driver_volume_type\u0027: \u0027iscsi\u0027,"},{"line_number":182,"context_line":"            \u0027data\u0027: properties"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_6ca5ac45","line":179,"range":{"start_line":178,"start_character":0,"end_line":179,"end_character":29},"updated":"2016-06-24 13:24:47.000000000","message":"It would be better to format them into the previous message:\n\n LOG.debug(\"ISCSI properties: %s\", properties)","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5238207f10e98d8153686ed93ab837ecc213a8dd","unresolved":false,"context_lines":[{"line_number":179,"context_line":"        LOG.debug(properties)"},{"line_number":180,"context_line":"        return {"},{"line_number":181,"context_line":"            \u0027driver_volume_type\u0027: \u0027iscsi\u0027,"},{"line_number":182,"context_line":"            \u0027data\u0027: properties"},{"line_number":183,"context_line":"        }"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"    def terminate_connection(self, volume, connector, **kwargs):"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_117a3f77","line":182,"updated":"2016-06-24 13:24:47.000000000","message":"Missing comma [1].\n\n[1] http://docs.openstack.org/developer/hacking/#dictionaries-lists","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"5ebabf6c85e088eb37cf03421e958f5ddbdf412a","unresolved":false,"context_lines":[{"line_number":183,"context_line":"        }"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"    def terminate_connection(self, volume, connector, **kwargs):"},{"line_number":186,"context_line":"        \"\"\"Disallow connection from connector\"\"\""},{"line_number":187,"context_line":"        initiatorPort \u003d connector[\u0027initiator\u0027]"},{"line_number":188,"context_line":"        protocol \u003d \u0027iSCSI\u0027"},{"line_number":189,"context_line":"        hostname \u003d connector[\u0027host\u0027]"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_757e161a","line":186,"range":{"start_line":186,"start_character":45,"end_line":186,"end_character":48},"updated":"2016-06-24 06:26:17.000000000","message":"same","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5238207f10e98d8153686ed93ab837ecc213a8dd","unresolved":false,"context_lines":[{"line_number":185,"context_line":"    def terminate_connection(self, volume, connector, **kwargs):"},{"line_number":186,"context_line":"        \"\"\"Disallow connection from connector\"\"\""},{"line_number":187,"context_line":"        initiatorPort \u003d connector[\u0027initiator\u0027]"},{"line_number":188,"context_line":"        protocol \u003d \u0027iSCSI\u0027"},{"line_number":189,"context_line":"        hostname \u003d connector[\u0027host\u0027]"},{"line_number":190,"context_line":"        initPorts \u003d []"},{"line_number":191,"context_line":"        initPorts.append(initiatorPort)"},{"line_number":192,"context_line":"        self.common.terminate_connection(volume,"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_11c87fa7","line":189,"range":{"start_line":188,"start_character":0,"end_line":189,"end_character":36},"updated":"2016-06-24 13:24:47.000000000","message":"nit: You can pass these directly instead of creating a variable.","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5238207f10e98d8153686ed93ab837ecc213a8dd","unresolved":false,"context_lines":[{"line_number":188,"context_line":"        protocol \u003d \u0027iSCSI\u0027"},{"line_number":189,"context_line":"        hostname \u003d connector[\u0027host\u0027]"},{"line_number":190,"context_line":"        initPorts \u003d []"},{"line_number":191,"context_line":"        initPorts.append(initiatorPort)"},{"line_number":192,"context_line":"        self.common.terminate_connection(volume,"},{"line_number":193,"context_line":"                                         protocol,"},{"line_number":194,"context_line":"                                         initPorts,"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_d1d1d758","line":191,"range":{"start_line":191,"start_character":1,"end_line":191,"end_character":39},"updated":"2016-06-24 13:24:47.000000000","message":"init_ports \u003d [connector[\u0027initiator\u0027]]","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"5ebabf6c85e088eb37cf03421e958f5ddbdf412a","unresolved":false,"context_lines":[{"line_number":210,"context_line":"        self._stats \u003d self.common.update_volume_stats()"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"    def retype(self, ctxt, volume, new_type, diff, host):"},{"line_number":213,"context_line":"        \"\"\"Change the volume type\"\"\""},{"line_number":214,"context_line":"        return self.common.retype(ctxt, volume, new_type, diff, host)"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_35800ef7","line":213,"range":{"start_line":213,"start_character":33,"end_line":213,"end_character":36},"updated":"2016-06-24 06:26:17.000000000","message":"same","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4f876a01cb4230eadb98210c492f04c024962d85","unresolved":false,"context_lines":[{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    def delete_consistencygroup(self, context, group):"},{"line_number":101,"context_line":"        \"\"\"Deletes a consistency group.\"\"\""},{"line_number":102,"context_line":"        return self.common.delete_consistencygroup(self, context, group)"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    def update_consistencygroup(self, context, group,"},{"line_number":105,"context_line":"                                add_volumes, remove_volumes):"}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_93c71795","line":102,"updated":"2016-06-27 02:22:58.000000000","message":"Same comments as in fc.py.","commit_id":"14f3ecd4d0317cf6529d3502118e9344f7b36261"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4f876a01cb4230eadb98210c492f04c024962d85","unresolved":false,"context_lines":[{"line_number":105,"context_line":"                                add_volumes, remove_volumes):"},{"line_number":106,"context_line":"        \"\"\"Updates volumes in consistency group.\"\"\""},{"line_number":107,"context_line":"        return self.common.update_consistencygroup(self, context, group,"},{"line_number":108,"context_line":"                                                   add_volumes, remove_volumes)"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    def create_cgsnapshot(self, context, cgsnapshot, snapshots):"},{"line_number":111,"context_line":"        \"\"\"Creates a cgsnapshot.\"\"\""}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_73c26b86","line":108,"updated":"2016-06-27 02:22:58.000000000","message":"same","commit_id":"14f3ecd4d0317cf6529d3502118e9344f7b36261"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4f876a01cb4230eadb98210c492f04c024962d85","unresolved":false,"context_lines":[{"line_number":110,"context_line":"    def create_cgsnapshot(self, context, cgsnapshot, snapshots):"},{"line_number":111,"context_line":"        \"\"\"Creates a cgsnapshot.\"\"\""},{"line_number":112,"context_line":"        return self.common.create_cgsnapshot(self, context,"},{"line_number":113,"context_line":"                                             cgsnapshot, snapshots)"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    def delete_cgsnapshot(self, context, cgsnapshot, snapshots):"},{"line_number":116,"context_line":"        \"\"\"Deletes a cgsnapshot.\"\"\""}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_d3bd1f03","line":113,"updated":"2016-06-27 02:22:58.000000000","message":"same","commit_id":"14f3ecd4d0317cf6529d3502118e9344f7b36261"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4f876a01cb4230eadb98210c492f04c024962d85","unresolved":false,"context_lines":[{"line_number":115,"context_line":"    def delete_cgsnapshot(self, context, cgsnapshot, snapshots):"},{"line_number":116,"context_line":"        \"\"\"Deletes a cgsnapshot.\"\"\""},{"line_number":117,"context_line":"        return self.common.delete_cgsnapshot(self, context,"},{"line_number":118,"context_line":"                                             cgsnapshot, snapshots)"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"    def check_for_export(self, context, volume_id):"},{"line_number":121,"context_line":"        \"\"\"Make sure volume is exported.\"\"\""}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_b3b85312","line":118,"updated":"2016-06-27 02:22:58.000000000","message":"same","commit_id":"14f3ecd4d0317cf6529d3502118e9344f7b36261"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"a56e05b42048822517de37bf165bde9b0924269a","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        \"\"\"Deletes a consistency group.\"\"\""},{"line_number":95,"context_line":"        return self.common.delete_consistencygroup(context, group, volumes)"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    def update_consistencygroup(self, context, group,"},{"line_number":98,"context_line":"                                add_volumes, remove_volumes):"},{"line_number":99,"context_line":"        \"\"\"Updates volumes in consistency group.\"\"\""},{"line_number":100,"context_line":"        return self.common.update_consistencygroup(group, add_volumes,"},{"line_number":101,"context_line":"                                                   remove_volumes)"}],"source_content_type":"text/x-python","patch_set":25,"id":"1aa78d24_f31224b3","line":98,"range":{"start_line":97,"start_character":0,"end_line":98,"end_character":61},"updated":"2016-07-12 10:33:05.000000000","message":"This still does not match the signature from the driver. Should be:\n\n    def update_consistencygroup(self, context, group,\n                                add_volumes\u003dNone, remove_volumes\u003dNone):","commit_id":"a7c715b4d08d369ad1246e23b54c36cf89d44a78"}],"cinder/volume/drivers/coprhd/scaleio.py":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"f6adf4fc90e9eec02f2d68acfc881402dc7ca184","unresolved":false,"context_lines":[{"line_number":52,"context_line":"            default_backend_name\u003dself.__class__.__name__,"},{"line_number":53,"context_line":"            configuration\u003dself.configuration)"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def check_for_setup_error(self):"},{"line_number":56,"context_line":"        self.common.check_for_setup_error()"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def create_volume(self, volume):"}],"source_content_type":"text/x-python","patch_set":4,"id":"9abb7d3a_4959095a","line":55,"updated":"2016-06-03 15:29:14.000000000","message":"You should fail here if scaleio_verify_server_certificate is True but scaleio_server_certificate_path is not set.","commit_id":"15cafc6a9bc8d330b6a8b36534d399fec521e78a"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"f6adf4fc90e9eec02f2d68acfc881402dc7ca184","unresolved":false,"context_lines":[{"line_number":276,"context_line":"                 six.text_type(cmd))"},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"        try:"},{"line_number":279,"context_line":"            (out, err) \u003d utils.execute(*cmd, run_as_root\u003dTrue)"},{"line_number":280,"context_line":"            LOG.info(_LI(\"Get ScaleIO version cmd\u003d%(cmd)s:\""},{"line_number":281,"context_line":"                         \"stdout\u003d%(out)s strerr\u003d%(err)s\"),"},{"line_number":282,"context_line":"                     {\u0027cmd\u0027: cmd,"}],"source_content_type":"text/x-python","patch_set":4,"id":"9abb7d3a_c9fe996a","line":279,"updated":"2016-06-03 15:29:14.000000000","message":"Why does this have to run as root?  To read credentials from a file, etc.?","commit_id":"15cafc6a9bc8d330b6a8b36534d399fec521e78a"},{"author":{"_account_id":20466,"name":"Tin Lam","email":"tin@lam.wtf","username":"tinlam"},"change_message_id":"ea4e9a2281a435609f605761921e8843a168e9fa","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        if((volSize % defaultSize) !\u003d 0):"},{"line_number":65,"context_line":"            return (volSize / defaultSize) * defaultSize + defaultSize"},{"line_number":66,"context_line":"        else:"},{"line_number":67,"context_line":"            return (volSize / defaultSize) * defaultSize"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def create_cloned_volume(self, volume, src_vref):"},{"line_number":70,"context_line":"        \"\"\"Creates a cloned Volume.\"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"7aa08908_e418be77","line":67,"range":{"start_line":67,"start_character":12,"end_line":67,"end_character":56},"updated":"2016-06-07 15:30:50.000000000","message":"If volSize is a multiple of defaultSize, isn\u0027t this just volSize?","commit_id":"6883853fe29cafea5bfd348cd4b6de6eaddede67"},{"author":{"_account_id":20466,"name":"Tin Lam","email":"tin@lam.wtf","username":"tinlam"},"change_message_id":"4f7811500890642fabcb9efc3574b2e7b42f687a","unresolved":false,"context_lines":[{"line_number":181,"context_line":"        properties[\u0027bandwidthLimit\u0027] \u003d None"},{"line_number":182,"context_line":"        properties[\u0027serverToken\u0027] \u003d self.server_token"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"        initiatorNodes \u003d []"},{"line_number":185,"context_line":"        initiatorNode \u003d None"},{"line_number":186,"context_line":"        initiatorNodes.append(initiatorNode)"},{"line_number":187,"context_line":"        initiatorPorts \u003d []"},{"line_number":188,"context_line":"        initiatorPort \u003d self._get_client_id(properties[\u0027serverIP\u0027],"},{"line_number":189,"context_line":"                                            properties[\u0027serverPort\u0027],"}],"source_content_type":"text/x-python","patch_set":7,"id":"7aa08908_3b29598a","line":186,"range":{"start_line":184,"start_character":3,"end_line":186,"end_character":44},"updated":"2016-06-11 06:44:45.000000000","message":"nit: if ```initiatorNodes``` always just ```[None]``` - do we need these variables?","commit_id":"17e87a91cb87522276e9ab5c1905f11b379f9646"},{"author":{"_account_id":20466,"name":"Tin Lam","email":"tin@lam.wtf","username":"tinlam"},"change_message_id":"4f7811500890642fabcb9efc3574b2e7b42f687a","unresolved":false,"context_lines":[{"line_number":258,"context_line":""},{"line_number":259,"context_line":"    def update_volume_stats(self):"},{"line_number":260,"context_line":"        \"\"\"Retrieve stats info from virtual pool/virtual array.\"\"\""},{"line_number":261,"context_line":"        LOG.debug(\"Updating volume stats\")"},{"line_number":262,"context_line":"        self._stats \u003d self.common.update_volume_stats()"},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"    def _get_client_id(self, server_ip, server_port, server_username,"}],"source_content_type":"text/x-python","patch_set":7,"id":"7aa08908_7b23e1a7","line":261,"range":{"start_line":261,"start_character":17,"end_line":261,"end_character":19},"updated":"2016-06-11 06:44:45.000000000","message":"_()","commit_id":"17e87a91cb87522276e9ab5c1905f11b379f9646"},{"author":{"_account_id":20466,"name":"Tin Lam","email":"tin@lam.wtf","username":"tinlam"},"change_message_id":"4f7811500890642fabcb9efc3574b2e7b42f687a","unresolved":false,"context_lines":[{"line_number":270,"context_line":"                   ip_double_encoded + \"/\")"},{"line_number":271,"context_line":"        LOG.info(_LI(\"ScaleIO get client id by ip request: %s\"), request)"},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"        if self.configuration.scaleio_verify_server_certificate \u003d\u003d \u0027True\u0027:"},{"line_number":274,"context_line":"            verify_cert \u003d self.scaleio_server_certificate_path"},{"line_number":275,"context_line":"        else:"},{"line_number":276,"context_line":"            verify_cert \u003d False"}],"source_content_type":"text/x-python","patch_set":7,"id":"7aa08908_db965593","line":273,"range":{"start_line":273,"start_character":64,"end_line":273,"end_character":73},"updated":"2016-06-11 06:44:45.000000000","message":"In volume.drivers.coprhd.common.py, scaleio_verify_server_certificate is a boolean and it was compared with ```is True```, here it is a string \"True\".  Is that a string or a bool?","commit_id":"17e87a91cb87522276e9ab5c1905f11b379f9646"},{"author":{"_account_id":20466,"name":"Tin Lam","email":"tin@lam.wtf","username":"tinlam"},"change_message_id":"4f7811500890642fabcb9efc3574b2e7b42f687a","unresolved":false,"context_lines":[{"line_number":307,"context_line":"                _LI(\"Token is invalid, going to re-login and get a new one\"))"},{"line_number":308,"context_line":"            login_request \u003d (\"https://\" + server_ip +"},{"line_number":309,"context_line":"                             \":\" + server_port + \"/api/login\")"},{"line_number":310,"context_line":"            if(self.configuration.scaleio_verify_server_certificate \u003d\u003d \u0027True\u0027):"},{"line_number":311,"context_line":"                verify_cert \u003d self.scaleio_server_certificate_path"},{"line_number":312,"context_line":"            else:"},{"line_number":313,"context_line":"                verify_cert \u003d False"}],"source_content_type":"text/x-python","patch_set":7,"id":"7aa08908_5b826553","line":310,"range":{"start_line":310,"start_character":68,"end_line":310,"end_character":77},"updated":"2016-06-11 06:44:45.000000000","message":"See line 273.","commit_id":"17e87a91cb87522276e9ab5c1905f11b379f9646"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"402645491edbc66f06ce86d2a479bbabb18fd87e","unresolved":false,"context_lines":[{"line_number":32,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"@interface.volumedriver"},{"line_number":36,"context_line":"class EMCCoprHDScaleIODriver(driver.VolumeDriver):"},{"line_number":37,"context_line":"    \"\"\"CoprHD ScaleIO Driver\"\"\""},{"line_number":38,"context_line":"    server_token \u003d None"}],"source_content_type":"text/x-python","patch_set":11,"id":"3aaa91ec_fd025a3d","line":35,"range":{"start_line":35,"start_character":0,"end_line":35,"end_character":23},"updated":"2016-06-22 13:42:42.000000000","message":"@cinder.interface.volumedriver","commit_id":"f900e96a28ea208442118bce3a250a16e57ddd6f"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5238207f10e98d8153686ed93ab837ecc213a8dd","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from cinder.i18n import _LI"},{"line_number":27,"context_line":"from cinder import interface"},{"line_number":28,"context_line":"from cinder.volume import driver"},{"line_number":29,"context_line":"from cinder.volume.drivers.coprhd import common as CoprHD_common"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_71f74359","line":29,"range":{"start_line":29,"start_character":0,"end_line":29,"end_character":64},"updated":"2016-06-24 13:24:47.000000000","message":"Can we stick to Python and don\u0027t use CamelCase for identifiers that aren\u0027t class names? This is confusing.","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5238207f10e98d8153686ed93ab837ecc213a8dd","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        \"\"\"Creates a Volume.\"\"\""},{"line_number":55,"context_line":"        self.common.create_volume(volume, self, True)"},{"line_number":56,"context_line":"        self.common.set_volume_tags(volume, [\u0027_obj_volume_type\u0027], True)"},{"line_number":57,"context_line":"        volSize \u003d self.updateVolumeSize(int(volume[\u0027size\u0027]))"},{"line_number":58,"context_line":"        return {\u0027size\u0027: volSize}"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    def updateVolumeSize(self, volSize):"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_517967c7","line":57,"range":{"start_line":57,"start_character":8,"end_line":57,"end_character":15},"updated":"2016-06-24 13:24:47.000000000","message":"vol_size\n\nSame for all the camelCase usages in variable names below.","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5238207f10e98d8153686ed93ab837ecc213a8dd","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        volSize \u003d self.updateVolumeSize(int(volume[\u0027size\u0027]))"},{"line_number":58,"context_line":"        return {\u0027size\u0027: volSize}"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    def updateVolumeSize(self, volSize):"},{"line_number":61,"context_line":"        \"\"\"update the openstack volume size\"\"\""},{"line_number":62,"context_line":"        defaultSize \u003d 8"},{"line_number":63,"context_line":"        if((volSize % defaultSize) !\u003d 0):"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_912d8faa","line":60,"range":{"start_line":60,"start_character":8,"end_line":60,"end_character":24},"updated":"2016-06-24 13:24:47.000000000","message":"update_volume_size. Shouldn\u0027t this be private by the way? In that case: _update_volume_size.","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5238207f10e98d8153686ed93ab837ecc213a8dd","unresolved":false,"context_lines":[{"line_number":60,"context_line":"    def updateVolumeSize(self, volSize):"},{"line_number":61,"context_line":"        \"\"\"update the openstack volume size\"\"\""},{"line_number":62,"context_line":"        defaultSize \u003d 8"},{"line_number":63,"context_line":"        if((volSize % defaultSize) !\u003d 0):"},{"line_number":64,"context_line":"            return (volSize / defaultSize) * defaultSize + defaultSize"},{"line_number":65,"context_line":"        else:"},{"line_number":66,"context_line":"            return volSize"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_0c07c818","line":63,"range":{"start_line":63,"start_character":10,"end_line":63,"end_character":40},"updated":"2016-06-24 13:24:47.000000000","message":"Outer parentheses are not needed.","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5238207f10e98d8153686ed93ab837ecc213a8dd","unresolved":false,"context_lines":[{"line_number":107,"context_line":"        \"\"\"Creates a consistencygroup.\"\"\""},{"line_number":108,"context_line":"        return self.common.create_consistencygroup(context, group, True)"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    def update_consistencygroup(self, context, group,"},{"line_number":111,"context_line":"                                add_volumes, remove_volumes):"},{"line_number":112,"context_line":"        \"\"\"Updates volumes in consistency group.\"\"\""},{"line_number":113,"context_line":"        return self.common.update_consistencygroup(self, context, group,"},{"line_number":114,"context_line":"                                                   add_volumes, remove_volumes)"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    def delete_consistencygroup(self, context, group):"},{"line_number":117,"context_line":"        \"\"\"Deletes a consistency group.\"\"\""},{"line_number":118,"context_line":"        return self.common.delete_consistencygroup(self, context, group, True)"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"    def create_cgsnapshot(self, context, cgsnapshot, snapshots):"},{"line_number":121,"context_line":"        \"\"\"Creates a cgsnapshot.\"\"\""}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_6c2f6c88","line":118,"range":{"start_line":110,"start_character":0,"end_line":118,"end_character":78},"updated":"2016-06-24 13:24:47.000000000","message":"These doesn\u0027t match signatures in VolumeDriver. I\u0027m pretty sure this will just explode when run.","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5238207f10e98d8153686ed93ab837ecc213a8dd","unresolved":false,"context_lines":[{"line_number":131,"context_line":"        \"\"\"Make sure volume is exported.\"\"\""},{"line_number":132,"context_line":"        pass"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    def initialize_connection(self, volume, connector):"},{"line_number":135,"context_line":"        \"\"\"Initializes the connection and returns connection info."},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"        the scaleio driver returns a driver_volume_type of \u0027scaleio\u0027."}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_6c464c50","line":134,"updated":"2016-06-24 13:24:47.000000000","message":"Same here, missing **kwargs.","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5238207f10e98d8153686ed93ab837ecc213a8dd","unresolved":false,"context_lines":[{"line_number":164,"context_line":""},{"line_number":165,"context_line":"        \"\"\""},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"        volname \u003d self.common._get_volume_name(volume)"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"        properties \u003d {}"},{"line_number":170,"context_line":"        properties[\u0027scaleIO_volname\u0027] \u003d volname"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_0ca34801","line":167,"range":{"start_line":167,"start_character":8,"end_line":167,"end_character":54},"updated":"2016-06-24 13:24:47.000000000","message":"You don\u0027t have such a method in common - this will just raise an exception.","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5238207f10e98d8153686ed93ab837ecc213a8dd","unresolved":false,"context_lines":[{"line_number":258,"context_line":"                       server_password, sdc_ip):"},{"line_number":259,"context_line":"        ip_encoded \u003d urllib.parse.quote(sdc_ip, \u0027\u0027)"},{"line_number":260,"context_line":"        ip_double_encoded \u003d urllib.parse.quote(ip_encoded, \u0027\u0027)"},{"line_number":261,"context_line":"        request \u003d (\"https://\" + server_ip + \":\" + server_port +"},{"line_number":262,"context_line":"                   \"/api/types/Sdc/instances/getByIp::\" +"},{"line_number":263,"context_line":"                   ip_double_encoded + \"/\")"},{"line_number":264,"context_line":"        LOG.info(_LI(\"ScaleIO get client id by ip request: %s\"), request)"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"        if self.configuration.scaleio_verify_server_certificate:"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_0cc868a7","line":263,"range":{"start_line":261,"start_character":0,"end_line":263,"end_character":43},"updated":"2016-06-24 13:24:47.000000000","message":"Please use % operator to format strings.","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5238207f10e98d8153686ed93ab837ecc213a8dd","unresolved":false,"context_lines":[{"line_number":268,"context_line":"        else:"},{"line_number":269,"context_line":"            verify_cert \u003d False"},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"        r \u003d None"},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"        r \u003d requests.get("},{"line_number":274,"context_line":"            request, auth\u003d(server_username, self.server_token),"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_8ce57839","line":271,"range":{"start_line":271,"start_character":8,"end_line":271,"end_character":16},"updated":"2016-06-24 13:24:47.000000000","message":"Redundant, you\u0027re setting this var in 273.","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5238207f10e98d8153686ed93ab837ecc213a8dd","unresolved":false,"context_lines":[{"line_number":278,"context_line":"            server_username, server_password)"},{"line_number":279,"context_line":""},{"line_number":280,"context_line":"        sdc_id \u003d r.json()"},{"line_number":281,"context_line":"        if (sdc_id \u003d\u003d \u0027\u0027 or sdc_id is None):"},{"line_number":282,"context_line":"            msg \u003d (_(\"Client with ip %s wasn\u0027t found \"), sdc_ip)"},{"line_number":283,"context_line":"            LOG.error(msg)"},{"line_number":284,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_6cb92c15","line":281,"range":{"start_line":281,"start_character":11,"end_line":281,"end_character":44},"updated":"2016-06-24 13:24:47.000000000","message":"Parentheses are not needed. BTW it looks like you can just do:\n\n if not sdc_id:\n\nAnd get the same condition.","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5238207f10e98d8153686ed93ab837ecc213a8dd","unresolved":false,"context_lines":[{"line_number":282,"context_line":"            msg \u003d (_(\"Client with ip %s wasn\u0027t found \"), sdc_ip)"},{"line_number":283,"context_line":"            LOG.error(msg)"},{"line_number":284,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":285,"context_line":"        if (r.status_code !\u003d 200 and \"errorCode\" in sdc_id):"},{"line_number":286,"context_line":"            msg \u003d (_(\"Error getting sdc id from ip %(sdc_ip)s:\""},{"line_number":287,"context_line":"                     \" %(sdc_id_message)s\"), {\u0027sdc_ip\u0027: sdc_ip,"},{"line_number":288,"context_line":"                                              \u0027sdc_id_message\u0027: sdc_id["}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_ac31545c","line":285,"range":{"start_line":285,"start_character":11,"end_line":285,"end_character":59},"updated":"2016-06-24 13:24:47.000000000","message":"ditto","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5238207f10e98d8153686ed93ab837ecc213a8dd","unresolved":false,"context_lines":[{"line_number":295,"context_line":"    def _check_response(self, response, request,"},{"line_number":296,"context_line":"                        server_ip, server_port,"},{"line_number":297,"context_line":"                        server_username, server_password):"},{"line_number":298,"context_line":"        if (response.status_code \u003d\u003d 401 or response.status_code \u003d\u003d 403):"},{"line_number":299,"context_line":"            LOG.info("},{"line_number":300,"context_line":"                _LI(\"Token is invalid, going to re-login and get a new one\"))"},{"line_number":301,"context_line":"            login_request \u003d (\"https://\" + server_ip +"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_0c334863","line":298,"range":{"start_line":298,"start_character":11,"end_line":298,"end_character":71},"updated":"2016-06-24 13:24:47.000000000","message":"ditto\n\nAnd is relogging on 403 actually good idea? Semantically 403 should mean that token was okay, but you don\u0027t have necessary permissions.","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5238207f10e98d8153686ed93ab837ecc213a8dd","unresolved":false,"context_lines":[{"line_number":298,"context_line":"        if (response.status_code \u003d\u003d 401 or response.status_code \u003d\u003d 403):"},{"line_number":299,"context_line":"            LOG.info("},{"line_number":300,"context_line":"                _LI(\"Token is invalid, going to re-login and get a new one\"))"},{"line_number":301,"context_line":"            login_request \u003d (\"https://\" + server_ip +"},{"line_number":302,"context_line":"                             \":\" + server_port + \"/api/login\")"},{"line_number":303,"context_line":"            if self.configuration.scaleio_verify_server_certificate:"},{"line_number":304,"context_line":"                verify_cert \u003d ("},{"line_number":305,"context_line":"                    self.configuration.scaleio_server_certificate_path)"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_acf4b45a","line":302,"range":{"start_line":301,"start_character":0,"end_line":302,"end_character":62},"updated":"2016-06-24 13:24:47.000000000","message":"Please use % operator to format strings.","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5238207f10e98d8153686ed93ab837ecc213a8dd","unresolved":false,"context_lines":[{"line_number":313,"context_line":"            token \u003d r.json()"},{"line_number":314,"context_line":"            self.server_token \u003d token"},{"line_number":315,"context_line":"            # repeat request with valid token"},{"line_number":316,"context_line":"            LOG.info(_LI(\"going to perform request again %s with valid token\"),"},{"line_number":317,"context_line":"                     request)"},{"line_number":318,"context_line":"            res \u003d requests.get("},{"line_number":319,"context_line":"                request, auth\u003d(server_username, self.server_token),"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_eca19c47","line":316,"range":{"start_line":316,"start_character":26,"end_line":316,"end_character":27},"updated":"2016-06-24 13:24:47.000000000","message":"G","commit_id":"5bb9b3761dd160e69369f50e661c158335c1b960"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4f876a01cb4230eadb98210c492f04c024962d85","unresolved":false,"context_lines":[{"line_number":111,"context_line":"                                add_volumes, remove_volumes):"},{"line_number":112,"context_line":"        \"\"\"Updates volumes in consistency group.\"\"\""},{"line_number":113,"context_line":"        return self.common.update_consistencygroup(self, context, group,"},{"line_number":114,"context_line":"                                                   add_volumes, remove_volumes)"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    def delete_consistencygroup(self, context, group):"},{"line_number":117,"context_line":"        \"\"\"Deletes a consistency group.\"\"\""}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_b34fb332","line":114,"updated":"2016-06-27 02:22:58.000000000","message":"same comment as in fc.py.","commit_id":"14f3ecd4d0317cf6529d3502118e9344f7b36261"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4f876a01cb4230eadb98210c492f04c024962d85","unresolved":false,"context_lines":[{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    def delete_consistencygroup(self, context, group):"},{"line_number":117,"context_line":"        \"\"\"Deletes a consistency group.\"\"\""},{"line_number":118,"context_line":"        return self.common.delete_consistencygroup(self, context, group, True)"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"    def create_cgsnapshot(self, context, cgsnapshot, snapshots):"},{"line_number":121,"context_line":"        \"\"\"Creates a cgsnapshot.\"\"\""}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_136167a9","line":118,"updated":"2016-06-27 02:22:58.000000000","message":"same","commit_id":"14f3ecd4d0317cf6529d3502118e9344f7b36261"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4f876a01cb4230eadb98210c492f04c024962d85","unresolved":false,"context_lines":[{"line_number":120,"context_line":"    def create_cgsnapshot(self, context, cgsnapshot, snapshots):"},{"line_number":121,"context_line":"        \"\"\"Creates a cgsnapshot.\"\"\""},{"line_number":122,"context_line":"        return self.common.create_cgsnapshot(self, context,"},{"line_number":123,"context_line":"                                             cgsnapshot, snapshots, True)"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    def delete_cgsnapshot(self, context, cgsnapshot, snapshots):"},{"line_number":126,"context_line":"        \"\"\"Deletes a cgsnapshot.\"\"\""}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_f363fbae","line":123,"updated":"2016-06-27 02:22:58.000000000","message":"same","commit_id":"14f3ecd4d0317cf6529d3502118e9344f7b36261"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4f876a01cb4230eadb98210c492f04c024962d85","unresolved":false,"context_lines":[{"line_number":125,"context_line":"    def delete_cgsnapshot(self, context, cgsnapshot, snapshots):"},{"line_number":126,"context_line":"        \"\"\"Deletes a cgsnapshot.\"\"\""},{"line_number":127,"context_line":"        return self.common.delete_cgsnapshot(self, context,"},{"line_number":128,"context_line":"                                             cgsnapshot, snapshots, True)"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"    def check_for_export(self, context, volume_id):"},{"line_number":131,"context_line":"        \"\"\"Make sure volume is exported.\"\"\""}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_93755765","line":128,"updated":"2016-06-27 02:22:58.000000000","message":"same","commit_id":"14f3ecd4d0317cf6529d3502118e9344f7b36261"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ef2e8f4fb2118e648c4a41530e8f91ac5ac3f08f","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import requests"},{"line_number":20,"context_line":"from six.moves import urllib"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from oslo_config import cfg"},{"line_number":23,"context_line":"from oslo_log import log as logging"},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_431bce1c","line":21,"updated":"2016-07-09 03:01:16.000000000","message":"Line #19 and 20 should be moved right below line 23 in the same import group.\n\noslo….\nrequests\nsix...","commit_id":"251bc5ef48be1678013a1599ac71260c2092ab3f"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ef2e8f4fb2118e648c4a41530e8f91ac5ac3f08f","unresolved":false,"context_lines":[{"line_number":258,"context_line":"        ip_double_encoded \u003d urllib.parse.quote(ip_encoded, \u0027\u0027)"},{"line_number":259,"context_line":""},{"line_number":260,"context_line":"        request \u003d (\"https://%s:%s/api/types/Sdc/instances/getByIp::%s/\" %"},{"line_number":261,"context_line":"                   (server_ip, str(server_port), ip_double_encoded))"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"        LOG.info(_LI(\"ScaleIO get client id by ip request: %s\"), request)"},{"line_number":264,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_23b4c2f0","line":261,"updated":"2016-07-09 03:01:16.000000000","message":"str() -\u003e six.text_type()","commit_id":"251bc5ef48be1678013a1599ac71260c2092ab3f"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"a56e05b42048822517de37bf165bde9b0924269a","unresolved":false,"context_lines":[{"line_number":33,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"scaleio_opts \u003d ["},{"line_number":36,"context_line":"    cfg.StrOpt(\u0027coprhd_scaleio_rest_gateway_ip\u0027,"},{"line_number":37,"context_line":"               default\u003d\u0027None\u0027,"},{"line_number":38,"context_line":"               help\u003d\u0027Rest Gateway for Scaleio\u0027),"},{"line_number":39,"context_line":"    cfg.PortOpt(\u0027coprhd_scaleio_rest_gateway_port\u0027,"},{"line_number":40,"context_line":"                default\u003d4984,"},{"line_number":41,"context_line":"                help\u003d\u0027Rest Gateway Port for Scaleio\u0027),"}],"source_content_type":"text/x-python","patch_set":25,"id":"1aa78d24_eed35b36","line":38,"range":{"start_line":36,"start_character":0,"end_line":38,"end_character":48},"updated":"2016-07-12 10:33:05.000000000","message":"Should just be either cfg.IPOpt, or named coprhd_scaleio_rest_gateway_host?","commit_id":"a7c715b4d08d369ad1246e23b54c36cf89d44a78"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"a56e05b42048822517de37bf165bde9b0924269a","unresolved":false,"context_lines":[{"line_number":140,"context_line":"        \"\"\"Creates a consistencygroup.\"\"\""},{"line_number":141,"context_line":"        return self.common.create_consistencygroup(context, group, True)"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"    def update_consistencygroup(self, context, group,"},{"line_number":144,"context_line":"                                add_volumes, remove_volumes):"},{"line_number":145,"context_line":"        \"\"\"Updates volumes in consistency group.\"\"\""},{"line_number":146,"context_line":"        return self.common.update_consistencygroup(group, add_volumes,"},{"line_number":147,"context_line":"                                                   remove_volumes)"}],"source_content_type":"text/x-python","patch_set":25,"id":"1aa78d24_2eb1e301","line":144,"range":{"start_line":143,"start_character":0,"end_line":144,"end_character":61},"updated":"2016-07-12 10:33:05.000000000","message":"This still does not match the signature from the driver. Should be:\n\n    def update_consistencygroup(self, context, group,\n                                add_volumes\u003dNone, remove_volumes\u003dNone):","commit_id":"a7c715b4d08d369ad1246e23b54c36cf89d44a78"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"a56e05b42048822517de37bf165bde9b0924269a","unresolved":false,"context_lines":[{"line_number":185,"context_line":"        properties[\u0027bandwidthLimit\u0027] \u003d None"},{"line_number":186,"context_line":"        properties[\u0027serverToken\u0027] \u003d self.server_token"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"        initiatorPorts \u003d []"},{"line_number":189,"context_line":"        initiatorPort \u003d self._get_client_id(properties[\u0027serverIP\u0027],"},{"line_number":190,"context_line":"                                            properties[\u0027serverPort\u0027],"},{"line_number":191,"context_line":"                                            properties[\u0027serverUsername\u0027],"}],"source_content_type":"text/x-python","patch_set":25,"id":"1aa78d24_ce8dbf32","line":188,"range":{"start_line":188,"start_character":8,"end_line":188,"end_character":22},"updated":"2016-07-12 10:33:05.000000000","message":"nit: initiator_ports","commit_id":"a7c715b4d08d369ad1246e23b54c36cf89d44a78"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"a56e05b42048822517de37bf165bde9b0924269a","unresolved":false,"context_lines":[{"line_number":186,"context_line":"        properties[\u0027serverToken\u0027] \u003d self.server_token"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"        initiatorPorts \u003d []"},{"line_number":189,"context_line":"        initiatorPort \u003d self._get_client_id(properties[\u0027serverIP\u0027],"},{"line_number":190,"context_line":"                                            properties[\u0027serverPort\u0027],"},{"line_number":191,"context_line":"                                            properties[\u0027serverUsername\u0027],"},{"line_number":192,"context_line":"                                            properties[\u0027serverPassword\u0027],"}],"source_content_type":"text/x-python","patch_set":25,"id":"1aa78d24_6e7dab1b","line":189,"range":{"start_line":189,"start_character":8,"end_line":189,"end_character":21},"updated":"2016-07-12 10:33:05.000000000","message":"nit: initiator_port","commit_id":"a7c715b4d08d369ad1246e23b54c36cf89d44a78"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"a56e05b42048822517de37bf165bde9b0924269a","unresolved":false,"context_lines":[{"line_number":201,"context_line":""},{"line_number":202,"context_line":"        dictobj \u003d {"},{"line_number":203,"context_line":"            \u0027driver_volume_type\u0027: \u0027scaleio\u0027,"},{"line_number":204,"context_line":"            \u0027data\u0027: properties"},{"line_number":205,"context_line":"        }"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"        return dictobj"}],"source_content_type":"text/x-python","patch_set":25,"id":"1aa78d24_ae73134d","line":204,"updated":"2016-07-12 10:33:05.000000000","message":"nit: missing comma","commit_id":"a7c715b4d08d369ad1246e23b54c36cf89d44a78"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"a56e05b42048822517de37bf165bde9b0924269a","unresolved":false,"context_lines":[{"line_number":225,"context_line":"            self.configuration.coprhd_scaleio_rest_server_password)"},{"line_number":226,"context_line":"        properties[\u0027serverToken\u0027] \u003d self.server_token"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"        initiatorPort \u003d self._get_client_id(properties[\u0027serverIP\u0027],"},{"line_number":229,"context_line":"                                            properties[\u0027serverPort\u0027],"},{"line_number":230,"context_line":"                                            properties[\u0027serverUsername\u0027],"},{"line_number":231,"context_line":"                                            properties[\u0027serverPassword\u0027],"}],"source_content_type":"text/x-python","patch_set":25,"id":"1aa78d24_8ea737a6","line":228,"range":{"start_line":228,"start_character":8,"end_line":228,"end_character":21},"updated":"2016-07-12 10:33:05.000000000","message":"nit: initiator_port","commit_id":"a7c715b4d08d369ad1246e23b54c36cf89d44a78"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"a56e05b42048822517de37bf165bde9b0924269a","unresolved":false,"context_lines":[{"line_number":230,"context_line":"                                            properties[\u0027serverUsername\u0027],"},{"line_number":231,"context_line":"                                            properties[\u0027serverPassword\u0027],"},{"line_number":232,"context_line":"                                            properties[\u0027hostIP\u0027])"},{"line_number":233,"context_line":"        initPorts \u003d []"},{"line_number":234,"context_line":"        initPorts.append(initiatorPort)"},{"line_number":235,"context_line":"        self.common.terminate_connection(volume,"},{"line_number":236,"context_line":"                                         \u0027scaleio\u0027,"}],"source_content_type":"text/x-python","patch_set":25,"id":"1aa78d24_cebbffc2","line":233,"range":{"start_line":233,"start_character":8,"end_line":233,"end_character":17},"updated":"2016-07-12 10:33:05.000000000","message":"nit: init_ports","commit_id":"a7c715b4d08d369ad1246e23b54c36cf89d44a78"}],"cinder/volume/drivers/emc/coprhd/common.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from oslo_utils import excutils"},{"line_number":24,"context_line":"try:"},{"line_number":25,"context_line":"    from oslo_log import log as logging"},{"line_number":26,"context_line":"except ImportError:"},{"line_number":27,"context_line":"    from cinder.openstack.common import log as logging"},{"line_number":28,"context_line":"from cinder import context"},{"line_number":29,"context_line":"from cinder import exception"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_e8994a20","line":26,"updated":"2016-05-17 19:09:51.000000000","message":"Please remove this try/catch. The correct import is from oslo_log. That is a requirement, so there is no need to catch an ImportError.","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":30,"context_line":"from cinder.i18n import _LE"},{"line_number":31,"context_line":"from cinder.i18n import _LI"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"from cinder.volume.drivers.emc.coprhd.helpers \\"},{"line_number":34,"context_line":"    import authentication as CoprHD_auth"},{"line_number":35,"context_line":"from cinder.volume.drivers.emc.coprhd.helpers \\"},{"line_number":36,"context_line":"    import commoncoprhdapi as CoprHD_utils"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_68ad5a30","line":33,"updated":"2016-05-17 19:09:51.000000000","message":"Remove the \\ for line continuation. If you need to wrap it in () to be able to span lines.","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":52,"context_line":"volume_opts \u003d ["},{"line_number":53,"context_line":"    cfg.StrOpt(\u0027hostname\u0027,"},{"line_number":54,"context_line":"               default\u003dNone,"},{"line_number":55,"context_line":"               help\u003d\u0027Hostname for the EMC CoprHD Instance\u0027),"},{"line_number":56,"context_line":"    cfg.IntOpt(\u0027coprhd_port\u0027,"},{"line_number":57,"context_line":"               default\u003d4443,"},{"line_number":58,"context_line":"               help\u003d\u0027Port for the EMC CoprHD Instance\u0027),"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_283cf2df","line":55,"range":{"start_line":55,"start_character":38,"end_line":55,"end_character":41},"updated":"2016-05-17 19:09:51.000000000","message":"Remove EMC from these.","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":91,"context_line":"               help\u003d\u0027Server certificate path\u0027),"},{"line_number":92,"context_line":"    cfg.StrOpt(\u0027coprhd_emulate_snapshot\u0027,"},{"line_number":93,"context_line":"               default\u003d\u0027False\u0027,"},{"line_number":94,"context_line":"               help\u003d\u0027True | False to indicate if the storage array\u0027 +"},{"line_number":95,"context_line":"               \u0027in CoprHD is VMAX or VPLEX\u0027),"},{"line_number":96,"context_line":"    cfg.StrOpt(\u0027coprhd_security_file\u0027,"},{"line_number":97,"context_line":"               default\u003dNone,"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_c33269f1","line":94,"range":{"start_line":94,"start_character":67,"end_line":94,"end_character":69},"updated":"2016-05-17 19:09:51.000000000","message":"Remove the \" +\". This is inside the parentheses, so the two strings will automatically be appended.\n\nAlso need a space after \"array\".","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":106,"context_line":"EXPORT_RETRY_COUNT \u003d 5"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"def retry_wrapper(func):"},{"line_number":110,"context_line":"    def try_and_retry(*args, **kwargs):"},{"line_number":111,"context_line":"        retry \u003d False"},{"line_number":112,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_437af977","line":109,"updated":"2016-05-17 19:09:51.000000000","message":"I would recommend using https://github.com/openstack/cinder/blob/master/cinder/utils.py#L772 instead.","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":150,"context_line":"        self.init_coprhd_api_components()"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"        self.stats \u003d {\u0027driver_version\u0027: \u00271.0\u0027,"},{"line_number":153,"context_line":"                      \u0027free_capacity_gb\u0027: \u0027unknown\u0027,"},{"line_number":154,"context_line":"                      \u0027reserved_percentage\u0027: \u00270\u0027,"},{"line_number":155,"context_line":"                      \u0027storage_protocol\u0027: protocol,"},{"line_number":156,"context_line":"                      \u0027total_capacity_gb\u0027: \u0027unknown\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_83c6a197","line":153,"updated":"2016-05-17 19:09:51.000000000","message":"If there\u0027s anyway to get a number, even if it is a best guess, that would be better than reporting \"unknown\". This will place the driver at the bottom of the list for the scheduler selection.","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":154,"context_line":"                      \u0027reserved_percentage\u0027: \u00270\u0027,"},{"line_number":155,"context_line":"                      \u0027storage_protocol\u0027: protocol,"},{"line_number":156,"context_line":"                      \u0027total_capacity_gb\u0027: \u0027unknown\u0027,"},{"line_number":157,"context_line":"                      \u0027vendor_name\u0027: \u0027EMC\u0027,"},{"line_number":158,"context_line":"                      \u0027volume_backend_name\u0027:"},{"line_number":159,"context_line":"                      self.configuration.volume_backend_name or"},{"line_number":160,"context_line":"                      default_backend_name}"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_63c1fd7f","line":157,"range":{"start_line":157,"start_character":38,"end_line":157,"end_character":41},"updated":"2016-05-17 19:09:51.000000000","message":"CoprHD","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":191,"context_line":"    def check_for_setup_error(self):"},{"line_number":192,"context_line":"        # validate all of the coprhd_* configuration values"},{"line_number":193,"context_line":"        if self.configuration.hostname is None:"},{"line_number":194,"context_line":"            message \u003d \"hostname is not set in cinder configuration\""},{"line_number":195,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmessage)"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"        if self.configuration.coprhd_port is None:"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_c301c9b0","line":194,"updated":"2016-05-17 19:09:51.000000000","message":"All of these exception messages need the _() translation marker.","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":250,"context_line":""},{"line_number":251,"context_line":"            EMCCoprHDDriverCommon.AUTHENTICATED \u003d True"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"    @retry_wrapper"},{"line_number":254,"context_line":"    def create_volume(self, vol, driver):"},{"line_number":255,"context_line":"        self.authenticate_user()"},{"line_number":256,"context_line":"        name \u003d self._get_volume_name(vol)"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_a3eac5d5","line":253,"updated":"2016-05-17 19:09:51.000000000","message":"You may not need retry on here. The create_volume workflow has retries built in to it. So you will be doing retries within retries.","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":282,"context_line":"            if e.err_code \u003d\u003d CoprHD_utils.CoprHdError.SOS_FAILURE_ERR:"},{"line_number":283,"context_line":"                raise CoprHD_utils.CoprHdError("},{"line_number":284,"context_line":"                    CoprHD_utils.CoprHdError.SOS_FAILURE_ERR,"},{"line_number":285,"context_line":"                    \"Volume \" + name + \": create failed\\n\" + e.err_text)"},{"line_number":286,"context_line":"            else:"},{"line_number":287,"context_line":"                with excutils.save_and_reraise_exception():"},{"line_number":288,"context_line":"                    LOG.exception(_LE(\"Volume : %s creation failed\") % name)"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_a36f655e","line":285,"updated":"2016-05-17 19:09:51.000000000","message":"Use string formatting and add _() translation marker:\n\n_(\"Volume %(name)s: create failed\\n%(ex)s\") % {\u0027name\u0027: name, \u0027err\u0027: six.text_type(e.err_text)}","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":285,"context_line":"                    \"Volume \" + name + \": create failed\\n\" + e.err_text)"},{"line_number":286,"context_line":"            else:"},{"line_number":287,"context_line":"                with excutils.save_and_reraise_exception():"},{"line_number":288,"context_line":"                    LOG.exception(_LE(\"Volume : %s creation failed\") % name)"},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"    @retry_wrapper"},{"line_number":291,"context_line":"    def create_consistencygroup(self, context, group):"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_83a501a3","line":288,"range":{"start_line":288,"start_character":68,"end_line":288,"end_character":70},"updated":"2016-05-17 19:09:51.000000000","message":"Change % to ,","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":311,"context_line":"            if e.err_code \u003d\u003d CoprHD_utils.CoprHdError.SOS_FAILURE_ERR:"},{"line_number":312,"context_line":"                raise CoprHD_utils.CoprHdError("},{"line_number":313,"context_line":"                    CoprHD_utils.CoprHdError.SOS_FAILURE_ERR,"},{"line_number":314,"context_line":"                    \"Consistency Group \" + name + \": create failed\\n\" +"},{"line_number":315,"context_line":"                    e.err_text)"},{"line_number":316,"context_line":"            else:"},{"line_number":317,"context_line":"                with excutils.save_and_reraise_exception():"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_e3084d93","line":314,"updated":"2016-05-17 19:09:51.000000000","message":"Same as above.","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":351,"context_line":"            if e.err_code \u003d\u003d CoprHD_utils.CoprHdError.SOS_FAILURE_ERR:"},{"line_number":352,"context_line":"                raise CoprHD_utils.CoprHdError("},{"line_number":353,"context_line":"                    CoprHD_utils.CoprHdError.SOS_FAILURE_ERR,"},{"line_number":354,"context_line":"                    \"Consistency Group \" + cg_uri + \": update failed\\n\" +"},{"line_number":355,"context_line":"                    e.err_text)"},{"line_number":356,"context_line":"            else:"},{"line_number":357,"context_line":"                with excutils.save_and_reraise_exception():"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_c3f0a993","line":354,"updated":"2016-05-17 19:09:51.000000000","message":"Same.","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":396,"context_line":"            if e.err_code \u003d\u003d CoprHD_utils.CoprHdError.SOS_FAILURE_ERR:"},{"line_number":397,"context_line":"                raise CoprHD_utils.CoprHdError("},{"line_number":398,"context_line":"                    CoprHD_utils.CoprHdError.SOS_FAILURE_ERR,"},{"line_number":399,"context_line":"                    \"Consistency Group \" + name + \": delete failed\\n\" +"},{"line_number":400,"context_line":"                    e.err_text)"},{"line_number":401,"context_line":"            else:"},{"line_number":402,"context_line":"                with excutils.save_and_reraise_exception():"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_0314719d","line":399,"updated":"2016-05-17 19:09:51.000000000","message":"Same.","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":423,"context_line":""},{"line_number":424,"context_line":"        model_update \u003d {}"},{"line_number":425,"context_line":"        LOG.info(_LI(\u0027Start to create cgsnapshot for consistency group\u0027"},{"line_number":426,"context_line":"                     \u0027: %(group_name)s\u0027) %"},{"line_number":427,"context_line":"                 {\u0027group_name\u0027: cg_name})"},{"line_number":428,"context_line":""},{"line_number":429,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_832861e3","line":426,"range":{"start_line":426,"start_character":40,"end_line":426,"end_character":42},"updated":"2016-05-17 19:09:51.000000000","message":"Change % to ,","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":438,"context_line":"            for snapshot in snapshots:"},{"line_number":439,"context_line":"                vol_id_of_snap \u003d snapshot[\u0027volume_id\u0027]"},{"line_number":440,"context_line":""},{"line_number":441,"context_line":"                \u0027\u0027\u0027Finding the volume in CoprHD for this volume id\u0027\u0027\u0027"},{"line_number":442,"context_line":"                tagname \u003d \"OpenStack:id:\" + vol_id_of_snap"},{"line_number":443,"context_line":"                rslt \u003d CoprHD_utils.search_by_tag("},{"line_number":444,"context_line":"                    CoprHD_vol.Volume.URI_SEARCH_VOLUMES_BY_TAG.format("}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_43e679b0","line":441,"updated":"2016-05-17 19:09:51.000000000","message":"Don\u0027t use docstring format for an inline comment (well, quasi-docstring format /\u0027\u0027\u0027/\"\"\"/)","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":446,"context_line":"                    self.configuration.hostname,"},{"line_number":447,"context_line":"                    self.configuration.coprhd_port)"},{"line_number":448,"context_line":""},{"line_number":449,"context_line":"                if rslt is None or len(rslt) \u003d\u003d 0:"},{"line_number":450,"context_line":"                    continue"},{"line_number":451,"context_line":""},{"line_number":452,"context_line":"                volUri \u003d rslt[0]"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_439dd908","line":449,"updated":"2016-05-17 19:09:51.000000000","message":"This could be simplified to just:\n\nif not rslt:","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":465,"context_line":"                    if(False \u003d\u003d (CoprHD_utils.get_node_value(snapshot_obj,"},{"line_number":466,"context_line":"                                                             \u0027inactive\u0027))):"},{"line_number":467,"context_line":""},{"line_number":468,"context_line":"                        \u0027\u0027\u0027When we create a consistency group snapshot on"},{"line_number":469,"context_line":"                           coprhd then each snapshot of volume in the"},{"line_number":470,"context_line":"                           consistencygroup will be given a subscript. Ex if"},{"line_number":471,"context_line":"                           the snapshot name is cgsnap1 and lets say there are"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_e3c04de2","line":468,"updated":"2016-05-17 19:09:51.000000000","message":"Change comment format.","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":504,"context_line":"        except CoprHD_utils.CoprHdError as e:"},{"line_number":505,"context_line":"            if e.err_code \u003d\u003d CoprHD_utils.CoprHdError.SOS_FAILURE_ERR:"},{"line_number":506,"context_line":"                raise CoprHD_utils.CoprHdError("},{"line_number":507,"context_line":"                    CoprHD_utils.CoprHdError.SOS_FAILURE_ERR,"},{"line_number":508,"context_line":"                    \"Snapshot for Consistency Group \" + cg_name +"},{"line_number":509,"context_line":"                    \": create failed\\n\" + e.err_text)"},{"line_number":510,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_43b4b980","line":507,"updated":"2016-05-17 19:09:51.000000000","message":"_()","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":511,"context_line":"                with excutils.save_and_reraise_exception():"},{"line_number":512,"context_line":"                    LOG.exception(_LE(\"Snapshot %(name)s for Consistency\""},{"line_number":513,"context_line":"                                      \" Group: %(cg_name)s creation failed\")"},{"line_number":514,"context_line":"                                  % {\u0027cg_name\u0027: cg_name,"},{"line_number":515,"context_line":"                                     \u0027name\u0027: cgsnapshot_name})"},{"line_number":516,"context_line":""},{"line_number":517,"context_line":"    @retry_wrapper"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_63ad7d30","line":514,"range":{"start_line":514,"start_character":34,"end_line":514,"end_character":36},"updated":"2016-05-17 19:09:51.000000000","message":"Change % to ,","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":530,"context_line":"        model_update \u003d {}"},{"line_number":531,"context_line":"        model_update[\u0027status\u0027] \u003d cgsnapshot[\u0027status\u0027]"},{"line_number":532,"context_line":"        LOG.info(_LI(\u0027Delete cgsnapshot %(snap_name)s for consistency group: \u0027"},{"line_number":533,"context_line":"                     \u0027%(group_name)s\u0027) % {\u0027snap_name\u0027: cgsnapshot[\u0027name\u0027],"},{"line_number":534,"context_line":"                                          \u0027group_name\u0027: cg_name})"},{"line_number":535,"context_line":""},{"line_number":536,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_436b19f1","line":533,"range":{"start_line":533,"start_character":39,"end_line":533,"end_character":40},"updated":"2016-05-17 19:09:51.000000000","message":"Change % to ,","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":562,"context_line":"            if e.err_code \u003d\u003d CoprHD_utils.CoprHdError.SOS_FAILURE_ERR:"},{"line_number":563,"context_line":"                raise CoprHD_utils.CoprHdError("},{"line_number":564,"context_line":"                    CoprHD_utils.CoprHdError.SOS_FAILURE_ERR,"},{"line_number":565,"context_line":"                    \"Snapshot \" + cgsnapshot_id + \" for Consistency Group \" +"},{"line_number":566,"context_line":"                    cg_name +"},{"line_number":567,"context_line":"                    \": delete failed\\n\" + e.err_text)"},{"line_number":568,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_e31ccd78","line":565,"updated":"2016-05-17 19:09:51.000000000","message":"_()","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":569,"context_line":"                with excutils.save_and_reraise_exception():"},{"line_number":570,"context_line":"                    LOG.exception(_LE(\"Snapshot %(name)s for Consistency\""},{"line_number":571,"context_line":"                                      \" Group: %(cg_name)s deletion failed\")"},{"line_number":572,"context_line":"                                  % {\u0027cg_name\u0027: cg_name,"},{"line_number":573,"context_line":"                                      \u0027name\u0027: cgsnapshot_name})"},{"line_number":574,"context_line":""},{"line_number":575,"context_line":"    @retry_wrapper"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_6309fd30","line":572,"range":{"start_line":572,"start_character":34,"end_line":572,"end_character":35},"updated":"2016-05-17 19:09:51.000000000","message":"% \u003e ,","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":619,"context_line":"                    remove_tags)"},{"line_number":620,"context_line":"        except CoprHD_utils.CoprHdError as e:"},{"line_number":621,"context_line":"            if e.err_code \u003d\u003d CoprHD_utils.CoprHdError.SOS_FAILURE_ERR:"},{"line_number":622,"context_line":"                LOG.debug(\"CoprHdError adding the tag: \" + e.err_text)"},{"line_number":623,"context_line":""},{"line_number":624,"context_line":"        # now add the tags for the resource"},{"line_number":625,"context_line":"        add_tags \u003d []"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_e327acb3","line":622,"range":{"start_line":622,"start_character":55,"end_line":622,"end_character":60},"updated":"2016-05-17 19:09:51.000000000","message":"s/\" + e/%s\", e/","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":646,"context_line":"                            \":\" +"},{"line_number":647,"context_line":"                            str(value))"},{"line_number":648,"context_line":"                except TypeError:"},{"line_number":649,"context_line":"                    LOG.debug(\"Error tagging the resource property %s \", prop)"},{"line_number":650,"context_line":"        except TypeError:"},{"line_number":651,"context_line":"            LOG.debug(\"Error tagging the resource properties \")"},{"line_number":652,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_e34e8c6d","line":649,"range":{"start_line":649,"start_character":69,"end_line":649,"end_character":70},"updated":"2016-05-17 19:09:51.000000000","message":"Extra space on the end.","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":648,"context_line":"                except TypeError:"},{"line_number":649,"context_line":"                    LOG.debug(\"Error tagging the resource property %s \", prop)"},{"line_number":650,"context_line":"        except TypeError:"},{"line_number":651,"context_line":"            LOG.debug(\"Error tagging the resource properties \")"},{"line_number":652,"context_line":""},{"line_number":653,"context_line":"        try:"},{"line_number":654,"context_line":"            CoprHD_tag.tag_resource("}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_0358f02f","line":651,"range":{"start_line":651,"start_character":60,"end_line":651,"end_character":61},"updated":"2016-05-17 19:09:51.000000000","message":"Same.","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":660,"context_line":"                None)"},{"line_number":661,"context_line":"        except CoprHD_utils.CoprHdError as e:"},{"line_number":662,"context_line":"            if e.err_code \u003d\u003d CoprHD_utils.CoprHdError.SOS_FAILURE_ERR:"},{"line_number":663,"context_line":"                LOG.debug(\"CoprHdError adding the tag: \" + e.err_text)"},{"line_number":664,"context_line":""},{"line_number":665,"context_line":"        return CoprHD_tag.list_tags(self.configuration.hostname,"},{"line_number":666,"context_line":"                                    self.configuration.coprhd_port,"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_a3492462","line":663,"range":{"start_line":663,"start_character":54,"end_line":663,"end_character":59},"updated":"2016-05-17 19:09:51.000000000","message":"%s\", e","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":677,"context_line":"            if src_vref[\u0027consistencygroup_id\u0027]:"},{"line_number":678,"context_line":"                raise CoprHD_utils.CoprHdError("},{"line_number":679,"context_line":"                    CoprHD_utils.CoprHdError.SOS_FAILURE_ERR,"},{"line_number":680,"context_line":"                    \"Clone can\u0027t be taken individually on a volume\" +"},{"line_number":681,"context_line":"                    \" that is part of a Consistency Group\")"},{"line_number":682,"context_line":"        except AttributeError as e:"},{"line_number":683,"context_line":"            LOG.info(_LI(\"No Consistency Group associated with the volume\"))"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_036f50c4","line":680,"updated":"2016-05-17 19:09:51.000000000","message":"Needs _() wrapper. Then you can also get rid of the + to concatenate the strings.","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":683,"context_line":"            LOG.info(_LI(\"No Consistency Group associated with the volume\"))"},{"line_number":684,"context_line":""},{"line_number":685,"context_line":"        try:"},{"line_number":686,"context_line":"            (storageresType, storageresTypename) \u003d \\"},{"line_number":687,"context_line":"                self.volume_obj.get_storageAttributes("},{"line_number":688,"context_line":"                srcname, None, None)"},{"line_number":689,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_835b4021","line":686,"range":{"start_line":686,"start_character":51,"end_line":686,"end_character":52},"updated":"2016-05-17 19:09:51.000000000","message":"Avoid use of \\ for line continuation.","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":700,"context_line":"                resource_id,"},{"line_number":701,"context_line":"                sync\u003dTrue)"},{"line_number":702,"context_line":""},{"line_number":703,"context_line":"            clone_vol_path \u003d self.configuration.coprhd_tenant + \\"},{"line_number":704,"context_line":"                \"/\" + self.configuration.coprhd_project + \"/\" + name"},{"line_number":705,"context_line":"            detachable \u003d self.volume_obj.is_volume_detachable(clone_vol_path)"},{"line_number":706,"context_line":"            str_detachable \u003d str(detachable)"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_23a37401","line":703,"updated":"2016-05-17 19:09:51.000000000","message":"same","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":703,"context_line":"            clone_vol_path \u003d self.configuration.coprhd_tenant + \\"},{"line_number":704,"context_line":"                \"/\" + self.configuration.coprhd_project + \"/\" + name"},{"line_number":705,"context_line":"            detachable \u003d self.volume_obj.is_volume_detachable(clone_vol_path)"},{"line_number":706,"context_line":"            str_detachable \u003d str(detachable)"},{"line_number":707,"context_line":"            LOG.info(_LI(\"Is volume detachable : %s\"),"},{"line_number":708,"context_line":"                     str_detachable)"},{"line_number":709,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_83b22047","line":706,"updated":"2016-05-17 19:09:51.000000000","message":"Remove this line.","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":705,"context_line":"            detachable \u003d self.volume_obj.is_volume_detachable(clone_vol_path)"},{"line_number":706,"context_line":"            str_detachable \u003d str(detachable)"},{"line_number":707,"context_line":"            LOG.info(_LI(\"Is volume detachable : %s\"),"},{"line_number":708,"context_line":"                     str_detachable)"},{"line_number":709,"context_line":""},{"line_number":710,"context_line":"            # detach it from the source volume immediately after creation"},{"line_number":711,"context_line":"            if detachable:"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_037d906c","line":708,"updated":"2016-05-17 19:09:51.000000000","message":"s/str_detachable/detachable/","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":718,"context_line":"            if e.err_code \u003d\u003d CoprHD_utils.CoprHdError.SOS_FAILURE_ERR:"},{"line_number":719,"context_line":"                raise CoprHD_utils.CoprHdError("},{"line_number":720,"context_line":"                    CoprHD_utils.CoprHdError.SOS_FAILURE_ERR,"},{"line_number":721,"context_line":"                    \"Volume \" + name + \": clone failed\\n\" + e.err_text)"},{"line_number":722,"context_line":"            else:"},{"line_number":723,"context_line":"                with excutils.save_and_reraise_exception():"},{"line_number":724,"context_line":"                    LOG.exception(_LE(\"Volume : {%s} clone failed\"), name)"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_e3ea0c0e","line":721,"updated":"2016-05-17 19:09:51.000000000","message":"_()","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"6816ed1001639380e73b690ace27f28a34690934","unresolved":false,"context_lines":[{"line_number":728,"context_line":"        \"\"\"expands the volume to new_size specified.\"\"\""},{"line_number":729,"context_line":"        self.authenticate_user()"},{"line_number":730,"context_line":"        volume_name \u003d self._get_coprhd_volume_name(vol)"},{"line_number":731,"context_line":"        size_in_bytes \u003d CoprHD_utils.to_bytes(str(new_size) + \"G\")"},{"line_number":732,"context_line":""},{"line_number":733,"context_line":"        try:"},{"line_number":734,"context_line":"            self.volume_obj.expand("}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_9d49d962","line":731,"updated":"2016-05-17 20:33:32.000000000","message":"str-\u003esix.text_type","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":743,"context_line":"            if e.err_code \u003d\u003d CoprHD_utils.CoprHdError.SOS_FAILURE_ERR:"},{"line_number":744,"context_line":"                raise CoprHD_utils.CoprHdError("},{"line_number":745,"context_line":"                    CoprHD_utils.CoprHdError.SOS_FAILURE_ERR,"},{"line_number":746,"context_line":"                    \"Volume \" + volume_name + \": expand failed\\n\" + e.err_text)"},{"line_number":747,"context_line":"            else:"},{"line_number":748,"context_line":"                with excutils.save_and_reraise_exception():"},{"line_number":749,"context_line":"                    LOG.exception(_LE(\"Volume : %s expand failed\"),"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_43daf878","line":746,"updated":"2016-05-17 19:09:51.000000000","message":"_()","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":770,"context_line":"            src_snapshot_name \u003d self._get_CoprHD_snapshot_name("},{"line_number":771,"context_line":"                snapshot, src_vol_uri)"},{"line_number":772,"context_line":""},{"line_number":773,"context_line":"            (storageresType, storageresTypename) \u003d \\"},{"line_number":774,"context_line":"                self.volume_obj.get_storageAttributes("},{"line_number":775,"context_line":"                src_vol_name, None, src_snapshot_name)"},{"line_number":776,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_03cbd0a4","line":773,"updated":"2016-05-17 19:09:51.000000000","message":"Reformat to get rid of \\","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":782,"context_line":"                self.configuration.coprhd_project,"},{"line_number":783,"context_line":"                self.configuration.coprhd_tenant)"},{"line_number":784,"context_line":""},{"line_number":785,"context_line":"            self.volume_obj.clone("},{"line_number":786,"context_line":"                new_volume_name,"},{"line_number":787,"context_line":"                resource_id,"},{"line_number":788,"context_line":"                sync\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_233ff487","line":785,"updated":"2016-05-17 19:09:51.000000000","message":"It\u0027s possible for the user to request a clone of a larger size than the original snapshot. Need to check if the requested size is larger and expand the volume if needed.","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":790,"context_line":"        except CoprHD_utils.CoprHdError as e:"},{"line_number":791,"context_line":"            if e.err_code \u003d\u003d CoprHD_utils.CoprHdError.SOS_FAILURE_ERR:"},{"line_number":792,"context_line":"                raise CoprHD_utils.CoprHdError("},{"line_number":793,"context_line":"                    CoprHD_utils.CoprHdError.SOS_FAILURE_ERR,"},{"line_number":794,"context_line":"                    \"Snapshot \" +"},{"line_number":795,"context_line":"                    src_snapshot_name +"},{"line_number":796,"context_line":"                    \": clone failed\\n\" +"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_a353e4e0","line":793,"updated":"2016-05-17 19:09:51.000000000","message":"_()","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":822,"context_line":"            elif e.err_code \u003d\u003d CoprHD_utils.CoprHdError.SOS_FAILURE_ERR:"},{"line_number":823,"context_line":"                raise CoprHD_utils.CoprHdError("},{"line_number":824,"context_line":"                    CoprHD_utils.CoprHdError.SOS_FAILURE_ERR,"},{"line_number":825,"context_line":"                    \"Volume \" + name + \": Delete failed\\n\" + e.err_text)"},{"line_number":826,"context_line":"            else:"},{"line_number":827,"context_line":"                with excutils.save_and_reraise_exception():"},{"line_number":828,"context_line":"                    LOG.exception(_LE(\"Volume : %s delete failed\"), name)"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_a36ac47e","line":825,"updated":"2016-05-17 19:09:51.000000000","message":"_()","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":858,"context_line":"            if volume[\u0027consistencygroup_id\u0027]:"},{"line_number":859,"context_line":"                raise CoprHD_utils.CoprHdError("},{"line_number":860,"context_line":"                    CoprHD_utils.CoprHdError.SOS_FAILURE_ERR,"},{"line_number":861,"context_line":"                    \"Snapshot can\u0027t be taken individually on a volume\" +"},{"line_number":862,"context_line":"                    \" that is part of a Consistency Group\")"},{"line_number":863,"context_line":"        except AttributeError as e:"},{"line_number":864,"context_line":"            LOG.info(_LI(\"No Consistency Group associated with the volume\"))"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_836500b0","line":861,"updated":"2016-05-17 19:09:51.000000000","message":"_()","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":907,"context_line":"            if e.err_code \u003d\u003d CoprHD_utils.CoprHdError.SOS_FAILURE_ERR:"},{"line_number":908,"context_line":"                raise CoprHD_utils.CoprHdError("},{"line_number":909,"context_line":"                    CoprHD_utils.CoprHdError.SOS_FAILURE_ERR,"},{"line_number":910,"context_line":"                    \"Snapshot: \" +"},{"line_number":911,"context_line":"                    snapshotname +"},{"line_number":912,"context_line":"                    \", Create Failed\\n\" +"},{"line_number":913,"context_line":"                    e.err_text)"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_e3d4cc20","line":910,"updated":"2016-05-17 19:09:51.000000000","message":"_()","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":927,"context_line":"            if vol[\u0027consistencygroup_id\u0027]:"},{"line_number":928,"context_line":"                raise CoprHD_utils.CoprHdError("},{"line_number":929,"context_line":"                    CoprHD_utils.CoprHdError.SOS_FAILURE_ERR,"},{"line_number":930,"context_line":"                    \"Snapshot delete can\u0027t be done individually on a volume\" +"},{"line_number":931,"context_line":"                    \" that is part of a Consistency Group\")"},{"line_number":932,"context_line":"        except AttributeError as e:"},{"line_number":933,"context_line":"            LOG.info(_LI(\"No Consistency Group associated with the volume\"))"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_43e4b80b","line":930,"updated":"2016-05-17 19:09:51.000000000","message":"_()","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":968,"context_line":"            if e.err_code \u003d\u003d CoprHD_utils.CoprHdError.SOS_FAILURE_ERR:"},{"line_number":969,"context_line":"                raise CoprHD_utils.CoprHdError("},{"line_number":970,"context_line":"                    CoprHD_utils.CoprHdError.SOS_FAILURE_ERR,"},{"line_number":971,"context_line":"                    \"Snapshot \" +"},{"line_number":972,"context_line":"                    snapshotname +"},{"line_number":973,"context_line":"                    \": Delete Failed\\n\")"},{"line_number":974,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_03b590eb","line":971,"updated":"2016-05-17 19:09:51.000000000","message":"_()","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":994,"context_line":"                    # check if this initiator is contained in any CoprHD Host"},{"line_number":995,"context_line":"                    # object"},{"line_number":996,"context_line":"                    LOG.debug("},{"line_number":997,"context_line":"                        \"checking for initiator port:\" + initiatorPorts[i])"},{"line_number":998,"context_line":"                    foundhostname \u003d self._find_host(initiatorPorts[i])"},{"line_number":999,"context_line":"                    if (foundhostname is None) and \\"},{"line_number":1000,"context_line":"                            (i + 1 \u003d\u003d len(initiatorPorts)):"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_63973c48","line":997,"range":{"start_line":997,"start_character":48,"end_line":997,"end_character":61},"updated":"2016-05-17 19:09:51.000000000","message":"s/port:\" + init/port: %s\", init/","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":996,"context_line":"                    LOG.debug("},{"line_number":997,"context_line":"                        \"checking for initiator port:\" + initiatorPorts[i])"},{"line_number":998,"context_line":"                    foundhostname \u003d self._find_host(initiatorPorts[i])"},{"line_number":999,"context_line":"                    if (foundhostname is None) and \\"},{"line_number":1000,"context_line":"                            (i + 1 \u003d\u003d len(initiatorPorts)):"},{"line_number":1001,"context_line":"                        LOG.error(_LE(\"Auto host creation not supported\"))"},{"line_number":1002,"context_line":"                    else:"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_a39da467","line":999,"updated":"2016-05-17 19:09:51.000000000","message":"Get rid of \\.\n\nYou can just get rid of the parentheses around each individual condition and put them around the whole conditional block.","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":1004,"context_line":"                # create an export group for this host"},{"line_number":1005,"context_line":"                foundgroupname \u003d foundhostname + \u0027SG\u0027"},{"line_number":1006,"context_line":"                # create a unique name"},{"line_number":1007,"context_line":"                foundgroupname \u003d foundgroupname + \u0027-\u0027 + \\"},{"line_number":1008,"context_line":"                    \u0027\u0027.join(random.choice(string.ascii_uppercase +"},{"line_number":1009,"context_line":"                                          string.digits)"},{"line_number":1010,"context_line":"                            for x in range(6))"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_039ab061","line":1007,"updated":"2016-05-17 19:09:51.000000000","message":"Get rid of \\","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":1052,"context_line":"                        next_lun_id \u003d next_lun_id + 1"},{"line_number":1053,"context_line":""},{"line_number":1054,"context_line":"                LOG.debug("},{"line_number":1055,"context_line":"                    \"adding the volume to the exportgroup : \" + volumename)"},{"line_number":1056,"context_line":"                try:"},{"line_number":1057,"context_line":"                    self.exportgroup_obj.exportgroup_add_volumes("},{"line_number":1058,"context_line":"                        True,"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_e3b7acd5","line":1055,"updated":"2016-05-17 19:09:51.000000000","message":"Change message to format string and pass in volumename as arg to logger.","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":1070,"context_line":"                    if (try_id \u003e\u003d EXPORT_RETRY_COUNT):"},{"line_number":1071,"context_line":"                        raise CoprHD_utils.CoprHdError("},{"line_number":1072,"context_line":"                            CoprHD_utils.CoprHdError.SOS_FAILURE_ERR,"},{"line_number":1073,"context_line":"                            \"Attach volume (\" +"},{"line_number":1074,"context_line":"                            self._get_coprhd_volume_name(volume) +"},{"line_number":1075,"context_line":"                            \") to host (\" +"},{"line_number":1076,"context_line":"                            hostname +"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_43c79844","line":1073,"updated":"2016-05-17 19:09:51.000000000","message":"_()","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"6816ed1001639380e73b690ace27f28a34690934","unresolved":false,"context_lines":[{"line_number":1077,"context_line":"                            \") initiator (\" +"},{"line_number":1078,"context_line":"                            initiatorPorts[0] +"},{"line_number":1079,"context_line":"                            \") failed: \" +"},{"line_number":1080,"context_line":"                            ex.err_text)"},{"line_number":1081,"context_line":"                    else:"},{"line_number":1082,"context_line":"                        LOG.exception(_LE(\"Export volume with LUN: %s failed.\")"},{"line_number":1083,"context_line":"                                      % str(next_lun_id))"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_3df54d82","line":1080,"updated":"2016-05-17 20:33:32.000000000","message":"Same comment as line 1101.","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":1080,"context_line":"                            ex.err_text)"},{"line_number":1081,"context_line":"                    else:"},{"line_number":1082,"context_line":"                        LOG.exception(_LE(\"Export volume with LUN: %s failed.\")"},{"line_number":1083,"context_line":"                                      % str(next_lun_id))"},{"line_number":1084,"context_line":"                        LOG.info(_LI(\"Retry with next available LUN ID\"))"},{"line_number":1085,"context_line":"                        next_lun_id \u003d next_lun_id + 1"},{"line_number":1086,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_63d3bc04","line":1083,"updated":"2016-05-17 19:09:51.000000000","message":"Remove str() and pass next_lin_id as arg in to the logger.","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":1088,"context_line":""},{"line_number":1089,"context_line":"        except CoprHD_utils.CoprHdError as e:"},{"line_number":1090,"context_line":"            raise CoprHD_utils.CoprHdError("},{"line_number":1091,"context_line":"                CoprHD_utils.CoprHdError.SOS_FAILURE_ERR,"},{"line_number":1092,"context_line":"                \"Attach volume (\" +"},{"line_number":1093,"context_line":"                self._get_coprhd_volume_name("},{"line_number":1094,"context_line":"                    volume) +"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_43ce785a","line":1091,"updated":"2016-05-17 19:09:51.000000000","message":"_()","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"6816ed1001639380e73b690ace27f28a34690934","unresolved":false,"context_lines":[{"line_number":1098,"context_line":"                initiatorPorts["},{"line_number":1099,"context_line":"                    0] +"},{"line_number":1100,"context_line":"                \") failed: \" +"},{"line_number":1101,"context_line":"                e.err_text)"},{"line_number":1102,"context_line":""},{"line_number":1103,"context_line":"    @retry_wrapper"},{"line_number":1104,"context_line":"    def terminate_connection(self,"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_1dfcc970","line":1101,"updated":"2016-05-17 20:33:32.000000000","message":"Please use string substitution instead of concatenation when forming the error message.","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":1110,"context_line":"        try:"},{"line_number":1111,"context_line":"            self.authenticate_user()"},{"line_number":1112,"context_line":"            volumename \u003d self._get_coprhd_volume_name(volume)"},{"line_number":1113,"context_line":"            tenantproject \u003d self.configuration.coprhd_tenant + \\"},{"line_number":1114,"context_line":"                \u0027/\u0027 + self.configuration.coprhd_project"},{"line_number":1115,"context_line":"            voldetails \u003d self.volume_obj.show(tenantproject + \u0027/\u0027 + volumename)"},{"line_number":1116,"context_line":"            volid \u003d voldetails[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_a3d92424","line":1113,"updated":"2016-05-17 19:09:51.000000000","message":"Get rid of \\","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":1143,"context_line":"        except CoprHD_utils.CoprHdError as e:"},{"line_number":1144,"context_line":"            raise CoprHD_utils.CoprHdError("},{"line_number":1145,"context_line":"                CoprHD_utils.CoprHdError.SOS_FAILURE_ERR,"},{"line_number":1146,"context_line":"                \"Detaching volume \" +"},{"line_number":1147,"context_line":"                volumename +"},{"line_number":1148,"context_line":"                \" from host \" +"},{"line_number":1149,"context_line":"                hostname +"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_03ff5066","line":1146,"updated":"2016-05-17 19:09:51.000000000","message":"_()","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":1152,"context_line":""},{"line_number":1153,"context_line":"    @retry_wrapper"},{"line_number":1154,"context_line":"    def _find_device_info(self, volume, initiator_ports):"},{"line_number":1155,"context_line":"        \u0027\u0027\u0027Returns device_info in list of itls having the matched initiator"},{"line_number":1156,"context_line":""},{"line_number":1157,"context_line":"        (there could be multiple targets, hence a list):"},{"line_number":1158,"context_line":"                ["}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_43f5d880","line":1155,"range":{"start_line":1155,"start_character":8,"end_line":1155,"end_character":11},"updated":"2016-05-17 19:09:51.000000000","message":"Docstrings need to use \"\"\", not \u0027\u0027\u0027","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":1178,"context_line":"        fullname \u003d self.configuration.coprhd_project + \u0027/\u0027 + volumename"},{"line_number":1179,"context_line":"        vol_uri \u003d self.volume_obj.volume_query(fullname)"},{"line_number":1180,"context_line":""},{"line_number":1181,"context_line":"        \u0027\u0027\u0027"},{"line_number":1182,"context_line":"        The itl info shall be available at the first try since now export is a"},{"line_number":1183,"context_line":"        synchronous call.  We are trying a few more times to accommodate any"},{"line_number":1184,"context_line":"        delay on filling in the itl info after the export task is completed."}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_e32ccc03","line":1181,"updated":"2016-05-17 19:09:51.000000000","message":"Don\u0027t use docstring like comment format inline.","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":1198,"context_line":"                        # 0 is a valid number for found_device_number."},{"line_number":1199,"context_line":"                        # Only loop if it is None or -1"},{"line_number":1200,"context_line":"                        LOG.debug(\"Found Device Number: \" +"},{"line_number":1201,"context_line":"                                  str(found_device_number))"},{"line_number":1202,"context_line":"                        itls.append(itl)"},{"line_number":1203,"context_line":""},{"line_number":1204,"context_line":"            if itls:"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_834220a9","line":1201,"updated":"2016-05-17 19:09:51.000000000","message":"Get rid of str() and pass in message as a format string with found_device_number as an arg.","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":1204,"context_line":"            if itls:"},{"line_number":1205,"context_line":"                break"},{"line_number":1206,"context_line":"            else:"},{"line_number":1207,"context_line":"                LOG.debug(\"Device Number not found yet.\" +"},{"line_number":1208,"context_line":"                          \" Retrying after 10 seconds...\")"},{"line_number":1209,"context_line":"                time.sleep(10)"},{"line_number":1210,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_c316e8a5","line":1207,"updated":"2016-05-17 19:09:51.000000000","message":"Get rid of \" +\" on the end.","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":1211,"context_line":"        if itls is None:"},{"line_number":1212,"context_line":"            # No device number found after 10 tries; return an empty itl"},{"line_number":1213,"context_line":"            LOG.info(_LI("},{"line_number":1214,"context_line":"                \"No device number has been found after 10 tries;\""},{"line_number":1215,"context_line":"                \"this likely indicates an unsuccessful attach of\""},{"line_number":1216,"context_line":"                \"volume volumename\u003d%(volumename)s to\""},{"line_number":1217,"context_line":"                \" initiator  initiator_ports\u003d%(initiator_ports)s\") %"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_43231805","line":1214,"updated":"2016-05-17 19:09:51.000000000","message":"Need space on the end.","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":1212,"context_line":"            # No device number found after 10 tries; return an empty itl"},{"line_number":1213,"context_line":"            LOG.info(_LI("},{"line_number":1214,"context_line":"                \"No device number has been found after 10 tries;\""},{"line_number":1215,"context_line":"                \"this likely indicates an unsuccessful attach of\""},{"line_number":1216,"context_line":"                \"volume volumename\u003d%(volumename)s to\""},{"line_number":1217,"context_line":"                \" initiator  initiator_ports\u003d%(initiator_ports)s\") %"},{"line_number":1218,"context_line":"                {\u0027volumename\u0027: volumename,"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_a31e44b8","line":1215,"updated":"2016-05-17 19:09:51.000000000","message":"Same.","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":1214,"context_line":"                \"No device number has been found after 10 tries;\""},{"line_number":1215,"context_line":"                \"this likely indicates an unsuccessful attach of\""},{"line_number":1216,"context_line":"                \"volume volumename\u003d%(volumename)s to\""},{"line_number":1217,"context_line":"                \" initiator  initiator_ports\u003d%(initiator_ports)s\") %"},{"line_number":1218,"context_line":"                {\u0027volumename\u0027: volumename,"},{"line_number":1219,"context_line":"                    \u0027initiator_ports\u0027: str(initiator_ports)})"},{"line_number":1220,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_038470d0","line":1217,"range":{"start_line":1217,"start_character":66,"end_line":1217,"end_character":68},"updated":"2016-05-17 19:09:51.000000000","message":"% \u003e ,","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":1246,"context_line":"        else:"},{"line_number":1247,"context_line":"            raise CoprHD_utils.CoprHdError("},{"line_number":1248,"context_line":"                CoprHD_utils.CoprHdError.NOT_FOUND_ERR,"},{"line_number":1249,"context_line":"                \"Consistency Group \" + cgid + \" not found\")"},{"line_number":1250,"context_line":""},{"line_number":1251,"context_line":"    def _get_consistencygroup_name(self, driver, context, cgid):"},{"line_number":1252,"context_line":"        consisgrp \u003d driver.db.consistencygroup_get(context, cgid)"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_a375a4fa","line":1249,"updated":"2016-05-17 19:09:51.000000000","message":"_()","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":1263,"context_line":"        # if the result is empty, then search with the tagname"},{"line_number":1264,"context_line":"        # as \"OpenStack:obj_id\""},{"line_number":1265,"context_line":"        # as snapshots will be having the obj_id instead of just id."},{"line_number":1266,"context_line":"        if rslt is None or len(rslt) \u003d\u003d 0:"},{"line_number":1267,"context_line":"            tagname \u003d \"OpenStack:obj_id:\" + snapshot[\u0027id\u0027]"},{"line_number":1268,"context_line":"            rslt \u003d CoprHD_utils.search_by_tag("},{"line_number":1269,"context_line":"                CoprHD_snap.Snapshot.URI_SEARCH_SNAPSHOT_BY_TAG.format("}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_e3616c3a","line":1266,"updated":"2016-05-17 19:09:51.000000000","message":"Could be \"if not rslt\"","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":1307,"context_line":"        else:"},{"line_number":1308,"context_line":"            raise CoprHD_utils.CoprHdError("},{"line_number":1309,"context_line":"                CoprHD_utils.CoprHdError.NOT_FOUND_ERR,"},{"line_number":1310,"context_line":"                \"Volume \" + vol[\u0027display_name\u0027] + \" not found\")"},{"line_number":1311,"context_line":""},{"line_number":1312,"context_line":"    def _get_volume_name(self, vol):"},{"line_number":1313,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_035bd086","line":1310,"updated":"2016-05-17 19:09:51.000000000","message":"_()","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":1342,"context_line":"    @retry_wrapper"},{"line_number":1343,"context_line":"    def _find_exportgroup(self, initiator_ports):"},{"line_number":1344,"context_line":"        \"\"\"Find export group with initiator ports same as given initiators"},{"line_number":1345,"context_line":""},{"line_number":1346,"context_line":"        \"\"\""},{"line_number":1347,"context_line":"        foundgroupname \u003d None"},{"line_number":1348,"context_line":"        grouplist \u003d self.exportgroup_obj.exportgroup_list("}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_23cff429","line":1345,"updated":"2016-05-17 19:09:51.000000000","message":"Get rid of extra blank line.","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":1370,"context_line":"                            varray_uri \u003d groupdetails[\u0027varray\u0027][\u0027id\u0027]"},{"line_number":1371,"context_line":"                            varray_details \u003d self.varray_obj.varray_show("},{"line_number":1372,"context_line":"                                varray_uri)"},{"line_number":1373,"context_line":"                            if varray_details[\u0027name\u0027] \u003d\u003d \\"},{"line_number":1374,"context_line":"                                    self.configuration.coprhd_varray:"},{"line_number":1375,"context_line":"                                LOG.debug("},{"line_number":1376,"context_line":"                                    \"Found exportgroup \" +"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_a3e3e4a2","line":1373,"updated":"2016-05-17 19:09:51.000000000","message":"Get rid of \\","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":1373,"context_line":"                            if varray_details[\u0027name\u0027] \u003d\u003d \\"},{"line_number":1374,"context_line":"                                    self.configuration.coprhd_varray:"},{"line_number":1375,"context_line":"                                LOG.debug("},{"line_number":1376,"context_line":"                                    \"Found exportgroup \" +"},{"line_number":1377,"context_line":"                                    foundgroupname)"},{"line_number":1378,"context_line":"                                break"},{"line_number":1379,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_83dea0d7","line":1376,"updated":"2016-05-17 19:09:51.000000000","message":"Use string formatting.","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":1412,"context_line":"                if host_name \u003d\u003d hostname:"},{"line_number":1413,"context_line":"                    return hostname"},{"line_number":1414,"context_line":"            return hostname"},{"line_number":1415,"context_line":"        LOG.debug(\"no host found for:\" + host_name)"},{"line_number":1416,"context_line":"        return None"},{"line_number":1417,"context_line":""},{"line_number":1418,"context_line":"    @retry_wrapper"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_43ff9833","line":1415,"updated":"2016-05-17 19:09:51.000000000","message":"Use string formatting.","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":1418,"context_line":"    @retry_wrapper"},{"line_number":1419,"context_line":"    def get_exports_count_by_initiators(self, initiator_ports):"},{"line_number":1420,"context_line":"        \"\"\"Fetches ITL map for a given list of initiator ports"},{"line_number":1421,"context_line":""},{"line_number":1422,"context_line":"        \"\"\""},{"line_number":1423,"context_line":"        comma_delimited_initiator_list \u003d \",\".join(initiator_ports)"},{"line_number":1424,"context_line":"        (s, h) \u003d CoprHD_utils.service_json_request("}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_c399c820","line":1421,"updated":"2016-05-17 19:09:51.000000000","message":"Make all on one line.","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":1478,"context_line":""},{"line_number":1479,"context_line":"                self.stats[\u0027free_capacity_gb\u0027] \u003d free_gb"},{"line_number":1480,"context_line":"                self.stats[\u0027total_capacity_gb\u0027] \u003d free_gb + used_gb"},{"line_number":1481,"context_line":"                self.stats[\u0027reserved_percentage\u0027] \u003d 100 * \\"},{"line_number":1482,"context_line":"                    provisioned_gb / (free_gb + used_gb)"},{"line_number":1483,"context_line":""},{"line_number":1484,"context_line":"            return self.stats"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_03a0f040","line":1481,"updated":"2016-05-17 19:09:51.000000000","message":"Remove \\","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":1484,"context_line":"            return self.stats"},{"line_number":1485,"context_line":""},{"line_number":1486,"context_line":"        except CoprHD_utils.CoprHdError:"},{"line_number":1487,"context_line":"            LOG.error(_LE(\"Failed to update volume stats\"))"},{"line_number":1488,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":1489,"context_line":"                LOG.exception(_LE(\"Update volume stats failed\"))"},{"line_number":1490,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_438678b9","line":1487,"updated":"2016-05-17 19:09:51.000000000","message":"Get rid of this since you basically do the exact same thing below.","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":1509,"context_line":"            if e.err_code \u003d\u003d CoprHD_utils.CoprHdError.SOS_FAILURE_ERR:"},{"line_number":1510,"context_line":"                raise CoprHD_utils.CoprHdError("},{"line_number":1511,"context_line":"                    CoprHD_utils.CoprHdError.SOS_FAILURE_ERR,"},{"line_number":1512,"context_line":"                    \"Volume \" + volume_name + \": update failed\\n\" + e.err_text)"},{"line_number":1513,"context_line":"            else:"},{"line_number":1514,"context_line":"                with excutils.save_and_reraise_exception():"},{"line_number":1515,"context_line":"                    LOG.exception(_LE"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_838ce0d7","line":1512,"updated":"2016-05-17 19:09:51.000000000","message":"_()","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"bd073d38a72430ad6548d7dc6510845e75a05ecf","unresolved":false,"context_lines":[{"line_number":49,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"volume_opts \u003d ["},{"line_number":52,"context_line":"    cfg.StrOpt(\u0027hostname\u0027,"},{"line_number":53,"context_line":"               default\u003dNone,"},{"line_number":54,"context_line":"               help\u003d\u0027Hostname for the CoprHD Instance\u0027),"},{"line_number":55,"context_line":"    cfg.IntOpt(\u0027coprhd_port\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"bab6814e_4300a801","line":52,"updated":"2016-05-25 20:02:51.000000000","message":"\"hostname\" is too generic of a name to use in a driver.  Should be \"coprhd_hostname\" or similar.","commit_id":"198cdd4fad352b2cc6090eba70d9ca970fb3dab1"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"bd073d38a72430ad6548d7dc6510845e75a05ecf","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    cfg.StrOpt(\u0027hostname\u0027,"},{"line_number":53,"context_line":"               default\u003dNone,"},{"line_number":54,"context_line":"               help\u003d\u0027Hostname for the CoprHD Instance\u0027),"},{"line_number":55,"context_line":"    cfg.IntOpt(\u0027coprhd_port\u0027,"},{"line_number":56,"context_line":"               default\u003d4443,"},{"line_number":57,"context_line":"               help\u003d\u0027Port for the CoprHD Instance\u0027),"},{"line_number":58,"context_line":"    cfg.StrOpt(\u0027coprhd_username\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"bab6814e_c396584b","line":55,"updated":"2016-05-25 20:02:51.000000000","message":"Should be a PortOpt.","commit_id":"198cdd4fad352b2cc6090eba70d9ca970fb3dab1"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"bd073d38a72430ad6548d7dc6510845e75a05ecf","unresolved":false,"context_lines":[{"line_number":70,"context_line":"    cfg.StrOpt(\u0027coprhd_varray\u0027,"},{"line_number":71,"context_line":"               default\u003dNone,"},{"line_number":72,"context_line":"               help\u003d\u0027Virtual Array to utilize within the CoprHD Instance\u0027),"},{"line_number":73,"context_line":"    cfg.StrOpt(\u0027coprhd_scaleio_rest_gateway_ip\u0027,"},{"line_number":74,"context_line":"               default\u003d\u0027None\u0027,"},{"line_number":75,"context_line":"               help\u003d\u0027Rest Gateway for Scaleio\u0027),"},{"line_number":76,"context_line":"    cfg.StrOpt(\u0027coprhd_scaleio_rest_gateway_port\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"bab6814e_c3cf787d","line":73,"updated":"2016-05-25 20:02:51.000000000","message":"Does this have to be an IP or can it be a hostname?\n\nIf so, rename it to \"_host\" instead of \"_ip\".","commit_id":"198cdd4fad352b2cc6090eba70d9ca970fb3dab1"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"bd073d38a72430ad6548d7dc6510845e75a05ecf","unresolved":false,"context_lines":[{"line_number":73,"context_line":"    cfg.StrOpt(\u0027coprhd_scaleio_rest_gateway_ip\u0027,"},{"line_number":74,"context_line":"               default\u003d\u0027None\u0027,"},{"line_number":75,"context_line":"               help\u003d\u0027Rest Gateway for Scaleio\u0027),"},{"line_number":76,"context_line":"    cfg.StrOpt(\u0027coprhd_scaleio_rest_gateway_port\u0027,"},{"line_number":77,"context_line":"               default\u003d\u0027None\u0027,"},{"line_number":78,"context_line":"               help\u003d\u0027Rest Gateway Port for Scaleio\u0027),"},{"line_number":79,"context_line":"    cfg.StrOpt(\u0027coprhd_scaleio_rest_server_username\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"bab6814e_e3c27c52","line":76,"updated":"2016-05-25 20:02:51.000000000","message":"Should be a PortOpt.","commit_id":"198cdd4fad352b2cc6090eba70d9ca970fb3dab1"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"bd073d38a72430ad6548d7dc6510845e75a05ecf","unresolved":false,"context_lines":[{"line_number":81,"context_line":"               help\u003d\u0027Username for Rest Gateway\u0027),"},{"line_number":82,"context_line":"    cfg.StrOpt(\u0027coprhd_scaleio_rest_server_password\u0027,"},{"line_number":83,"context_line":"               default\u003dNone,"},{"line_number":84,"context_line":"               help\u003d\u0027Rest Gateway Password\u0027),"},{"line_number":85,"context_line":"    cfg.StrOpt(\u0027scaleio_verify_server_certificate\u0027,"},{"line_number":86,"context_line":"               default\u003d\u0027False\u0027,"},{"line_number":87,"context_line":"               help\u003d\u0027verify server certificate\u0027),"}],"source_content_type":"text/x-python","patch_set":3,"id":"bab6814e_83a8d08d","line":84,"updated":"2016-05-25 20:02:51.000000000","message":"Include secret\u003dTrue for password options.","commit_id":"198cdd4fad352b2cc6090eba70d9ca970fb3dab1"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"bd073d38a72430ad6548d7dc6510845e75a05ecf","unresolved":false,"context_lines":[{"line_number":143,"context_line":"class EMCCoprHDDriverCommon(object):"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"    OPENSTACK_TAG \u003d \u0027OpenStack\u0027"},{"line_number":146,"context_line":"    AUTHENTICATED \u003d False"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    def __init__(self, protocol, default_backend_name, configuration\u003dNone):"},{"line_number":149,"context_line":"        self.protocol \u003d protocol"}],"source_content_type":"text/x-python","patch_set":3,"id":"bab6814e_232c8498","line":146,"updated":"2016-05-25 20:02:51.000000000","message":"AUTHENTICATED looks like it should be an instance variable in __init__ instead of here.","commit_id":"198cdd4fad352b2cc6090eba70d9ca970fb3dab1"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"bd073d38a72430ad6548d7dc6510845e75a05ecf","unresolved":false,"context_lines":[{"line_number":256,"context_line":"    def create_volume(self, vol, driver):"},{"line_number":257,"context_line":"        self.authenticate_user()"},{"line_number":258,"context_line":"        name \u003d self._get_volume_name(vol)"},{"line_number":259,"context_line":"        size \u003d int(vol[\u0027size\u0027]) * 1073741824"},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"        vpool \u003d self._get_vpool(vol)"},{"line_number":262,"context_line":"        self.vpool \u003d vpool[\u0027CoprHD:VPOOL\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"bab6814e_c33bf8cf","line":259,"updated":"2016-05-25 20:02:51.000000000","message":"Use units.Gi instead of the number here.","commit_id":"198cdd4fad352b2cc6090eba70d9ca970fb3dab1"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"bd073d38a72430ad6548d7dc6510845e75a05ecf","unresolved":false,"context_lines":[{"line_number":656,"context_line":"                except TypeError:"},{"line_number":657,"context_line":"                    LOG.debug(\"Error tagging the resource property %s\", prop)"},{"line_number":658,"context_line":"        except TypeError:"},{"line_number":659,"context_line":"            LOG.debug(\"Error tagging the resource properties\")"},{"line_number":660,"context_line":""},{"line_number":661,"context_line":"        try:"},{"line_number":662,"context_line":"            CoprHD_tag.tag_resource("}],"source_content_type":"text/x-python","patch_set":3,"id":"bab6814e_03498060","line":659,"updated":"2016-05-25 20:02:51.000000000","message":"Can this exception actually happen?  i.e. won\u0027t the inner \"except TypeError\" catch it?","commit_id":"198cdd4fad352b2cc6090eba70d9ca970fb3dab1"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"bd073d38a72430ad6548d7dc6510845e75a05ecf","unresolved":false,"context_lines":[{"line_number":714,"context_line":"                \"/\" + self.configuration.coprhd_project + \"/\" + name"},{"line_number":715,"context_line":"            detachable \u003d self.volume_obj.is_volume_detachable(clone_vol_path)"},{"line_number":716,"context_line":"            LOG.info(_LI(\"Is volume detachable : %s\"),"},{"line_number":717,"context_line":"                     six.text_type(detachable))"},{"line_number":718,"context_line":""},{"line_number":719,"context_line":"            # detach it from the source volume immediately after creation"},{"line_number":720,"context_line":"            if detachable:"}],"source_content_type":"text/x-python","patch_set":3,"id":"bab6814e_a3ad14eb","line":717,"updated":"2016-05-25 20:02:51.000000000","message":"This looks like something that should be logged at debug level rather than info.","commit_id":"198cdd4fad352b2cc6090eba70d9ca970fb3dab1"}],"cinder/volume/drivers/emc/coprhd/fc.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":22,"context_line":"import re"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"try:"},{"line_number":25,"context_line":"    from oslo_log import log as logging"},{"line_number":26,"context_line":"except ImportError:"},{"line_number":27,"context_line":"    from cinder.openstack.common import log as logging"},{"line_number":28,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_c3c0a8e2","line":25,"updated":"2016-05-17 19:09:51.000000000","message":"Remove try/except","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":29,"context_line":"from cinder.volume import driver"},{"line_number":30,"context_line":"from cinder.volume.drivers.emc.coprhd import common as CoprHD_common"},{"line_number":31,"context_line":"try:"},{"line_number":32,"context_line":"    # new utilities introduced in Juno"},{"line_number":33,"context_line":"    from cinder.zonemanager.utils import AddFCZone"},{"line_number":34,"context_line":"    from cinder.zonemanager.utils import RemoveFCZone"},{"line_number":35,"context_line":"except ImportError:"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_23b41480","line":32,"updated":"2016-05-17 19:09:51.000000000","message":"We are now on Newton. Remove try/except.","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":103,"context_line":"        \"\"\"Driver exntry point to remove an export for a volume.\"\"\""},{"line_number":104,"context_line":"        pass"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    def create_consistencygroup(self, context, group):"},{"line_number":107,"context_line":"        \"\"\"Creates a consistencygroup.\"\"\""},{"line_number":108,"context_line":"        return self.common.create_consistencygroup(context, group)"},{"line_number":109,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_4322f8b9","line":106,"updated":"2016-05-17 19:09:51.000000000","message":"You will want your drivers to also inherit from the various non-core classes you wish to support (consistency groups, extend volume, etc.)\n\nHere is an example:\nhttps://github.com/openstack/cinder/blob/9567844f0e180a7278767fdcd4378b19913933be/cinder/volume/drivers/dell/dell_storagecenter_common.py#L51","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":218,"context_line":"            # return empty data"},{"line_number":219,"context_line":"            data \u003d {\u0027driver_volume_type\u0027: \u0027fibre_channel\u0027, \u0027data\u0027: {}}"},{"line_number":220,"context_line":"        else:"},{"line_number":221,"context_line":"            target_wwns, initiator_target_map \u003d \\"},{"line_number":222,"context_line":"                self._build_initiator_target_map(itls, connector)"},{"line_number":223,"context_line":"            data \u003d {"},{"line_number":224,"context_line":"                \u0027driver_volume_type\u0027: \u0027fibre_channel\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_a61bf271","line":221,"updated":"2016-05-17 19:09:51.000000000","message":"Get rid of \\","commit_id":"d6af7b2a4972402064276171c97990f64460d575"}],"cinder/volume/drivers/emc/coprhd/helpers/authentication.py":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"2952e79e9b75213eb4d54451b7059b22f2816eb3","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#!/usr/bin/python"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright (c) 2016 EMC Corporation"},{"line_number":4,"context_line":"# All Rights Reserved."}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_03011105","line":1,"updated":"2016-05-17 17:54:29.000000000","message":"Remove #!/usr/bin/python header.","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":21,"context_line":"import socket"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"import requests"},{"line_number":24,"context_line":"from requests.exceptions import ConnectionError"},{"line_number":25,"context_line":"from requests.exceptions import SSLError"},{"line_number":26,"context_line":"from requests.exceptions import Timeout"},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_06211e9e","line":24,"updated":"2016-05-17 19:09:51.000000000","message":"Do not import individual classes.","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"2952e79e9b75213eb4d54451b7059b22f2816eb3","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        validation"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        Returns:"},{"line_number":57,"context_line":"            SUCCESS OR FAILURE"},{"line_number":58,"context_line":"        \u0027\u0027\u0027"},{"line_number":59,"context_line":"        SEC_REDIRECT \u003d 302"},{"line_number":60,"context_line":"        SEC_AUTHTOKEN_HEADER \u003d \u0027X-SDS-AUTH-TOKEN\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_43079917","line":57,"updated":"2016-05-17 17:54:29.000000000","message":"Appears to return an authtoken.","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":78,"context_line":"                    location \u003d login_response.headers[\u0027Location\u0027]"},{"line_number":79,"context_line":"                    if not location:"},{"line_number":80,"context_line":"                        raise CoprHdError("},{"line_number":81,"context_line":"                            CoprHdError.HTTP_ERR, \"The redirect location of \" +"},{"line_number":82,"context_line":"                            \"the authentication service is not provided\")"},{"line_number":83,"context_line":"                    # Make the second request"},{"line_number":84,"context_line":"                    login_response \u003d requests.get("}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_862d0e91","line":81,"updated":"2016-05-17 19:09:51.000000000","message":"_()","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":85,"context_line":"                        location, headers\u003dself.HEADERS, verify\u003dFalse,"},{"line_number":86,"context_line":"                        cookies\u003dcookiejar, allow_redirects\u003dFalse,"},{"line_number":87,"context_line":"                        timeout\u003dcommon.TIMEOUT_SEC)"},{"line_number":88,"context_line":"                    if(not (login_response.status_code \u003d\u003d"},{"line_number":89,"context_line":"                            requests.codes[\u0027unauthorized\u0027])):"},{"line_number":90,"context_line":"                        raise CoprHdError("},{"line_number":91,"context_line":"                            CoprHdError.HTTP_ERR, \"The authentication \" +"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_265542f9","line":88,"updated":"2016-05-17 19:09:51.000000000","message":"Need space after \"if\".","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":88,"context_line":"                    if(not (login_response.status_code \u003d\u003d"},{"line_number":89,"context_line":"                            requests.codes[\u0027unauthorized\u0027])):"},{"line_number":90,"context_line":"                        raise CoprHdError("},{"line_number":91,"context_line":"                            CoprHdError.HTTP_ERR, \"The authentication \" +"},{"line_number":92,"context_line":"                            \" service failed to reply with 401\")"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"                    # Now provide the credentials"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_6643ca42","line":91,"updated":"2016-05-17 19:09:51.000000000","message":"_()","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":100,"context_line":"                    if not login_response.status_code \u003d\u003d SEC_REDIRECT:"},{"line_number":101,"context_line":"                        raise CoprHdError("},{"line_number":102,"context_line":"                            CoprHdError.HTTP_ERR,"},{"line_number":103,"context_line":"                            \"Access forbidden: Authentication required\")"},{"line_number":104,"context_line":"                    location \u003d login_response.headers[\u0027Location\u0027]"},{"line_number":105,"context_line":"                    if not location:"},{"line_number":106,"context_line":"                        raise CoprHdError("}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_a6493262","line":103,"updated":"2016-05-17 19:09:51.000000000","message":"_()","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":104,"context_line":"                    location \u003d login_response.headers[\u0027Location\u0027]"},{"line_number":105,"context_line":"                    if not location:"},{"line_number":106,"context_line":"                        raise CoprHdError("},{"line_number":107,"context_line":"                            CoprHdError.HTTP_ERR, \"The authentication\" +"},{"line_number":108,"context_line":"                            \" service failed to provide the location of\" +"},{"line_number":109,"context_line":"                            \" the service URI when redirecting back\")"},{"line_number":110,"context_line":"                    authtoken \u003d login_response.headers[SEC_AUTHTOKEN_HEADER]"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_666aaab4","line":107,"updated":"2016-05-17 19:09:51.000000000","message":"_()","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":111,"context_line":"                    if not authtoken:"},{"line_number":112,"context_line":"                        details_str \u003d self.extract_error_detail(login_response)"},{"line_number":113,"context_line":"                        raise CoprHdError(CoprHdError.HTTP_ERR,"},{"line_number":114,"context_line":"                                          \"The token is not generated\" +"},{"line_number":115,"context_line":"                                          \" by authentication service.\" +"},{"line_number":116,"context_line":"                                          details_str)"},{"line_number":117,"context_line":"                    # Make the final call to get the page with the token"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_a66012d0","line":114,"updated":"2016-05-17 19:09:51.000000000","message":"_()","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":123,"context_line":"                        timeout\u003dcommon.TIMEOUT_SEC)"},{"line_number":124,"context_line":"                    if login_response.status_code !\u003d requests.codes[\u0027ok\u0027]:"},{"line_number":125,"context_line":"                        raise CoprHdError("},{"line_number":126,"context_line":"                            CoprHdError.HTTP_ERR, \"Login failure code: \" +"},{"line_number":127,"context_line":"                            str(login_response.status_code) + \" Error: \" +"},{"line_number":128,"context_line":"                            login_response.text)"},{"line_number":129,"context_line":"            elif self.__port \u003d\u003d LB_API_PORT:"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_865b4e21","line":126,"updated":"2016-05-17 19:09:51.000000000","message":"_()","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":143,"context_line":"            else:"},{"line_number":144,"context_line":"                raise CoprHdError("},{"line_number":145,"context_line":"                    CoprHdError.HTTP_ERR,"},{"line_number":146,"context_line":"                    \"Incorrect port number.  Load balanced port is: \" +"},{"line_number":147,"context_line":"                    str(LB_API_PORT) + \", api service port is: \" +"},{"line_number":148,"context_line":"                    str(APISVC_PORT) + \".\")"},{"line_number":149,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_c69f16b2","line":146,"updated":"2016-05-17 19:09:51.000000000","message":"_()","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":151,"context_line":"                details_str \u003d self.extract_error_detail(login_response)"},{"line_number":152,"context_line":"                raise CoprHdError("},{"line_number":153,"context_line":"                    CoprHdError.HTTP_ERR,"},{"line_number":154,"context_line":"                    \"The token is not generated by authentication service.\" +"},{"line_number":155,"context_line":"                    details_str)"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"            if login_response.status_code !\u003d requests.codes[\u0027ok\u0027]:"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_26a38201","line":154,"updated":"2016-05-17 19:09:51.000000000","message":"_()","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":176,"context_line":"                else:"},{"line_number":177,"context_line":"                    error_msg \u003d login_response.text"},{"line_number":178,"context_line":"                    if isinstance(error_msg, unicode):"},{"line_number":179,"context_line":"                        error_msg \u003d error_msg.encode(\u0027utf-8\u0027)"},{"line_number":180,"context_line":"                raise CoprHdError(CoprHdError.HTTP_ERR, \"HTTP code: \" +"},{"line_number":181,"context_line":"                                  str(login_response.status_code) +"},{"line_number":182,"context_line":"                                  \", response: \" + str(login_response.reason) +"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_a6bc9206","line":179,"updated":"2016-05-17 19:09:51.000000000","message":"Shouldn\u0027t be necessary if the strings are handled right below.","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":177,"context_line":"                    error_msg \u003d login_response.text"},{"line_number":178,"context_line":"                    if isinstance(error_msg, unicode):"},{"line_number":179,"context_line":"                        error_msg \u003d error_msg.encode(\u0027utf-8\u0027)"},{"line_number":180,"context_line":"                raise CoprHdError(CoprHdError.HTTP_ERR, \"HTTP code: \" +"},{"line_number":181,"context_line":"                                  str(login_response.status_code) +"},{"line_number":182,"context_line":"                                  \", response: \" + str(login_response.reason) +"},{"line_number":183,"context_line":"                                  \" [\" + str(error_msg) + \"]\")"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_46acc6ec","line":180,"updated":"2016-05-17 19:09:51.000000000","message":"_()","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"13925596a33eaec6d554636a5f92acfc09eab0f8","unresolved":false,"context_lines":[{"line_number":24,"context_line":"from requests.exceptions import Timeout"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"from cinder.volume.drivers.emc.coprhd.helpers import commoncoprhdapi as common"},{"line_number":27,"context_line":"from cinder.volume.drivers.emc.coprhd.helpers.commoncoprhdapi \\"},{"line_number":28,"context_line":"    import CoprHdError"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"bab6814e_af574724","line":27,"range":{"start_line":27,"start_character":62,"end_line":27,"end_character":63},"updated":"2016-05-23 15:33:55.000000000","message":"Is there a way you can do this without a \u0027\\\u0027 ?","commit_id":"fb58b794d7780a614b2aaf0ff8fde6e3217862f5"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"bd073d38a72430ad6548d7dc6510845e75a05ecf","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    HEADERS \u003d {\u0027Content-Type\u0027: \u0027application/json\u0027,"},{"line_number":35,"context_line":"               \u0027ACCEPT\u0027: \u0027application/json\u0027, \u0027X-EMC-REST-CLIENT\u0027: \u0027TRUE\u0027}"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def __init__(self, ipaddr, port):"},{"line_number":38,"context_line":"        \"\"\"Constructor: takes IP address and port of the CoprHD instance"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        These are needed to make http requests for REST API"}],"source_content_type":"text/x-python","patch_set":3,"id":"bab6814e_034ce0c6","line":37,"updated":"2016-05-25 20:02:51.000000000","message":"A lot of these objects have the same __init__ method -- they should probably inherit from some base object in common rather than all inheriting from object.","commit_id":"198cdd4fad352b2cc6090eba70d9ca970fb3dab1"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"bd073d38a72430ad6548d7dc6510845e75a05ecf","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        cookiejar \u003d cookielib.LWPCookieJar()"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        url \u003d (\u0027https://\u0027 + str(self.__ipaddr) + \u0027:\u0027 + str(self.__port) +"},{"line_number":64,"context_line":"               self.URI_AUTHENTICATION)"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        try:"},{"line_number":67,"context_line":"            if self.__port \u003d\u003d APISVC_PORT:"}],"source_content_type":"text/x-python","patch_set":3,"id":"bab6814e_e371dc0d","line":64,"updated":"2016-05-25 20:02:51.000000000","message":"Why do all of these calls assume you are working with an IP address and not a hostname?\n\nWill this work if you someone enters an IPv6 address?  (I suspect not, since it needs to be properly escaped/formatted to be inserted into a URL.)","commit_id":"198cdd4fad352b2cc6090eba70d9ca970fb3dab1"}],"cinder/volume/drivers/emc/coprhd/helpers/commoncoprhdapi.py":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"2952e79e9b75213eb4d54451b7059b22f2816eb3","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#!/usr/bin/python"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright (c) 2016 EMC Corporation"},{"line_number":4,"context_line":"# All Rights Reserved."}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_c8560629","line":1,"updated":"2016-05-17 17:54:29.000000000","message":"Remove #!/usr/bin/python header.","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":24,"context_line":"import six"},{"line_number":25,"context_line":"import socket"},{"line_number":26,"context_line":"import sys"},{"line_number":27,"context_line":"from threading import Timer"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"import requests"},{"line_number":30,"context_line":"from requests.exceptions import ConnectionError"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_664d8a3d","line":27,"updated":"2016-05-17 19:09:51.000000000","message":"Don\u0027t import class directly.","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":29,"context_line":"import requests"},{"line_number":30,"context_line":"from requests.exceptions import ConnectionError"},{"line_number":31,"context_line":"from requests.exceptions import SSLError"},{"line_number":32,"context_line":"from requests.exceptions import Timeout"},{"line_number":33,"context_line":"from requests.exceptions import TooManyRedirects"},{"line_number":34,"context_line":"from urihelper import singletonURIHelperInstance"},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_864eae35","line":32,"updated":"2016-05-17 19:09:51.000000000","message":"Same.","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":71,"context_line":""},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"def json_decode(rsp):"},{"line_number":74,"context_line":"    \u0027\u0027\u0027Used to decode the JSON encoded response"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    \u0027\u0027\u0027"},{"line_number":77,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_260d42e8","line":74,"updated":"2016-05-17 19:09:51.000000000","message":"Either do a docstring (\"\"\"all on one line\"\"\") or change to a regular comment line.","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        o \u003d json.loads(rsp, object_hook\u003d_decode_dict)"},{"line_number":81,"context_line":"    except ValueError:"},{"line_number":82,"context_line":"        raise CoprHdError(CoprHdError.VALUE_ERR,"},{"line_number":83,"context_line":"                          \"Failed to recognize JSON payload:\\n[\" + rsp + \"]\")"},{"line_number":84,"context_line":"    return o"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_0610fefe","line":83,"updated":"2016-05-17 19:09:51.000000000","message":"_()","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":134,"context_line":"                                       cookies\u003dcookiejar)"},{"line_number":135,"context_line":"        else:"},{"line_number":136,"context_line":"            raise CoprHdError(CoprHdError.HTTP_ERR,"},{"line_number":137,"context_line":"                              \"Unknown/Unsupported HTTP method: \" +"},{"line_number":138,"context_line":"                              http_method)"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"        if response.status_code \u003d\u003d requests.codes[\u0027ok\u0027] or \\"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_a618121f","line":137,"updated":"2016-05-17 19:09:51.000000000","message":"_()","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":137,"context_line":"                              \"Unknown/Unsupported HTTP method: \" +"},{"line_number":138,"context_line":"                              http_method)"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"        if response.status_code \u003d\u003d requests.codes[\u0027ok\u0027] or \\"},{"line_number":141,"context_line":"                response.status_code \u003d\u003d 202:"},{"line_number":142,"context_line":"            return (response.text, response.headers)"},{"line_number":143,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_c6d71621","line":140,"updated":"2016-05-17 19:09:51.000000000","message":"Wrap in () to get rid of \\","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":147,"context_line":"            errorDetails \u003d \"\""},{"line_number":148,"context_line":"            if \u0027details\u0027 in responseText:"},{"line_number":149,"context_line":"                errorDetails \u003d responseText[\u0027details\u0027]"},{"line_number":150,"context_line":"            error_msg \u003d \"CoprHD internal server error. Error details: \" + \\"},{"line_number":151,"context_line":"                errorDetails"},{"line_number":152,"context_line":"        elif response.status_code \u003d\u003d 401:"},{"line_number":153,"context_line":"            error_msg \u003d \"Access forbidden: Authentication required\""}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_46e4c60b","line":150,"updated":"2016-05-17 19:09:51.000000000","message":"_()","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":150,"context_line":"            error_msg \u003d \"CoprHD internal server error. Error details: \" + \\"},{"line_number":151,"context_line":"                errorDetails"},{"line_number":152,"context_line":"        elif response.status_code \u003d\u003d 401:"},{"line_number":153,"context_line":"            error_msg \u003d \"Access forbidden: Authentication required\""},{"line_number":154,"context_line":"        elif response.status_code \u003d\u003d 403:"},{"line_number":155,"context_line":"            error_msg \u003d \"\""},{"line_number":156,"context_line":"            errorDetails \u003d \"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_26b26206","line":153,"updated":"2016-05-17 19:09:51.000000000","message":"_()","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":166,"context_line":"                error_msg \u003d error_msg + \"Error description: \" + \\"},{"line_number":167,"context_line":"                    errorDescription"},{"line_number":168,"context_line":"            else:"},{"line_number":169,"context_line":"                error_msg \u003d \"Access forbidden: You don\u0027t have\" + \\"},{"line_number":170,"context_line":"                    \" sufficient privileges to perform this operation\""},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"        elif response.status_code \u003d\u003d 404:"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_26a9c290","line":169,"updated":"2016-05-17 19:09:51.000000000","message":"_()","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":172,"context_line":"        elif response.status_code \u003d\u003d 404:"},{"line_number":173,"context_line":"            error_msg \u003d \"Requested resource not found\""},{"line_number":174,"context_line":"        elif response.status_code \u003d\u003d 405:"},{"line_number":175,"context_line":"            error_msg \u003d str(response.text)"},{"line_number":176,"context_line":"        elif response.status_code \u003d\u003d 503:"},{"line_number":177,"context_line":"            error_msg \u003d \"\""},{"line_number":178,"context_line":"            errorDetails \u003d \"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_86986e76","line":175,"updated":"2016-05-17 19:09:51.000000000","message":"Get rid of str()","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":191,"context_line":"                errorDescription \u003d responseText[\u0027description\u0027]"},{"line_number":192,"context_line":"                error_msg \u003d error_msg + \": \" + errorDescription"},{"line_number":193,"context_line":"            else:"},{"line_number":194,"context_line":"                error_msg \u003d \"Service temporarily unavailable:\" + \\"},{"line_number":195,"context_line":"                            \" The server is temporarily unable to \" + \\"},{"line_number":196,"context_line":"                            \" service your request\""},{"line_number":197,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_866fce5e","line":194,"updated":"2016-05-17 19:09:51.000000000","message":"_()","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":198,"context_line":"            error_msg \u003d response.text"},{"line_number":199,"context_line":"            if isinstance(error_msg, unicode):"},{"line_number":200,"context_line":"                error_msg \u003d error_msg.encode(\u0027utf-8\u0027)"},{"line_number":201,"context_line":"        raise CoprHdError(CoprHdError.HTTP_ERR, \"HTTP code: \" +"},{"line_number":202,"context_line":"                          str(response.status_code) +"},{"line_number":203,"context_line":"                          \", \" + response.reason + \" [\" + error_msg + \"]\")"},{"line_number":204,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_86a6aea8","line":201,"updated":"2016-05-17 19:09:51.000000000","message":"_()","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":212,"context_line":""},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"def is_uri(name):"},{"line_number":215,"context_line":"    \u0027\u0027\u0027Checks whether the name is a UUID or not"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"    Returns:"},{"line_number":218,"context_line":"        True if name is UUID, False otherwise"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_26e542db","line":215,"updated":"2016-05-17 19:09:51.000000000","message":"/\u0027\u0027\u0027/\"\"\"/\n\nA few instances of this throughout.","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":338,"context_line":"    return return_value"},{"line_number":339,"context_line":""},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"# This method defines the standard and consistent error message format"},{"line_number":342,"context_line":"# for all CLI error messages."},{"line_number":343,"context_line":"#"},{"line_number":344,"context_line":"# Use it for any error message to be formatted"},{"line_number":345,"context_line":"\u0027\u0027\u0027"},{"line_number":346,"context_line":"@operationType create, update, add, etc"},{"line_number":347,"context_line":"@component storagesystem, filesystem, vpool, etc"},{"line_number":348,"context_line":"@errorCode Error code from the API call"},{"line_number":349,"context_line":"@errorMessage Detailed error message"},{"line_number":350,"context_line":"\u0027\u0027\u0027"},{"line_number":351,"context_line":""},{"line_number":352,"context_line":""},{"line_number":353,"context_line":"def format_err_msg_and_raise(operationType, component,"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_e62cda03","line":350,"range":{"start_line":341,"start_character":1,"end_line":350,"end_character":3},"updated":"2016-05-17 19:09:51.000000000","message":"Move this to be a comment in the method.","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":352,"context_line":""},{"line_number":353,"context_line":"def format_err_msg_and_raise(operationType, component,"},{"line_number":354,"context_line":"                             errorMessage, errorCode):"},{"line_number":355,"context_line":"    formatedErrMsg \u003d \"Error: Failed to \" + operationType + \" \" + component"},{"line_number":356,"context_line":"    if errorMessage.startswith(\"\\\"\\\u0027\") and errorMessage.endswith(\"\\\u0027\\\"\"):"},{"line_number":357,"context_line":"        # stripping the first 2 and last 2 characters, which are quotes."},{"line_number":358,"context_line":"        errorMessage \u003d errorMessage[2:len(errorMessage) - 2]"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_06363e50","line":355,"updated":"2016-05-17 19:09:51.000000000","message":"_()","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":360,"context_line":"    formatedErrMsg \u003d formatedErrMsg + \"\\nReason:\" + errorMessage"},{"line_number":361,"context_line":"    raise CoprHdError(errorCode, formatedErrMsg)"},{"line_number":362,"context_line":""},{"line_number":363,"context_line":"\u0027\u0027\u0027Terminate the script execution with status code"},{"line_number":364,"context_line":""},{"line_number":365,"context_line":"Ignoring the exit status code means the script execution completed successfully"},{"line_number":366,"context_line":"exit_status_code \u003d 0, means success, its a default behavior"},{"line_number":367,"context_line":"exit_status_code \u003d integer greater than zero, abnormal termination"},{"line_number":368,"context_line":"\u0027\u0027\u0027"},{"line_number":369,"context_line":""},{"line_number":370,"context_line":""},{"line_number":371,"context_line":"def exit_gracefully(exit_status_code):"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_66410aa9","line":368,"range":{"start_line":363,"start_character":0,"end_line":368,"end_character":3},"updated":"2016-05-17 19:09:51.000000000","message":"Move this in to the method.","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":398,"context_line":"            resource_uris.append(resource[\"id\"])"},{"line_number":399,"context_line":"        return resource_uris"},{"line_number":400,"context_line":"    else:"},{"line_number":401,"context_line":"        raise CoprHdError(CoprHdError.VALUE_ERR, \"Search URI \" + strUri +"},{"line_number":402,"context_line":"                          \" is not in the expected format, it should end\" +"},{"line_number":403,"context_line":"                          \" with ?tag\u003d{0}\")"},{"line_number":404,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_e6133ab6","line":401,"updated":"2016-05-17 19:09:51.000000000","message":"_()","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":443,"context_line":"                if \"service_error\" in out and \\"},{"line_number":444,"context_line":"                        \"details\" in out[\"service_error\"]:"},{"line_number":445,"context_line":"                    error_message \u003d out[\"service_error\"][\"details\"]"},{"line_number":446,"context_line":"                raise CoprHdError(CoprHdError.VALUE_ERR, \"Task: \" + task_id +"},{"line_number":447,"context_line":"                                  \" is failed with error: \" + error_message)"},{"line_number":448,"context_line":""},{"line_number":449,"context_line":"        if IS_TASK_TIMEOUT:"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_260a6279","line":446,"updated":"2016-05-17 19:09:51.000000000","message":"_()","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":449,"context_line":"        if IS_TASK_TIMEOUT:"},{"line_number":450,"context_line":"            IS_TASK_TIMEOUT \u003d False"},{"line_number":451,"context_line":"            raise CoprHdError(CoprHdError.TIME_OUT,"},{"line_number":452,"context_line":"                              \"Task did not complete in %d secs.\" +"},{"line_number":453,"context_line":"                              \"Operation timed out. Task in CoprHD \" +"},{"line_number":454,"context_line":"                              \"will continue\")"},{"line_number":455,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_060d9e8e","line":452,"updated":"2016-05-17 19:09:51.000000000","message":"_()","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":458,"context_line":""},{"line_number":459,"context_line":"def get_task_by_resourceuri_and_taskId(componentType, resource_uri,"},{"line_number":460,"context_line":"                                       task_id, ipAddr, port):"},{"line_number":461,"context_line":"    \u0027\u0027\u0027Returns the single task details"},{"line_number":462,"context_line":""},{"line_number":463,"context_line":"    \u0027\u0027\u0027"},{"line_number":464,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_6628eae2","line":461,"updated":"2016-05-17 19:09:51.000000000","message":"Change to oneline docstring or change to normal comment.","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"bd073d38a72430ad6548d7dc6510845e75a05ecf","unresolved":false,"context_lines":[{"line_number":222,"context_line":""},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"def is_uri(name):"},{"line_number":225,"context_line":"    \"\"\"Checks whether the name is a UUID or not"},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"    Returns:"},{"line_number":228,"context_line":"        True if name is UUID, False otherwise"}],"source_content_type":"text/x-python","patch_set":3,"id":"bab6814e_035340e3","line":225,"updated":"2016-05-25 20:02:51.000000000","message":"UUID or URI?  Description doesn\u0027t match the function name.","commit_id":"198cdd4fad352b2cc6090eba70d9ca970fb3dab1"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"bd073d38a72430ad6548d7dc6510845e75a05ecf","unresolved":false,"context_lines":[{"line_number":484,"context_line":"    return o"},{"line_number":485,"context_line":""},{"line_number":486,"context_line":""},{"line_number":487,"context_line":"class CoprHdError(Exception):"},{"line_number":488,"context_line":""},{"line_number":489,"context_line":"    \"\"\"Custom exception class used to report logical errors"},{"line_number":490,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"bab6814e_4338a8a0","line":487,"updated":"2016-05-25 20:02:51.000000000","message":"This should extend Cinder.exception.VolumeBackendAPIException rather than Exception.\n\nThis is so that when catching exceptions in the volume manager etc, we can tell it\u0027s a driver-generated exception related to the backend.","commit_id":"198cdd4fad352b2cc6090eba70d9ca970fb3dab1"}],"cinder/volume/drivers/emc/coprhd/helpers/consistencygroup.py":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"2952e79e9b75213eb4d54451b7059b22f2816eb3","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#!/usr/bin/python"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright (c) 2016 EMC Corporation"},{"line_number":4,"context_line":"# All Rights Reserved."}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_c87566fa","line":1,"updated":"2016-05-17 17:54:29.000000000","message":"Remove #!/usr/bin/python header from volume driver files.","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from cinder.volume.drivers.emc.coprhd.helpers import commoncoprhdapi as common"},{"line_number":21,"context_line":"from cinder.volume.drivers.emc.coprhd.helpers.commoncoprhdapi \\"},{"line_number":22,"context_line":"    import CoprHdError"},{"line_number":23,"context_line":"from cinder.volume.drivers.emc.coprhd.helpers.project import Project"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_a675b2fa","line":22,"updated":"2016-05-17 19:09:51.000000000","message":"Don\u0027t import classes directly.","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        return congroups"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    def show(self, name, project, tenant):"},{"line_number":76,"context_line":"        \u0027\u0027\u0027This function will display the consistency group with details"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"        Parameters:"},{"line_number":79,"context_line":"           name : Name of the consistency group"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_e6617a3a","line":76,"updated":"2016-05-17 19:09:51.000000000","message":"Fix docstrings (\"\"\")","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":107,"context_line":"            if congroup and congroup[\u0027name\u0027] \u003d\u003d name:"},{"line_number":108,"context_line":"                return congroup[\u0027id\u0027]"},{"line_number":109,"context_line":"        raise CoprHdError(CoprHdError.NOT_FOUND_ERR,"},{"line_number":110,"context_line":"                          \"Consistency Group \" + name + \": not found\")"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    # Blocks the operation until the task is complete/error out/timeout"},{"line_number":113,"context_line":"    def check_for_sync(self, result, sync, synctimeout\u003d0):"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_c664364a","line":110,"updated":"2016-05-17 19:09:51.000000000","message":"_()","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        else:"},{"line_number":122,"context_line":"            raise CoprHdError("},{"line_number":123,"context_line":"                CoprHdError.SOS_FAILURE_ERR,"},{"line_number":124,"context_line":"                \"error: task list is empty, no task response found\")"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    def create(self, name, project, tenant):"},{"line_number":127,"context_line":"        \u0027\u0027\u0027This function will create the consistency group with the given name"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_2658a289","line":124,"updated":"2016-05-17 19:09:51.000000000","message":"_()","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"2952e79e9b75213eb4d54451b7059b22f2816eb3","unresolved":false,"context_lines":[{"line_number":145,"context_line":"                projuri \u003d projobj.project_query(fullproj)"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"                parms \u003d {\u0027name\u0027: name, \u0027project\u0027: projuri, }"},{"line_number":148,"context_line":"                body \u003d json.dumps(parms)"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"                (s, h) \u003d common.service_json_request("},{"line_number":151,"context_line":"                    self.__ipAddr, self.__port, \"POST\","}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_888b5ec2","line":148,"updated":"2016-05-17 17:54:29.000000000","message":"Use oslo_serialization.jsonutils.dumps for this.","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":154,"context_line":"                o \u003d common.json_decode(s)"},{"line_number":155,"context_line":"                return o"},{"line_number":156,"context_line":"            else:"},{"line_number":157,"context_line":"                raise e"},{"line_number":158,"context_line":"        if status:"},{"line_number":159,"context_line":"            common.format_err_msg_and_raise("},{"line_number":160,"context_line":"                \"create\", \"consistency group\","}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_66562a5d","line":157,"range":{"start_line":157,"start_character":22,"end_line":157,"end_character":23},"updated":"2016-05-17 19:09:51.000000000","message":"Should just be \"raise\", not \"raise e\".","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":157,"context_line":"                raise e"},{"line_number":158,"context_line":"        if status:"},{"line_number":159,"context_line":"            common.format_err_msg_and_raise("},{"line_number":160,"context_line":"                \"create\", \"consistency group\","},{"line_number":161,"context_line":"                \"consistency group with name: \" + name + \" already exists\","},{"line_number":162,"context_line":"                CoprHdError.ENTRY_ALREADY_EXISTS_ERR)"},{"line_number":163,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_a64c92c8","line":160,"updated":"2016-05-17 19:09:51.000000000","message":"_()","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"2952e79e9b75213eb4d54451b7059b22f2816eb3","unresolved":false,"context_lines":[{"line_number":218,"context_line":"            volumes \u003d {\u0027volume\u0027: remove_voluris}"},{"line_number":219,"context_line":"            parms \u003d {\u0027remove_volumes\u0027: volumes}"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"        body \u003d json.dumps(parms)"},{"line_number":222,"context_line":"        (s, h) \u003d common.service_json_request("},{"line_number":223,"context_line":"            self.__ipAddr, self.__port, \"PUT\","},{"line_number":224,"context_line":"            self.URI_CONSISTENCY_GROUPS_INSTANCE.format(uri),"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_e8c02ae2","line":221,"updated":"2016-05-17 17:54:29.000000000","message":"Same re: json.dumps.","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"bd073d38a72430ad6548d7dc6510845e75a05ecf","unresolved":false,"context_lines":[{"line_number":185,"context_line":""},{"line_number":186,"context_line":"        It will update the consistency  group with given volumes"},{"line_number":187,"context_line":"        Parameters:"},{"line_number":188,"context_line":"           name           : Name of the consistency group"},{"line_number":189,"context_line":"           project        : Name of the project path"},{"line_number":190,"context_line":"           tenant         : Container tenant name"},{"line_number":191,"context_line":"           add_volumes    : volumes to be added to the consistency group"}],"source_content_type":"text/x-python","patch_set":3,"id":"bab6814e_a3f6b48c","line":188,"updated":"2016-05-25 20:02:51.000000000","message":"uri?","commit_id":"198cdd4fad352b2cc6090eba70d9ca970fb3dab1"}],"cinder/volume/drivers/emc/coprhd/helpers/exportgroup.py":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"2952e79e9b75213eb4d54451b7059b22f2816eb3","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#!/usr/bin/python"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright (c) 2016 EMC Corporation"},{"line_number":4,"context_line":"# All Rights Reserved."}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_88b23e92","line":1,"updated":"2016-05-17 17:54:29.000000000","message":"Remove #!/usr/bin/python header.","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from cinder.volume.drivers.emc.coprhd.helpers import commoncoprhdapi as common"},{"line_number":21,"context_line":"from cinder.volume.drivers.emc.coprhd.helpers.commoncoprhdapi \\"},{"line_number":22,"context_line":"    import CoprHdError"},{"line_number":23,"context_line":"from cinder.volume.drivers.emc.coprhd.helpers.host import Host"},{"line_number":24,"context_line":"from cinder.volume.drivers.emc.coprhd.helpers.project import Project"},{"line_number":25,"context_line":"from cinder.volume.drivers.emc.coprhd.helpers.virtualarray import VirtualArray"},{"line_number":26,"context_line":"from cinder.volume.drivers.emc.coprhd.helpers.volume import Volume"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_86deaed7","line":23,"updated":"2016-05-17 19:09:51.000000000","message":"Don\u0027t import classes.","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"2952e79e9b75213eb4d54451b7059b22f2816eb3","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        return resChanges"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    def send_json_request(self, exportgroup_uri, param):"},{"line_number":67,"context_line":"        body \u003d json.dumps(param)"},{"line_number":68,"context_line":"        (s, h) \u003d common.service_json_request("},{"line_number":69,"context_line":"            self.__ipAddr, self.__port, \"PUT\","},{"line_number":70,"context_line":"            self.URI_EXPORT_GROUP_UPDATE.format(exportgroup_uri), body)"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_486b36f1","line":67,"updated":"2016-05-17 17:54:29.000000000","message":"Use oslo.serialization jsonutils for this.","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":82,"context_line":"            else:"},{"line_number":83,"context_line":"                raise CoprHdError("},{"line_number":84,"context_line":"                    CoprHdError.SOS_FAILURE_ERR,"},{"line_number":85,"context_line":"                    \"error: task list is empty, no task response found\")"},{"line_number":86,"context_line":"        else:"},{"line_number":87,"context_line":"            return result"},{"line_number":88,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_66046a49","line":85,"updated":"2016-05-17 19:09:51.000000000","message":"_()","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":183,"context_line":"                    try:"},{"line_number":184,"context_line":"                        host_uri \u003d host_obj.query_by_name("},{"line_number":185,"context_line":"                            export_destination)"},{"line_number":186,"context_line":"                    except CoprHdError as e:"},{"line_number":187,"context_line":"                        raise e"},{"line_number":188,"context_line":"                    parms[\u0027hosts\u0027] \u003d [host_uri]"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"                body \u003d json.dumps(parms)"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_468686b9","line":187,"range":{"start_line":186,"start_character":20,"end_line":187,"end_character":31},"updated":"2016-05-17 19:09:51.000000000","message":"Why catching just to raise? Remove this try/except unless there is something additional needed in here. If so, use a different variable than \"e\" as that will hide the outer scoped e.","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":196,"context_line":"                o \u003d common.json_decode(s)"},{"line_number":197,"context_line":"                return o"},{"line_number":198,"context_line":"            else:"},{"line_number":199,"context_line":"                raise e"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"        if status:"},{"line_number":202,"context_line":"            raise CoprHdError("}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_66b2aa95","line":199,"updated":"2016-05-17 19:09:51.000000000","message":"Just \"raise\"","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":201,"context_line":"        if status:"},{"line_number":202,"context_line":"            raise CoprHdError("},{"line_number":203,"context_line":"                CoprHdError.ENTRY_ALREADY_EXISTS_ERR,"},{"line_number":204,"context_line":"                \"Export group with name \" + name +"},{"line_number":205,"context_line":"                \" already exists\")"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"    def exportgroup_query(self, name, project, tenant, varrayuri\u003dNone):"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_a6a81221","line":204,"updated":"2016-05-17 19:09:51.000000000","message":"_()","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":229,"context_line":"                    return exportgroup[\u0027id\u0027]"},{"line_number":230,"context_line":"        raise CoprHdError("},{"line_number":231,"context_line":"            CoprHdError.NOT_FOUND_ERR,"},{"line_number":232,"context_line":"            \"Export Group \" + name + \": not found\")"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"    def exportgroup_add_volumes(self, sync, exportgroupname, tenantname,"},{"line_number":235,"context_line":"                                maxpaths, minpaths, pathsperinitiator,"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_c6671623","line":232,"updated":"2016-05-17 19:09:51.000000000","message":"_()","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":258,"context_line":"                                                 varrayuri)"},{"line_number":259,"context_line":""},{"line_number":260,"context_line":"        # get volume uri"},{"line_number":261,"context_line":"        if(tenantname is None):"},{"line_number":262,"context_line":"            tenantname \u003d \"\""},{"line_number":263,"context_line":"        # List of volumes"},{"line_number":264,"context_line":"        volume_list \u003d []"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_66790ac8","line":261,"updated":"2016-05-17 19:09:51.000000000","message":"Remove ()","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":305,"context_line":"            except Exception:"},{"line_number":306,"context_line":"                raise CoprHdError("},{"line_number":307,"context_line":"                    CoprHdError.CMD_LINE_ERR,"},{"line_number":308,"context_line":"                    \"Please provide valid format volume: lun for parameter \" +"},{"line_number":309,"context_line":"                    resType)"},{"line_number":310,"context_line":"            copy \u003d dict()"},{"line_number":311,"context_line":"            if not len(copyParam):"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_e64b3a85","line":308,"updated":"2016-05-17 19:09:51.000000000","message":"_()","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":311,"context_line":"            if not len(copyParam):"},{"line_number":312,"context_line":"                raise CoprHdError("},{"line_number":313,"context_line":"                    CoprHdError.CMD_LINE_ERR,"},{"line_number":314,"context_line":"                    \"Please provide atleast volume for parameter \" + resType)"},{"line_number":315,"context_line":"            if resType \u003d\u003d \"volumes\":"},{"line_number":316,"context_line":"                fullvolname \u003d tenantname + \"/\" + projectname + \"/\""},{"line_number":317,"context_line":"                fullvolname +\u003d copyParam[0]"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_06459e6d","line":314,"updated":"2016-05-17 19:09:51.000000000","message":"_()","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"bd073d38a72430ad6548d7dc6510845e75a05ecf","unresolved":false,"context_lines":[{"line_number":320,"context_line":"            if not len(copyParam):"},{"line_number":321,"context_line":"                raise common.CoprHdError("},{"line_number":322,"context_line":"                    common.CoprHdError.CMD_LINE_ERR,"},{"line_number":323,"context_line":"                    _(\"Please provide atleast volume for parameter %s\"),"},{"line_number":324,"context_line":"                    resType)"},{"line_number":325,"context_line":"            if resType \u003d\u003d \"volumes\":"},{"line_number":326,"context_line":"                fullvolname \u003d tenantname + \"/\" + projectname + \"/\""}],"source_content_type":"text/x-python","patch_set":3,"id":"bab6814e_c34018a8","line":323,"updated":"2016-05-25 20:02:51.000000000","message":"Add space for \"at least\".","commit_id":"198cdd4fad352b2cc6090eba70d9ca970fb3dab1"}],"cinder/volume/drivers/emc/coprhd/helpers/host.py":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"2952e79e9b75213eb4d54451b7059b22f2816eb3","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#!/usr/bin/python"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright (c) 2016 EMC Corporation"},{"line_number":4,"context_line":"# All Rights Reserved."}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_488176c2","line":1,"updated":"2016-05-17 17:54:29.000000000","message":"Remove #!/usr/bin/python header.","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from cinder.volume.drivers.emc.coprhd.helpers import commoncoprhdapi as common"},{"line_number":20,"context_line":"from cinder.volume.drivers.emc.coprhd.helpers.commoncoprhdapi \\"},{"line_number":21,"context_line":"    import CoprHdError"},{"line_number":22,"context_line":"from cinder.volume.drivers.emc.coprhd.helpers.tenant import Tenant"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class Host(object):"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_86518e32","line":22,"updated":"2016-05-17 19:09:51.000000000","message":"Don\u0027t import classes directly.","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":52,"context_line":"                    return hostUri"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        raise CoprHdError(CoprHdError.NOT_FOUND_ERR,"},{"line_number":55,"context_line":"                          \"Host with name \u0027\" + hostName + \"\u0027 not found\")"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    def list_initiators(self, hostName):"},{"line_number":58,"context_line":"        \u0027\u0027\u0027Lists all initiators for the given host"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_c63556f7","line":55,"updated":"2016-05-17 19:09:51.000000000","message":"_()","commit_id":"d6af7b2a4972402064276171c97990f64460d575"}],"cinder/volume/drivers/emc/coprhd/helpers/project.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from cinder.volume.drivers.emc.coprhd.helpers import commoncoprhdapi as common"},{"line_number":20,"context_line":"from cinder.volume.drivers.emc.coprhd.helpers.commoncoprhdapi \\"},{"line_number":21,"context_line":"    import CoprHdError"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class Project(object):"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_86286e98","line":21,"updated":"2016-05-17 19:09:51.000000000","message":"Don\u0027t import classes directly.","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":63,"context_line":"                           project_detail[\u0027name\u0027] \u003d\u003d project_name):"},{"line_number":64,"context_line":"                            return project_detail[\u0027id\u0027]"},{"line_number":65,"context_line":"            raise CoprHdError(CoprHdError.NOT_FOUND_ERR,"},{"line_number":66,"context_line":"                              \u0027Project: \u0027 + project_name + \u0027 not found\u0027)"},{"line_number":67,"context_line":"        except CoprHdError as e:"},{"line_number":68,"context_line":"            raise e"},{"line_number":69,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_2907d318","line":66,"updated":"2016-05-17 19:09:51.000000000","message":"_()","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":64,"context_line":"                            return project_detail[\u0027id\u0027]"},{"line_number":65,"context_line":"            raise CoprHdError(CoprHdError.NOT_FOUND_ERR,"},{"line_number":66,"context_line":"                              \u0027Project: \u0027 + project_name + \u0027 not found\u0027)"},{"line_number":67,"context_line":"        except CoprHdError as e:"},{"line_number":68,"context_line":"            raise e"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    def project_list(self, tenant_name):"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_4937b7e2","line":67,"updated":"2016-05-17 19:09:51.000000000","message":"Get rid of try/except unless you are actually going to do something here.","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":79,"context_line":"        try:"},{"line_number":80,"context_line":"            tenant_uri \u003d tenant_obj.tenant_query(tenant_name)"},{"line_number":81,"context_line":"        except CoprHdError as e:"},{"line_number":82,"context_line":"            raise e"},{"line_number":83,"context_line":"        (s, h) \u003d common.service_json_request(self.__ipAddr, self.__port, \"GET\","},{"line_number":84,"context_line":"                                             Project.URI_PROJECT_LIST.format("},{"line_number":85,"context_line":"                                                 tenant_uri),"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_295513f9","line":82,"range":{"start_line":82,"start_character":15,"end_line":82,"end_character":16},"updated":"2016-05-17 19:09:51.000000000","message":"Same.","commit_id":"d6af7b2a4972402064276171c97990f64460d575"}],"cinder/volume/drivers/emc/coprhd/helpers/snapshot.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":113,"context_line":"                    storageresType,"},{"line_number":114,"context_line":"                    resuri,"},{"line_number":115,"context_line":"                    uri[\u0027id\u0027])"},{"line_number":116,"context_line":"                if False \u003d\u003d common.get_node_value(snapshot, \u0027inactive\u0027) and \\"},{"line_number":117,"context_line":"                        snapshot[\u0027name\u0027] \u003d\u003d snapshotName:"},{"line_number":118,"context_line":"                    return snapshot[\u0027id\u0027]"},{"line_number":119,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_4965f7de","line":116,"updated":"2016-05-17 19:09:51.000000000","message":"Wrap in () to get rid of \\","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":119,"context_line":""},{"line_number":120,"context_line":"        raise CoprHdError("},{"line_number":121,"context_line":"            CoprHdError.SOS_FAILURE_ERR,"},{"line_number":122,"context_line":"            \"snapshot with the name:\" +"},{"line_number":123,"context_line":"            snapshotName +"},{"line_number":124,"context_line":"            \" Not Found\")"},{"line_number":125,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_499337a3","line":122,"updated":"2016-05-17 19:09:51.000000000","message":"_()","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":162,"context_line":"                    raise CoprHdError("},{"line_number":163,"context_line":"                        CoprHdError.VALUE_ERR,"},{"line_number":164,"context_line":"                        \"Task: \" +"},{"line_number":165,"context_line":"                        task_id +"},{"line_number":166,"context_line":"                        \" is failed with error: \" +"},{"line_number":167,"context_line":"                        error_message)"},{"line_number":168,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_69df1b69","line":165,"updated":"2016-05-17 19:09:51.000000000","message":"_()","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":169,"context_line":"            if self.isTimeout:"},{"line_number":170,"context_line":"                self.isTimeout \u003d False"},{"line_number":171,"context_line":"                raise CoprHdError(CoprHdError.TIME_OUT,"},{"line_number":172,"context_line":"                                  \"Task did not complete in %d secs.\" +"},{"line_number":173,"context_line":"                                  \"Operation timed out. Task in CoprHD \" +"},{"line_number":174,"context_line":"                                  \"will continue\")"},{"line_number":175,"context_line":"        return"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_49da1779","line":172,"updated":"2016-05-17 19:09:51.000000000","message":"_()","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":174,"context_line":"                                  \"will continue\")"},{"line_number":175,"context_line":"        return"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"    def storageResource_query(self,"},{"line_number":178,"context_line":"                              storageresType,"},{"line_number":179,"context_line":"                              volumeName,"},{"line_number":180,"context_line":"                              cgName,"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_e9382ba2","line":177,"range":{"start_line":177,"start_character":8,"end_line":177,"end_character":29},"updated":"2016-05-17 19:09:51.000000000","message":"Should use proper python method naming of storage_resource_query","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":225,"context_line":"            if e.err_code \u003d\u003d CoprHdError.NOT_FOUND_ERR:"},{"line_number":226,"context_line":"                is_snapshot_exist \u003d False"},{"line_number":227,"context_line":"            else:"},{"line_number":228,"context_line":"                raise e"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"        if is_snapshot_exist:"},{"line_number":231,"context_line":"            raise CoprHdError("}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_49f697d7","line":228,"updated":"2016-05-17 19:09:51.000000000","message":"raise","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":230,"context_line":"        if is_snapshot_exist:"},{"line_number":231,"context_line":"            raise CoprHdError("},{"line_number":232,"context_line":"                CoprHdError.ENTRY_ALREADY_EXISTS_ERR,"},{"line_number":233,"context_line":"                \"Snapshot with name \" +"},{"line_number":234,"context_line":"                snaplabel +"},{"line_number":235,"context_line":"                \" already exists under \" +"},{"line_number":236,"context_line":"                typename)"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_89fcffb5","line":233,"updated":"2016-05-17 19:09:51.000000000","message":"_()","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":20466,"name":"Tin Lam","email":"tin@lam.wtf","username":"tinlam"},"change_message_id":"f6074609d970780a4eb4d604307bde848c372870","unresolved":false,"context_lines":[{"line_number":241,"context_line":"            # between source and target volumes"},{"line_number":242,"context_line":"            \u0027create_inactive\u0027: inactive"},{"line_number":243,"context_line":"        }"},{"line_number":244,"context_line":"        if readonly \u003d\u003d \"true\":"},{"line_number":245,"context_line":"            parms[\u0027read_only\u0027] \u003d readonly"},{"line_number":246,"context_line":"        body \u003d json.dumps(parms)"},{"line_number":247,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_433cb82e","line":244,"range":{"start_line":244,"start_character":11,"end_line":244,"end_character":29},"updated":"2016-05-17 18:27:55.000000000","message":"readonly was passed defaulted to a boolean False, this is comparing it to a string \"true\".","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":20466,"name":"Tin Lam","email":"tin@lam.wtf","username":"tinlam"},"change_message_id":"f6074609d970780a4eb4d604307bde848c372870","unresolved":false,"context_lines":[{"line_number":268,"context_line":"        \u0027\u0027\u0027Delete a snapshot by uri"},{"line_number":269,"context_line":""},{"line_number":270,"context_line":"        Parameters:"},{"line_number":271,"context_line":"            otype : block"},{"line_number":272,"context_line":"            suri : Uri of the Snapshot"},{"line_number":273,"context_line":"        \u0027\u0027\u0027"},{"line_number":274,"context_line":"        s \u003d None"},{"line_number":275,"context_line":"        if resourceUri.find(\"Volume\") \u003e 0:"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_636f3c2b","line":272,"range":{"start_line":271,"start_character":11,"end_line":272,"end_character":38},"updated":"2016-05-17 18:27:55.000000000","message":"Can we list out the other parameters (e.g. sync, synctimeout) in the docstring also?","commit_id":"d6af7b2a4972402064276171c97990f64460d575"}],"cinder/volume/drivers/emc/coprhd/helpers/tag.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#!/usr/bin/python"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright (c) 2016 EMC Corporation"},{"line_number":4,"context_line":"# All Rights Reserved."}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_e9d4ab20","line":1,"updated":"2016-05-17 19:09:51.000000000","message":"Remove","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":43,"context_line":"def list_tags(ipaddr, port, resourceUri):"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    if resourceUri.__contains__(\"tag\") is False:"},{"line_number":46,"context_line":"        raise CoprHdError(CoprHdError.VALUE_ERR, \"URI should end with /tag\")"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    (s, h) \u003d common.service_json_request(ipaddr,"},{"line_number":49,"context_line":"                                         port,"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_a9ef43e7","line":46,"updated":"2016-05-17 19:09:51.000000000","message":"_()","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":54,"context_line":"    try:"},{"line_number":55,"context_line":"        o \u003d common.json_decode(s)"},{"line_number":56,"context_line":"        allTags \u003d o[\u0027tag\u0027]"},{"line_number":57,"context_line":"    except CoprHdError as e:"},{"line_number":58,"context_line":"        raise e"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    return allTags"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_09b5afeb","line":57,"updated":"2016-05-17 19:09:51.000000000","message":"Get rd of try/except.","commit_id":"d6af7b2a4972402064276171c97990f64460d575"}],"cinder/volume/drivers/emc/coprhd/helpers/tenant.py":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"2952e79e9b75213eb4d54451b7059b22f2816eb3","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#!/usr/bin/python"},{"line_number":2,"context_line":"# Copyright (c) 2016 EMC Corporation"},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_e84e6a94","line":1,"updated":"2016-05-17 17:54:29.000000000","message":"Remove #!/usr/bin/python header.","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":59,"context_line":"                    return tenant[\u0027id\u0027]"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        raise CoprHdError(CoprHdError.NOT_FOUND_ERR,"},{"line_number":62,"context_line":"                          \"Tenant \" + label + \": not found\")"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def tenant_show(self, label):"},{"line_number":65,"context_line":"        \u0027\u0027\u0027Returns the details of the tenant based on its name"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_49cb3772","line":62,"updated":"2016-05-17 19:09:51.000000000","message":"_()","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":130,"context_line":"                uri \u003d tenant"},{"line_number":131,"context_line":"            if not uri:"},{"line_number":132,"context_line":"                raise CoprHdError(CoprHdError.NOT_FOUND_ERR,"},{"line_number":133,"context_line":"                                  \u0027Tenant \u0027 + tenant + \u0027: not found\u0027)"},{"line_number":134,"context_line":"        return uri"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_69971b48","line":133,"updated":"2016-05-17 19:09:51.000000000","message":"_()","commit_id":"d6af7b2a4972402064276171c97990f64460d575"}],"cinder/volume/drivers/emc/coprhd/helpers/virtualarray.py":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"2952e79e9b75213eb4d54451b7059b22f2816eb3","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#!/usr/bin/python"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright (c) 2016 EMC Corporation"},{"line_number":4,"context_line":"# All Rights Reserved."}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_88fa3e73","line":1,"updated":"2016-05-17 17:54:29.000000000","message":"Remove #!/usr/bin/python header.","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":51,"context_line":"                return varray[\u0027id\u0027]"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"        raise CoprHdError(CoprHdError.NOT_FOUND_ERR,"},{"line_number":54,"context_line":"                          \"varray \" + name + \": not found\")"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def varray_list(self, vdcname\u003dNone):"},{"line_number":57,"context_line":"        \u0027\u0027\u0027Returns all the varrays in a vdc"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_099acf61","line":54,"updated":"2016-05-17 19:09:51.000000000","message":"_()","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"bd073d38a72430ad6548d7dc6510845e75a05ecf","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    def varray_list(self, vdcname\u003dNone):"},{"line_number":51,"context_line":"        \"\"\"Returns all the varrays in a vdc"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"        Parameters:"},{"line_number":54,"context_line":"        Returns:"},{"line_number":55,"context_line":"                JSON payload of varray list"},{"line_number":56,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"bab6814e_a3a19496","line":53,"updated":"2016-05-25 20:02:51.000000000","message":"vdcname parameter not mentioned.","commit_id":"198cdd4fad352b2cc6090eba70d9ca970fb3dab1"}],"cinder/volume/drivers/emc/coprhd/helpers/virtualpool.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#!/usr/bin/python"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright (c) 2016 EMC Corporation"},{"line_number":4,"context_line":"# All Rights Reserved."}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_89a6bfa8","line":1,"updated":"2016-05-17 19:09:51.000000000","message":"Remove","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":82,"context_line":"                if self.vpool_show_uri(vpooltype, vpool[\u0027id\u0027]) is not None:"},{"line_number":83,"context_line":"                    return vpool[\u0027id\u0027]"},{"line_number":84,"context_line":"        # Raise not found exception. as we did not find any active vpool."},{"line_number":85,"context_line":"        raise CoprHdError(CoprHdError.NOT_FOUND_ERR, \"VPool \" + name +"},{"line_number":86,"context_line":"                          \" (\" + vpooltype + \") \" + \": not found\")"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_e9de6b0f","line":85,"updated":"2016-05-17 19:09:51.000000000","message":"_()","commit_id":"d6af7b2a4972402064276171c97990f64460d575"}],"cinder/volume/drivers/emc/coprhd/helpers/volume.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from cinder.volume.drivers.emc.coprhd.helpers.commoncoprhdapi \\"},{"line_number":22,"context_line":"    import CoprHdError"},{"line_number":23,"context_line":"from cinder.volume.drivers.emc.coprhd.helpers import consistencygroup"},{"line_number":24,"context_line":"from cinder.volume.drivers.emc.coprhd.helpers.virtualarray import VirtualArray"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"class Volume(object):"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_69d39b04","line":24,"updated":"2016-05-17 19:09:51.000000000","message":"Don\u0027t import classes directly.","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    URI_VOLUME_CHANGE_VPOOL \u003d URI_VOLUMES + \"/vpool-change\""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    # Protection REST APIs - clone"},{"line_number":42,"context_line":"    URI_VOLUME_PROTECTION_FULLCOPIES \u003d \\"},{"line_number":43,"context_line":"        \u0027/block/volumes/{0}/protection/full-copies\u0027"},{"line_number":44,"context_line":"    URI_SNAPSHOT_PROTECTION_FULLCOPIES \u003d \\"},{"line_number":45,"context_line":"        \u0027/block/snapshots/{0}/protection/full-copies\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_e905cb79","line":42,"updated":"2016-05-17 19:09:51.000000000","message":"Get rid of use of \\","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":179,"context_line":"            else:"},{"line_number":180,"context_line":"                raise CoprHdError("},{"line_number":181,"context_line":"                    CoprHdError.SOS_FAILURE_ERR,"},{"line_number":182,"context_line":"                    \"error: task list is empty, no task response found\")"},{"line_number":183,"context_line":"        else:"},{"line_number":184,"context_line":"            return o"},{"line_number":185,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_29fcf370","line":182,"updated":"2016-05-17 19:09:51.000000000","message":"_()","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":196,"context_line":"            else:"},{"line_number":197,"context_line":"                raise CoprHdError("},{"line_number":198,"context_line":"                    CoprHdError.SOS_FAILURE_ERR,"},{"line_number":199,"context_line":"                    \"error: task list is empty, no task response found\")"},{"line_number":200,"context_line":"        else:"},{"line_number":201,"context_line":"            return result"},{"line_number":202,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_09ff6f66","line":199,"updated":"2016-05-17 19:09:51.000000000","message":"_()","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":215,"context_line":"        (pname, label) \u003d common.get_parent_child_from_xpath(name)"},{"line_number":216,"context_line":"        if not pname:"},{"line_number":217,"context_line":"            raise CoprHdError(CoprHdError.NOT_FOUND_ERR,"},{"line_number":218,"context_line":"                              \"Project name  not specified\")"},{"line_number":219,"context_line":"        uris \u003d self.search_volumes(pname)"},{"line_number":220,"context_line":"        for uri in uris:"},{"line_number":221,"context_line":"            volume \u003d self.show_by_uri(uri)"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_49f5f780","line":218,"updated":"2016-05-17 19:09:51.000000000","message":"_()","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":221,"context_line":"            volume \u003d self.show_by_uri(uri)"},{"line_number":222,"context_line":"            if volume and \u0027name\u0027 in volume and volume[\u0027name\u0027] \u003d\u003d label:"},{"line_number":223,"context_line":"                return volume[\u0027id\u0027]"},{"line_number":224,"context_line":"        raise CoprHdError(CoprHdError.NOT_FOUND_ERR, \"Volume \" +"},{"line_number":225,"context_line":"                          label + \": not found\")"},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"    def get_storageAttributes(self, volumeName, cgName, snapshotName\u003dNone):"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_c92f27f4","line":224,"updated":"2016-05-17 19:09:51.000000000","message":"_()","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":354,"context_line":"            if(vol[\u0027protection\u0027][\u0027full_copies\u0027][\u0027replicaState\u0027] \u003d\u003d"},{"line_number":355,"context_line":"               \u0027SYNCHRONIZED\u0027):"},{"line_number":356,"context_line":"                return True"},{"line_number":357,"context_line":"            else:"},{"line_number":358,"context_line":"                return False"},{"line_number":359,"context_line":"        else:"},{"line_number":360,"context_line":"            return False"},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"    def volume_clone_detach(self, resourceUri, name, sync, synctimeout\u003d0):"},{"line_number":363,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_c9cba71c","line":360,"range":{"start_line":357,"start_character":11,"end_line":360,"end_character":24},"updated":"2016-05-17 19:09:51.000000000","message":"Get rid of else clauses and just have a \"return False\" at the end.","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":409,"context_line":"            volume \u003d self.show_by_uri(uri)"},{"line_number":410,"context_line":"            if volume and \u0027name\u0027 in volume and volume[\u0027name\u0027] \u003d\u003d label:"},{"line_number":411,"context_line":"                return volume"},{"line_number":412,"context_line":"        raise CoprHdError(CoprHdError.NOT_FOUND_ERR, \"Volume \" +"},{"line_number":413,"context_line":"                          str(label) + \": not found\")"},{"line_number":414,"context_line":""},{"line_number":415,"context_line":"    def expand(self, name, new_size, sync\u003dFalse, synctimeout\u003d0):"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_49d857ef","line":412,"updated":"2016-05-17 19:09:51.000000000","message":"_()","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":421,"context_line":"        if new_size_in_gb \u003c\u003d current_size:"},{"line_number":422,"context_line":"            raise CoprHdError("},{"line_number":423,"context_line":"                CoprHdError.VALUE_ERR,"},{"line_number":424,"context_line":"                \"error: Incorrect value of new size: \" + str(new_size_in_gb) +"},{"line_number":425,"context_line":"                \" GB\\nNew size must be greater than current size: \" +"},{"line_number":426,"context_line":"                str(current_size) + \" GB\")"},{"line_number":427,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_89debfd7","line":424,"updated":"2016-05-17 19:09:51.000000000","message":"_()","commit_id":"d6af7b2a4972402064276171c97990f64460d575"}],"cinder/volume/drivers/emc/coprhd/iscsi.py":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"2952e79e9b75213eb4d54451b7059b22f2816eb3","unresolved":false,"context_lines":[{"line_number":20,"context_line":"\"\"\""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"try:"},{"line_number":23,"context_line":"    from oslo_log import log as logging"},{"line_number":24,"context_line":"except ImportError:"},{"line_number":25,"context_line":"    from cinder.openstack.common import log as logging"},{"line_number":26,"context_line":"from cinder.volume import driver"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_836a21b1","line":23,"updated":"2016-05-17 17:54:29.000000000","message":"Only import oslo_log\u0027s logging.","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"2952e79e9b75213eb4d54451b7059b22f2816eb3","unresolved":false,"context_lines":[{"line_number":192,"context_line":"    def terminate_connection(self, volume, connector, **kwargs):"},{"line_number":193,"context_line":"        \"\"\"Disallow connection from connector\"\"\""},{"line_number":194,"context_line":"        initiatorNode \u003d connector[\u0027initiator\u0027]"},{"line_number":195,"context_line":"        initiatorPort \u003d connector[\u0027initiator\u0027]"},{"line_number":196,"context_line":"        protocol \u003d \u0027iSCSI\u0027"},{"line_number":197,"context_line":"        hostname \u003d connector[\u0027host\u0027]"},{"line_number":198,"context_line":"        initPorts \u003d []"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_e3eded25","line":195,"updated":"2016-05-17 17:54:29.000000000","message":"Is this correct?  Same as previous line...","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":210,"context_line":""},{"line_number":211,"context_line":"        If \u0027refresh\u0027 is True, run update the stats first."},{"line_number":212,"context_line":"        \"\"\""},{"line_number":213,"context_line":"        if refresh:"},{"line_number":214,"context_line":"            self.update_volume_stats()"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"        return self._stats"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_e964ab22","line":213,"updated":"2016-05-17 19:09:51.000000000","message":"A lot of duplication between these. Can they both inherit from common and have the common methods implemented there?","commit_id":"d6af7b2a4972402064276171c97990f64460d575"}],"cinder/volume/drivers/emc/coprhd/scaleio.py":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"2952e79e9b75213eb4d54451b7059b22f2816eb3","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from six.moves import urllib"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"try:"},{"line_number":26,"context_line":"    from oslo_log import log as logging"},{"line_number":27,"context_line":"except ImportError:"},{"line_number":28,"context_line":"    from cinder.openstack.common import log as logging"},{"line_number":29,"context_line":"from cinder.volume import driver"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_88e99ee8","line":26,"updated":"2016-05-17 17:54:29.000000000","message":"No need to try/except for importing logging -- just import from oslo_log.","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"2952e79e9b75213eb4d54451b7059b22f2816eb3","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    from cinder.openstack.common import log as logging"},{"line_number":29,"context_line":"from cinder.volume import driver"},{"line_number":30,"context_line":"from cinder.volume.drivers.emc.coprhd import common as CoprHD_common"},{"line_number":31,"context_line":"try:"},{"line_number":32,"context_line":"    from cinder.openstack.common import processutils"},{"line_number":33,"context_line":"except ImportError:"},{"line_number":34,"context_line":"    from oslo_concurrency import processutils"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_a8eaa2d5","line":31,"updated":"2016-05-17 17:54:29.000000000","message":"Same here, just import from oslo_concurrency.","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":98,"context_line":"        \"\"\"Deletes a snapshot.\"\"\""},{"line_number":99,"context_line":"        self.common.delete_snapshot(snapshot)"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    def _scaleio_location(self, ip, target, iqn, lun\u003dNone):"},{"line_number":102,"context_line":"        return \"%s:%s,%s %s %s\" % (ip,"},{"line_number":103,"context_line":"                                   self.configuration.scaleio_port,"},{"line_number":104,"context_line":"                                   target,"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_c93567f7","line":101,"updated":"2016-05-17 19:09:51.000000000","message":"I don\u0027t see this called anywhere. Unless gerrit is messing with my search, could very well be.\n\nSome of these differences actually look like it maybe just needs to be the same driver, but with a different os-brick connector configured. Might be worth looking in to that.","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"6816ed1001639380e73b690ace27f28a34690934","unresolved":false,"context_lines":[{"line_number":192,"context_line":"            self.configuration.coprhd_scaleio_rest_server_username"},{"line_number":193,"context_line":"        properties["},{"line_number":194,"context_line":"            \u0027serverPassword\u0027] \u003d \\"},{"line_number":195,"context_line":"            self.configuration.coprhd_scaleio_rest_server_password"},{"line_number":196,"context_line":"        properties[\u0027iopsLimit\u0027] \u003d None"},{"line_number":197,"context_line":"        properties[\u0027bandwidthLimit\u0027] \u003d None"},{"line_number":198,"context_line":"        properties[\u0027serverToken\u0027] \u003d self.server_token"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_724ee438","line":195,"updated":"2016-05-17 20:33:32.000000000","message":"Use () to avoid \\","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"6816ed1001639380e73b690ace27f28a34690934","unresolved":false,"context_lines":[{"line_number":241,"context_line":"            \u0027serverUsername\u0027] \u003d \\"},{"line_number":242,"context_line":"            self.configuration.coprhd_scaleio_rest_server_username"},{"line_number":243,"context_line":"        properties["},{"line_number":244,"context_line":"            \u0027serverPassword\u0027] \u003d \\"},{"line_number":245,"context_line":"            self.configuration.coprhd_scaleio_rest_server_password"},{"line_number":246,"context_line":"        properties[\u0027serverToken\u0027] \u003d self.server_token"},{"line_number":247,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_1224b85d","line":244,"updated":"2016-05-17 20:33:32.000000000","message":"()","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":283,"context_line":"        cmd \u003d [\u0027drv_cfg\u0027]"},{"line_number":284,"context_line":"        cmd +\u003d [\"--query_version\"]"},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"        LOG.info(_LI(\"ScaleIO sdc query version command: %s\"), str(cmd))"},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"        try:"},{"line_number":289,"context_line":"            (out, err) \u003d utils.execute(*cmd, run_as_root\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_29107358","line":286,"range":{"start_line":286,"start_character":63,"end_line":286,"end_character":66},"updated":"2016-05-17 19:09:51.000000000","message":"Get rid of str()","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":288,"context_line":"        try:"},{"line_number":289,"context_line":"            (out, err) \u003d utils.execute(*cmd, run_as_root\u003dTrue)"},{"line_number":290,"context_line":"            LOG.info(_LI(\"Get ScaleIO version cmd\u003d%(cmd)s:\""},{"line_number":291,"context_line":"                         \"stdout\u003d%(out)s strerr\u003d%(err)s\") %"},{"line_number":292,"context_line":"                     {\u0027cmd\u0027: cmd,"},{"line_number":293,"context_line":"                      \u0027out\u0027: out, \u0027err\u0027: err})"},{"line_number":294,"context_line":"        except processutils.ProcessExecutionError as e:"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_a9046317","line":291,"range":{"start_line":291,"start_character":58,"end_line":291,"end_character":59},"updated":"2016-05-17 19:09:51.000000000","message":"% \u003e ,","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":292,"context_line":"                     {\u0027cmd\u0027: cmd,"},{"line_number":293,"context_line":"                      \u0027out\u0027: out, \u0027err\u0027: err})"},{"line_number":294,"context_line":"        except processutils.ProcessExecutionError as e:"},{"line_number":295,"context_line":"            msg \u003d (\"Error querying sdc version: %s\" % (e.stderr))"},{"line_number":296,"context_line":"            if(\u0027unrecognized option \\\u0027--query_version\\\u0027\u0027 in msg):"},{"line_number":297,"context_line":"                return \u0027R1_30\u0027"},{"line_number":298,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_ec003903","line":295,"updated":"2016-05-17 19:09:51.000000000","message":"_()","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"6816ed1001639380e73b690ace27f28a34690934","unresolved":false,"context_lines":[{"line_number":294,"context_line":"        except processutils.ProcessExecutionError as e:"},{"line_number":295,"context_line":"            msg \u003d (\"Error querying sdc version: %s\" % (e.stderr))"},{"line_number":296,"context_line":"            if(\u0027unrecognized option \\\u0027--query_version\\\u0027\u0027 in msg):"},{"line_number":297,"context_line":"                return \u0027R1_30\u0027"},{"line_number":298,"context_line":"            else:"},{"line_number":299,"context_line":"                LOG.error(msg)"},{"line_number":300,"context_line":"                raise exception.VolumeBackendAPIException(data\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_7298a475","line":297,"updated":"2016-05-17 20:33:32.000000000","message":"Is it safe to assume the version is R1_30 here?  Also please use a constant.","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"6816ed1001639380e73b690ace27f28a34690934","unresolved":false,"context_lines":[{"line_number":300,"context_line":"                raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"        version \u003d out"},{"line_number":303,"context_line":"        msg \u003d (\"Current sdc version: %s\" % (version))"},{"line_number":304,"context_line":"        LOG.info(msg)"},{"line_number":305,"context_line":"        return version"},{"line_number":306,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_3279fc2f","line":303,"updated":"2016-05-17 20:33:32.000000000","message":"Need _LI\n\n%-\u003e,","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"6816ed1001639380e73b690ace27f28a34690934","unresolved":false,"context_lines":[{"line_number":308,"context_line":"                       server_password, sdc_ip):"},{"line_number":309,"context_line":"        ip_encoded \u003d urllib.parse.quote(sdc_ip, \u0027\u0027)"},{"line_number":310,"context_line":"        ip_double_encoded \u003d urllib.parse.quote(ip_encoded, \u0027\u0027)"},{"line_number":311,"context_line":"        request \u003d \"https://\" + server_ip + \":\" + server_port + \\"},{"line_number":312,"context_line":"            \"/api/types/Sdc/instances/getByIp::\" + ip_double_encoded + \"/\""},{"line_number":313,"context_line":"        LOG.info(_LI(\"ScaleIO get client id by ip request: %s\"), request)"},{"line_number":314,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_1297983a","line":311,"updated":"2016-05-17 20:33:32.000000000","message":"Use () to get rid of \\","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":312,"context_line":"            \"/api/types/Sdc/instances/getByIp::\" + ip_double_encoded + \"/\""},{"line_number":313,"context_line":"        LOG.info(_LI(\"ScaleIO get client id by ip request: %s\"), request)"},{"line_number":314,"context_line":""},{"line_number":315,"context_line":"        if(self.configuration.scaleio_verify_server_certificate \u003d\u003d \u0027True\u0027):"},{"line_number":316,"context_line":"            verify_cert \u003d self.scaleio_server_certificate_path"},{"line_number":317,"context_line":"        else:"},{"line_number":318,"context_line":"            verify_cert \u003d False"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_8c16cd46","line":315,"updated":"2016-05-17 19:09:51.000000000","message":"Get rid of ()\nMissing space after the \"if\"","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"6816ed1001639380e73b690ace27f28a34690934","unresolved":false,"context_lines":[{"line_number":320,"context_line":"        version \u003d self._get_scaleio_version()"},{"line_number":321,"context_line":"        r \u003d None"},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"        if \u0027R1_31\u0027 in version or \u0027R2_0\u0027 in version:"},{"line_number":324,"context_line":"            r \u003d requests.get("},{"line_number":325,"context_line":"                request, auth\u003d(server_username, self.server_token),"},{"line_number":326,"context_line":"                verify\u003dverify_cert)"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_72ea64d9","line":323,"updated":"2016-05-17 20:33:32.000000000","message":"Can you use constants for these versions as they are used in multiple places.","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":333,"context_line":""},{"line_number":334,"context_line":"        sdc_id \u003d r.json()"},{"line_number":335,"context_line":"        if (sdc_id \u003d\u003d \u0027\u0027 or sdc_id is None):"},{"line_number":336,"context_line":"            msg \u003d (\"Client with ip %s wasn\u0027t found \" % (sdc_ip))"},{"line_number":337,"context_line":"            LOG.error(msg)"},{"line_number":338,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":339,"context_line":"        if (r.status_code !\u003d 200 and \"errorCode\" in sdc_id):"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_0c213d9e","line":336,"updated":"2016-05-17 19:09:51.000000000","message":"_()","commit_id":"d6af7b2a4972402064276171c97990f64460d575"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8cacebb5e21bbed2825fd3590dce8b3ad1dae12e","unresolved":false,"context_lines":[{"line_number":337,"context_line":"            LOG.error(msg)"},{"line_number":338,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":339,"context_line":"        if (r.status_code !\u003d 200 and \"errorCode\" in sdc_id):"},{"line_number":340,"context_line":"            msg \u003d (\"Error getting sdc id from ip %s: %s \" %"},{"line_number":341,"context_line":"                   (sdc_ip, sdc_id[\u0027message\u0027]))"},{"line_number":342,"context_line":"            LOG.error(msg)"},{"line_number":343,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":1,"id":"dab17558_6c3c49c8","line":340,"updated":"2016-05-17 19:09:51.000000000","message":"_()","commit_id":"d6af7b2a4972402064276171c97990f64460d575"}],"releasenotes/notes/cinder-coprhd-driver-11ebd149ea8610fd.yaml":[{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"bf65c97e15037792fae7f65786874959ef5a2029","unresolved":false,"context_lines":[{"line_number":1,"context_line":"features:"},{"line_number":2,"context_line":"  - Added volume backend drivers for CoprHD FC,iSCSI and Scaleio."}],"source_content_type":"text/x-yaml","patch_set":14,"id":"3aaa91ec_39c27d85","line":2,"updated":"2016-06-27 08:46:30.000000000","message":"nit: Missing space after comma.","commit_id":"0679f71d85adfcfcc033544b9af81dc9ab6f7b02"}]}
