)]}'
{"cinder/tests/unit/test_nimble.py":[{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"c5050524c9287dec49c72656d3217cc102f6d30d","unresolved":false,"context_lines":[{"line_number":12,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":"from cinder.objects.volume import VolumeList"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import sys"},{"line_number":18,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"fa1b9901_3501b238","line":15,"updated":"2015-08-20 16:07:06.000000000","message":"It is better to do \"from cinder import objects\" versus what you are doing here.","commit_id":"4fa93f0fd57eefc5a289b8a7aefbaa86360a704d"},{"author":{"_account_id":16901,"name":"Sonia Ghanekar","email":"sonia.ghanekar@nimblestorage.com","username":"soniaghanekar"},"change_message_id":"b7fa718c66188847bb1aab67b0f82c6f3b181073","unresolved":false,"context_lines":[{"line_number":12,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":"from cinder.objects.volume import VolumeList"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import sys"},{"line_number":18,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"fa1b9901_47f7d48a","line":15,"in_reply_to":"fa1b9901_3501b238","updated":"2015-08-20 19:05:21.000000000","message":"The line above follows the format of just importing the required class. This seems to be the format used throughtout the code.","commit_id":"4fa93f0fd57eefc5a289b8a7aefbaa86360a704d"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"61ca4e0f126aef40e777350f74da9e4d28168610","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from oslo_config import cfg"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from cinder import exception"},{"line_number":22,"context_line":"from cinder.objects.volume import VolumeList"},{"line_number":23,"context_line":"from cinder import test"},{"line_number":24,"context_line":"from cinder.volume.drivers import nimble"},{"line_number":25,"context_line":"from cinder.volume import volume_types"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa1b9901_cd3a2299","line":22,"updated":"2015-08-20 19:26:54.000000000","message":"http://docs.openstack.org/developer/hacking/#imports - Do not import objects, only modules.","commit_id":"c224c672e4ab215edf7c6a7cd4985bc8d6f102f1"},{"author":{"_account_id":16901,"name":"Sonia Ghanekar","email":"sonia.ghanekar@nimblestorage.com","username":"soniaghanekar"},"change_message_id":"a1db78368f3e2b6c170919acf318ca001ea39eea","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from oslo_config import cfg"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from cinder import exception"},{"line_number":22,"context_line":"from cinder.objects.volume import VolumeList"},{"line_number":23,"context_line":"from cinder import test"},{"line_number":24,"context_line":"from cinder.volume.drivers import nimble"},{"line_number":25,"context_line":"from cinder.volume import volume_types"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa1b9901_9edf7239","line":22,"in_reply_to":"fa1b9901_cd3a2299","updated":"2015-08-20 20:49:30.000000000","message":"Thank you for the explanation.\n\nDone.","commit_id":"c224c672e4ab215edf7c6a7cd4985bc8d6f102f1"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f319f9ccadc4f52c57b4a5e093ff4048bebee841","unresolved":false,"context_lines":[{"line_number":516,"context_line":"    @NimbleDriverBaseTestCase.client_mock_decorator(create_configuration("},{"line_number":517,"context_line":"        \u0027nimble\u0027, \u0027nimble_pass\u0027, \u002710.18.108.55\u0027, \u0027default\u0027, \u0027*\u0027))"},{"line_number":518,"context_line":"    def test_manage_volume_positive(self):"},{"line_number":519,"context_line":"        self.mock_client_service.service.getNetConfig.return_value \u003d \\"},{"line_number":520,"context_line":"            FAKE_POSITIVE_NETCONFIG_RESPONSE"},{"line_number":521,"context_line":"        self.mock_client_service.service.getVolInfo.return_value \u003d \\"},{"line_number":522,"context_line":"            FAKE_GET_VOL_INFO_RESPONSE"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_d740e509","line":519,"updated":"2015-08-24 19:44:17.000000000","message":"Please use () instead of \\.  This is only regarding the newly added code in this patch.","commit_id":"c821bb6396cb3a1031f595092279cca934e720cb"},{"author":{"_account_id":16901,"name":"Sonia Ghanekar","email":"sonia.ghanekar@nimblestorage.com","username":"soniaghanekar"},"change_message_id":"000780d2111cc37187028b459d6503766e3529b8","unresolved":false,"context_lines":[{"line_number":516,"context_line":"    @NimbleDriverBaseTestCase.client_mock_decorator(create_configuration("},{"line_number":517,"context_line":"        \u0027nimble\u0027, \u0027nimble_pass\u0027, \u002710.18.108.55\u0027, \u0027default\u0027, \u0027*\u0027))"},{"line_number":518,"context_line":"    def test_manage_volume_positive(self):"},{"line_number":519,"context_line":"        self.mock_client_service.service.getNetConfig.return_value \u003d \\"},{"line_number":520,"context_line":"            FAKE_POSITIVE_NETCONFIG_RESPONSE"},{"line_number":521,"context_line":"        self.mock_client_service.service.getVolInfo.return_value \u003d \\"},{"line_number":522,"context_line":"            FAKE_GET_VOL_INFO_RESPONSE"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_e62215a3","line":519,"in_reply_to":"fa1b9901_d740e509","updated":"2015-08-24 21:56:35.000000000","message":"Done","commit_id":"c821bb6396cb3a1031f595092279cca934e720cb"}],"cinder/volume/drivers/nimble.py":[{"author":{"_account_id":14305,"name":"Yuriy Nesenenko","email":"ynesenenko@mirantis.com","username":"yuriy_n"},"change_message_id":"6fbe619c664b65e0fe258163025155c0c1d0c3e3","unresolved":false,"context_lines":[{"line_number":161,"context_line":"                        UNMANAGE_EDIT_MASK,"},{"line_number":162,"context_line":"                        {\u0027agent-type\u0027: AGENT_TYPE_OPENSTACK})"},{"line_number":163,"context_line":"                except Exception as err:"},{"line_number":164,"context_line":"                    LOG.debug(err.message)"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"    def do_setup(self, context):"},{"line_number":167,"context_line":"        \"\"\"Setup the Nimble Cinder volume driver.\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"fa1b9901_36582332","line":164,"updated":"2015-08-19 13:00:57.000000000","message":"It should be LOG.error(_LE(...))","commit_id":"c37c9e775d5ab5233777ab33adf4bc4f2388eeb1"},{"author":{"_account_id":16901,"name":"Sonia Ghanekar","email":"sonia.ghanekar@nimblestorage.com","username":"soniaghanekar"},"change_message_id":"deccd6da1bee85bf27d6f1be599c9b1615689555","unresolved":false,"context_lines":[{"line_number":161,"context_line":"                        UNMANAGE_EDIT_MASK,"},{"line_number":162,"context_line":"                        {\u0027agent-type\u0027: AGENT_TYPE_OPENSTACK})"},{"line_number":163,"context_line":"                except Exception as err:"},{"line_number":164,"context_line":"                    LOG.debug(err.message)"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"    def do_setup(self, context):"},{"line_number":167,"context_line":"        \"\"\"Setup the Nimble Cinder volume driver.\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"fa1b9901_b4f09d92","line":164,"in_reply_to":"fa1b9901_36582332","updated":"2015-08-19 17:37:02.000000000","message":"We would not want it to be logged as an error. So updated this to LOG.warning(_LW(...))","commit_id":"c37c9e775d5ab5233777ab33adf4bc4f2388eeb1"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"c5050524c9287dec49c72656d3217cc102f6d30d","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":"from cinder import exception"},{"line_number":35,"context_line":"from cinder.i18n import _, _LE, _LI, _LW"},{"line_number":36,"context_line":"from cinder.objects.volume import VolumeList"},{"line_number":37,"context_line":"from cinder.volume.drivers.san import san"},{"line_number":38,"context_line":"from cinder.volume import volume_types"},{"line_number":39,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"fa1b9901_d58f1673","line":36,"updated":"2015-08-20 16:07:06.000000000","message":"It is better to do \"from cinder import objects\" versus what you are doing here.","commit_id":"4fa93f0fd57eefc5a289b8a7aefbaa86360a704d"},{"author":{"_account_id":16901,"name":"Sonia Ghanekar","email":"sonia.ghanekar@nimblestorage.com","username":"soniaghanekar"},"change_message_id":"b7fa718c66188847bb1aab67b0f82c6f3b181073","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":"from cinder import exception"},{"line_number":35,"context_line":"from cinder.i18n import _, _LE, _LI, _LW"},{"line_number":36,"context_line":"from cinder.objects.volume import VolumeList"},{"line_number":37,"context_line":"from cinder.volume.drivers.san import san"},{"line_number":38,"context_line":"from cinder.volume import volume_types"},{"line_number":39,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"fa1b9901_a77cb0ec","line":36,"in_reply_to":"fa1b9901_d58f1673","updated":"2015-08-20 19:05:21.000000000","message":"Just importing the required class is the syntax that has been followed throughout. The above import line seems inline with this.","commit_id":"4fa93f0fd57eefc5a289b8a7aefbaa86360a704d"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"c5050524c9287dec49c72656d3217cc102f6d30d","unresolved":false,"context_lines":[{"line_number":153,"context_line":"        all_vols \u003d VolumeList.get_all(context, None, None, None, None,"},{"line_number":154,"context_line":"                                      {\u0027status\u0027: \u0027available\u0027})"},{"line_number":155,"context_line":"        for vol in all_vols:"},{"line_number":156,"context_line":"            if backend_name in vol[\u0027host\u0027]:"},{"line_number":157,"context_line":"                vol_name \u003d vol[\u0027name\u0027]"},{"line_number":158,"context_line":"                try:"},{"line_number":159,"context_line":"                    self.APIExecutor.edit_vol("}],"source_content_type":"text/x-python","patch_set":3,"id":"fa1b9901_f5e1fa2a","line":156,"updated":"2015-08-20 16:07:06.000000000","message":"Use dot notation - vol.host.","commit_id":"4fa93f0fd57eefc5a289b8a7aefbaa86360a704d"},{"author":{"_account_id":16901,"name":"Sonia Ghanekar","email":"sonia.ghanekar@nimblestorage.com","username":"soniaghanekar"},"change_message_id":"b7fa718c66188847bb1aab67b0f82c6f3b181073","unresolved":false,"context_lines":[{"line_number":153,"context_line":"        all_vols \u003d VolumeList.get_all(context, None, None, None, None,"},{"line_number":154,"context_line":"                                      {\u0027status\u0027: \u0027available\u0027})"},{"line_number":155,"context_line":"        for vol in all_vols:"},{"line_number":156,"context_line":"            if backend_name in vol[\u0027host\u0027]:"},{"line_number":157,"context_line":"                vol_name \u003d vol[\u0027name\u0027]"},{"line_number":158,"context_line":"                try:"},{"line_number":159,"context_line":"                    self.APIExecutor.edit_vol("}],"source_content_type":"text/x-python","patch_set":3,"id":"fa1b9901_47da74e9","line":156,"in_reply_to":"fa1b9901_f5e1fa2a","updated":"2015-08-20 19:05:21.000000000","message":"Done","commit_id":"4fa93f0fd57eefc5a289b8a7aefbaa86360a704d"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"c5050524c9287dec49c72656d3217cc102f6d30d","unresolved":false,"context_lines":[{"line_number":154,"context_line":"                                      {\u0027status\u0027: \u0027available\u0027})"},{"line_number":155,"context_line":"        for vol in all_vols:"},{"line_number":156,"context_line":"            if backend_name in vol[\u0027host\u0027]:"},{"line_number":157,"context_line":"                vol_name \u003d vol[\u0027name\u0027]"},{"line_number":158,"context_line":"                try:"},{"line_number":159,"context_line":"                    self.APIExecutor.edit_vol("},{"line_number":160,"context_line":"                        vol_name,"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa1b9901_55c9c6aa","line":157,"updated":"2015-08-20 16:07:06.000000000","message":"You can remove this line and just use vol.name directly in L160.","commit_id":"4fa93f0fd57eefc5a289b8a7aefbaa86360a704d"},{"author":{"_account_id":16901,"name":"Sonia Ghanekar","email":"sonia.ghanekar@nimblestorage.com","username":"soniaghanekar"},"change_message_id":"b7fa718c66188847bb1aab67b0f82c6f3b181073","unresolved":false,"context_lines":[{"line_number":154,"context_line":"                                      {\u0027status\u0027: \u0027available\u0027})"},{"line_number":155,"context_line":"        for vol in all_vols:"},{"line_number":156,"context_line":"            if backend_name in vol[\u0027host\u0027]:"},{"line_number":157,"context_line":"                vol_name \u003d vol[\u0027name\u0027]"},{"line_number":158,"context_line":"                try:"},{"line_number":159,"context_line":"                    self.APIExecutor.edit_vol("},{"line_number":160,"context_line":"                        vol_name,"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa1b9901_87eacc72","line":157,"in_reply_to":"fa1b9901_55c9c6aa","updated":"2015-08-20 19:05:21.000000000","message":"Done","commit_id":"4fa93f0fd57eefc5a289b8a7aefbaa86360a704d"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"c5050524c9287dec49c72656d3217cc102f6d30d","unresolved":false,"context_lines":[{"line_number":356,"context_line":""},{"line_number":357,"context_line":"        # Check if volume is already managed by Openstack"},{"line_number":358,"context_line":"        if vol_info[\u0027agent-type\u0027] \u003d\u003d AGENT_TYPE_OPENSTACK:"},{"line_number":359,"context_line":"            raise exception.InvalidVolume("},{"line_number":360,"context_line":"                _LE(\u0027Volume %s is already managed by Openstack\u0027)"},{"line_number":361,"context_line":"                % target_vol_name)"},{"line_number":362,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"fa1b9901_f51a5ac5","line":359,"updated":"2015-08-20 16:07:06.000000000","message":"Same comment as below.","commit_id":"4fa93f0fd57eefc5a289b8a7aefbaa86360a704d"},{"author":{"_account_id":16901,"name":"Sonia Ghanekar","email":"sonia.ghanekar@nimblestorage.com","username":"soniaghanekar"},"change_message_id":"b7fa718c66188847bb1aab67b0f82c6f3b181073","unresolved":false,"context_lines":[{"line_number":356,"context_line":""},{"line_number":357,"context_line":"        # Check if volume is already managed by Openstack"},{"line_number":358,"context_line":"        if vol_info[\u0027agent-type\u0027] \u003d\u003d AGENT_TYPE_OPENSTACK:"},{"line_number":359,"context_line":"            raise exception.InvalidVolume("},{"line_number":360,"context_line":"                _LE(\u0027Volume %s is already managed by Openstack\u0027)"},{"line_number":361,"context_line":"                % target_vol_name)"},{"line_number":362,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"fa1b9901_e705c813","line":359,"in_reply_to":"fa1b9901_f51a5ac5","updated":"2015-08-20 19:05:21.000000000","message":"Done","commit_id":"4fa93f0fd57eefc5a289b8a7aefbaa86360a704d"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"c5050524c9287dec49c72656d3217cc102f6d30d","unresolved":false,"context_lines":[{"line_number":362,"context_line":""},{"line_number":363,"context_line":"        # If agent-type is not None then raise exception"},{"line_number":364,"context_line":"        if vol_info[\u0027agent-type\u0027] !\u003d AGENT_TYPE_NONE:"},{"line_number":365,"context_line":"            raise exception.InvalidVolume("},{"line_number":366,"context_line":"                _LE(\u0027Volume should have agent-type set as None\u0027))"},{"line_number":367,"context_line":""},{"line_number":368,"context_line":"        new_vol_name \u003d volume[\u0027name\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa1b9901_d51f16b5","line":365,"updated":"2015-08-20 16:07:06.000000000","message":"Same comment as below.","commit_id":"4fa93f0fd57eefc5a289b8a7aefbaa86360a704d"},{"author":{"_account_id":16901,"name":"Sonia Ghanekar","email":"sonia.ghanekar@nimblestorage.com","username":"soniaghanekar"},"change_message_id":"b7fa718c66188847bb1aab67b0f82c6f3b181073","unresolved":false,"context_lines":[{"line_number":362,"context_line":""},{"line_number":363,"context_line":"        # If agent-type is not None then raise exception"},{"line_number":364,"context_line":"        if vol_info[\u0027agent-type\u0027] !\u003d AGENT_TYPE_NONE:"},{"line_number":365,"context_line":"            raise exception.InvalidVolume("},{"line_number":366,"context_line":"                _LE(\u0027Volume should have agent-type set as None\u0027))"},{"line_number":367,"context_line":""},{"line_number":368,"context_line":"        new_vol_name \u003d volume[\u0027name\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa1b9901_0701dc05","line":365,"in_reply_to":"fa1b9901_d51f16b5","updated":"2015-08-20 19:05:21.000000000","message":"Done","commit_id":"4fa93f0fd57eefc5a289b8a7aefbaa86360a704d"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"c5050524c9287dec49c72656d3217cc102f6d30d","unresolved":false,"context_lines":[{"line_number":368,"context_line":"        new_vol_name \u003d volume[\u0027name\u0027]"},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"        if vol_info[\u0027online\u0027]:"},{"line_number":371,"context_line":"            raise exception.InvalidVolume("},{"line_number":372,"context_line":"                _LE(\u0027Volume %s is online. Set volume to offline for \u0027"},{"line_number":373,"context_line":"                    \u0027managing using Openstack.\u0027) % target_vol_name)"},{"line_number":374,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"fa1b9901_b51862d4","line":371,"updated":"2015-08-20 16:07:06.000000000","message":"This should be:\nmsg \u003d (_(Volume %s is online. Set volume to offline for managing using Openstack.) % target_vol_name)\nexception.InvalidVolume(reason\u003dmsg)\n\nYou should not use _LE() here, but instead use _().","commit_id":"4fa93f0fd57eefc5a289b8a7aefbaa86360a704d"},{"author":{"_account_id":16901,"name":"Sonia Ghanekar","email":"sonia.ghanekar@nimblestorage.com","username":"soniaghanekar"},"change_message_id":"b7fa718c66188847bb1aab67b0f82c6f3b181073","unresolved":false,"context_lines":[{"line_number":368,"context_line":"        new_vol_name \u003d volume[\u0027name\u0027]"},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"        if vol_info[\u0027online\u0027]:"},{"line_number":371,"context_line":"            raise exception.InvalidVolume("},{"line_number":372,"context_line":"                _LE(\u0027Volume %s is online. Set volume to offline for \u0027"},{"line_number":373,"context_line":"                    \u0027managing using Openstack.\u0027) % target_vol_name)"},{"line_number":374,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"fa1b9901_87464c79","line":371,"in_reply_to":"fa1b9901_b51862d4","updated":"2015-08-20 19:05:21.000000000","message":"Done","commit_id":"4fa93f0fd57eefc5a289b8a7aefbaa86360a704d"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"c5050524c9287dec49c72656d3217cc102f6d30d","unresolved":false,"context_lines":[{"line_number":409,"context_line":"        # check agent type"},{"line_number":410,"context_line":"        vol_info \u003d self.APIExecutor.get_vol_info(vol_name)"},{"line_number":411,"context_line":"        if vol_info[\u0027agent-type\u0027] !\u003d AGENT_TYPE_OPENSTACK:"},{"line_number":412,"context_line":"            raise exception.InvalidVolume("},{"line_number":413,"context_line":"                _LI(\u0027Only volumes managed by Openstack can be unmanaged\u0027))"},{"line_number":414,"context_line":""},{"line_number":415,"context_line":"        # update the agent-type to None"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa1b9901_5559c68c","line":412,"updated":"2015-08-20 16:07:06.000000000","message":"Same comment as above.","commit_id":"4fa93f0fd57eefc5a289b8a7aefbaa86360a704d"},{"author":{"_account_id":16901,"name":"Sonia Ghanekar","email":"sonia.ghanekar@nimblestorage.com","username":"soniaghanekar"},"change_message_id":"b7fa718c66188847bb1aab67b0f82c6f3b181073","unresolved":false,"context_lines":[{"line_number":409,"context_line":"        # check agent type"},{"line_number":410,"context_line":"        vol_info \u003d self.APIExecutor.get_vol_info(vol_name)"},{"line_number":411,"context_line":"        if vol_info[\u0027agent-type\u0027] !\u003d AGENT_TYPE_OPENSTACK:"},{"line_number":412,"context_line":"            raise exception.InvalidVolume("},{"line_number":413,"context_line":"                _LI(\u0027Only volumes managed by Openstack can be unmanaged\u0027))"},{"line_number":414,"context_line":""},{"line_number":415,"context_line":"        # update the agent-type to None"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa1b9901_d92c2c9b","line":412,"in_reply_to":"fa1b9901_5559c68c","updated":"2015-08-20 19:05:21.000000000","message":"Done","commit_id":"4fa93f0fd57eefc5a289b8a7aefbaa86360a704d"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"61ca4e0f126aef40e777350f74da9e4d28168610","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":"from cinder import exception"},{"line_number":35,"context_line":"from cinder.i18n import _, _LE, _LI, _LW"},{"line_number":36,"context_line":"from cinder.objects.volume import VolumeList"},{"line_number":37,"context_line":"from cinder.volume.drivers.san import san"},{"line_number":38,"context_line":"from cinder.volume import volume_types"},{"line_number":39,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"fa1b9901_ad432e12","line":36,"updated":"2015-08-20 19:26:54.000000000","message":"http://docs.openstack.org/developer/hacking/#imports - Do not import objects, only modules.","commit_id":"c224c672e4ab215edf7c6a7cd4985bc8d6f102f1"},{"author":{"_account_id":16901,"name":"Sonia Ghanekar","email":"sonia.ghanekar@nimblestorage.com","username":"soniaghanekar"},"change_message_id":"a1db78368f3e2b6c170919acf318ca001ea39eea","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":"from cinder import exception"},{"line_number":35,"context_line":"from cinder.i18n import _, _LE, _LI, _LW"},{"line_number":36,"context_line":"from cinder.objects.volume import VolumeList"},{"line_number":37,"context_line":"from cinder.volume.drivers.san import san"},{"line_number":38,"context_line":"from cinder.volume import volume_types"},{"line_number":39,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"fa1b9901_bebd96d9","line":36,"in_reply_to":"fa1b9901_ad432e12","updated":"2015-08-20 20:49:30.000000000","message":"Thank you for the explanation.\n\nDone.","commit_id":"c224c672e4ab215edf7c6a7cd4985bc8d6f102f1"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"9501a32ef8276af3936e1f0ffe7097d5de87c177","unresolved":false,"context_lines":[{"line_number":148,"context_line":"            raise NimbleDriverException(_(\u0027No suitable discovery ip found\u0027))"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"    def _update_existing_vols_agent_type(self, context):"},{"line_number":151,"context_line":"        LOG.debug(\u0027Updating existing volumes\u0027)"},{"line_number":152,"context_line":"        backend_name \u003d self.configuration.safe_get(\u0027volume_backend_name\u0027)"},{"line_number":153,"context_line":"        all_vols \u003d volume.VolumeList.get_all("},{"line_number":154,"context_line":"            context, None, None, None, None, {\u0027status\u0027: \u0027available\u0027})"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa1b9901_c0a744a5","line":151,"updated":"2015-08-20 21:17:45.000000000","message":"Suggest: \"Updating existing volumes to have agent_type \u003d \u0027Openstack\u0027.\"","commit_id":"2aa7b14d179e87ca354ebf98fe158b1b166e9998"},{"author":{"_account_id":16901,"name":"Sonia Ghanekar","email":"sonia.ghanekar@nimblestorage.com","username":"soniaghanekar"},"change_message_id":"b6967fb45944b7b83cdc3d0cce9c1c756db84943","unresolved":false,"context_lines":[{"line_number":148,"context_line":"            raise NimbleDriverException(_(\u0027No suitable discovery ip found\u0027))"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"    def _update_existing_vols_agent_type(self, context):"},{"line_number":151,"context_line":"        LOG.debug(\u0027Updating existing volumes\u0027)"},{"line_number":152,"context_line":"        backend_name \u003d self.configuration.safe_get(\u0027volume_backend_name\u0027)"},{"line_number":153,"context_line":"        all_vols \u003d volume.VolumeList.get_all("},{"line_number":154,"context_line":"            context, None, None, None, None, {\u0027status\u0027: \u0027available\u0027})"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa1b9901_604d1899","line":151,"in_reply_to":"fa1b9901_c0a744a5","updated":"2015-08-20 21:31:30.000000000","message":"Done","commit_id":"2aa7b14d179e87ca354ebf98fe158b1b166e9998"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"9501a32ef8276af3936e1f0ffe7097d5de87c177","unresolved":false,"context_lines":[{"line_number":335,"context_line":"        if \u0027source-name\u0027 in existing_ref:"},{"line_number":336,"context_line":"            vol_name \u003d existing_ref[\u0027source-name\u0027]"},{"line_number":337,"context_line":"        else:"},{"line_number":338,"context_line":"            reason \u003d _(\"Reference must contain source-name\")"},{"line_number":339,"context_line":"            raise exception.ManageExistingInvalidReference("},{"line_number":340,"context_line":"                existing_ref\u003dexisting_ref,"},{"line_number":341,"context_line":"                reason\u003dreason)"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa1b9901_00c9bc58","line":338,"updated":"2015-08-20 21:17:45.000000000","message":"\".\" at EOL","commit_id":"2aa7b14d179e87ca354ebf98fe158b1b166e9998"},{"author":{"_account_id":16901,"name":"Sonia Ghanekar","email":"sonia.ghanekar@nimblestorage.com","username":"soniaghanekar"},"change_message_id":"b6967fb45944b7b83cdc3d0cce9c1c756db84943","unresolved":false,"context_lines":[{"line_number":335,"context_line":"        if \u0027source-name\u0027 in existing_ref:"},{"line_number":336,"context_line":"            vol_name \u003d existing_ref[\u0027source-name\u0027]"},{"line_number":337,"context_line":"        else:"},{"line_number":338,"context_line":"            reason \u003d _(\"Reference must contain source-name\")"},{"line_number":339,"context_line":"            raise exception.ManageExistingInvalidReference("},{"line_number":340,"context_line":"                existing_ref\u003dexisting_ref,"},{"line_number":341,"context_line":"                reason\u003dreason)"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa1b9901_a080108c","line":338,"in_reply_to":"fa1b9901_00c9bc58","updated":"2015-08-20 21:31:30.000000000","message":"Done","commit_id":"2aa7b14d179e87ca354ebf98fe158b1b166e9998"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"9501a32ef8276af3936e1f0ffe7097d5de87c177","unresolved":false,"context_lines":[{"line_number":355,"context_line":""},{"line_number":356,"context_line":"        # Check if volume is already managed by Openstack"},{"line_number":357,"context_line":"        if vol_info[\u0027agent-type\u0027] \u003d\u003d AGENT_TYPE_OPENSTACK:"},{"line_number":358,"context_line":"            msg \u003d (_(\u0027Volume %s is already managed by Openstack\u0027)"},{"line_number":359,"context_line":"                   % target_vol_name)"},{"line_number":360,"context_line":"            raise exception.InvalidVolume(reason\u003dmsg)"},{"line_number":361,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"fa1b9901_60e0b8cd","line":358,"updated":"2015-08-20 21:17:45.000000000","message":"\".\" at EOL","commit_id":"2aa7b14d179e87ca354ebf98fe158b1b166e9998"},{"author":{"_account_id":16901,"name":"Sonia Ghanekar","email":"sonia.ghanekar@nimblestorage.com","username":"soniaghanekar"},"change_message_id":"b6967fb45944b7b83cdc3d0cce9c1c756db84943","unresolved":false,"context_lines":[{"line_number":355,"context_line":""},{"line_number":356,"context_line":"        # Check if volume is already managed by Openstack"},{"line_number":357,"context_line":"        if vol_info[\u0027agent-type\u0027] \u003d\u003d AGENT_TYPE_OPENSTACK:"},{"line_number":358,"context_line":"            msg \u003d (_(\u0027Volume %s is already managed by Openstack\u0027)"},{"line_number":359,"context_line":"                   % target_vol_name)"},{"line_number":360,"context_line":"            raise exception.InvalidVolume(reason\u003dmsg)"},{"line_number":361,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"fa1b9901_2043a06d","line":358,"in_reply_to":"fa1b9901_60e0b8cd","updated":"2015-08-20 21:31:30.000000000","message":"Done","commit_id":"2aa7b14d179e87ca354ebf98fe158b1b166e9998"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"9501a32ef8276af3936e1f0ffe7097d5de87c177","unresolved":false,"context_lines":[{"line_number":361,"context_line":""},{"line_number":362,"context_line":"        # If agent-type is not None then raise exception"},{"line_number":363,"context_line":"        if vol_info[\u0027agent-type\u0027] !\u003d AGENT_TYPE_NONE:"},{"line_number":364,"context_line":"            msg \u003d (_(\u0027Volume should have agent-type set as None\u0027))"},{"line_number":365,"context_line":"            raise exception.InvalidVolume(reason\u003dmsg)"},{"line_number":366,"context_line":""},{"line_number":367,"context_line":"        new_vol_name \u003d volume[\u0027name\u0027]"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa1b9901_e0d4c8ec","line":364,"updated":"2015-08-20 21:17:45.000000000","message":"\".\" at EOL","commit_id":"2aa7b14d179e87ca354ebf98fe158b1b166e9998"},{"author":{"_account_id":16901,"name":"Sonia Ghanekar","email":"sonia.ghanekar@nimblestorage.com","username":"soniaghanekar"},"change_message_id":"b6967fb45944b7b83cdc3d0cce9c1c756db84943","unresolved":false,"context_lines":[{"line_number":361,"context_line":""},{"line_number":362,"context_line":"        # If agent-type is not None then raise exception"},{"line_number":363,"context_line":"        if vol_info[\u0027agent-type\u0027] !\u003d AGENT_TYPE_NONE:"},{"line_number":364,"context_line":"            msg \u003d (_(\u0027Volume should have agent-type set as None\u0027))"},{"line_number":365,"context_line":"            raise exception.InvalidVolume(reason\u003dmsg)"},{"line_number":366,"context_line":""},{"line_number":367,"context_line":"        new_vol_name \u003d volume[\u0027name\u0027]"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa1b9901_e0612806","line":364,"in_reply_to":"fa1b9901_e0d4c8ec","updated":"2015-08-20 21:31:30.000000000","message":"Done","commit_id":"2aa7b14d179e87ca354ebf98fe158b1b166e9998"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"9501a32ef8276af3936e1f0ffe7097d5de87c177","unresolved":false,"context_lines":[{"line_number":408,"context_line":"        # check agent type"},{"line_number":409,"context_line":"        vol_info \u003d self.APIExecutor.get_vol_info(vol_name)"},{"line_number":410,"context_line":"        if vol_info[\u0027agent-type\u0027] !\u003d AGENT_TYPE_OPENSTACK:"},{"line_number":411,"context_line":"            msg \u003d (_(\u0027Only volumes managed by Openstack can be unmanaged\u0027))"},{"line_number":412,"context_line":"            raise exception.InvalidVolume(reason\u003dmsg)"},{"line_number":413,"context_line":""},{"line_number":414,"context_line":"        # update the agent-type to None"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa1b9901_800aac88","line":411,"updated":"2015-08-20 21:17:45.000000000","message":"\".\" at EOL","commit_id":"2aa7b14d179e87ca354ebf98fe158b1b166e9998"},{"author":{"_account_id":16901,"name":"Sonia Ghanekar","email":"sonia.ghanekar@nimblestorage.com","username":"soniaghanekar"},"change_message_id":"b6967fb45944b7b83cdc3d0cce9c1c756db84943","unresolved":false,"context_lines":[{"line_number":408,"context_line":"        # check agent type"},{"line_number":409,"context_line":"        vol_info \u003d self.APIExecutor.get_vol_info(vol_name)"},{"line_number":410,"context_line":"        if vol_info[\u0027agent-type\u0027] !\u003d AGENT_TYPE_OPENSTACK:"},{"line_number":411,"context_line":"            msg \u003d (_(\u0027Only volumes managed by Openstack can be unmanaged\u0027))"},{"line_number":412,"context_line":"            raise exception.InvalidVolume(reason\u003dmsg)"},{"line_number":413,"context_line":""},{"line_number":414,"context_line":"        # update the agent-type to None"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa1b9901_a057b024","line":411,"in_reply_to":"fa1b9901_800aac88","updated":"2015-08-20 21:31:30.000000000","message":"Done","commit_id":"2aa7b14d179e87ca354ebf98fe158b1b166e9998"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"c865ec4f178dc7907de211fe197aedc9efdb16cf","unresolved":false,"context_lines":[{"line_number":160,"context_line":"                        vol.name,"},{"line_number":161,"context_line":"                        UNMANAGE_EDIT_MASK,"},{"line_number":162,"context_line":"                        {\u0027agent-type\u0027: AGENT_TYPE_OPENSTACK})"},{"line_number":163,"context_line":"                except Exception as err:"},{"line_number":164,"context_line":"                    LOG.warning(_LW(\u0027%s\u0027), err.message)"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"    def do_setup(self, context):"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa1b9901_99aaa9d1","line":163,"updated":"2015-08-24 17:44:00.000000000","message":"Can you catch a more specific exception than Exception?","commit_id":"c323708eb8280bbc606707855adf44c3dd2a627a"},{"author":{"_account_id":16901,"name":"Sonia Ghanekar","email":"sonia.ghanekar@nimblestorage.com","username":"soniaghanekar"},"change_message_id":"bf0999d03e663c453ddc9dae0e8ef08cb09f1902","unresolved":false,"context_lines":[{"line_number":160,"context_line":"                        vol.name,"},{"line_number":161,"context_line":"                        UNMANAGE_EDIT_MASK,"},{"line_number":162,"context_line":"                        {\u0027agent-type\u0027: AGENT_TYPE_OPENSTACK})"},{"line_number":163,"context_line":"                except Exception as err:"},{"line_number":164,"context_line":"                    LOG.warning(_LW(\u0027%s\u0027), err.message)"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"    def do_setup(self, context):"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa1b9901_0aecf527","line":163,"in_reply_to":"fa1b9901_99aaa9d1","updated":"2015-08-24 19:17:00.000000000","message":"Done","commit_id":"c323708eb8280bbc606707855adf44c3dd2a627a"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"c865ec4f178dc7907de211fe197aedc9efdb16cf","unresolved":false,"context_lines":[{"line_number":161,"context_line":"                        UNMANAGE_EDIT_MASK,"},{"line_number":162,"context_line":"                        {\u0027agent-type\u0027: AGENT_TYPE_OPENSTACK})"},{"line_number":163,"context_line":"                except Exception as err:"},{"line_number":164,"context_line":"                    LOG.warning(_LW(\u0027%s\u0027), err.message)"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"    def do_setup(self, context):"},{"line_number":167,"context_line":"        \"\"\"Setup the Nimble Cinder volume driver.\"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"fa1b9901_f99ac5c4","line":164,"updated":"2015-08-24 17:44:00.000000000","message":"If you do another update it would be good to include additional information in this log message. Something like:\n\nError updating %(name)s: %(err)s\n\nUnless sufficient text is included in the exception from edit_vol that would have all of the details.","commit_id":"c323708eb8280bbc606707855adf44c3dd2a627a"},{"author":{"_account_id":16901,"name":"Sonia Ghanekar","email":"sonia.ghanekar@nimblestorage.com","username":"soniaghanekar"},"change_message_id":"bf0999d03e663c453ddc9dae0e8ef08cb09f1902","unresolved":false,"context_lines":[{"line_number":161,"context_line":"                        UNMANAGE_EDIT_MASK,"},{"line_number":162,"context_line":"                        {\u0027agent-type\u0027: AGENT_TYPE_OPENSTACK})"},{"line_number":163,"context_line":"                except Exception as err:"},{"line_number":164,"context_line":"                    LOG.warning(_LW(\u0027%s\u0027), err.message)"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"    def do_setup(self, context):"},{"line_number":167,"context_line":"        \"\"\"Setup the Nimble Cinder volume driver.\"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"fa1b9901_aac949ae","line":164,"in_reply_to":"fa1b9901_f99ac5c4","updated":"2015-08-24 19:17:00.000000000","message":"Done","commit_id":"c323708eb8280bbc606707855adf44c3dd2a627a"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"c865ec4f178dc7907de211fe197aedc9efdb16cf","unresolved":false,"context_lines":[{"line_number":352,"context_line":"                  \u0027Target_volume_name \u003d %s\u0027, target_vol_name)"},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"        # Get vol info from the volume name obtained from the reference"},{"line_number":355,"context_line":"        vol_info \u003d self.APIExecutor.get_vol_info(target_vol_name)"},{"line_number":356,"context_line":""},{"line_number":357,"context_line":"        # Check if volume is already managed by Openstack"},{"line_number":358,"context_line":"        if vol_info[\u0027agent-type\u0027] \u003d\u003d AGENT_TYPE_OPENSTACK:"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa1b9901_b9f20d05","line":355,"updated":"2015-08-24 17:44:00.000000000","message":"What if the requested volume is not found on the backend?","commit_id":"c323708eb8280bbc606707855adf44c3dd2a627a"},{"author":{"_account_id":16901,"name":"Sonia Ghanekar","email":"sonia.ghanekar@nimblestorage.com","username":"soniaghanekar"},"change_message_id":"bf0999d03e663c453ddc9dae0e8ef08cb09f1902","unresolved":false,"context_lines":[{"line_number":352,"context_line":"                  \u0027Target_volume_name \u003d %s\u0027, target_vol_name)"},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"        # Get vol info from the volume name obtained from the reference"},{"line_number":355,"context_line":"        vol_info \u003d self.APIExecutor.get_vol_info(target_vol_name)"},{"line_number":356,"context_line":""},{"line_number":357,"context_line":"        # Check if volume is already managed by Openstack"},{"line_number":358,"context_line":"        if vol_info[\u0027agent-type\u0027] \u003d\u003d AGENT_TYPE_OPENSTACK:"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa1b9901_8a3a4533","line":355,"in_reply_to":"fa1b9901_b9f20d05","updated":"2015-08-24 19:17:00.000000000","message":"Each API call uses a decorator \u0027_response_checker\u0027 that checks the error codes from the API response. It logs and raises a NimbleAPIException if any error exists.\n\nI have already added a unit test for this scenario (test_manage_volume_with_nonexistant_volume)","commit_id":"c323708eb8280bbc606707855adf44c3dd2a627a"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"c865ec4f178dc7907de211fe197aedc9efdb16cf","unresolved":false,"context_lines":[{"line_number":373,"context_line":"            raise exception.InvalidVolume(reason\u003dmsg)"},{"line_number":374,"context_line":""},{"line_number":375,"context_line":"        # edit the volume"},{"line_number":376,"context_line":"        self.APIExecutor.edit_vol(target_vol_name,"},{"line_number":377,"context_line":"                                  MANAGE_EDIT_MASK,"},{"line_number":378,"context_line":"                                  {\u0027name\u0027: new_vol_name,"},{"line_number":379,"context_line":"                                   \u0027agent-type\u0027: AGENT_TYPE_OPENSTACK})"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa1b9901_99f4e9cf","line":376,"updated":"2015-08-24 17:44:00.000000000","message":"Handle edit failure?","commit_id":"c323708eb8280bbc606707855adf44c3dd2a627a"},{"author":{"_account_id":16901,"name":"Sonia Ghanekar","email":"sonia.ghanekar@nimblestorage.com","username":"soniaghanekar"},"change_message_id":"bf0999d03e663c453ddc9dae0e8ef08cb09f1902","unresolved":false,"context_lines":[{"line_number":373,"context_line":"            raise exception.InvalidVolume(reason\u003dmsg)"},{"line_number":374,"context_line":""},{"line_number":375,"context_line":"        # edit the volume"},{"line_number":376,"context_line":"        self.APIExecutor.edit_vol(target_vol_name,"},{"line_number":377,"context_line":"                                  MANAGE_EDIT_MASK,"},{"line_number":378,"context_line":"                                  {\u0027name\u0027: new_vol_name,"},{"line_number":379,"context_line":"                                   \u0027agent-type\u0027: AGENT_TYPE_OPENSTACK})"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa1b9901_6adb31ee","line":376,"in_reply_to":"fa1b9901_99f4e9cf","updated":"2015-08-24 19:17:00.000000000","message":"In this case too a NimbleAPIException is raised in case of an error.","commit_id":"c323708eb8280bbc606707855adf44c3dd2a627a"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"c865ec4f178dc7907de211fe197aedc9efdb16cf","unresolved":false,"context_lines":[{"line_number":379,"context_line":"                                   \u0027agent-type\u0027: AGENT_TYPE_OPENSTACK})"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":"        # make the volume online after rename"},{"line_number":382,"context_line":"        self.APIExecutor.online_vol(new_vol_name, True, ignore_list\u003d["},{"line_number":383,"context_line":"            \u0027SM-enoent\u0027])"},{"line_number":384,"context_line":""},{"line_number":385,"context_line":"        return self._get_model_info(new_vol_name)"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa1b9901_59fe51af","line":382,"updated":"2015-08-24 17:44:00.000000000","message":"Any failure from this that should be handled?","commit_id":"c323708eb8280bbc606707855adf44c3dd2a627a"},{"author":{"_account_id":16901,"name":"Sonia Ghanekar","email":"sonia.ghanekar@nimblestorage.com","username":"soniaghanekar"},"change_message_id":"bf0999d03e663c453ddc9dae0e8ef08cb09f1902","unresolved":false,"context_lines":[{"line_number":379,"context_line":"                                   \u0027agent-type\u0027: AGENT_TYPE_OPENSTACK})"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":"        # make the volume online after rename"},{"line_number":382,"context_line":"        self.APIExecutor.online_vol(new_vol_name, True, ignore_list\u003d["},{"line_number":383,"context_line":"            \u0027SM-enoent\u0027])"},{"line_number":384,"context_line":""},{"line_number":385,"context_line":"        return self._get_model_info(new_vol_name)"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa1b9901_caea7d74","line":382,"in_reply_to":"fa1b9901_59fe51af","updated":"2015-08-24 19:17:00.000000000","message":"This too is handled with a NimbleAPIException.","commit_id":"c323708eb8280bbc606707855adf44c3dd2a627a"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"c865ec4f178dc7907de211fe197aedc9efdb16cf","unresolved":false,"context_lines":[{"line_number":395,"context_line":"        # get vol info"},{"line_number":396,"context_line":"        vol_info \u003d self.APIExecutor.get_vol_info(target_vol_name)"},{"line_number":397,"context_line":""},{"line_number":398,"context_line":"        LOG.debug(\"volume size \u003d {0} volume-name {1}\"."},{"line_number":399,"context_line":"                  format(vol_info[\u0027size\u0027], vol_info[\u0027name\u0027]))"},{"line_number":400,"context_line":""},{"line_number":401,"context_line":"        return int(vol_info[\u0027size\u0027] / units.Gi)"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa1b9901_391a7d18","line":398,"updated":"2015-08-24 17:44:00.000000000","message":"Please don\u0027t format string to pass in to logger. Pass template string and formatting variables as arguments in to the logger so formatting is only performed if the log level is at debug.","commit_id":"c323708eb8280bbc606707855adf44c3dd2a627a"},{"author":{"_account_id":16901,"name":"Sonia Ghanekar","email":"sonia.ghanekar@nimblestorage.com","username":"soniaghanekar"},"change_message_id":"bf0999d03e663c453ddc9dae0e8ef08cb09f1902","unresolved":false,"context_lines":[{"line_number":395,"context_line":"        # get vol info"},{"line_number":396,"context_line":"        vol_info \u003d self.APIExecutor.get_vol_info(target_vol_name)"},{"line_number":397,"context_line":""},{"line_number":398,"context_line":"        LOG.debug(\"volume size \u003d {0} volume-name {1}\"."},{"line_number":399,"context_line":"                  format(vol_info[\u0027size\u0027], vol_info[\u0027name\u0027]))"},{"line_number":400,"context_line":""},{"line_number":401,"context_line":"        return int(vol_info[\u0027size\u0027] / units.Gi)"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa1b9901_8a8485b1","line":398,"in_reply_to":"fa1b9901_391a7d18","updated":"2015-08-24 19:17:00.000000000","message":"Done","commit_id":"c323708eb8280bbc606707855adf44c3dd2a627a"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"c865ec4f178dc7907de211fe197aedc9efdb16cf","unresolved":false,"context_lines":[{"line_number":413,"context_line":"            raise exception.InvalidVolume(reason\u003dmsg)"},{"line_number":414,"context_line":""},{"line_number":415,"context_line":"        # update the agent-type to None"},{"line_number":416,"context_line":"        self.APIExecutor.edit_vol(vol_name,"},{"line_number":417,"context_line":"                                  UNMANAGE_EDIT_MASK,"},{"line_number":418,"context_line":"                                  {\u0027agent-type\u0027: AGENT_TYPE_NONE})"},{"line_number":419,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"fa1b9901_19d69927","line":416,"updated":"2015-08-24 17:44:00.000000000","message":"Failure handling?","commit_id":"c323708eb8280bbc606707855adf44c3dd2a627a"},{"author":{"_account_id":16901,"name":"Sonia Ghanekar","email":"sonia.ghanekar@nimblestorage.com","username":"soniaghanekar"},"change_message_id":"bf0999d03e663c453ddc9dae0e8ef08cb09f1902","unresolved":false,"context_lines":[{"line_number":413,"context_line":"            raise exception.InvalidVolume(reason\u003dmsg)"},{"line_number":414,"context_line":""},{"line_number":415,"context_line":"        # update the agent-type to None"},{"line_number":416,"context_line":"        self.APIExecutor.edit_vol(vol_name,"},{"line_number":417,"context_line":"                                  UNMANAGE_EDIT_MASK,"},{"line_number":418,"context_line":"                                  {\u0027agent-type\u0027: AGENT_TYPE_NONE})"},{"line_number":419,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"fa1b9901_8aab251e","line":416,"in_reply_to":"fa1b9901_19d69927","updated":"2015-08-24 19:17:00.000000000","message":"Decorator \u0027_response_checker\u0027 raises NimbleAPIException in case of an error.","commit_id":"c323708eb8280bbc606707855adf44c3dd2a627a"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"c865ec4f178dc7907de211fe197aedc9efdb16cf","unresolved":false,"context_lines":[{"line_number":418,"context_line":"                                  {\u0027agent-type\u0027: AGENT_TYPE_NONE})"},{"line_number":419,"context_line":""},{"line_number":420,"context_line":"        # offline the volume"},{"line_number":421,"context_line":"        self.APIExecutor.online_vol(vol_name, False, ignore_list\u003d["},{"line_number":422,"context_line":"            \u0027SM-enoent\u0027])"},{"line_number":423,"context_line":""},{"line_number":424,"context_line":"    def _create_igroup_for_initiator(self, initiator_name):"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa1b9901_b9dc4d47","line":421,"updated":"2015-08-24 17:44:00.000000000","message":"Failure handling?","commit_id":"c323708eb8280bbc606707855adf44c3dd2a627a"},{"author":{"_account_id":16901,"name":"Sonia Ghanekar","email":"sonia.ghanekar@nimblestorage.com","username":"soniaghanekar"},"change_message_id":"bf0999d03e663c453ddc9dae0e8ef08cb09f1902","unresolved":false,"context_lines":[{"line_number":418,"context_line":"                                  {\u0027agent-type\u0027: AGENT_TYPE_NONE})"},{"line_number":419,"context_line":""},{"line_number":420,"context_line":"        # offline the volume"},{"line_number":421,"context_line":"        self.APIExecutor.online_vol(vol_name, False, ignore_list\u003d["},{"line_number":422,"context_line":"            \u0027SM-enoent\u0027])"},{"line_number":423,"context_line":""},{"line_number":424,"context_line":"    def _create_igroup_for_initiator(self, initiator_name):"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa1b9901_ca6fddfa","line":421,"in_reply_to":"fa1b9901_b9dc4d47","updated":"2015-08-24 19:17:00.000000000","message":"Same as above.","commit_id":"c323708eb8280bbc606707855adf44c3dd2a627a"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f319f9ccadc4f52c57b4a5e093ff4048bebee841","unresolved":false,"context_lines":[{"line_number":359,"context_line":"        if vol_info[\u0027agent-type\u0027] \u003d\u003d AGENT_TYPE_OPENSTACK:"},{"line_number":360,"context_line":"            msg \u003d (_(\u0027Volume %s is already managed by Openstack.\u0027)"},{"line_number":361,"context_line":"                   % target_vol_name)"},{"line_number":362,"context_line":"            raise exception.InvalidVolume(reason\u003dmsg)"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"        # If agent-type is not None then raise exception"},{"line_number":365,"context_line":"        if vol_info[\u0027agent-type\u0027] !\u003d AGENT_TYPE_NONE:"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_17badde1","line":362,"updated":"2015-08-24 19:44:17.000000000","message":"Please use exception.ManageExistingAlreadyManaged(volume_ref\u003dxxx)","commit_id":"c821bb6396cb3a1031f595092279cca934e720cb"},{"author":{"_account_id":16901,"name":"Sonia Ghanekar","email":"sonia.ghanekar@nimblestorage.com","username":"soniaghanekar"},"change_message_id":"000780d2111cc37187028b459d6503766e3529b8","unresolved":false,"context_lines":[{"line_number":359,"context_line":"        if vol_info[\u0027agent-type\u0027] \u003d\u003d AGENT_TYPE_OPENSTACK:"},{"line_number":360,"context_line":"            msg \u003d (_(\u0027Volume %s is already managed by Openstack.\u0027)"},{"line_number":361,"context_line":"                   % target_vol_name)"},{"line_number":362,"context_line":"            raise exception.InvalidVolume(reason\u003dmsg)"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"        # If agent-type is not None then raise exception"},{"line_number":365,"context_line":"        if vol_info[\u0027agent-type\u0027] !\u003d AGENT_TYPE_NONE:"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_e60bf522","line":362,"in_reply_to":"fa1b9901_17badde1","updated":"2015-08-24 21:56:35.000000000","message":"Done","commit_id":"c821bb6396cb3a1031f595092279cca934e720cb"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f319f9ccadc4f52c57b4a5e093ff4048bebee841","unresolved":false,"context_lines":[{"line_number":389,"context_line":"        \"\"\"Return size of an existing volume\"\"\""},{"line_number":390,"context_line":""},{"line_number":391,"context_line":"        LOG.debug(\u0027Volume name : %s  External ref : %s\u0027,"},{"line_number":392,"context_line":"                  volume[\u0027name\u0027], external_ref)"},{"line_number":393,"context_line":""},{"line_number":394,"context_line":"        target_vol_name \u003d self._get_existing_volume_ref_name(external_ref)"},{"line_number":395,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_37ecc128","line":392,"updated":"2015-08-24 19:44:17.000000000","message":"Please use named interpolation.","commit_id":"c821bb6396cb3a1031f595092279cca934e720cb"},{"author":{"_account_id":16901,"name":"Sonia Ghanekar","email":"sonia.ghanekar@nimblestorage.com","username":"soniaghanekar"},"change_message_id":"000780d2111cc37187028b459d6503766e3529b8","unresolved":false,"context_lines":[{"line_number":389,"context_line":"        \"\"\"Return size of an existing volume\"\"\""},{"line_number":390,"context_line":""},{"line_number":391,"context_line":"        LOG.debug(\u0027Volume name : %s  External ref : %s\u0027,"},{"line_number":392,"context_line":"                  volume[\u0027name\u0027], external_ref)"},{"line_number":393,"context_line":""},{"line_number":394,"context_line":"        target_vol_name \u003d self._get_existing_volume_ref_name(external_ref)"},{"line_number":395,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_a60e5d30","line":392,"in_reply_to":"fa1b9901_37ecc128","updated":"2015-08-24 21:56:35.000000000","message":"Done","commit_id":"c821bb6396cb3a1031f595092279cca934e720cb"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f319f9ccadc4f52c57b4a5e093ff4048bebee841","unresolved":false,"context_lines":[{"line_number":397,"context_line":"        vol_info \u003d self.APIExecutor.get_vol_info(target_vol_name)"},{"line_number":398,"context_line":""},{"line_number":399,"context_line":"        LOG.debug(\u0027Volume size : %s  Volume-name : %s\u0027,"},{"line_number":400,"context_line":"                  vol_info[\u0027size\u0027], vol_info[\u0027name\u0027])"},{"line_number":401,"context_line":""},{"line_number":402,"context_line":"        return int(vol_info[\u0027size\u0027] / units.Gi)"},{"line_number":403,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_97dd8d72","line":400,"updated":"2015-08-24 19:44:17.000000000","message":"Same","commit_id":"c821bb6396cb3a1031f595092279cca934e720cb"},{"author":{"_account_id":16901,"name":"Sonia Ghanekar","email":"sonia.ghanekar@nimblestorage.com","username":"soniaghanekar"},"change_message_id":"000780d2111cc37187028b459d6503766e3529b8","unresolved":false,"context_lines":[{"line_number":397,"context_line":"        vol_info \u003d self.APIExecutor.get_vol_info(target_vol_name)"},{"line_number":398,"context_line":""},{"line_number":399,"context_line":"        LOG.debug(\u0027Volume size : %s  Volume-name : %s\u0027,"},{"line_number":400,"context_line":"                  vol_info[\u0027size\u0027], vol_info[\u0027name\u0027])"},{"line_number":401,"context_line":""},{"line_number":402,"context_line":"        return int(vol_info[\u0027size\u0027] / units.Gi)"},{"line_number":403,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_461d0165","line":400,"in_reply_to":"fa1b9901_97dd8d72","updated":"2015-08-24 21:56:35.000000000","message":"Done","commit_id":"c821bb6396cb3a1031f595092279cca934e720cb"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"acf83817748192f14b93fec192515688fa703681","unresolved":false,"context_lines":[{"line_number":389,"context_line":"    def manage_existing_get_size(self, volume, external_ref):"},{"line_number":390,"context_line":"        \"\"\"Return size of an existing volume\"\"\""},{"line_number":391,"context_line":""},{"line_number":392,"context_line":"        LOG.debug(\u0027Volume name : %(name)s  External ref : %(ref)s\u0027 %"},{"line_number":393,"context_line":"                  {\u0027name\u0027: volume[\u0027name\u0027], \u0027ref\u0027: external_ref})"},{"line_number":394,"context_line":""},{"line_number":395,"context_line":"        target_vol_name \u003d self._get_existing_volume_ref_name(external_ref)"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa1b9901_d204687f","line":392,"updated":"2015-08-25 02:11:10.000000000","message":"Change % to , to pass in the formatting variables as arguments to the logger.","commit_id":"cad280af11f1dab6511cbf9958bb299070c86cf0"},{"author":{"_account_id":16901,"name":"Sonia Ghanekar","email":"sonia.ghanekar@nimblestorage.com","username":"soniaghanekar"},"change_message_id":"c294df05db6d50d8c8c84e0331177b43f4ebfff7","unresolved":false,"context_lines":[{"line_number":389,"context_line":"    def manage_existing_get_size(self, volume, external_ref):"},{"line_number":390,"context_line":"        \"\"\"Return size of an existing volume\"\"\""},{"line_number":391,"context_line":""},{"line_number":392,"context_line":"        LOG.debug(\u0027Volume name : %(name)s  External ref : %(ref)s\u0027 %"},{"line_number":393,"context_line":"                  {\u0027name\u0027: volume[\u0027name\u0027], \u0027ref\u0027: external_ref})"},{"line_number":394,"context_line":""},{"line_number":395,"context_line":"        target_vol_name \u003d self._get_existing_volume_ref_name(external_ref)"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa1b9901_21976249","line":392,"in_reply_to":"fa1b9901_d204687f","updated":"2015-08-25 19:37:42.000000000","message":"Done","commit_id":"cad280af11f1dab6511cbf9958bb299070c86cf0"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"acf83817748192f14b93fec192515688fa703681","unresolved":false,"context_lines":[{"line_number":397,"context_line":"        # get vol info"},{"line_number":398,"context_line":"        vol_info \u003d self.APIExecutor.get_vol_info(target_vol_name)"},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"        LOG.debug(\u0027Volume size : %(size)s  Volume-name : %(name)s\u0027 %"},{"line_number":401,"context_line":"                  {\u0027size\u0027: vol_info[\u0027size\u0027], \u0027name\u0027: vol_info[\u0027name\u0027]})"},{"line_number":402,"context_line":""},{"line_number":403,"context_line":"        return int(vol_info[\u0027size\u0027] / units.Gi)"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa1b9901_b201b46c","line":400,"updated":"2015-08-25 02:11:10.000000000","message":"% \u003d\u003e ,","commit_id":"cad280af11f1dab6511cbf9958bb299070c86cf0"},{"author":{"_account_id":16901,"name":"Sonia Ghanekar","email":"sonia.ghanekar@nimblestorage.com","username":"soniaghanekar"},"change_message_id":"c294df05db6d50d8c8c84e0331177b43f4ebfff7","unresolved":false,"context_lines":[{"line_number":397,"context_line":"        # get vol info"},{"line_number":398,"context_line":"        vol_info \u003d self.APIExecutor.get_vol_info(target_vol_name)"},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"        LOG.debug(\u0027Volume size : %(size)s  Volume-name : %(name)s\u0027 %"},{"line_number":401,"context_line":"                  {\u0027size\u0027: vol_info[\u0027size\u0027], \u0027name\u0027: vol_info[\u0027name\u0027]})"},{"line_number":402,"context_line":""},{"line_number":403,"context_line":"        return int(vol_info[\u0027size\u0027] / units.Gi)"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa1b9901_019a5e6e","line":400,"in_reply_to":"fa1b9901_b201b46c","updated":"2015-08-25 19:37:42.000000000","message":"Done","commit_id":"cad280af11f1dab6511cbf9958bb299070c86cf0"}]}
