)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"affb577eb3efca4ded080440688d56fef41d247c","unresolved":false,"context_lines":[{"line_number":7,"context_line":"VNX: New Cinder driver in Newton"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Previous VNX driver implemented all array operations"},{"line_number":10,"context_line":"in driver, which compliated the drive logic."},{"line_number":11,"context_line":"In this patch, we leverage a library named"},{"line_number":12,"context_line":"storops to interact with VNX array."},{"line_number":13,"context_line":"New changes below:"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"dab17558_b33bb7ea","line":10,"updated":"2016-05-14 04:35:33.000000000","message":"s/compliated/complicated","commit_id":"523531e128f177874921d8dc993372049bd068af"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"7f9c9ea5f478894a0d3e03d8807bdad61146bb47","unresolved":false,"context_lines":[{"line_number":7,"context_line":"VNX: New Cinder driver in Newton"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Previous VNX driver implemented all array operations"},{"line_number":10,"context_line":"in driver, which compliated the drive logic."},{"line_number":11,"context_line":"In this patch, we leverage a library named"},{"line_number":12,"context_line":"storops to interact with VNX array."},{"line_number":13,"context_line":"New changes below:"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"dab17558_f2624fd7","line":10,"in_reply_to":"dab17558_b33bb7ea","updated":"2016-05-15 07:27:04.000000000","message":"Done","commit_id":"523531e128f177874921d8dc993372049bd068af"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"af2475aebe05c4dcd9eb32c1ef422767f8a4d208","unresolved":false,"context_lines":[{"line_number":18,"context_line":"cinder.volume.drivers.emc.vnx.driver.EMCVNXDriver"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"* A new driver option is introduced:"},{"line_number":21,"context_line":"vnx_io_protocol \u003d \u003cFC|iSCSI\u003e"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"* some existing bugs are no longer existed."},{"line_number":24,"context_line":"Co-authored-By: Tang Tina \u003ctina.tang@emc.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":23,"id":"7aa08908_0d31bb05","line":21,"updated":"2016-06-07 13:19:32.000000000","message":"Actually storage_protocol sounds better, or transport_protocol.  These are general protocol, not VNX specific.  It should go to volume/driver.py.","commit_id":"88f464e193168eae7e8b64acfe30485227f38f7b"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"7b772ba91991041eb80d003be94104cdba857f7b","unresolved":false,"context_lines":[{"line_number":18,"context_line":"cinder.volume.drivers.emc.vnx.driver.EMCVNXDriver"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"* A new driver option is introduced:"},{"line_number":21,"context_line":"vnx_io_protocol \u003d \u003cFC|iSCSI\u003e"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"* some existing bugs are no longer existed."},{"line_number":24,"context_line":"Co-authored-By: Tang Tina \u003ctina.tang@emc.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":23,"id":"7aa08908_48f8a7c3","line":21,"in_reply_to":"7aa08908_0d31bb05","updated":"2016-06-08 03:37:48.000000000","message":"I have moved storage_protocol to volume/driver.py","commit_id":"88f464e193168eae7e8b64acfe30485227f38f7b"}],"cinder/tests/unit/volume/drivers/emc/vnx/__init__.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"affb577eb3efca4ded080440688d56fef41d247c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2012 - 2015 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":12,"id":"dab17558_ae0fd2df","line":1,"updated":"2016-05-14 04:35:33.000000000","message":"According to the following guideline, it should just be 2012, which was the year when the code was first published.  The range is not needed.  If you really want to keep the range, 2015 should be changed to 2016 now.\n\nhttps://wiki.openstack.org/wiki/Documentation/Copyright","commit_id":"523531e128f177874921d8dc993372049bd068af"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"7f9c9ea5f478894a0d3e03d8807bdad61146bb47","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2012 - 2015 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":12,"id":"dab17558_7f83c8cc","line":1,"in_reply_to":"dab17558_ae0fd2df","updated":"2016-05-15 07:27:04.000000000","message":"Thanks for the reminder, maybe keep only \"2016\" is more accurate, since this file is first published in 2016.","commit_id":"523531e128f177874921d8dc993372049bd068af"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"492644467fe0b5a6d3be33d38cd5b729ea4e2d75","unresolved":false,"context_lines":[{"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":""},{"line_number":16,"context_line":"import mock"},{"line_number":17,"context_line":"import sys"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from cinder.tests.unit.volume.drivers.emc.vnx import fake_exception"}],"source_content_type":"text/x-python","patch_set":38,"id":"3aaa91ec_5baccc8b","line":16,"updated":"2016-06-30 15:28:27.000000000","message":"mock should actually be below in a separate third party library import group, but not important enough to block on. Keep in mind for future updates to include correcting that.","commit_id":"1b255e3e9d5a64504463f1c905b216a7b1cb6a2e"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"17c6671e7ab9d27c92231a243ce916d064c9a4ad","unresolved":false,"context_lines":[{"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":""},{"line_number":16,"context_line":"import mock"},{"line_number":17,"context_line":"import sys"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from cinder.tests.unit.volume.drivers.emc.vnx import fake_exception"}],"source_content_type":"text/x-python","patch_set":38,"id":"3aaa91ec_c1ea74d7","line":16,"in_reply_to":"3aaa91ec_5baccc8b","updated":"2016-07-01 02:18:04.000000000","message":"Sure, Thanks for reminding. Will do","commit_id":"1b255e3e9d5a64504463f1c905b216a7b1cb6a2e"}],"cinder/tests/unit/volume/drivers/emc/vnx/fake_enum.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"affb577eb3efca4ded080440688d56fef41d247c","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    def verify(cls, value, allow_none\u003dTrue):"},{"line_number":29,"context_line":"        if value is None and not allow_none:"},{"line_number":30,"context_line":"            raise ValueError("},{"line_number":31,"context_line":"                \u0027None is not allowed here for {}.\u0027.format(cls.__name__))"},{"line_number":32,"context_line":"        elif value is not None and not isinstance(value, cls):"},{"line_number":33,"context_line":"            raise ValueError(\u0027{} is not an instance of {}.\u0027"},{"line_number":34,"context_line":"                             .format(value, cls.__name__))"}],"source_content_type":"text/x-python","patch_set":12,"id":"dab17558_132ba395","line":31,"updated":"2016-05-14 04:35:33.000000000","message":"The message is in an exception. So should be _(\u0027xxxx\u0027).","commit_id":"523531e128f177874921d8dc993372049bd068af"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"7f9c9ea5f478894a0d3e03d8807bdad61146bb47","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    def verify(cls, value, allow_none\u003dTrue):"},{"line_number":29,"context_line":"        if value is None and not allow_none:"},{"line_number":30,"context_line":"            raise ValueError("},{"line_number":31,"context_line":"                \u0027None is not allowed here for {}.\u0027.format(cls.__name__))"},{"line_number":32,"context_line":"        elif value is not None and not isinstance(value, cls):"},{"line_number":33,"context_line":"            raise ValueError(\u0027{} is not an instance of {}.\u0027"},{"line_number":34,"context_line":"                             .format(value, cls.__name__))"}],"source_content_type":"text/x-python","patch_set":12,"id":"dab17558_5f3ec4da","line":31,"in_reply_to":"dab17558_132ba395","updated":"2016-05-15 07:27:04.000000000","message":"Done","commit_id":"523531e128f177874921d8dc993372049bd068af"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"affb577eb3efca4ded080440688d56fef41d247c","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        option_map \u003d cls.get_option_map()"},{"line_number":43,"context_line":"        if option_map is None:"},{"line_number":44,"context_line":"            raise NotImplementedError(\u0027Option map is not defined for {}.\u0027"},{"line_number":45,"context_line":"                                      .format(cls.__name__))"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        ret \u003d option_map.get(value, None)"},{"line_number":48,"context_line":"        if ret is None:"}],"source_content_type":"text/x-python","patch_set":12,"id":"dab17558_531b6b80","line":45,"updated":"2016-05-14 04:35:33.000000000","message":"Same","commit_id":"523531e128f177874921d8dc993372049bd068af"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"7f9c9ea5f478894a0d3e03d8807bdad61146bb47","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        option_map \u003d cls.get_option_map()"},{"line_number":43,"context_line":"        if option_map is None:"},{"line_number":44,"context_line":"            raise NotImplementedError(\u0027Option map is not defined for {}.\u0027"},{"line_number":45,"context_line":"                                      .format(cls.__name__))"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        ret \u003d option_map.get(value, None)"},{"line_number":48,"context_line":"        if ret is None:"}],"source_content_type":"text/x-python","patch_set":12,"id":"dab17558_bf2530c3","line":45,"in_reply_to":"dab17558_531b6b80","updated":"2016-05-15 07:27:04.000000000","message":"Done","commit_id":"523531e128f177874921d8dc993372049bd068af"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"affb577eb3efca4ded080440688d56fef41d247c","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        ret \u003d option_map.get(value, None)"},{"line_number":48,"context_line":"        if ret is None:"},{"line_number":49,"context_line":"            raise ValueError(\"{} is not a valid option for {}.\""},{"line_number":50,"context_line":"                             .format(value, cls.__name__))"},{"line_number":51,"context_line":"        return ret"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":12,"id":"dab17558_73182f85","line":50,"updated":"2016-05-14 04:35:33.000000000","message":"Same as above. Also keyword parameters should be used for multiple variables in a message.\n\nPlease fix the same issues in other places.","commit_id":"523531e128f177874921d8dc993372049bd068af"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"1ea0ad6b8167a7379bb1f02116888de666b60ae5","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"#    under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from __future__ import unicode_literals"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import enum"},{"line_number":20,"context_line":"import logging"}],"source_content_type":"text/x-python","patch_set":21,"id":"9abb7d3a_9b5a0a29","line":17,"updated":"2016-06-03 18:24:18.000000000","message":"Why is this here?  I don\u0027t see any Unicode literals being used.","commit_id":"e0cbaa8db0d9a53123a80b22b01452a83a22e3bd"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"5a1e0730fda9df5dba1d5d9f594871a2ff018ab7","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"#    under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from __future__ import unicode_literals"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import enum"},{"line_number":20,"context_line":"import logging"}],"source_content_type":"text/x-python","patch_set":21,"id":"7aa08908_b11ae415","line":17,"in_reply_to":"9abb7d3a_9b5a0a29","updated":"2016-06-06 05:34:21.000000000","message":"Exactly, will remove it","commit_id":"e0cbaa8db0d9a53123a80b22b01452a83a22e3bd"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"1ea0ad6b8167a7379bb1f02116888de666b60ae5","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from cinder.i18n import _"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"class Enum(enum.Enum):"}],"source_content_type":"text/x-python","patch_set":21,"id":"9abb7d3a_db3c92c1","line":25,"updated":"2016-06-03 18:24:18.000000000","message":"Do not need LOG in tests.","commit_id":"e0cbaa8db0d9a53123a80b22b01452a83a22e3bd"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"5a1e0730fda9df5dba1d5d9f594871a2ff018ab7","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from cinder.i18n import _"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"class Enum(enum.Enum):"}],"source_content_type":"text/x-python","patch_set":21,"id":"7aa08908_9117e8ec","line":25,"in_reply_to":"9abb7d3a_db3c92c1","updated":"2016-06-06 05:34:21.000000000","message":"Removed","commit_id":"e0cbaa8db0d9a53123a80b22b01452a83a22e3bd"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"1ea0ad6b8167a7379bb1f02116888de666b60ae5","unresolved":false,"context_lines":[{"line_number":25,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"class Enum(enum.Enum):"},{"line_number":29,"context_line":"    @classmethod"},{"line_number":30,"context_line":"    def verify(cls, value, allow_none\u003dTrue):"},{"line_number":31,"context_line":"        if value is None and not allow_none:"}],"source_content_type":"text/x-python","patch_set":21,"id":"9abb7d3a_4059d359","line":28,"updated":"2016-06-03 18:24:18.000000000","message":"Do we really need a whole extension to the Enum class for tests?","commit_id":"e0cbaa8db0d9a53123a80b22b01452a83a22e3bd"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"5a1e0730fda9df5dba1d5d9f594871a2ff018ab7","unresolved":false,"context_lines":[{"line_number":25,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"class Enum(enum.Enum):"},{"line_number":29,"context_line":"    @classmethod"},{"line_number":30,"context_line":"    def verify(cls, value, allow_none\u003dTrue):"},{"line_number":31,"context_line":"        if value is None and not allow_none:"}],"source_content_type":"text/x-python","patch_set":21,"id":"7aa08908_c3c5235c","line":28,"in_reply_to":"9abb7d3a_4059d359","updated":"2016-06-06 05:34:21.000000000","message":"Yes, we need this class iterable so it can be used like line 38-40.","commit_id":"e0cbaa8db0d9a53123a80b22b01452a83a22e3bd"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"59de7b35dfc1a3923d0379226d68ede4b0faeff0","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# coding\u003dutf-8"},{"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":32,"id":"5a9d85d2_bf40d557","line":1,"updated":"2016-06-20 18:03:12.000000000","message":"Should remove this # coding header, as it isn\u0027t necessary.","commit_id":"65273faf58061ab53ec38b14a6ad3bb90ff60753"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"ea5a4923d1fc1412cade864150236ae67d40f3c3","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# coding\u003dutf-8"},{"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":32,"id":"5a9d85d2_a54a76c3","line":1,"in_reply_to":"5a9d85d2_bf40d557","updated":"2016-06-21 03:23:52.000000000","message":"Done","commit_id":"65273faf58061ab53ec38b14a6ad3bb90ff60753"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"492644467fe0b5a6d3be33d38cd5b729ea4e2d75","unresolved":false,"context_lines":[{"line_number":16,"context_line":"import enum"},{"line_number":17,"context_line":"import six"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from cinder.i18n import _"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"class Enum(enum.Enum):"}],"source_content_type":"text/x-python","patch_set":38,"id":"3aaa91ec_1bfb647a","line":19,"updated":"2016-06-30 15:28:27.000000000","message":"We should not be translating text in test fakes.","commit_id":"1b255e3e9d5a64504463f1c905b216a7b1cb6a2e"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"17c6671e7ab9d27c92231a243ce916d064c9a4ad","unresolved":false,"context_lines":[{"line_number":16,"context_line":"import enum"},{"line_number":17,"context_line":"import six"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from cinder.i18n import _"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"class Enum(enum.Enum):"}],"source_content_type":"text/x-python","patch_set":38,"id":"3aaa91ec_41b5e4ea","line":19,"in_reply_to":"3aaa91ec_1bfb647a","updated":"2016-07-01 02:18:04.000000000","message":"Done","commit_id":"1b255e3e9d5a64504463f1c905b216a7b1cb6a2e"}],"cinder/tests/unit/volume/drivers/emc/vnx/fake_exception.py":[{"author":{"_account_id":13206,"name":"Cedric Zhuang","email":"cedric.zhuang@emc.com","username":"CedricZhuang"},"change_message_id":"a6db3c3699376f9e804cfa09c109e6a4b7e25c00","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"class StoropsException(Exception):"},{"line_number":29,"context_line":"    \"\"\"Base Storops Exception"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    To correctly use this class, inherit from it and define"},{"line_number":32,"context_line":"    a \u0027message\u0027 property. That message will be formatted"}],"source_content_type":"text/x-python","patch_set":4,"id":"dab17558_ae772e01","line":29,"updated":"2016-05-06 04:00:52.000000000","message":"You could remove the implementations and only keep the class declaration.  They are only fakes.","commit_id":"8d5e3263088d34b113b2fbe5d462f87f59ed2dcc"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"2075a114552aa1a84c619d7af5e18b4b8ca2a0bb","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"class StoropsException(Exception):"},{"line_number":29,"context_line":"    \"\"\"Base Storops Exception"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    To correctly use this class, inherit from it and define"},{"line_number":32,"context_line":"    a \u0027message\u0027 property. That message will be formatted"}],"source_content_type":"text/x-python","patch_set":4,"id":"dab17558_6c8a3bc1","line":29,"in_reply_to":"dab17558_ae772e01","updated":"2016-05-07 16:44:49.000000000","message":"Done","commit_id":"8d5e3263088d34b113b2fbe5d462f87f59ed2dcc"},{"author":{"_account_id":13206,"name":"Cedric Zhuang","email":"cedric.zhuang@emc.com","username":"CedricZhuang"},"change_message_id":"a6db3c3699376f9e804cfa09c109e6a4b7e25c00","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        return kwargs"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"def to_hex(number):"},{"line_number":81,"context_line":"    if number is not None:"},{"line_number":82,"context_line":"        h \u003d hex(number)"},{"line_number":83,"context_line":"        if h.endswith(\u0027L\u0027):"}],"source_content_type":"text/x-python","patch_set":4,"id":"dab17558_ce64324b","line":80,"updated":"2016-05-06 04:00:52.000000000","message":"These utility functions could be removed.","commit_id":"8d5e3263088d34b113b2fbe5d462f87f59ed2dcc"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"2075a114552aa1a84c619d7af5e18b4b8ca2a0bb","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        return kwargs"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"def to_hex(number):"},{"line_number":81,"context_line":"    if number is not None:"},{"line_number":82,"context_line":"        h \u003d hex(number)"},{"line_number":83,"context_line":"        if h.endswith(\u0027L\u0027):"}],"source_content_type":"text/x-python","patch_set":4,"id":"dab17558_4c85b7ab","line":80,"in_reply_to":"dab17558_ce64324b","updated":"2016-05-07 16:44:49.000000000","message":"Done","commit_id":"8d5e3263088d34b113b2fbe5d462f87f59ed2dcc"},{"author":{"_account_id":13206,"name":"Cedric Zhuang","email":"cedric.zhuang@emc.com","username":"CedricZhuang"},"change_message_id":"a6db3c3699376f9e804cfa09c109e6a4b7e25c00","unresolved":false,"context_lines":[{"line_number":88,"context_line":""},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"class VNXException(StoropsException):"},{"line_number":91,"context_line":"    @classmethod"},{"line_number":92,"context_line":"    def get_error_message(cls):"},{"line_number":93,"context_line":"        ret \u003d None"},{"line_number":94,"context_line":"        if hasattr(cls, \u0027error_code\u0027):"}],"source_content_type":"text/x-python","patch_set":4,"id":"dab17558_4e516262","line":91,"updated":"2016-05-06 04:00:52.000000000","message":"Detail implementation could be removed.","commit_id":"8d5e3263088d34b113b2fbe5d462f87f59ed2dcc"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"2075a114552aa1a84c619d7af5e18b4b8ca2a0bb","unresolved":false,"context_lines":[{"line_number":88,"context_line":""},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"class VNXException(StoropsException):"},{"line_number":91,"context_line":"    @classmethod"},{"line_number":92,"context_line":"    def get_error_message(cls):"},{"line_number":93,"context_line":"        ret \u003d None"},{"line_number":94,"context_line":"        if hasattr(cls, \u0027error_code\u0027):"}],"source_content_type":"text/x-python","patch_set":4,"id":"dab17558_ac9423e2","line":91,"in_reply_to":"dab17558_4e516262","updated":"2016-05-07 16:44:49.000000000","message":"Done","commit_id":"8d5e3263088d34b113b2fbe5d462f87f59ed2dcc"},{"author":{"_account_id":13206,"name":"Cedric Zhuang","email":"cedric.zhuang@emc.com","username":"CedricZhuang"},"change_message_id":"a6db3c3699376f9e804cfa09c109e6a4b7e25c00","unresolved":false,"context_lines":[{"line_number":105,"context_line":"        return ret"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"def _extract_output(output):"},{"line_number":109,"context_line":"    if output is not None and not isinstance(output, six.string_types):"},{"line_number":110,"context_line":"        if hasattr(output, \u0027message\u0027):"},{"line_number":111,"context_line":"            output \u003d output.message"}],"source_content_type":"text/x-python","patch_set":4,"id":"dab17558_8e4b4ab0","line":108,"updated":"2016-05-06 04:00:52.000000000","message":"Could be removed.","commit_id":"8d5e3263088d34b113b2fbe5d462f87f59ed2dcc"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"2075a114552aa1a84c619d7af5e18b4b8ca2a0bb","unresolved":false,"context_lines":[{"line_number":105,"context_line":"        return ret"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"def _extract_output(output):"},{"line_number":109,"context_line":"    if output is not None and not isinstance(output, six.string_types):"},{"line_number":110,"context_line":"        if hasattr(output, \u0027message\u0027):"},{"line_number":111,"context_line":"            output \u003d output.message"}],"source_content_type":"text/x-python","patch_set":4,"id":"dab17558_8c8f9fcb","line":108,"in_reply_to":"dab17558_8e4b4ab0","updated":"2016-05-07 16:44:49.000000000","message":"Done","commit_id":"8d5e3263088d34b113b2fbe5d462f87f59ed2dcc"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"c98db4bc98a12cb14bf8037874beb99b49199a7a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# coding\u003dutf-8"},{"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":28,"id":"7aa08908_110b6a25","line":1,"updated":"2016-06-13 16:11:14.000000000","message":"utf-8 header doesn\u0027t appear to be needed for this file.","commit_id":"fbfdb5dba19bff2c7734a63a78a151d6252b2dba"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"8dd0537c0375b8e089c00b959863c1e68d317413","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# coding\u003dutf-8"},{"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":28,"id":"7aa08908_3ae90cb8","line":1,"in_reply_to":"7aa08908_110b6a25","updated":"2016-06-14 05:54:49.000000000","message":"Done","commit_id":"fbfdb5dba19bff2c7734a63a78a151d6252b2dba"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"59de7b35dfc1a3923d0379226d68ede4b0faeff0","unresolved":false,"context_lines":[{"line_number":27,"context_line":"               \" and available in path.\")"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"class VNXObjectNotFound(VNXException):"},{"line_number":31,"context_line":"    message \u003d \"object is not found.  {err}\""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"5a9d85d2_22696abf","line":30,"updated":"2016-06-20 18:03:12.000000000","message":"This exception class is not used anywhere.  Please remove.","commit_id":"65273faf58061ab53ec38b14a6ad3bb90ff60753"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"ea5a4923d1fc1412cade864150236ae67d40f3c3","unresolved":false,"context_lines":[{"line_number":27,"context_line":"               \" and available in path.\")"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"class VNXObjectNotFound(VNXException):"},{"line_number":31,"context_line":"    message \u003d \"object is not found.  {err}\""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"5a9d85d2_68cfc37f","line":30,"in_reply_to":"5a9d85d2_22696abf","updated":"2016-06-21 03:23:52.000000000","message":"Done","commit_id":"65273faf58061ab53ec38b14a6ad3bb90ff60753"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"59de7b35dfc1a3923d0379226d68ede4b0faeff0","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    message \u003d \"object is not found.  {err}\""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"class OptionMissingError(VNXException):"},{"line_number":35,"context_line":"    pass"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"5a9d85d2_ffa09d92","line":34,"updated":"2016-06-20 18:03:12.000000000","message":"This exception class is not used anywhere.  Please remove.","commit_id":"65273faf58061ab53ec38b14a6ad3bb90ff60753"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"ea5a4923d1fc1412cade864150236ae67d40f3c3","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    message \u003d \"object is not found.  {err}\""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"class OptionMissingError(VNXException):"},{"line_number":35,"context_line":"    pass"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"5a9d85d2_68d22302","line":34,"in_reply_to":"5a9d85d2_ffa09d92","updated":"2016-06-21 03:23:52.000000000","message":"Done","commit_id":"65273faf58061ab53ec38b14a6ad3bb90ff60753"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"59de7b35dfc1a3923d0379226d68ede4b0faeff0","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    message \u003d \u0027commands are not supported by the target storage system\u0027"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"class VNXSystemError(VNXException):"},{"line_number":49,"context_line":"    pass"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"5a9d85d2_023f0eb5","line":48,"updated":"2016-06-20 18:03:12.000000000","message":"Not used anywhere.","commit_id":"65273faf58061ab53ec38b14a6ad3bb90ff60753"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"ea5a4923d1fc1412cade864150236ae67d40f3c3","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    message \u003d \u0027commands are not supported by the target storage system\u0027"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"class VNXSystemError(VNXException):"},{"line_number":49,"context_line":"    pass"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"5a9d85d2_48cda75c","line":48,"in_reply_to":"5a9d85d2_023f0eb5","updated":"2016-06-21 03:23:52.000000000","message":"Done","commit_id":"65273faf58061ab53ec38b14a6ad3bb90ff60753"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"59de7b35dfc1a3923d0379226d68ede4b0faeff0","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    pass"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"class VNXSystemDownError(VNXSystemError):"},{"line_number":53,"context_line":"    pass"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"5a9d85d2_22420a3f","line":52,"updated":"2016-06-20 18:03:12.000000000","message":"Not used anywhere.","commit_id":"65273faf58061ab53ec38b14a6ad3bb90ff60753"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"ea5a4923d1fc1412cade864150236ae67d40f3c3","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    pass"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"class VNXSystemDownError(VNXSystemError):"},{"line_number":53,"context_line":"    pass"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"5a9d85d2_a8dc0b13","line":52,"in_reply_to":"5a9d85d2_22420a3f","updated":"2016-06-21 03:23:52.000000000","message":"Done","commit_id":"65273faf58061ab53ec38b14a6ad3bb90ff60753"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"59de7b35dfc1a3923d0379226d68ede4b0faeff0","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    pass"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"class VNXSPDownError(VNXSPError):"},{"line_number":61,"context_line":"    pass"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"5a9d85d2_e209222e","line":60,"updated":"2016-06-20 18:03:12.000000000","message":"Not used anywhere.","commit_id":"65273faf58061ab53ec38b14a6ad3bb90ff60753"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"ea5a4923d1fc1412cade864150236ae67d40f3c3","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    pass"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"class VNXSPDownError(VNXSPError):"},{"line_number":61,"context_line":"    pass"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"5a9d85d2_e804537f","line":60,"in_reply_to":"5a9d85d2_e209222e","updated":"2016-06-21 03:23:52.000000000","message":"Done","commit_id":"65273faf58061ab53ec38b14a6ad3bb90ff60753"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"59de7b35dfc1a3923d0379226d68ede4b0faeff0","unresolved":false,"context_lines":[{"line_number":73,"context_line":"    message \u003d \u0027invalid command line parameters\u0027"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"class VNXPortNotInitializedError(VNXStorageGroupError):"},{"line_number":77,"context_line":"    message \u003d \u0027port is uninitialized\u0027"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"5a9d85d2_822bfe81","line":76,"updated":"2016-06-20 18:03:12.000000000","message":"Not used anywhere.","commit_id":"65273faf58061ab53ec38b14a6ad3bb90ff60753"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"ea5a4923d1fc1412cade864150236ae67d40f3c3","unresolved":false,"context_lines":[{"line_number":73,"context_line":"    message \u003d \u0027invalid command line parameters\u0027"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"class VNXPortNotInitializedError(VNXStorageGroupError):"},{"line_number":77,"context_line":"    message \u003d \u0027port is uninitialized\u0027"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"5a9d85d2_c807d77f","line":76,"in_reply_to":"5a9d85d2_822bfe81","updated":"2016-06-21 03:23:52.000000000","message":"Done","commit_id":"65273faf58061ab53ec38b14a6ad3bb90ff60753"}],"cinder/tests/unit/volume/drivers/emc/vnx/fake_storops.py":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"1ea0ad6b8167a7379bb1f02116888de666b60ae5","unresolved":false,"context_lines":[{"line_number":1,"context_line":"from cinder.tests.unit.volume.drivers.emc.vnx import fake_enum"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Place all enums used by driver code here"},{"line_number":4,"context_line":"VNXSPEnum \u003d fake_enum.VNXSPEnum"}],"source_content_type":"text/x-python","patch_set":21,"id":"9abb7d3a_bb6eeec6","line":1,"updated":"2016-06-03 18:24:18.000000000","message":"Needs license header.","commit_id":"e0cbaa8db0d9a53123a80b22b01452a83a22e3bd"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"5a1e0730fda9df5dba1d5d9f594871a2ff018ab7","unresolved":false,"context_lines":[{"line_number":1,"context_line":"from cinder.tests.unit.volume.drivers.emc.vnx import fake_enum"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Place all enums used by driver code here"},{"line_number":4,"context_line":"VNXSPEnum \u003d fake_enum.VNXSPEnum"}],"source_content_type":"text/x-python","patch_set":21,"id":"7aa08908_91c1a831","line":1,"in_reply_to":"9abb7d3a_bb6eeec6","updated":"2016-06-06 05:34:21.000000000","message":"Done","commit_id":"e0cbaa8db0d9a53123a80b22b01452a83a22e3bd"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"c98db4bc98a12cb14bf8037874beb99b49199a7a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# coding\u003dutf-8"},{"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":28,"id":"7aa08908_360f7c3a","line":1,"updated":"2016-06-13 16:11:14.000000000","message":"utf-8 header doesn\u0027t appear to be needed for this file.","commit_id":"fbfdb5dba19bff2c7734a63a78a151d6252b2dba"},{"author":{"_account_id":14101,"name":"yapeng Yang","email":"a394954369@gmail.com","username":"yapeng"},"change_message_id":"505b789693b81a60c98049338b6b3152eec87d78","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# coding\u003dutf-8"},{"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":28,"id":"7aa08908_cd4bf0af","line":1,"in_reply_to":"7aa08908_360f7c3a","updated":"2016-06-14 03:19:21.000000000","message":"Done","commit_id":"fbfdb5dba19bff2c7734a63a78a151d6252b2dba"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"8dd0537c0375b8e089c00b959863c1e68d317413","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# coding\u003dutf-8"},{"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":28,"id":"7aa08908_fa094496","line":1,"in_reply_to":"7aa08908_360f7c3a","updated":"2016-06-14 05:54:49.000000000","message":"Done","commit_id":"fbfdb5dba19bff2c7734a63a78a151d6252b2dba"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"e05d596b740bccafbcb8fea1a3e13de3bb956469","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# coding\u003dutf-8"},{"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":28,"id":"7aa08908_e16353af","line":1,"in_reply_to":"7aa08908_cd4bf0af","updated":"2016-06-14 05:56:44.000000000","message":"Did you mean that you agree with Eric?\nI have removed this.\n\nThanks","commit_id":"fbfdb5dba19bff2c7734a63a78a151d6252b2dba"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"01e2531cca81a3896245c1918f232ff56dadbd86","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    DEDUPED \u003d \u0027deduplicated\u0027"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"class VNXCompressionRate(VNXEnum):"},{"line_number":43,"context_line":"    LOW \u003d \u0027low\u0027"},{"line_number":44,"context_line":"    MEDIUM \u003d \u0027medium\u0027"},{"line_number":45,"context_line":"    HIGH \u003d \u0027high\u0027"}],"source_content_type":"text/x-python","patch_set":28,"id":"7aa08908_316b06bb","line":42,"updated":"2016-06-13 16:14:57.000000000","message":"Not used anywhere, please remove.","commit_id":"fbfdb5dba19bff2c7734a63a78a151d6252b2dba"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"8dd0537c0375b8e089c00b959863c1e68d317413","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    DEDUPED \u003d \u0027deduplicated\u0027"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"class VNXCompressionRate(VNXEnum):"},{"line_number":43,"context_line":"    LOW \u003d \u0027low\u0027"},{"line_number":44,"context_line":"    MEDIUM \u003d \u0027medium\u0027"},{"line_number":45,"context_line":"    HIGH \u003d \u0027high\u0027"}],"source_content_type":"text/x-python","patch_set":28,"id":"7aa08908_ba1a1cc4","line":42,"in_reply_to":"7aa08908_316b06bb","updated":"2016-06-14 05:54:49.000000000","message":"Done","commit_id":"fbfdb5dba19bff2c7734a63a78a151d6252b2dba"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"01e2531cca81a3896245c1918f232ff56dadbd86","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    HIGH \u003d \u0027high\u0027"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"class VNXTieringPreference(VNXEnum):"},{"line_number":49,"context_line":"    INVALID \u003d 0"},{"line_number":50,"context_line":"    NONE \u003d 1"},{"line_number":51,"context_line":"    LOWEST_AVAILABLE \u003d 2"}],"source_content_type":"text/x-python","patch_set":28,"id":"7aa08908_11708aa3","line":48,"updated":"2016-06-13 16:14:57.000000000","message":"Not used anywhere, please remove.","commit_id":"fbfdb5dba19bff2c7734a63a78a151d6252b2dba"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"8dd0537c0375b8e089c00b959863c1e68d317413","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    HIGH \u003d \u0027high\u0027"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"class VNXTieringPreference(VNXEnum):"},{"line_number":49,"context_line":"    INVALID \u003d 0"},{"line_number":50,"context_line":"    NONE \u003d 1"},{"line_number":51,"context_line":"    LOWEST_AVAILABLE \u003d 2"}],"source_content_type":"text/x-python","patch_set":28,"id":"7aa08908_1a7a50f1","line":48,"in_reply_to":"7aa08908_11708aa3","updated":"2016-06-14 05:54:49.000000000","message":"Done","commit_id":"fbfdb5dba19bff2c7734a63a78a151d6252b2dba"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"01e2531cca81a3896245c1918f232ff56dadbd86","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    HIGHEST_AVAILABLE \u003d 3"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"class VNXRelocationPolicy(VNXEnum):"},{"line_number":56,"context_line":"    INVALID \u003d 0"},{"line_number":57,"context_line":"    NONE \u003d 1"},{"line_number":58,"context_line":"    TIER_PREFERENCE \u003d 2"}],"source_content_type":"text/x-python","patch_set":28,"id":"7aa08908_71b0ee43","line":55,"updated":"2016-06-13 16:14:57.000000000","message":"Not used anywhere, please remove.","commit_id":"fbfdb5dba19bff2c7734a63a78a151d6252b2dba"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"8dd0537c0375b8e089c00b959863c1e68d317413","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    HIGHEST_AVAILABLE \u003d 3"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"class VNXRelocationPolicy(VNXEnum):"},{"line_number":56,"context_line":"    INVALID \u003d 0"},{"line_number":57,"context_line":"    NONE \u003d 1"},{"line_number":58,"context_line":"    TIER_PREFERENCE \u003d 2"}],"source_content_type":"text/x-python","patch_set":28,"id":"7aa08908_fa7e64e2","line":55,"in_reply_to":"7aa08908_71b0ee43","updated":"2016-06-14 05:54:49.000000000","message":"Done","commit_id":"fbfdb5dba19bff2c7734a63a78a151d6252b2dba"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"01e2531cca81a3896245c1918f232ff56dadbd86","unresolved":false,"context_lines":[{"line_number":84,"context_line":"    OTHER \u003d \u0027other\u0027"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"class VNXSnapType(VNXEnum):"},{"line_number":88,"context_line":"    LUN \u003d 1"},{"line_number":89,"context_line":"    CG \u003d 2"},{"line_number":90,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"7aa08908_d187225f","line":87,"updated":"2016-06-13 16:14:57.000000000","message":"Not used anywhere, please remove.","commit_id":"fbfdb5dba19bff2c7734a63a78a151d6252b2dba"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"8dd0537c0375b8e089c00b959863c1e68d317413","unresolved":false,"context_lines":[{"line_number":84,"context_line":"    OTHER \u003d \u0027other\u0027"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"class VNXSnapType(VNXEnum):"},{"line_number":88,"context_line":"    LUN \u003d 1"},{"line_number":89,"context_line":"    CG \u003d 2"},{"line_number":90,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"7aa08908_3a858cce","line":87,"in_reply_to":"7aa08908_d187225f","updated":"2016-06-14 05:54:49.000000000","message":"Done","commit_id":"fbfdb5dba19bff2c7734a63a78a151d6252b2dba"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"01e2531cca81a3896245c1918f232ff56dadbd86","unresolved":false,"context_lines":[{"line_number":100,"context_line":"    LOW \u003d \u0027low\u0027"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"class VNXLunType(VNXEnum):"},{"line_number":104,"context_line":"    THIN \u003d \u0027Thin\u0027"},{"line_number":105,"context_line":"    NON_THIN \u003d \u0027NonThin\u0027"},{"line_number":106,"context_line":"    SNAP \u003d \u0027Snap\u0027"}],"source_content_type":"text/x-python","patch_set":28,"id":"7aa08908_11cc0aba","line":103,"updated":"2016-06-13 16:14:57.000000000","message":"Not used anywhere, please remove.","commit_id":"fbfdb5dba19bff2c7734a63a78a151d6252b2dba"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"8dd0537c0375b8e089c00b959863c1e68d317413","unresolved":false,"context_lines":[{"line_number":100,"context_line":"    LOW \u003d \u0027low\u0027"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"class VNXLunType(VNXEnum):"},{"line_number":104,"context_line":"    THIN \u003d \u0027Thin\u0027"},{"line_number":105,"context_line":"    NON_THIN \u003d \u0027NonThin\u0027"},{"line_number":106,"context_line":"    SNAP \u003d \u0027Snap\u0027"}],"source_content_type":"text/x-python","patch_set":28,"id":"7aa08908_9a6e402d","line":103,"in_reply_to":"7aa08908_11cc0aba","updated":"2016-06-14 05:54:49.000000000","message":"Done","commit_id":"fbfdb5dba19bff2c7734a63a78a151d6252b2dba"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"01e2531cca81a3896245c1918f232ff56dadbd86","unresolved":false,"context_lines":[{"line_number":122,"context_line":"    RAID10 \u003d \u0027r1_0\u0027"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"class VNXPoolRaidType(VNXEnum):"},{"line_number":126,"context_line":"    RAID5 \u003d \u0027r_5\u0027"},{"line_number":127,"context_line":"    RAID6 \u003d \u0027r_6\u0027"},{"line_number":128,"context_line":"    RAID10 \u003d \u0027r_10\u0027"}],"source_content_type":"text/x-python","patch_set":28,"id":"7aa08908_5194d289","line":125,"updated":"2016-06-13 16:14:57.000000000","message":"Not used anywhere, please remove.","commit_id":"fbfdb5dba19bff2c7734a63a78a151d6252b2dba"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"8dd0537c0375b8e089c00b959863c1e68d317413","unresolved":false,"context_lines":[{"line_number":122,"context_line":"    RAID10 \u003d \u0027r1_0\u0027"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"class VNXPoolRaidType(VNXEnum):"},{"line_number":126,"context_line":"    RAID5 \u003d \u0027r_5\u0027"},{"line_number":127,"context_line":"    RAID6 \u003d \u0027r_6\u0027"},{"line_number":128,"context_line":"    RAID10 \u003d \u0027r_10\u0027"}],"source_content_type":"text/x-python","patch_set":28,"id":"7aa08908_da7448ff","line":125,"in_reply_to":"7aa08908_5194d289","updated":"2016-06-14 05:54:49.000000000","message":"Done","commit_id":"fbfdb5dba19bff2c7734a63a78a151d6252b2dba"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"01e2531cca81a3896245c1918f232ff56dadbd86","unresolved":false,"context_lines":[{"line_number":128,"context_line":"    RAID10 \u003d \u0027r_10\u0027"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"class VNXUserScopeEnum(VNXEnum):"},{"line_number":132,"context_line":"    GLOBAL \u003d \u0027global\u0027"},{"line_number":133,"context_line":"    LOCAL \u003d \u0027local\u0027"},{"line_number":134,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"7aa08908_f1d05e55","line":131,"updated":"2016-06-13 16:14:57.000000000","message":"Not used anywhere, please remove.","commit_id":"fbfdb5dba19bff2c7734a63a78a151d6252b2dba"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"8dd0537c0375b8e089c00b959863c1e68d317413","unresolved":false,"context_lines":[{"line_number":128,"context_line":"    RAID10 \u003d \u0027r_10\u0027"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"class VNXUserScopeEnum(VNXEnum):"},{"line_number":132,"context_line":"    GLOBAL \u003d \u0027global\u0027"},{"line_number":133,"context_line":"    LOCAL \u003d \u0027local\u0027"},{"line_number":134,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"7aa08908_1a61b039","line":131,"in_reply_to":"7aa08908_f1d05e55","updated":"2016-06-14 05:54:49.000000000","message":"Done","commit_id":"fbfdb5dba19bff2c7734a63a78a151d6252b2dba"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"01e2531cca81a3896245c1918f232ff56dadbd86","unresolved":false,"context_lines":[{"line_number":133,"context_line":"    LOCAL \u003d \u0027local\u0027"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"class VNXUserRoleEnum(VNXEnum):"},{"line_number":137,"context_line":"    ADMIN \u003d \u0027administrator\u0027"},{"line_number":138,"context_line":"    STORAGE_ADMIN \u003d \u0027storageadmin\u0027"},{"line_number":139,"context_line":"    OPERATOR \u003d \u0027operator\u0027"}],"source_content_type":"text/x-python","patch_set":28,"id":"7aa08908_51db327c","line":136,"updated":"2016-06-13 16:14:57.000000000","message":"Not used anywhere, please remove.","commit_id":"fbfdb5dba19bff2c7734a63a78a151d6252b2dba"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"8dd0537c0375b8e089c00b959863c1e68d317413","unresolved":false,"context_lines":[{"line_number":133,"context_line":"    LOCAL \u003d \u0027local\u0027"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"class VNXUserRoleEnum(VNXEnum):"},{"line_number":137,"context_line":"    ADMIN \u003d \u0027administrator\u0027"},{"line_number":138,"context_line":"    STORAGE_ADMIN \u003d \u0027storageadmin\u0027"},{"line_number":139,"context_line":"    OPERATOR \u003d \u0027operator\u0027"}],"source_content_type":"text/x-python","patch_set":28,"id":"7aa08908_fa65c444","line":136,"in_reply_to":"7aa08908_51db327c","updated":"2016-06-14 05:54:49.000000000","message":"Done","commit_id":"fbfdb5dba19bff2c7734a63a78a151d6252b2dba"}],"cinder/tests/unit/volume/drivers/emc/vnx/res_mock.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"affb577eb3efca4ded080440688d56fef41d247c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2012 - 2015 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":12,"id":"dab17558_5326caba","line":1,"updated":"2016-05-14 04:35:33.000000000","message":"Same","commit_id":"523531e128f177874921d8dc993372049bd068af"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"7f9c9ea5f478894a0d3e03d8807bdad61146bb47","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2012 - 2015 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":12,"id":"dab17558_9f202cb2","line":1,"in_reply_to":"dab17558_5326caba","updated":"2016-05-15 07:27:04.000000000","message":"Done","commit_id":"523531e128f177874921d8dc993372049bd068af"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"492644467fe0b5a6d3be33d38cd5b729ea4e2d75","unresolved":false,"context_lines":[{"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":""},{"line_number":16,"context_line":"from cinder.i18n import _"},{"line_number":17,"context_line":"from cinder.tests.unit.consistencygroup import fake_cgsnapshot"},{"line_number":18,"context_line":"from cinder.tests.unit.consistencygroup import fake_consistencygroup"},{"line_number":19,"context_line":"from cinder.tests.unit import fake_constants"}],"source_content_type":"text/x-python","patch_set":38,"id":"3aaa91ec_7bcc2835","line":16,"updated":"2016-06-30 15:28:27.000000000","message":"Remove translation.","commit_id":"1b255e3e9d5a64504463f1c905b216a7b1cb6a2e"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"17c6671e7ab9d27c92231a243ce916d064c9a4ad","unresolved":false,"context_lines":[{"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":""},{"line_number":16,"context_line":"from cinder.i18n import _"},{"line_number":17,"context_line":"from cinder.tests.unit.consistencygroup import fake_cgsnapshot"},{"line_number":18,"context_line":"from cinder.tests.unit.consistencygroup import fake_consistencygroup"},{"line_number":19,"context_line":"from cinder.tests.unit import fake_constants"}],"source_content_type":"text/x-python","patch_set":38,"id":"3aaa91ec_e1c21033","line":16,"in_reply_to":"3aaa91ec_7bcc2835","updated":"2016-07-01 02:18:04.000000000","message":"Done","commit_id":"1b255e3e9d5a64504463f1c905b216a7b1cb6a2e"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ca82ff5172e3ad053b37e5a4500204ee4d6af0a7","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from cinder.volume.drivers.emc.vnx import common"},{"line_number":27,"context_line":"from cinder.volume.drivers.emc.vnx import utils as vnx_utils"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"import mock"},{"line_number":30,"context_line":"import six"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"SYMBOL_TYPE \u003d \u0027_type\u0027"},{"line_number":33,"context_line":"SYMBOL_PROPERTIES \u003d \u0027_properties\u0027"}],"source_content_type":"text/x-python","patch_set":46,"id":"1aa78d24_aca6da50","line":30,"range":{"start_line":29,"start_character":0,"end_line":30,"end_character":10},"updated":"2016-07-05 03:57:25.000000000","message":"These two imports should be moved ahead of the cinder imports.\n\nhttp://docs.openstack.org/developer/hacking/#import-order-template","commit_id":"5f4273ffca5f5b8cf478ed10da4191c8b0eeb1d2"}],"cinder/tests/unit/volume/drivers/emc/vnx/test_adapter.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ca82ff5172e3ad053b37e5a4500204ee4d6af0a7","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        volume \u003d mocked_input[\u0027volume\u0027]"},{"line_number":49,"context_line":"        volume.host.split(\u0027#\u0027)[1]"},{"line_number":50,"context_line":"        model_update \u003d vnx_common.create_volume(volume)"},{"line_number":51,"context_line":"        self.assertEqual(str(False), model_update.get(\u0027metadata\u0027)[\u0027snapcopy\u0027])"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    @res_mock.mock_driver_input"},{"line_number":54,"context_line":"    @res_mock.patch_common_adapter"}],"source_content_type":"text/x-python","patch_set":46,"id":"1aa78d24_ef50d40c","line":51,"updated":"2016-07-05 03:57:25.000000000","message":"str() -\u003e six.text_type()","commit_id":"5f4273ffca5f5b8cf478ed10da4191c8b0eeb1d2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ca82ff5172e3ad053b37e5a4500204ee4d6af0a7","unresolved":false,"context_lines":[{"line_number":217,"context_line":"            self.assertTrue(stat[\u0027fast_cache_enabled\u0027])"},{"line_number":218,"context_line":"            self.assertTrue(stat[\u0027pool_name\u0027] in [pools[0].name,"},{"line_number":219,"context_line":"                                                  pools[1].name])"},{"line_number":220,"context_line":"            self.assertEqual(False, stat[\u0027replication_enabled\u0027])"},{"line_number":221,"context_line":"            self.assertEqual([], stat[\u0027replication_targets\u0027])"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"    @res_mock.patch_common_adapter"}],"source_content_type":"text/x-python","patch_set":46,"id":"1aa78d24_6fd98483","line":220,"updated":"2016-07-05 03:57:25.000000000","message":"Use AssertFalse","commit_id":"5f4273ffca5f5b8cf478ed10da4191c8b0eeb1d2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ca82ff5172e3ad053b37e5a4500204ee4d6af0a7","unresolved":false,"context_lines":[{"line_number":275,"context_line":"        self.assertEqual(adapter.CommonAdapter.VENDOR, stats[\u0027vendor_name\u0027])"},{"line_number":276,"context_line":"        pools_stats \u003d stats[\u0027pools\u0027]"},{"line_number":277,"context_line":"        for stat in pools_stats:"},{"line_number":278,"context_line":"            self.assertEqual(False, stat[\u0027replication_enabled\u0027])"},{"line_number":279,"context_line":"            self.assertEqual([], stat[\u0027replication_targets\u0027])"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"    @res_mock.patch_common_adapter"}],"source_content_type":"text/x-python","patch_set":46,"id":"1aa78d24_0fd1e057","line":278,"updated":"2016-07-05 03:57:25.000000000","message":"Use assertFalse","commit_id":"5f4273ffca5f5b8cf478ed10da4191c8b0eeb1d2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ca82ff5172e3ad053b37e5a4500204ee4d6af0a7","unresolved":false,"context_lines":[{"line_number":829,"context_line":"                         (called_volume.name, called_volume.id,"},{"line_number":830,"context_line":"                             called_volume.vnx_lun_id))"},{"line_number":831,"context_line":"        self.assertTrue((common_adapter._initialize_connection.call_args[0][1]"},{"line_number":832,"context_line":"                         is None))"},{"line_number":833,"context_line":""},{"line_number":834,"context_line":"    @res_mock.mock_driver_input"},{"line_number":835,"context_line":"    @res_mock.patch_common_adapter"}],"source_content_type":"text/x-python","patch_set":46,"id":"1aa78d24_4f5928fe","line":832,"updated":"2016-07-05 03:57:25.000000000","message":"Use assertIsNone","commit_id":"5f4273ffca5f5b8cf478ed10da4191c8b0eeb1d2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ca82ff5172e3ad053b37e5a4500204ee4d6af0a7","unresolved":false,"context_lines":[{"line_number":1005,"context_line":"            None, mocked_input[\u0027volume\u0027], mocked_input[\u0027new_volume\u0027])"},{"line_number":1006,"context_line":"        self.assertEqual(mocked_input[\u0027new_volume\u0027].provider_location,"},{"line_number":1007,"context_line":"                         data[\u0027provider_location\u0027])"},{"line_number":1008,"context_line":"        self.assertEqual(data[\u0027metadata\u0027][\u0027snapcopy\u0027], \u0027False\u0027)"},{"line_number":1009,"context_line":""},{"line_number":1010,"context_line":"    @res_mock.mock_driver_input"},{"line_number":1011,"context_line":"    @res_mock.patch_common_adapter"}],"source_content_type":"text/x-python","patch_set":46,"id":"1aa78d24_ef08d4db","line":1008,"range":{"start_line":1008,"start_character":8,"end_line":1008,"end_character":63},"updated":"2016-07-05 03:57:25.000000000","message":"self.assertEqual(\u0027False\u0027, data[\u0027metadata\u0027][\u0027snapcopy\u0027])","commit_id":"5f4273ffca5f5b8cf478ed10da4191c8b0eeb1d2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ca82ff5172e3ad053b37e5a4500204ee4d6af0a7","unresolved":false,"context_lines":[{"line_number":1015,"context_line":"            None, mocked_input[\u0027volume\u0027], mocked_input[\u0027new_volume\u0027])"},{"line_number":1016,"context_line":"        self.assertEqual(mocked_input[\u0027new_volume\u0027].provider_location,"},{"line_number":1017,"context_line":"                         data[\u0027provider_location\u0027])"},{"line_number":1018,"context_line":"        self.assertEqual(data[\u0027metadata\u0027][\u0027snapcopy\u0027], \u0027True\u0027)"},{"line_number":1019,"context_line":""},{"line_number":1020,"context_line":"    @res_mock.patch_common_adapter"},{"line_number":1021,"context_line":"    def test_normalize_config_naviseccli_path(self, common_adapter,"}],"source_content_type":"text/x-python","patch_set":46,"id":"1aa78d24_2f13fc0e","line":1018,"updated":"2016-07-05 03:57:25.000000000","message":"reversed.","commit_id":"5f4273ffca5f5b8cf478ed10da4191c8b0eeb1d2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"91b02f0921da5fb5eb4c8ec522286eae30853283","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        volume \u003d mocked_input[\u0027volume\u0027]"},{"line_number":49,"context_line":"        volume.host.split(\u0027#\u0027)[1]"},{"line_number":50,"context_line":"        model_update \u003d vnx_common.create_volume(volume)"},{"line_number":51,"context_line":"        self.assertEqual(str(False), model_update.get(\u0027metadata\u0027)[\u0027snapcopy\u0027])"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    @res_mock.mock_driver_input"},{"line_number":54,"context_line":"    @res_mock.patch_common_adapter"}],"source_content_type":"text/x-python","patch_set":47,"id":"1aa78d24_eb5ce87e","line":51,"updated":"2016-07-06 15:49:42.000000000","message":"str() -\u003e six.text_type().\n\nActually it\u0027s better to change it to \u0027False\u0027 to be consistent with other tests.","commit_id":"cebc9e1ab191b66b857ac8b71b18b2a8caa1ca56"},{"author":{"_account_id":18742,"name":"Ryan Liang","email":"ryan.liang@emc.com","username":"RyanLiang"},"change_message_id":"dd01b646873d0a2c93dd68a58109ebbf8134d2e1","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        volume \u003d mocked_input[\u0027volume\u0027]"},{"line_number":49,"context_line":"        volume.host.split(\u0027#\u0027)[1]"},{"line_number":50,"context_line":"        model_update \u003d vnx_common.create_volume(volume)"},{"line_number":51,"context_line":"        self.assertEqual(str(False), model_update.get(\u0027metadata\u0027)[\u0027snapcopy\u0027])"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    @res_mock.mock_driver_input"},{"line_number":54,"context_line":"    @res_mock.patch_common_adapter"}],"source_content_type":"text/x-python","patch_set":47,"id":"1aa78d24_c63d7fde","line":51,"in_reply_to":"1aa78d24_eb5ce87e","updated":"2016-07-07 12:05:44.000000000","message":"Done","commit_id":"cebc9e1ab191b66b857ac8b71b18b2a8caa1ca56"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"91b02f0921da5fb5eb4c8ec522286eae30853283","unresolved":false,"context_lines":[{"line_number":428,"context_line":"        self.assertEqual(cg.status,"},{"line_number":429,"context_line":"                         model_update[\u0027status\u0027])"},{"line_number":430,"context_line":"        for update in vol_update_list:"},{"line_number":431,"context_line":"            self.assertEqual(\u0027deleted\u0027, update[\u0027status\u0027])"},{"line_number":432,"context_line":""},{"line_number":433,"context_line":"    @res_mock.mock_driver_input"},{"line_number":434,"context_line":"    @res_mock.patch_common_adapter"}],"source_content_type":"text/x-python","patch_set":47,"id":"1aa78d24_7eb7143a","line":431,"updated":"2016-07-06 15:49:42.000000000","message":"You are using fields.ConsistencyGroupStatus on line 406, but are not using it in other places.  Can you please do a search and make sure you are using it in all places in your patch (unit tests and driver code)?\n\nhttps://github.com/openstack/cinder/blob/master/cinder/objects/fields.py#L46","commit_id":"cebc9e1ab191b66b857ac8b71b18b2a8caa1ca56"},{"author":{"_account_id":18742,"name":"Ryan Liang","email":"ryan.liang@emc.com","username":"RyanLiang"},"change_message_id":"dd01b646873d0a2c93dd68a58109ebbf8134d2e1","unresolved":false,"context_lines":[{"line_number":428,"context_line":"        self.assertEqual(cg.status,"},{"line_number":429,"context_line":"                         model_update[\u0027status\u0027])"},{"line_number":430,"context_line":"        for update in vol_update_list:"},{"line_number":431,"context_line":"            self.assertEqual(\u0027deleted\u0027, update[\u0027status\u0027])"},{"line_number":432,"context_line":""},{"line_number":433,"context_line":"    @res_mock.mock_driver_input"},{"line_number":434,"context_line":"    @res_mock.patch_common_adapter"}],"source_content_type":"text/x-python","patch_set":47,"id":"1aa78d24_e18225c7","line":431,"in_reply_to":"1aa78d24_7eb7143a","updated":"2016-07-07 12:05:44.000000000","message":"Done","commit_id":"cebc9e1ab191b66b857ac8b71b18b2a8caa1ca56"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"91b02f0921da5fb5eb4c8ec522286eae30853283","unresolved":false,"context_lines":[{"line_number":452,"context_line":"        self.assertEqual(cg.status,"},{"line_number":453,"context_line":"                         model_update[\u0027status\u0027])"},{"line_number":454,"context_line":"        for update in vol_update_list:"},{"line_number":455,"context_line":"            self.assertEqual(\u0027error_deleting\u0027, update[\u0027status\u0027])"},{"line_number":456,"context_line":""},{"line_number":457,"context_line":"    @res_mock.mock_driver_input"},{"line_number":458,"context_line":"    @res_mock.patch_common_adapter"}],"source_content_type":"text/x-python","patch_set":47,"id":"1aa78d24_3e746c66","line":455,"updated":"2016-07-06 15:49:42.000000000","message":"For example, here too.","commit_id":"cebc9e1ab191b66b857ac8b71b18b2a8caa1ca56"},{"author":{"_account_id":18742,"name":"Ryan Liang","email":"ryan.liang@emc.com","username":"RyanLiang"},"change_message_id":"dd01b646873d0a2c93dd68a58109ebbf8134d2e1","unresolved":false,"context_lines":[{"line_number":452,"context_line":"        self.assertEqual(cg.status,"},{"line_number":453,"context_line":"                         model_update[\u0027status\u0027])"},{"line_number":454,"context_line":"        for update in vol_update_list:"},{"line_number":455,"context_line":"            self.assertEqual(\u0027error_deleting\u0027, update[\u0027status\u0027])"},{"line_number":456,"context_line":""},{"line_number":457,"context_line":"    @res_mock.mock_driver_input"},{"line_number":458,"context_line":"    @res_mock.patch_common_adapter"}],"source_content_type":"text/x-python","patch_set":47,"id":"1aa78d24_016c9133","line":455,"in_reply_to":"1aa78d24_3e746c66","updated":"2016-07-07 12:05:44.000000000","message":"Done","commit_id":"cebc9e1ab191b66b857ac8b71b18b2a8caa1ca56"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"91b02f0921da5fb5eb4c8ec522286eae30853283","unresolved":false,"context_lines":[{"line_number":847,"context_line":"                         (called_volume.name, called_volume.id,"},{"line_number":848,"context_line":"                             called_volume.vnx_lun_id))"},{"line_number":849,"context_line":"        self.assertTrue((common_adapter._terminate_connection.call_args[0][1]"},{"line_number":850,"context_line":"                         is None))"},{"line_number":851,"context_line":"        common_adapter.client.detach_snapshot.assert_called_once_with("},{"line_number":852,"context_line":"            smp_name)"},{"line_number":853,"context_line":""}],"source_content_type":"text/x-python","patch_set":47,"id":"1aa78d24_5e15f8e2","line":850,"updated":"2016-07-06 15:49:42.000000000","message":"assertIsNone","commit_id":"cebc9e1ab191b66b857ac8b71b18b2a8caa1ca56"},{"author":{"_account_id":18742,"name":"Ryan Liang","email":"ryan.liang@emc.com","username":"RyanLiang"},"change_message_id":"dd01b646873d0a2c93dd68a58109ebbf8134d2e1","unresolved":false,"context_lines":[{"line_number":847,"context_line":"                         (called_volume.name, called_volume.id,"},{"line_number":848,"context_line":"                             called_volume.vnx_lun_id))"},{"line_number":849,"context_line":"        self.assertTrue((common_adapter._terminate_connection.call_args[0][1]"},{"line_number":850,"context_line":"                         is None))"},{"line_number":851,"context_line":"        common_adapter.client.detach_snapshot.assert_called_once_with("},{"line_number":852,"context_line":"            smp_name)"},{"line_number":853,"context_line":""}],"source_content_type":"text/x-python","patch_set":47,"id":"1aa78d24_218d4dd6","line":850,"in_reply_to":"1aa78d24_5e15f8e2","updated":"2016-07-07 12:05:44.000000000","message":"Done","commit_id":"cebc9e1ab191b66b857ac8b71b18b2a8caa1ca56"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"91b02f0921da5fb5eb4c8ec522286eae30853283","unresolved":false,"context_lines":[{"line_number":867,"context_line":"            \u0027mirror_\u0027 + vol1.id, 111)"},{"line_number":868,"context_line":"        fake_mirror.add_image.assert_called_once_with("},{"line_number":869,"context_line":"            \u0027mirror_\u0027 + vol1.id, mocked_res[\u0027lun\u0027].lun_id)"},{"line_number":870,"context_line":"        self.assertEqual(\u0027enabled\u0027, rep_update[\u0027replication_status\u0027])"},{"line_number":871,"context_line":""},{"line_number":872,"context_line":"    @utils.patch_extra_specs({\u0027replication_enabled\u0027: \u0027\u003cis\u003e True\u0027})"},{"line_number":873,"context_line":"    @res_mock.mock_driver_input"}],"source_content_type":"text/x-python","patch_set":47,"id":"1aa78d24_be897c28","line":870,"updated":"2016-07-06 15:49:42.000000000","message":"Please use fields.ReplicationStatus here and also other places.\n\nhttps://github.com/openstack/cinder/blob/master/cinder/objects/fields.py#L67","commit_id":"cebc9e1ab191b66b857ac8b71b18b2a8caa1ca56"},{"author":{"_account_id":18742,"name":"Ryan Liang","email":"ryan.liang@emc.com","username":"RyanLiang"},"change_message_id":"dd01b646873d0a2c93dd68a58109ebbf8134d2e1","unresolved":false,"context_lines":[{"line_number":867,"context_line":"            \u0027mirror_\u0027 + vol1.id, 111)"},{"line_number":868,"context_line":"        fake_mirror.add_image.assert_called_once_with("},{"line_number":869,"context_line":"            \u0027mirror_\u0027 + vol1.id, mocked_res[\u0027lun\u0027].lun_id)"},{"line_number":870,"context_line":"        self.assertEqual(\u0027enabled\u0027, rep_update[\u0027replication_status\u0027])"},{"line_number":871,"context_line":""},{"line_number":872,"context_line":"    @utils.patch_extra_specs({\u0027replication_enabled\u0027: \u0027\u003cis\u003e True\u0027})"},{"line_number":873,"context_line":"    @res_mock.mock_driver_input"}],"source_content_type":"text/x-python","patch_set":47,"id":"1aa78d24_a5114854","line":870,"in_reply_to":"1aa78d24_be897c28","updated":"2016-07-07 12:05:44.000000000","message":"Done","commit_id":"cebc9e1ab191b66b857ac8b71b18b2a8caa1ca56"}],"cinder/tests/unit/volume/drivers/emc/vnx/test_client.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"affb577eb3efca4ded080440688d56fef41d247c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2012 - 2015 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":12,"id":"dab17558_b33576dc","line":1,"updated":"2016-05-14 04:35:33.000000000","message":"same comments in all the copy right headers.","commit_id":"523531e128f177874921d8dc993372049bd068af"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"7f9c9ea5f478894a0d3e03d8807bdad61146bb47","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2012 - 2015 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":12,"id":"dab17558_5f152447","line":1,"in_reply_to":"dab17558_b33576dc","updated":"2016-05-15 07:27:04.000000000","message":"Done","commit_id":"523531e128f177874921d8dc993372049bd068af"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"affb577eb3efca4ded080440688d56fef41d247c","unresolved":false,"context_lines":[{"line_number":172,"context_line":"    @res_mock.patch_client"},{"line_number":173,"context_line":"    def test_delete_smp(self, client, mocked):"},{"line_number":174,"context_line":"        client.delete_lun(mocked[\u0027lun\u0027].name)"},{"line_number":175,"context_line":"    \"\"\""},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"    @res_mock.patch_client"},{"line_number":178,"context_line":"    def test_delete_lun_not_exist(self, client, mocked):"}],"source_content_type":"text/x-python","patch_set":12,"id":"dab17558_f32ffe85","line":175,"updated":"2016-05-14 04:35:33.000000000","message":"Do you need to keep this commented out test?","commit_id":"523531e128f177874921d8dc993372049bd068af"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"7f9c9ea5f478894a0d3e03d8807bdad61146bb47","unresolved":false,"context_lines":[{"line_number":172,"context_line":"    @res_mock.patch_client"},{"line_number":173,"context_line":"    def test_delete_smp(self, client, mocked):"},{"line_number":174,"context_line":"        client.delete_lun(mocked[\u0027lun\u0027].name)"},{"line_number":175,"context_line":"    \"\"\""},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"    @res_mock.patch_client"},{"line_number":178,"context_line":"    def test_delete_lun_not_exist(self, client, mocked):"}],"source_content_type":"text/x-python","patch_set":12,"id":"dab17558_7f12a863","line":175,"in_reply_to":"dab17558_f32ffe85","updated":"2016-05-15 07:27:04.000000000","message":"uncommitted, and this test case passed.","commit_id":"523531e128f177874921d8dc993372049bd068af"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ca82ff5172e3ad053b37e5a4500204ee4d6af0a7","unresolved":false,"context_lines":[{"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 import test"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from cinder import exception"},{"line_number":18,"context_line":"from cinder.tests.unit.volume.drivers.emc.vnx import fake_exception \\"},{"line_number":19,"context_line":"    as storops_ex"}],"source_content_type":"text/x-python","patch_set":46,"id":"1aa78d24_8f215050","line":16,"updated":"2016-07-05 03:57:25.000000000","message":"Remove the blank line.  This should be moved after \"import exception\".","commit_id":"5f4273ffca5f5b8cf478ed10da4191c8b0eeb1d2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"91b02f0921da5fb5eb4c8ec522286eae30853283","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from cinder import exception"},{"line_number":17,"context_line":"from cinder import test"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from cinder.tests.unit.volume.drivers.emc.vnx import fake_exception \\"},{"line_number":20,"context_line":"    as storops_ex"},{"line_number":21,"context_line":"from cinder.tests.unit.volume.drivers.emc.vnx import fake_storops as storops"}],"source_content_type":"text/x-python","patch_set":47,"id":"1aa78d24_be2cdc02","line":18,"updated":"2016-07-06 15:49:42.000000000","message":"Remove this blank line.","commit_id":"cebc9e1ab191b66b857ac8b71b18b2a8caa1ca56"},{"author":{"_account_id":18742,"name":"Ryan Liang","email":"ryan.liang@emc.com","username":"RyanLiang"},"change_message_id":"dd01b646873d0a2c93dd68a58109ebbf8134d2e1","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from cinder import exception"},{"line_number":17,"context_line":"from cinder import test"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from cinder.tests.unit.volume.drivers.emc.vnx import fake_exception \\"},{"line_number":20,"context_line":"    as storops_ex"},{"line_number":21,"context_line":"from cinder.tests.unit.volume.drivers.emc.vnx import fake_storops as storops"}],"source_content_type":"text/x-python","patch_set":47,"id":"1aa78d24_459ea4b9","line":18,"in_reply_to":"1aa78d24_be2cdc02","updated":"2016-07-07 12:05:44.000000000","message":"Done","commit_id":"cebc9e1ab191b66b857ac8b71b18b2a8caa1ca56"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"91b02f0921da5fb5eb4c8ec522286eae30853283","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from cinder.tests.unit.volume.drivers.emc.vnx import fake_storops as storops"},{"line_number":22,"context_line":"from cinder.tests.unit.volume.drivers.emc.vnx import res_mock"},{"line_number":23,"context_line":"from cinder.tests.unit.volume.drivers.emc.vnx import utils"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"from cinder.volume.drivers.emc.vnx import client as vnx_client"},{"line_number":26,"context_line":"from cinder.volume.drivers.emc.vnx import common as vnx_common"},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":47,"id":"1aa78d24_fe32e45c","line":24,"updated":"2016-07-06 15:49:42.000000000","message":"Remove this blank line.","commit_id":"cebc9e1ab191b66b857ac8b71b18b2a8caa1ca56"},{"author":{"_account_id":18742,"name":"Ryan Liang","email":"ryan.liang@emc.com","username":"RyanLiang"},"change_message_id":"dd01b646873d0a2c93dd68a58109ebbf8134d2e1","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from cinder.tests.unit.volume.drivers.emc.vnx import fake_storops as storops"},{"line_number":22,"context_line":"from cinder.tests.unit.volume.drivers.emc.vnx import res_mock"},{"line_number":23,"context_line":"from cinder.tests.unit.volume.drivers.emc.vnx import utils"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"from cinder.volume.drivers.emc.vnx import client as vnx_client"},{"line_number":26,"context_line":"from cinder.volume.drivers.emc.vnx import common as vnx_common"},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":47,"id":"1aa78d24_25a1d8f8","line":24,"in_reply_to":"1aa78d24_fe32e45c","updated":"2016-07-07 12:05:44.000000000","message":"Done","commit_id":"cebc9e1ab191b66b857ac8b71b18b2a8caa1ca56"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"91b02f0921da5fb5eb4c8ec522286eae30853283","unresolved":false,"context_lines":[{"line_number":159,"context_line":"    @res_mock.patch_client"},{"line_number":160,"context_line":"    def test_get_lun_by_name(self, client, mocked):"},{"line_number":161,"context_line":"        lun \u003d client.get_lun(name\u003d\u0027lun_name_test_get_lun_by_name\u0027)"},{"line_number":162,"context_line":"        self.assertEqual(lun.lun_id, 888)"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"    @res_mock.patch_client"},{"line_number":165,"context_line":"    def test_delete_lun(self, client, mocked):"}],"source_content_type":"text/x-python","patch_set":47,"id":"1aa78d24_3e28ece1","line":162,"updated":"2016-07-06 15:49:42.000000000","message":"Reversed.","commit_id":"cebc9e1ab191b66b857ac8b71b18b2a8caa1ca56"},{"author":{"_account_id":18742,"name":"Ryan Liang","email":"ryan.liang@emc.com","username":"RyanLiang"},"change_message_id":"dd01b646873d0a2c93dd68a58109ebbf8134d2e1","unresolved":false,"context_lines":[{"line_number":159,"context_line":"    @res_mock.patch_client"},{"line_number":160,"context_line":"    def test_get_lun_by_name(self, client, mocked):"},{"line_number":161,"context_line":"        lun \u003d client.get_lun(name\u003d\u0027lun_name_test_get_lun_by_name\u0027)"},{"line_number":162,"context_line":"        self.assertEqual(lun.lun_id, 888)"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"    @res_mock.patch_client"},{"line_number":165,"context_line":"    def test_delete_lun(self, client, mocked):"}],"source_content_type":"text/x-python","patch_set":47,"id":"1aa78d24_a5db087b","line":162,"in_reply_to":"1aa78d24_3e28ece1","updated":"2016-07-07 12:05:44.000000000","message":"Done","commit_id":"cebc9e1ab191b66b857ac8b71b18b2a8caa1ca56"}],"cinder/tests/unit/volume/drivers/emc/vnx/test_common.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ca82ff5172e3ad053b37e5a4500204ee4d6af0a7","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from cinder.volume.drivers.emc.vnx import client"},{"line_number":22,"context_line":"from cinder.volume.drivers.emc.vnx import common"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"from cinder.tests.unit.volume.drivers.emc.vnx import fake_storops as storops"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"class TestExtraSpecs(test.TestCase):"}],"source_content_type":"text/x-python","patch_set":46,"id":"1aa78d24_4fe808b5","line":24,"updated":"2016-07-05 03:57:25.000000000","message":"This import should be before line 20.","commit_id":"5f4273ffca5f5b8cf478ed10da4191c8b0eeb1d2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ca82ff5172e3ad053b37e5a4500204ee4d6af0a7","unresolved":false,"context_lines":[{"line_number":295,"context_line":"        self.mirror_view.destroy_mirror(\u0027mirror_name\u0027, \u0027sec_lun_name\u0027)"},{"line_number":296,"context_line":"        self.primary_client.get_mirror.assert_called_once_with("},{"line_number":297,"context_line":"            \u0027mirror_name\u0027)"},{"line_number":298,"context_line":"        self.assertEqual(False, self.primary_client.fracture_image.called)"}],"source_content_type":"text/x-python","patch_set":46,"id":"1aa78d24_6ff4e486","line":298,"updated":"2016-07-05 03:57:25.000000000","message":"assertFalse","commit_id":"5f4273ffca5f5b8cf478ed10da4191c8b0eeb1d2"}],"cinder/tests/unit/volume/drivers/emc/vnx/test_driver.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"492644467fe0b5a6d3be33d38cd5b729ea4e2d75","unresolved":false,"context_lines":[{"line_number":15,"context_line":"from cinder import test"},{"line_number":16,"context_line":"from cinder.volume import configuration as conf"},{"line_number":17,"context_line":"from cinder.volume.drivers.emc.vnx import driver"},{"line_number":18,"context_line":"import mock"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class TestEMCVNXDriver(test.TestCase):"}],"source_content_type":"text/x-python","patch_set":38,"id":"3aaa91ec_bba05043","line":18,"updated":"2016-06-30 15:28:27.000000000","message":"Move mock import up to separate section above the local cinder imports.","commit_id":"1b255e3e9d5a64504463f1c905b216a7b1cb6a2e"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"17c6671e7ab9d27c92231a243ce916d064c9a4ad","unresolved":false,"context_lines":[{"line_number":15,"context_line":"from cinder import test"},{"line_number":16,"context_line":"from cinder.volume import configuration as conf"},{"line_number":17,"context_line":"from cinder.volume.drivers.emc.vnx import driver"},{"line_number":18,"context_line":"import mock"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class TestEMCVNXDriver(test.TestCase):"}],"source_content_type":"text/x-python","patch_set":38,"id":"3aaa91ec_41e844b3","line":18,"in_reply_to":"3aaa91ec_bba05043","updated":"2016-07-01 02:18:04.000000000","message":"Done","commit_id":"1b255e3e9d5a64504463f1c905b216a7b1cb6a2e"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ca82ff5172e3ad053b37e5a4500204ee4d6af0a7","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    def tearDown(self):"},{"line_number":38,"context_line":"        super(TestEMCVNXDriver, self).tearDown()"},{"line_number":39,"context_line":"        self.fc_adapter_patcher.stop()"},{"line_number":40,"context_line":"        self.iscsi_adapter_patcher.stop()"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def _get_driver(self, protocol):"},{"line_number":43,"context_line":"        self.configuration.storage_protocol \u003d protocol"}],"source_content_type":"text/x-python","patch_set":46,"id":"1aa78d24_ef2e14f9","line":40,"updated":"2016-07-05 03:57:25.000000000","message":"Use addCleanup() instead of tearDown.","commit_id":"5f4273ffca5f5b8cf478ed10da4191c8b0eeb1d2"}],"cinder/tests/unit/volume/drivers/emc/vnx/test_res_mock.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ca82ff5172e3ad053b37e5a4500204ee4d6af0a7","unresolved":false,"context_lines":[{"line_number":11,"context_line":"# distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT"},{"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 import test"},{"line_number":16,"context_line":"from cinder.volume import configuration as conf"},{"line_number":17,"context_line":"from cinder.volume.drivers.emc.vnx import utils"}],"source_content_type":"text/x-python","patch_set":46,"id":"1aa78d24_cf4a38c5","line":14,"updated":"2016-07-05 03:57:25.000000000","message":"Add a blank line.","commit_id":"5f4273ffca5f5b8cf478ed10da4191c8b0eeb1d2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ca82ff5172e3ad053b37e5a4500204ee4d6af0a7","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from cinder.volume.drivers.emc.vnx import utils"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from cinder.tests.unit.volume.drivers.emc.vnx import res_mock"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class TestResMock(test.TestCase):"}],"source_content_type":"text/x-python","patch_set":46,"id":"1aa78d24_2f101ca8","line":20,"updated":"2016-07-05 03:57:25.000000000","message":"Should be moved up right after \"import test\".","commit_id":"5f4273ffca5f5b8cf478ed10da4191c8b0eeb1d2"}],"cinder/tests/unit/volume/drivers/emc/vnx/test_res_mock.yaml":[{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"6830c35f491c99eece1de149f1200788c06e6c42","unresolved":false,"context_lines":[{"line_number":36,"context_line":"  pool: \u0026pool1"},{"line_number":37,"context_line":"    _properties:"},{"line_number":38,"context_line":"      \u003c\u003c: *pool_base_prop"},{"line_number":39,"context_line":"    _methods: "},{"line_number":40,"context_line":"      create_lun: *lun1"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"  vnx: "}],"source_content_type":"text/x-yaml","patch_set":1,"id":"1a122d0e_bd5edf42","line":39,"range":{"start_line":39,"start_character":13,"end_line":39,"end_character":14},"updated":"2016-05-04 22:13:47.000000000","message":"Extra space here should be removed.","commit_id":"4abea7349899a22ae9104f1fe46b5a15dde362a7"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"c85342352c9fbd6ea4971a2a6a7d60851625510e","unresolved":false,"context_lines":[{"line_number":36,"context_line":"  pool: \u0026pool1"},{"line_number":37,"context_line":"    _properties:"},{"line_number":38,"context_line":"      \u003c\u003c: *pool_base_prop"},{"line_number":39,"context_line":"    _methods: "},{"line_number":40,"context_line":"      create_lun: *lun1"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"  vnx: "}],"source_content_type":"text/x-yaml","patch_set":1,"id":"1a122d0e_7263bfb1","line":39,"range":{"start_line":39,"start_character":13,"end_line":39,"end_character":14},"in_reply_to":"1a122d0e_bd5edf42","updated":"2016-05-05 10:50:04.000000000","message":"Done","commit_id":"4abea7349899a22ae9104f1fe46b5a15dde362a7"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"6830c35f491c99eece1de149f1200788c06e6c42","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    _methods: "},{"line_number":40,"context_line":"      create_lun: *lun1"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"  vnx: "},{"line_number":43,"context_line":"    _properties:"},{"line_number":44,"context_line":"      \u003c\u003c: *vnx_base_prop"},{"line_number":45,"context_line":"    _methods:"}],"source_content_type":"text/x-yaml","patch_set":1,"id":"1a122d0e_3d312f0c","line":42,"range":{"start_line":42,"start_character":6,"end_line":42,"end_character":7},"updated":"2016-05-04 22:13:47.000000000","message":"Extra space here should be removed.","commit_id":"4abea7349899a22ae9104f1fe46b5a15dde362a7"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"c85342352c9fbd6ea4971a2a6a7d60851625510e","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    _methods: "},{"line_number":40,"context_line":"      create_lun: *lun1"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"  vnx: "},{"line_number":43,"context_line":"    _properties:"},{"line_number":44,"context_line":"      \u003c\u003c: *vnx_base_prop"},{"line_number":45,"context_line":"    _methods:"}],"source_content_type":"text/x-yaml","patch_set":1,"id":"1a122d0e_d25453c7","line":42,"range":{"start_line":42,"start_character":6,"end_line":42,"end_character":7},"in_reply_to":"1a122d0e_3d312f0c","updated":"2016-05-05 10:50:04.000000000","message":"Done","commit_id":"4abea7349899a22ae9104f1fe46b5a15dde362a7"}],"cinder/tests/unit/volume/drivers/emc/vnx/test_taskflows.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"492644467fe0b5a6d3be33d38cd5b729ea4e2d75","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"import taskflow.engines"},{"line_number":23,"context_line":"from taskflow.patterns import linear_flow"},{"line_number":24,"context_line":"from taskflow.types import failure"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"class TestTaskflow(test.TestCase):"}],"source_content_type":"text/x-python","patch_set":38,"id":"3aaa91ec_5e4afa55","line":24,"updated":"2016-06-30 15:28:27.000000000","message":"Taskflow imports should be above the local cinder imports.","commit_id":"1b255e3e9d5a64504463f1c905b216a7b1cb6a2e"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"17c6671e7ab9d27c92231a243ce916d064c9a4ad","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"import taskflow.engines"},{"line_number":23,"context_line":"from taskflow.patterns import linear_flow"},{"line_number":24,"context_line":"from taskflow.types import failure"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"class TestTaskflow(test.TestCase):"}],"source_content_type":"text/x-python","patch_set":38,"id":"3aaa91ec_01091c95","line":24,"in_reply_to":"3aaa91ec_5e4afa55","updated":"2016-07-01 02:18:04.000000000","message":"Done","commit_id":"1b255e3e9d5a64504463f1c905b216a7b1cb6a2e"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ca82ff5172e3ad053b37e5a4500204ee4d6af0a7","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        self.assertRaises(vnx_ex.VNXCreateLunError,"},{"line_number":79,"context_line":"                          engine.run)"},{"line_number":80,"context_line":"        smp_id \u003d engine.storage.fetch(\u0027smp_id\u0027)"},{"line_number":81,"context_line":"        self.assertTrue(isinstance(smp_id, failure.Failure))"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    @res_mock.patch_client"},{"line_number":84,"context_line":"    def test_attach_snap_task(self, client, mocked):"}],"source_content_type":"text/x-python","patch_set":46,"id":"1aa78d24_2f877cd8","line":81,"updated":"2016-07-05 03:57:25.000000000","message":"Use assertIsInstance","commit_id":"5f4273ffca5f5b8cf478ed10da4191c8b0eeb1d2"}],"cinder/tests/unit/volume/drivers/emc/vnx/utils.py":[{"author":{"_account_id":19153,"name":"jingtao liang","email":"liang.jingtao@zte.com.cn","username":"liangjingtao"},"change_message_id":"b8f1d203b23e253a9e7ddf235a8a12beae06055b","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from cinder.volume.drivers.emc.vnx import client"},{"line_number":18,"context_line":"from cinder.volume.drivers.emc.vnx import common"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import mock"},{"line_number":21,"context_line":"from os import path"},{"line_number":22,"context_line":"import six"},{"line_number":23,"context_line":"import yaml"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"patch_looping_call \u003d mock.patch("}],"source_content_type":"text/x-python","patch_set":36,"id":"3aaa91ec_bb777307","line":23,"range":{"start_line":20,"start_character":0,"end_line":23,"end_character":11},"updated":"2016-06-27 13:21:34.000000000","message":"I think these modules should  be on top.","commit_id":"22a6d59de261fe7cfe083d280870388fa3284d48"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"be541a8b87074f539074bc7e4f70c7f837f46fd6","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from cinder.volume.drivers.emc.vnx import client"},{"line_number":18,"context_line":"from cinder.volume.drivers.emc.vnx import common"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import mock"},{"line_number":21,"context_line":"from os import path"},{"line_number":22,"context_line":"import six"},{"line_number":23,"context_line":"import yaml"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"patch_looping_call \u003d mock.patch("}],"source_content_type":"text/x-python","patch_set":36,"id":"3aaa91ec_81c941af","line":23,"range":{"start_line":20,"start_character":0,"end_line":23,"end_character":11},"in_reply_to":"3aaa91ec_bb777307","updated":"2016-06-28 04:55:40.000000000","message":"Done","commit_id":"22a6d59de261fe7cfe083d280870388fa3284d48"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"492644467fe0b5a6d3be33d38cd5b729ea4e2d75","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import mock"},{"line_number":17,"context_line":"from os import path"},{"line_number":18,"context_line":"import six"},{"line_number":19,"context_line":"import yaml"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from cinder.tests.unit import utils"}],"source_content_type":"text/x-python","patch_set":38,"id":"3aaa91ec_fe65a6e0","line":18,"updated":"2016-06-30 15:28:27.000000000","message":"Separate the stdlib imports and the third party imports.","commit_id":"1b255e3e9d5a64504463f1c905b216a7b1cb6a2e"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"17c6671e7ab9d27c92231a243ce916d064c9a4ad","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import mock"},{"line_number":17,"context_line":"from os import path"},{"line_number":18,"context_line":"import six"},{"line_number":19,"context_line":"import yaml"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from cinder.tests.unit import utils"}],"source_content_type":"text/x-python","patch_set":38,"id":"3aaa91ec_e1f05093","line":18,"in_reply_to":"3aaa91ec_fe65a6e0","updated":"2016-07-01 02:18:04.000000000","message":"Done","commit_id":"1b255e3e9d5a64504463f1c905b216a7b1cb6a2e"}],"cinder/volume/driver.py":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"c98db4bc98a12cb14bf8037874beb99b49199a7a","unresolved":false,"context_lines":[{"line_number":254,"context_line":"                     \u0027directly, it will only notify that it can be used.\u0027),"},{"line_number":255,"context_line":"    cfg.StrOpt(\u0027storage_protocol\u0027,"},{"line_number":256,"context_line":"               default\u003d\u0027iSCSI\u0027,"},{"line_number":257,"context_line":"               choices\u003d[\u0027iSCSI\u0027, \u0027FC\u0027],"},{"line_number":258,"context_line":"               help\u003d\u0027Protocol to access the storage back end.\u0027),"},{"line_number":259,"context_line":"]"},{"line_number":260,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"7aa08908_9671100f","line":257,"updated":"2016-06-13 16:11:14.000000000","message":"Please just use \u0027iscsi\u0027 and \u0027fc\u0027 here.  We use \u0027iscsi\u0027 in other options and asking people to remember which capitalization to use is just complicated.","commit_id":"fbfdb5dba19bff2c7734a63a78a151d6252b2dba"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"8dd0537c0375b8e089c00b959863c1e68d317413","unresolved":false,"context_lines":[{"line_number":254,"context_line":"                     \u0027directly, it will only notify that it can be used.\u0027),"},{"line_number":255,"context_line":"    cfg.StrOpt(\u0027storage_protocol\u0027,"},{"line_number":256,"context_line":"               default\u003d\u0027iSCSI\u0027,"},{"line_number":257,"context_line":"               choices\u003d[\u0027iSCSI\u0027, \u0027FC\u0027],"},{"line_number":258,"context_line":"               help\u003d\u0027Protocol to access the storage back end.\u0027),"},{"line_number":259,"context_line":"]"},{"line_number":260,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"7aa08908_e636c901","line":257,"in_reply_to":"7aa08908_9671100f","updated":"2016-06-14 05:54:49.000000000","message":"accepted.","commit_id":"fbfdb5dba19bff2c7734a63a78a151d6252b2dba"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"c98db4bc98a12cb14bf8037874beb99b49199a7a","unresolved":false,"context_lines":[{"line_number":255,"context_line":"    cfg.StrOpt(\u0027storage_protocol\u0027,"},{"line_number":256,"context_line":"               default\u003d\u0027iSCSI\u0027,"},{"line_number":257,"context_line":"               choices\u003d[\u0027iSCSI\u0027, \u0027FC\u0027],"},{"line_number":258,"context_line":"               help\u003d\u0027Protocol to access the storage back end.\u0027),"},{"line_number":259,"context_line":"]"},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"# for backward compatibility"}],"source_content_type":"text/x-python","patch_set":28,"id":"7aa08908_56520868","line":258,"updated":"2016-06-13 16:11:14.000000000","message":"Not really correct, this is the protocol for data, not for accessing the backend.","commit_id":"fbfdb5dba19bff2c7734a63a78a151d6252b2dba"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"8dd0537c0375b8e089c00b959863c1e68d317413","unresolved":false,"context_lines":[{"line_number":255,"context_line":"    cfg.StrOpt(\u0027storage_protocol\u0027,"},{"line_number":256,"context_line":"               default\u003d\u0027iSCSI\u0027,"},{"line_number":257,"context_line":"               choices\u003d[\u0027iSCSI\u0027, \u0027FC\u0027],"},{"line_number":258,"context_line":"               help\u003d\u0027Protocol to access the storage back end.\u0027),"},{"line_number":259,"context_line":"]"},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"# for backward compatibility"}],"source_content_type":"text/x-python","patch_set":28,"id":"7aa08908_6d0abc27","line":258,"in_reply_to":"7aa08908_56520868","updated":"2016-06-14 05:54:49.000000000","message":"Will refine it","commit_id":"fbfdb5dba19bff2c7734a63a78a151d6252b2dba"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"51554fb8abc2c8cbb8214cfc28021eaf6cf86607","unresolved":false,"context_lines":[{"line_number":256,"context_line":"               ignore_case\u003dTrue,"},{"line_number":257,"context_line":"               default\u003d\u0027iscsi\u0027,"},{"line_number":258,"context_line":"               choices\u003d[\u0027iscsi\u0027, \u0027fc\u0027],"},{"line_number":259,"context_line":"               help\u003d\u0027Protocol for transferring data between host and\u0027"},{"line_number":260,"context_line":"                    \u0027storage back-end.\u0027),"},{"line_number":261,"context_line":"]"},{"line_number":262,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"7aa08908_7bc73d12","line":259,"updated":"2016-06-17 15:40:56.000000000","message":"Needs space on the end, but more importantly I don\u0027t think this should be here. This will appear as an option for all drivers since it is being put in the base driver class. This could give the false impression that other drivers can be configured to use either protocol via this config setting.\n\nI think it would actually be good if we got to the point where the protocol selection is just a config setting for those backends that do more than one, but we should wait until that actually happens before making it a common config option.","commit_id":"64ba00acff88fef08331bf9b9add15dbae210666"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"e16d515f74d378486a0d501875998cd7b6add111","unresolved":false,"context_lines":[{"line_number":256,"context_line":"               ignore_case\u003dTrue,"},{"line_number":257,"context_line":"               default\u003d\u0027iscsi\u0027,"},{"line_number":258,"context_line":"               choices\u003d[\u0027iscsi\u0027, \u0027fc\u0027],"},{"line_number":259,"context_line":"               help\u003d\u0027Protocol for transferring data between host and\u0027"},{"line_number":260,"context_line":"                    \u0027storage back-end.\u0027),"},{"line_number":261,"context_line":"]"},{"line_number":262,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"5a9d85d2_af9f1f5e","line":259,"in_reply_to":"7aa08908_7bc73d12","updated":"2016-06-20 09:43:08.000000000","message":"Hi Sean,\n\nSpace added.\n\nfor other comments, I will defer.\nsince I was putting this option from driver to cinder and from cinder to driver back and forth based on different perspectives of community.\n\nLooks like we need to reach a agreement before finalizing this changes.\n\n\nThanks","commit_id":"64ba00acff88fef08331bf9b9add15dbae210666"}],"cinder/volume/drivers/emc/vnx/adapter.py":[{"author":{"_account_id":11637,"name":"jay.xu","email":"jay.xu@emc.com","username":"jay.xu"},"change_message_id":"6a761c65ca4c1753547b0e116bb86ff00a07767f","unresolved":false,"context_lines":[{"line_number":758,"context_line":"        return sg"},{"line_number":759,"context_line":""},{"line_number":760,"context_line":"    def assure_host_access(self, storage_group, host, volume):"},{"line_number":761,"context_line":"        \"\"\"Assures that `host` is connected to the Array."},{"line_number":762,"context_line":""},{"line_number":763,"context_line":"        It first registers initiators to `storage_group` then add `volume` to"},{"line_number":764,"context_line":"        `storage_group`."}],"source_content_type":"text/x-python","patch_set":10,"id":"dab17558_95f5adcc","line":761,"updated":"2016-05-10 01:52:13.000000000","message":":s/Array/array","commit_id":"e4bf298b7c92722af594a8452256d72a58325d87"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"5fbd8c5fb679c1d88fc916c65653bb156c2c89e2","unresolved":false,"context_lines":[{"line_number":758,"context_line":"        return sg"},{"line_number":759,"context_line":""},{"line_number":760,"context_line":"    def assure_host_access(self, storage_group, host, volume):"},{"line_number":761,"context_line":"        \"\"\"Assures that `host` is connected to the Array."},{"line_number":762,"context_line":""},{"line_number":763,"context_line":"        It first registers initiators to `storage_group` then add `volume` to"},{"line_number":764,"context_line":"        `storage_group`."}],"source_content_type":"text/x-python","patch_set":10,"id":"dab17558_f06367da","line":761,"in_reply_to":"dab17558_95f5adcc","updated":"2016-05-12 14:13:33.000000000","message":"Done","commit_id":"e4bf298b7c92722af594a8452256d72a58325d87"},{"author":{"_account_id":11637,"name":"jay.xu","email":"jay.xu@emc.com","username":"jay.xu"},"change_message_id":"6a761c65ca4c1753547b0e116bb86ff00a07767f","unresolved":false,"context_lines":[{"line_number":771,"context_line":"        if not self.config.initiator_auto_registration:"},{"line_number":772,"context_line":"            # Invoke connect_host on storage group to register all"},{"line_number":773,"context_line":"            # host information."},{"line_number":774,"context_line":"            storage_group.connect_host(host.name)"},{"line_number":775,"context_line":"        else:"},{"line_number":776,"context_line":"            self.auto_register_initiator(storage_group, host)"},{"line_number":777,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"dab17558_d568d589","line":774,"updated":"2016-05-10 01:52:13.000000000","message":"storage_group.connect_host() should be executed after creating storage group. and it is just invoked one and only one time.","commit_id":"e4bf298b7c92722af594a8452256d72a58325d87"},{"author":{"_account_id":18742,"name":"Ryan Liang","email":"ryan.liang@emc.com","username":"RyanLiang"},"change_message_id":"efead7e2fded8de87a04901b7e05e49caa6bf927","unresolved":false,"context_lines":[{"line_number":771,"context_line":"        if not self.config.initiator_auto_registration:"},{"line_number":772,"context_line":"            # Invoke connect_host on storage group to register all"},{"line_number":773,"context_line":"            # host information."},{"line_number":774,"context_line":"            storage_group.connect_host(host.name)"},{"line_number":775,"context_line":"        else:"},{"line_number":776,"context_line":"            self.auto_register_initiator(storage_group, host)"},{"line_number":777,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"dab17558_cf24ab61","line":774,"in_reply_to":"dab17558_d568d589","updated":"2016-05-10 09:39:57.000000000","message":"Done","commit_id":"e4bf298b7c92722af594a8452256d72a58325d87"},{"author":{"_account_id":11637,"name":"jay.xu","email":"jay.xu@emc.com","username":"jay.xu"},"change_message_id":"6a761c65ca4c1753547b0e116bb86ff00a07767f","unresolved":false,"context_lines":[{"line_number":1183,"context_line":"        :param volume: object of `storops` storage group."},{"line_number":1184,"context_line":"        :param volume: `common.Host` object with initiator information."},{"line_number":1185,"context_line":"        :param volume: `common.Volume` object with volume information."},{"line_number":1186,"context_line":"        :param volume: the HLU number assigned to volume."},{"line_number":1187,"context_line":"        \"\"\""},{"line_number":1188,"context_line":""},{"line_number":1189,"context_line":"        target_io_ports \u003d utils.sift_port_white_list("}],"source_content_type":"text/x-python","patch_set":10,"id":"dab17558_353841a0","line":1186,"updated":"2016-05-10 01:52:13.000000000","message":"copy/paste typo?","commit_id":"e4bf298b7c92722af594a8452256d72a58325d87"},{"author":{"_account_id":18742,"name":"Ryan Liang","email":"ryan.liang@emc.com","username":"RyanLiang"},"change_message_id":"efead7e2fded8de87a04901b7e05e49caa6bf927","unresolved":false,"context_lines":[{"line_number":1183,"context_line":"        :param volume: object of `storops` storage group."},{"line_number":1184,"context_line":"        :param volume: `common.Host` object with initiator information."},{"line_number":1185,"context_line":"        :param volume: `common.Volume` object with volume information."},{"line_number":1186,"context_line":"        :param volume: the HLU number assigned to volume."},{"line_number":1187,"context_line":"        \"\"\""},{"line_number":1188,"context_line":""},{"line_number":1189,"context_line":"        target_io_ports \u003d utils.sift_port_white_list("}],"source_content_type":"text/x-python","patch_set":10,"id":"dab17558_ef1fef05","line":1186,"in_reply_to":"dab17558_353841a0","updated":"2016-05-10 09:39:57.000000000","message":"Done","commit_id":"e4bf298b7c92722af594a8452256d72a58325d87"},{"author":{"_account_id":11637,"name":"jay.xu","email":"jay.xu@emc.com","username":"jay.xu"},"change_message_id":"6a761c65ca4c1753547b0e116bb86ff00a07767f","unresolved":false,"context_lines":[{"line_number":1258,"context_line":"        :param volume: object of `storops` storage group."},{"line_number":1259,"context_line":"        :param volume: `common.Host` object with initiator information."},{"line_number":1260,"context_line":"        :param volume: `common.Volume` object with volume information."},{"line_number":1261,"context_line":"        :param volume: the HLU number assigned to volume."},{"line_number":1262,"context_line":"        \"\"\""},{"line_number":1263,"context_line":""},{"line_number":1264,"context_line":"        if self.lookup_service is None:"}],"source_content_type":"text/x-python","patch_set":10,"id":"dab17558_95c00d7e","line":1261,"updated":"2016-05-10 01:52:13.000000000","message":"copy/paste typo?","commit_id":"e4bf298b7c92722af594a8452256d72a58325d87"},{"author":{"_account_id":18742,"name":"Ryan Liang","email":"ryan.liang@emc.com","username":"RyanLiang"},"change_message_id":"efead7e2fded8de87a04901b7e05e49caa6bf927","unresolved":false,"context_lines":[{"line_number":1258,"context_line":"        :param volume: object of `storops` storage group."},{"line_number":1259,"context_line":"        :param volume: `common.Host` object with initiator information."},{"line_number":1260,"context_line":"        :param volume: `common.Volume` object with volume information."},{"line_number":1261,"context_line":"        :param volume: the HLU number assigned to volume."},{"line_number":1262,"context_line":"        \"\"\""},{"line_number":1263,"context_line":""},{"line_number":1264,"context_line":"        if self.lookup_service is None:"}],"source_content_type":"text/x-python","patch_set":10,"id":"dab17558_8fd5831d","line":1261,"in_reply_to":"dab17558_95c00d7e","updated":"2016-05-10 09:39:57.000000000","message":"Done","commit_id":"e4bf298b7c92722af594a8452256d72a58325d87"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"1ea0ad6b8167a7379bb1f02116888de666b60ae5","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        else:"},{"line_number":109,"context_line":"            # Split the whitelist, remove spaces around the comma,"},{"line_number":110,"context_line":"            # and remove the empty item."},{"line_number":111,"context_line":"            port_strs_configed \u003d set("},{"line_number":112,"context_line":"                [p for p in re.split(\u0027\\s*,\\s*\u0027, ports_whitelist.upper()) if p])"},{"line_number":113,"context_line":"            # For iSCSI port, the format is \u0027A-1-1\u0027,"},{"line_number":114,"context_line":"            # while for FC, it is \u0027A-2\u0027."}],"source_content_type":"text/x-python","patch_set":21,"id":"9abb7d3a_bbb0aede","line":111,"updated":"2016-06-03 18:24:18.000000000","message":"This weird regex stuff would not be necessary if io_port_list was a MultiStrOpt.","commit_id":"e0cbaa8db0d9a53123a80b22b01452a83a22e3bd"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"5a1e0730fda9df5dba1d5d9f594871a2ff018ab7","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        else:"},{"line_number":109,"context_line":"            # Split the whitelist, remove spaces around the comma,"},{"line_number":110,"context_line":"            # and remove the empty item."},{"line_number":111,"context_line":"            port_strs_configed \u003d set("},{"line_number":112,"context_line":"                [p for p in re.split(\u0027\\s*,\\s*\u0027, ports_whitelist.upper()) if p])"},{"line_number":113,"context_line":"            # For iSCSI port, the format is \u0027A-1-1\u0027,"},{"line_number":114,"context_line":"            # while for FC, it is \u0027A-2\u0027."}],"source_content_type":"text/x-python","patch_set":21,"id":"7aa08908_63d1cfcd","line":111,"in_reply_to":"9abb7d3a_bbb0aede","updated":"2016-06-06 05:34:21.000000000","message":"I agree with you that this is weird, and we need a better Opt for this option. the value like \"a-1, b-2\", maybe a ListOpt is more suitable in our scenario.\n\nConsidering that we still have old VNX driver in repository, we are unable to change anything of these options(as in my local, I met a DuplicateOptError after changing opt type).\n\nSo I file a bug \"https://bugs.launchpad.net/cinder/+bug/1589338\" to track this.\n\nthe bug also applied to option \u0027storage_vnx_pool_names\u0027.","commit_id":"e0cbaa8db0d9a53123a80b22b01452a83a22e3bd"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"1ea0ad6b8167a7379bb1f02116888de666b60ae5","unresolved":false,"context_lines":[{"line_number":147,"context_line":"        if \u0027snapcopy\u0027 in volume_metadata:"},{"line_number":148,"context_line":"            # We ignore snapcopy metadata when creating volume"},{"line_number":149,"context_line":"            LOG.warning(_LW(\u0027snapcopy metadata is ignored when\u0027"},{"line_number":150,"context_line":"                            \u0027 creating volume.\u0027))"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"        volume_metadata[\u0027snapcopy\u0027] \u003d \u0027False\u0027"},{"line_number":153,"context_line":"        LOG.info(_LI(\u0027Create Volume: %(volume)s  Size: %(size)s \u0027"}],"source_content_type":"text/x-python","patch_set":21,"id":"9abb7d3a_9b016a6d","line":150,"updated":"2016-06-03 18:24:18.000000000","message":"Warnings are intended to be admin-actionable.  What should an admin do when he sees this message?","commit_id":"e0cbaa8db0d9a53123a80b22b01452a83a22e3bd"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"5a1e0730fda9df5dba1d5d9f594871a2ff018ab7","unresolved":false,"context_lines":[{"line_number":147,"context_line":"        if \u0027snapcopy\u0027 in volume_metadata:"},{"line_number":148,"context_line":"            # We ignore snapcopy metadata when creating volume"},{"line_number":149,"context_line":"            LOG.warning(_LW(\u0027snapcopy metadata is ignored when\u0027"},{"line_number":150,"context_line":"                            \u0027 creating volume.\u0027))"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"        volume_metadata[\u0027snapcopy\u0027] \u003d \u0027False\u0027"},{"line_number":153,"context_line":"        LOG.info(_LI(\u0027Create Volume: %(volume)s  Size: %(size)s \u0027"}],"source_content_type":"text/x-python","patch_set":21,"id":"7aa08908_b12024f9","line":150,"in_reply_to":"9abb7d3a_9b016a6d","updated":"2016-06-06 05:34:21.000000000","message":"Agree, will remove it.","commit_id":"e0cbaa8db0d9a53123a80b22b01452a83a22e3bd"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"1ea0ad6b8167a7379bb1f02116888de666b60ae5","unresolved":false,"context_lines":[{"line_number":828,"context_line":"        self.client.register_initiator(storage_group, host, initiator_port_map)"},{"line_number":829,"context_line":""},{"line_number":830,"context_line":"    def prepare_target_data(self, storage_group, host, volume, hlu):"},{"line_number":831,"context_line":"        raise NotImplementedError"},{"line_number":832,"context_line":""},{"line_number":833,"context_line":"    def initialize_connection(self, cinder_volume, connector):"},{"line_number":834,"context_line":"        \"\"\"Initializes the connection to `cinder_volume`.\"\"\""}],"source_content_type":"text/x-python","patch_set":21,"id":"9abb7d3a_fbc4f692","line":831,"updated":"2016-06-03 18:24:18.000000000","message":"NotImplementedError()","commit_id":"e0cbaa8db0d9a53123a80b22b01452a83a22e3bd"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"5a1e0730fda9df5dba1d5d9f594871a2ff018ab7","unresolved":false,"context_lines":[{"line_number":828,"context_line":"        self.client.register_initiator(storage_group, host, initiator_port_map)"},{"line_number":829,"context_line":""},{"line_number":830,"context_line":"    def prepare_target_data(self, storage_group, host, volume, hlu):"},{"line_number":831,"context_line":"        raise NotImplementedError"},{"line_number":832,"context_line":""},{"line_number":833,"context_line":"    def initialize_connection(self, cinder_volume, connector):"},{"line_number":834,"context_line":"        \"\"\"Initializes the connection to `cinder_volume`.\"\"\""}],"source_content_type":"text/x-python","patch_set":21,"id":"7aa08908_515bc054","line":831,"in_reply_to":"9abb7d3a_fbc4f692","updated":"2016-06-06 05:34:21.000000000","message":"Done","commit_id":"e0cbaa8db0d9a53123a80b22b01452a83a22e3bd"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"1ea0ad6b8167a7379bb1f02116888de666b60ae5","unresolved":false,"context_lines":[{"line_number":1146,"context_line":"        super(ISCSIAdapter, self).__init__(configuration, active_backend_id)"},{"line_number":1147,"context_line":"        if configuration.iscsi_initiators:"},{"line_number":1148,"context_line":"            self.iscsi_initiator_map \u003d ("},{"line_number":1149,"context_line":"                json.loads(configuration.iscsi_initiators))"},{"line_number":1150,"context_line":"            LOG.info(_LI(\"Configured iscsi_initiators: %s\"),"},{"line_number":1151,"context_line":"                     self.iscsi_initiator_map)"},{"line_number":1152,"context_line":"        self.allowed_ports \u003d self.validate_ports("}],"source_content_type":"text/x-python","patch_set":21,"id":"9abb7d3a_7b7926fc","line":1149,"updated":"2016-06-03 18:24:18.000000000","message":"Doing a json.loads() from a StrOpt seems odd.  What does a value for this option usually look like?\n\nI suspect there\u0027s a cleaner way to do this.","commit_id":"e0cbaa8db0d9a53123a80b22b01452a83a22e3bd"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"5a1e0730fda9df5dba1d5d9f594871a2ff018ab7","unresolved":false,"context_lines":[{"line_number":1146,"context_line":"        super(ISCSIAdapter, self).__init__(configuration, active_backend_id)"},{"line_number":1147,"context_line":"        if configuration.iscsi_initiators:"},{"line_number":1148,"context_line":"            self.iscsi_initiator_map \u003d ("},{"line_number":1149,"context_line":"                json.loads(configuration.iscsi_initiators))"},{"line_number":1150,"context_line":"            LOG.info(_LI(\"Configured iscsi_initiators: %s\"),"},{"line_number":1151,"context_line":"                     self.iscsi_initiator_map)"},{"line_number":1152,"context_line":"        self.allowed_ports \u003d self.validate_ports("}],"source_content_type":"text/x-python","patch_set":21,"id":"7aa08908_919088ee","line":1149,"in_reply_to":"9abb7d3a_7b7926fc","updated":"2016-06-06 05:34:21.000000000","message":"it looks like below:\niscsi_initiators \u003d {\"host1\":[\"10.0.0.1\", \"10.0.0.2\"],\"host2\":[\"10.0.0.3\"]}","commit_id":"e0cbaa8db0d9a53123a80b22b01452a83a22e3bd"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9aa1a517bf1e42bcffc5719e92269d1de92f4ed9","unresolved":false,"context_lines":[{"line_number":570,"context_line":""},{"line_number":571,"context_line":"            # Handle pool state Initializing, Ready, Faulted, Offline"},{"line_number":572,"context_line":"            # or Deleting."},{"line_number":573,"context_line":"            if pool.state in (\u0027Initializing\u0027, \u0027Offline\u0027, \u0027Deleting\u0027):"},{"line_number":574,"context_line":"                pool_stats[\u0027free_capacity_gb\u0027] \u003d 0"},{"line_number":575,"context_line":"                LOG.warning(_LW(\u0027Storage Pool [%(pool)s] is [%(state)s].\u0027),"},{"line_number":576,"context_line":"                            {\u0027pool\u0027: pool.name,"}],"source_content_type":"text/x-python","patch_set":25,"id":"7aa08908_4a410239","line":573,"updated":"2016-06-10 18:01:26.000000000","message":"Can you create a constant for all valid pool states?","commit_id":"4f7fe68635f0baa9f511dfe4c5f65a461a89171b"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"ea2a20b05cf7b9fb52c1ede1eb058686eaca0468","unresolved":false,"context_lines":[{"line_number":570,"context_line":""},{"line_number":571,"context_line":"            # Handle pool state Initializing, Ready, Faulted, Offline"},{"line_number":572,"context_line":"            # or Deleting."},{"line_number":573,"context_line":"            if pool.state in (\u0027Initializing\u0027, \u0027Offline\u0027, \u0027Deleting\u0027):"},{"line_number":574,"context_line":"                pool_stats[\u0027free_capacity_gb\u0027] \u003d 0"},{"line_number":575,"context_line":"                LOG.warning(_LW(\u0027Storage Pool [%(pool)s] is [%(state)s].\u0027),"},{"line_number":576,"context_line":"                            {\u0027pool\u0027: pool.name,"}],"source_content_type":"text/x-python","patch_set":25,"id":"7aa08908_4e3e16db","line":573,"in_reply_to":"7aa08908_4a410239","updated":"2016-06-12 09:58:41.000000000","message":"Done","commit_id":"4f7fe68635f0baa9f511dfe4c5f65a461a89171b"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9aa1a517bf1e42bcffc5719e92269d1de92f4ed9","unresolved":false,"context_lines":[{"line_number":1011,"context_line":"    def cleanup_lun_replication(self, volume):"},{"line_number":1012,"context_line":"        specs \u003d common.ExtraSpecs.from_volume(volume)"},{"line_number":1013,"context_line":"        if specs.is_replication_enabled:"},{"line_number":1014,"context_line":"            LOG.debug(\u0027Starting cleanup replication form volume: \u0027"},{"line_number":1015,"context_line":"                      \u0027%s.\u0027, volume.id)"},{"line_number":1016,"context_line":"            mirror_name \u003d utils.construct_mirror_name(volume)"},{"line_number":1017,"context_line":"            mirror_view \u003d self.build_mirror_view(self.config, True)"}],"source_content_type":"text/x-python","patch_set":25,"id":"7aa08908_8af12ad0","line":1014,"updated":"2016-06-10 18:01:26.000000000","message":"s/form/for","commit_id":"4f7fe68635f0baa9f511dfe4c5f65a461a89171b"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"ea2a20b05cf7b9fb52c1ede1eb058686eaca0468","unresolved":false,"context_lines":[{"line_number":1011,"context_line":"    def cleanup_lun_replication(self, volume):"},{"line_number":1012,"context_line":"        specs \u003d common.ExtraSpecs.from_volume(volume)"},{"line_number":1013,"context_line":"        if specs.is_replication_enabled:"},{"line_number":1014,"context_line":"            LOG.debug(\u0027Starting cleanup replication form volume: \u0027"},{"line_number":1015,"context_line":"                      \u0027%s.\u0027, volume.id)"},{"line_number":1016,"context_line":"            mirror_name \u003d utils.construct_mirror_name(volume)"},{"line_number":1017,"context_line":"            mirror_view \u003d self.build_mirror_view(self.config, True)"}],"source_content_type":"text/x-python","patch_set":25,"id":"7aa08908_890e3830","line":1014,"in_reply_to":"7aa08908_8af12ad0","updated":"2016-06-12 09:58:41.000000000","message":"Done","commit_id":"4f7fe68635f0baa9f511dfe4c5f65a461a89171b"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9aa1a517bf1e42bcffc5719e92269d1de92f4ed9","unresolved":false,"context_lines":[{"line_number":1017,"context_line":"            mirror_view \u003d self.build_mirror_view(self.config, True)"},{"line_number":1018,"context_line":"            mirror_view.destroy_mirror(mirror_name, volume.name)"},{"line_number":1019,"context_line":"            LOG.info("},{"line_number":1020,"context_line":"                _LI(\u0027Successfully destroy replication for volume: %s\u0027),"},{"line_number":1021,"context_line":"                volume.id)"},{"line_number":1022,"context_line":""},{"line_number":1023,"context_line":"    def build_mirror_view(self, configuration, failover\u003dTrue):"}],"source_content_type":"text/x-python","patch_set":25,"id":"7aa08908_6aecbef3","line":1020,"updated":"2016-06-10 18:01:26.000000000","message":"destroyed","commit_id":"4f7fe68635f0baa9f511dfe4c5f65a461a89171b"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"ea2a20b05cf7b9fb52c1ede1eb058686eaca0468","unresolved":false,"context_lines":[{"line_number":1017,"context_line":"            mirror_view \u003d self.build_mirror_view(self.config, True)"},{"line_number":1018,"context_line":"            mirror_view.destroy_mirror(mirror_name, volume.name)"},{"line_number":1019,"context_line":"            LOG.info("},{"line_number":1020,"context_line":"                _LI(\u0027Successfully destroy replication for volume: %s\u0027),"},{"line_number":1021,"context_line":"                volume.id)"},{"line_number":1022,"context_line":""},{"line_number":1023,"context_line":"    def build_mirror_view(self, configuration, failover\u003dTrue):"}],"source_content_type":"text/x-python","patch_set":25,"id":"7aa08908_292624ba","line":1020,"in_reply_to":"7aa08908_6aecbef3","updated":"2016-06-12 09:58:41.000000000","message":"Done","commit_id":"4f7fe68635f0baa9f511dfe4c5f65a461a89171b"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9aa1a517bf1e42bcffc5719e92269d1de92f4ed9","unresolved":false,"context_lines":[{"line_number":1035,"context_line":"        elif len(rep_devices) \u003d\u003d 1:"},{"line_number":1036,"context_line":"            if not self.client.is_mirror_view_enabled():"},{"line_number":1037,"context_line":"                error_msg \u003d _(\u0027Replication is configured, \u0027"},{"line_number":1038,"context_line":"                              \u0027but not MirrorView/S enabler installed on VNX.\u0027)"},{"line_number":1039,"context_line":"                raise exception.InvalidInput(reason\u003derror_msg)"},{"line_number":1040,"context_line":"            rep_list \u003d common.ReplicationDeviceList(configuration)"},{"line_number":1041,"context_line":"            device \u003d rep_list[0]"}],"source_content_type":"text/x-python","patch_set":25,"id":"7aa08908_eab6eef7","line":1038,"updated":"2016-06-10 18:01:26.000000000","message":"s/not/no","commit_id":"4f7fe68635f0baa9f511dfe4c5f65a461a89171b"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"ea2a20b05cf7b9fb52c1ede1eb058686eaca0468","unresolved":false,"context_lines":[{"line_number":1035,"context_line":"        elif len(rep_devices) \u003d\u003d 1:"},{"line_number":1036,"context_line":"            if not self.client.is_mirror_view_enabled():"},{"line_number":1037,"context_line":"                error_msg \u003d _(\u0027Replication is configured, \u0027"},{"line_number":1038,"context_line":"                              \u0027but not MirrorView/S enabler installed on VNX.\u0027)"},{"line_number":1039,"context_line":"                raise exception.InvalidInput(reason\u003derror_msg)"},{"line_number":1040,"context_line":"            rep_list \u003d common.ReplicationDeviceList(configuration)"},{"line_number":1041,"context_line":"            device \u003d rep_list[0]"}],"source_content_type":"text/x-python","patch_set":25,"id":"7aa08908_09a408b7","line":1038,"in_reply_to":"7aa08908_eab6eef7","updated":"2016-06-12 09:58:41.000000000","message":"Done","commit_id":"4f7fe68635f0baa9f511dfe4c5f65a461a89171b"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"492644467fe0b5a6d3be33d38cd5b729ea4e2d75","unresolved":false,"context_lines":[{"line_number":132,"context_line":"            LOG.warning(_LW(\u0027[%(group)s] ignore_pool_full_threshold: True. \u0027"},{"line_number":133,"context_line":"                            \u0027LUN creation will still be forced even if the \u0027"},{"line_number":134,"context_line":"                            \u0027pool full threshold is exceeded.\u0027)"},{"line_number":135,"context_line":"                        % {\u0027group\u0027: self.config.config_group})"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"        if self.config.destroy_empty_storage_group:"},{"line_number":138,"context_line":"            LOG.warning(_LW(\u0027[%(group)s] destroy_empty_storage_group: True. \u0027"}],"source_content_type":"text/x-python","patch_set":38,"id":"3aaa91ec_1ec7d296","line":135,"range":{"start_line":135,"start_character":24,"end_line":135,"end_character":25},"updated":"2016-06-30 15:28:27.000000000","message":"% \u003e ,","commit_id":"1b255e3e9d5a64504463f1c905b216a7b1cb6a2e"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"17c6671e7ab9d27c92231a243ce916d064c9a4ad","unresolved":false,"context_lines":[{"line_number":132,"context_line":"            LOG.warning(_LW(\u0027[%(group)s] ignore_pool_full_threshold: True. \u0027"},{"line_number":133,"context_line":"                            \u0027LUN creation will still be forced even if the \u0027"},{"line_number":134,"context_line":"                            \u0027pool full threshold is exceeded.\u0027)"},{"line_number":135,"context_line":"                        % {\u0027group\u0027: self.config.config_group})"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"        if self.config.destroy_empty_storage_group:"},{"line_number":138,"context_line":"            LOG.warning(_LW(\u0027[%(group)s] destroy_empty_storage_group: True. \u0027"}],"source_content_type":"text/x-python","patch_set":38,"id":"3aaa91ec_81234c04","line":135,"range":{"start_line":135,"start_character":24,"end_line":135,"end_character":25},"in_reply_to":"3aaa91ec_1ec7d296","updated":"2016-07-01 02:18:04.000000000","message":"Done","commit_id":"1b255e3e9d5a64504463f1c905b216a7b1cb6a2e"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"492644467fe0b5a6d3be33d38cd5b729ea4e2d75","unresolved":false,"context_lines":[{"line_number":138,"context_line":"            LOG.warning(_LW(\u0027[%(group)s] destroy_empty_storage_group: True. \u0027"},{"line_number":139,"context_line":"                            \u0027Empty storage group will be deleted after volume \u0027"},{"line_number":140,"context_line":"                            \u0027is detached.\u0027)"},{"line_number":141,"context_line":"                        % {\u0027group\u0027: self.config.config_group})"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"        if not self.config.initiator_auto_registration:"},{"line_number":144,"context_line":"            LOG.info(_LI(\u0027[%(group)s] initiator_auto_registration: False. \u0027"}],"source_content_type":"text/x-python","patch_set":38,"id":"3aaa91ec_5ebdda00","line":141,"range":{"start_line":141,"start_character":24,"end_line":141,"end_character":25},"updated":"2016-06-30 15:28:27.000000000","message":"% \u003e ,","commit_id":"1b255e3e9d5a64504463f1c905b216a7b1cb6a2e"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"17c6671e7ab9d27c92231a243ce916d064c9a4ad","unresolved":false,"context_lines":[{"line_number":138,"context_line":"            LOG.warning(_LW(\u0027[%(group)s] destroy_empty_storage_group: True. \u0027"},{"line_number":139,"context_line":"                            \u0027Empty storage group will be deleted after volume \u0027"},{"line_number":140,"context_line":"                            \u0027is detached.\u0027)"},{"line_number":141,"context_line":"                        % {\u0027group\u0027: self.config.config_group})"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"        if not self.config.initiator_auto_registration:"},{"line_number":144,"context_line":"            LOG.info(_LI(\u0027[%(group)s] initiator_auto_registration: False. \u0027"}],"source_content_type":"text/x-python","patch_set":38,"id":"3aaa91ec_4184c4d1","line":141,"range":{"start_line":141,"start_character":24,"end_line":141,"end_character":25},"in_reply_to":"3aaa91ec_5ebdda00","updated":"2016-07-01 02:18:04.000000000","message":"Done","commit_id":"1b255e3e9d5a64504463f1c905b216a7b1cb6a2e"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"492644467fe0b5a6d3be33d38cd5b729ea4e2d75","unresolved":false,"context_lines":[{"line_number":144,"context_line":"            LOG.info(_LI(\u0027[%(group)s] initiator_auto_registration: False. \u0027"},{"line_number":145,"context_line":"                         \u0027Initiator auto registration is not enabled. \u0027"},{"line_number":146,"context_line":"                         \u0027Please register initiator manually.\u0027)"},{"line_number":147,"context_line":"                     % {\u0027group\u0027: self.config.config_group})"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"        if self.config.force_delete_lun_in_storagegroup:"},{"line_number":150,"context_line":"            LOG.warning(_LW("}],"source_content_type":"text/x-python","patch_set":38,"id":"3aaa91ec_7e3c1693","line":147,"range":{"start_line":147,"start_character":21,"end_line":147,"end_character":22},"updated":"2016-06-30 15:28:27.000000000","message":"% \u003e ,","commit_id":"1b255e3e9d5a64504463f1c905b216a7b1cb6a2e"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"17c6671e7ab9d27c92231a243ce916d064c9a4ad","unresolved":false,"context_lines":[{"line_number":144,"context_line":"            LOG.info(_LI(\u0027[%(group)s] initiator_auto_registration: False. \u0027"},{"line_number":145,"context_line":"                         \u0027Initiator auto registration is not enabled. \u0027"},{"line_number":146,"context_line":"                         \u0027Please register initiator manually.\u0027)"},{"line_number":147,"context_line":"                     % {\u0027group\u0027: self.config.config_group})"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"        if self.config.force_delete_lun_in_storagegroup:"},{"line_number":150,"context_line":"            LOG.warning(_LW("}],"source_content_type":"text/x-python","patch_set":38,"id":"3aaa91ec_c170b40a","line":147,"range":{"start_line":147,"start_character":21,"end_line":147,"end_character":22},"in_reply_to":"3aaa91ec_7e3c1693","updated":"2016-07-01 02:18:04.000000000","message":"Done","commit_id":"1b255e3e9d5a64504463f1c905b216a7b1cb6a2e"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"492644467fe0b5a6d3be33d38cd5b729ea4e2d75","unresolved":false,"context_lines":[{"line_number":149,"context_line":"        if self.config.force_delete_lun_in_storagegroup:"},{"line_number":150,"context_line":"            LOG.warning(_LW("},{"line_number":151,"context_line":"                \u0027[%(group)s] force_delete_lun_in_storagegroup\u003dTrue\u0027)"},{"line_number":152,"context_line":"                % {\u0027group\u0027: self.config.config_group})"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"        if self.config.ignore_pool_full_threshold:"},{"line_number":155,"context_line":"            LOG.warning(_LW(\u0027[%(group)s] ignore_pool_full_threshold: True. \u0027"}],"source_content_type":"text/x-python","patch_set":38,"id":"3aaa91ec_be42fe0c","line":152,"range":{"start_line":152,"start_character":16,"end_line":152,"end_character":17},"updated":"2016-06-30 15:28:27.000000000","message":"% \u003e ,","commit_id":"1b255e3e9d5a64504463f1c905b216a7b1cb6a2e"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"17c6671e7ab9d27c92231a243ce916d064c9a4ad","unresolved":false,"context_lines":[{"line_number":149,"context_line":"        if self.config.force_delete_lun_in_storagegroup:"},{"line_number":150,"context_line":"            LOG.warning(_LW("},{"line_number":151,"context_line":"                \u0027[%(group)s] force_delete_lun_in_storagegroup\u003dTrue\u0027)"},{"line_number":152,"context_line":"                % {\u0027group\u0027: self.config.config_group})"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"        if self.config.ignore_pool_full_threshold:"},{"line_number":155,"context_line":"            LOG.warning(_LW(\u0027[%(group)s] ignore_pool_full_threshold: True. \u0027"}],"source_content_type":"text/x-python","patch_set":38,"id":"3aaa91ec_e175f0f9","line":152,"range":{"start_line":152,"start_character":16,"end_line":152,"end_character":17},"in_reply_to":"3aaa91ec_be42fe0c","updated":"2016-07-01 02:18:04.000000000","message":"Done","commit_id":"1b255e3e9d5a64504463f1c905b216a7b1cb6a2e"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"492644467fe0b5a6d3be33d38cd5b729ea4e2d75","unresolved":false,"context_lines":[{"line_number":155,"context_line":"            LOG.warning(_LW(\u0027[%(group)s] ignore_pool_full_threshold: True. \u0027"},{"line_number":156,"context_line":"                            \u0027LUN creation will still be forced even if the \u0027"},{"line_number":157,"context_line":"                            \u0027pool full threshold is exceeded.\u0027)"},{"line_number":158,"context_line":"                        % {\u0027group\u0027: self.config.config_group})"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    def _build_port_str(self, port):"},{"line_number":161,"context_line":"        raise NotImplementedError()"}],"source_content_type":"text/x-python","patch_set":38,"id":"3aaa91ec_3e4f2e35","line":158,"range":{"start_line":158,"start_character":23,"end_line":158,"end_character":25},"updated":"2016-06-30 15:28:27.000000000","message":"% \u003e ,","commit_id":"1b255e3e9d5a64504463f1c905b216a7b1cb6a2e"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"17c6671e7ab9d27c92231a243ce916d064c9a4ad","unresolved":false,"context_lines":[{"line_number":155,"context_line":"            LOG.warning(_LW(\u0027[%(group)s] ignore_pool_full_threshold: True. \u0027"},{"line_number":156,"context_line":"                            \u0027LUN creation will still be forced even if the \u0027"},{"line_number":157,"context_line":"                            \u0027pool full threshold is exceeded.\u0027)"},{"line_number":158,"context_line":"                        % {\u0027group\u0027: self.config.config_group})"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    def _build_port_str(self, port):"},{"line_number":161,"context_line":"        raise NotImplementedError()"}],"source_content_type":"text/x-python","patch_set":38,"id":"3aaa91ec_a16f6829","line":158,"range":{"start_line":158,"start_character":23,"end_line":158,"end_character":25},"in_reply_to":"3aaa91ec_3e4f2e35","updated":"2016-07-01 02:18:04.000000000","message":"Done","commit_id":"1b255e3e9d5a64504463f1c905b216a7b1cb6a2e"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ca82ff5172e3ad053b37e5a4500204ee4d6af0a7","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        if naviseccli_path is None or len(naviseccli_path.strip()) \u003d\u003d 0:"},{"line_number":95,"context_line":"            LOG.warning(_LW(\u0027[%(group)s] naviseccli_path is not set or set to \u0027"},{"line_number":96,"context_line":"                            \u0027an empty string. None will be passed into \u0027"},{"line_number":97,"context_line":"                            \u0027storops.\u0027) % {\u0027group\u0027: self.config.config_group})"},{"line_number":98,"context_line":"            self.config.naviseccli_path \u003d None"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"        # Check option `storage_vnx_pool_names`."}],"source_content_type":"text/x-python","patch_set":46,"id":"1aa78d24_2224b3ad","line":97,"updated":"2016-07-05 03:57:25.000000000","message":"Use , instead of %.","commit_id":"5f4273ffca5f5b8cf478ed10da4191c8b0eeb1d2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"91b02f0921da5fb5eb4c8ec522286eae30853283","unresolved":false,"context_lines":[{"line_number":1059,"context_line":"        provision \u003d specs.provision"},{"line_number":1060,"context_line":"        tier \u003d specs.tier"},{"line_number":1061,"context_line":"        rep_update \u003d {\u0027replication_driver_data\u0027: None,"},{"line_number":1062,"context_line":"                      \u0027replication_status\u0027: \u0027disabled\u0027}"},{"line_number":1063,"context_line":"        if specs.is_replication_enabled:"},{"line_number":1064,"context_line":"            LOG.debug(\u0027Starting setup replication \u0027"},{"line_number":1065,"context_line":"                      \u0027for volume: %s.\u0027, volume.id)"}],"source_content_type":"text/x-python","patch_set":47,"id":"1aa78d24_c1610d3b","line":1062,"updated":"2016-07-06 15:49:42.000000000","message":"Use fields.ReplicationStatus\n\nhttps://github.com/openstack/cinder/blob/master/cinder/objects/fields.py#L67","commit_id":"cebc9e1ab191b66b857ac8b71b18b2a8caa1ca56"},{"author":{"_account_id":18742,"name":"Ryan Liang","email":"ryan.liang@emc.com","username":"RyanLiang"},"change_message_id":"dd01b646873d0a2c93dd68a58109ebbf8134d2e1","unresolved":false,"context_lines":[{"line_number":1059,"context_line":"        provision \u003d specs.provision"},{"line_number":1060,"context_line":"        tier \u003d specs.tier"},{"line_number":1061,"context_line":"        rep_update \u003d {\u0027replication_driver_data\u0027: None,"},{"line_number":1062,"context_line":"                      \u0027replication_status\u0027: \u0027disabled\u0027}"},{"line_number":1063,"context_line":"        if specs.is_replication_enabled:"},{"line_number":1064,"context_line":"            LOG.debug(\u0027Starting setup replication \u0027"},{"line_number":1065,"context_line":"                      \u0027for volume: %s.\u0027, volume.id)"}],"source_content_type":"text/x-python","patch_set":47,"id":"1aa78d24_25955832","line":1062,"in_reply_to":"1aa78d24_c1610d3b","updated":"2016-07-07 12:05:44.000000000","message":"Done","commit_id":"cebc9e1ab191b66b857ac8b71b18b2a8caa1ca56"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"91b02f0921da5fb5eb4c8ec522286eae30853283","unresolved":false,"context_lines":[{"line_number":1073,"context_line":"                provision, tier)"},{"line_number":1074,"context_line":""},{"line_number":1075,"context_line":"            LOG.info(_LI(\u0027Successfully setup replication for %s.\u0027), volume.id)"},{"line_number":1076,"context_line":"            rep_update.update({\u0027replication_status\u0027: \u0027enabled\u0027})"},{"line_number":1077,"context_line":"        return rep_update"},{"line_number":1078,"context_line":""},{"line_number":1079,"context_line":"    def cleanup_lun_replication(self, volume):"}],"source_content_type":"text/x-python","patch_set":47,"id":"1aa78d24_4156bd5c","line":1076,"updated":"2016-07-06 15:49:42.000000000","message":"Same","commit_id":"cebc9e1ab191b66b857ac8b71b18b2a8caa1ca56"},{"author":{"_account_id":18742,"name":"Ryan Liang","email":"ryan.liang@emc.com","username":"RyanLiang"},"change_message_id":"dd01b646873d0a2c93dd68a58109ebbf8134d2e1","unresolved":false,"context_lines":[{"line_number":1073,"context_line":"                provision, tier)"},{"line_number":1074,"context_line":""},{"line_number":1075,"context_line":"            LOG.info(_LI(\u0027Successfully setup replication for %s.\u0027), volume.id)"},{"line_number":1076,"context_line":"            rep_update.update({\u0027replication_status\u0027: \u0027enabled\u0027})"},{"line_number":1077,"context_line":"        return rep_update"},{"line_number":1078,"context_line":""},{"line_number":1079,"context_line":"    def cleanup_lun_replication(self, volume):"}],"source_content_type":"text/x-python","patch_set":47,"id":"1aa78d24_85988c6b","line":1076,"in_reply_to":"1aa78d24_4156bd5c","updated":"2016-07-07 12:05:44.000000000","message":"Done","commit_id":"cebc9e1ab191b66b857ac8b71b18b2a8caa1ca56"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"91b02f0921da5fb5eb4c8ec522286eae30853283","unresolved":false,"context_lines":[{"line_number":1145,"context_line":"        volume_update_list \u003d []"},{"line_number":1146,"context_line":"        self.validate_backend_id(secondary_backend_id)"},{"line_number":1147,"context_line":"        if secondary_backend_id !\u003d \u0027default\u0027:"},{"line_number":1148,"context_line":"            rep_status \u003d \u0027failed-over\u0027"},{"line_number":1149,"context_line":"            mirror_view \u003d self.build_mirror_view(self.config, True)"},{"line_number":1150,"context_line":"        else:"},{"line_number":1151,"context_line":"            rep_status \u003d \u0027enabled\u0027"}],"source_content_type":"text/x-python","patch_set":47,"id":"1aa78d24_c1ef4d85","line":1148,"updated":"2016-07-06 15:49:42.000000000","message":"Same","commit_id":"cebc9e1ab191b66b857ac8b71b18b2a8caa1ca56"},{"author":{"_account_id":18742,"name":"Ryan Liang","email":"ryan.liang@emc.com","username":"RyanLiang"},"change_message_id":"dd01b646873d0a2c93dd68a58109ebbf8134d2e1","unresolved":false,"context_lines":[{"line_number":1145,"context_line":"        volume_update_list \u003d []"},{"line_number":1146,"context_line":"        self.validate_backend_id(secondary_backend_id)"},{"line_number":1147,"context_line":"        if secondary_backend_id !\u003d \u0027default\u0027:"},{"line_number":1148,"context_line":"            rep_status \u003d \u0027failed-over\u0027"},{"line_number":1149,"context_line":"            mirror_view \u003d self.build_mirror_view(self.config, True)"},{"line_number":1150,"context_line":"        else:"},{"line_number":1151,"context_line":"            rep_status \u003d \u0027enabled\u0027"}],"source_content_type":"text/x-python","patch_set":47,"id":"1aa78d24_e5f6b05b","line":1148,"in_reply_to":"1aa78d24_c1ef4d85","updated":"2016-07-07 12:05:44.000000000","message":"Done","commit_id":"cebc9e1ab191b66b857ac8b71b18b2a8caa1ca56"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"91b02f0921da5fb5eb4c8ec522286eae30853283","unresolved":false,"context_lines":[{"line_number":1148,"context_line":"            rep_status \u003d \u0027failed-over\u0027"},{"line_number":1149,"context_line":"            mirror_view \u003d self.build_mirror_view(self.config, True)"},{"line_number":1150,"context_line":"        else:"},{"line_number":1151,"context_line":"            rep_status \u003d \u0027enabled\u0027"},{"line_number":1152,"context_line":"            mirror_view \u003d self.build_mirror_view(self.config, False)"},{"line_number":1153,"context_line":""},{"line_number":1154,"context_line":"        def failover_volume(volume, new_status):"}],"source_content_type":"text/x-python","patch_set":47,"id":"1aa78d24_e1ea4973","line":1151,"updated":"2016-07-06 15:49:42.000000000","message":"Same.\n\nPlease change other places too.","commit_id":"cebc9e1ab191b66b857ac8b71b18b2a8caa1ca56"},{"author":{"_account_id":18742,"name":"Ryan Liang","email":"ryan.liang@emc.com","username":"RyanLiang"},"change_message_id":"dd01b646873d0a2c93dd68a58109ebbf8134d2e1","unresolved":false,"context_lines":[{"line_number":1148,"context_line":"            rep_status \u003d \u0027failed-over\u0027"},{"line_number":1149,"context_line":"            mirror_view \u003d self.build_mirror_view(self.config, True)"},{"line_number":1150,"context_line":"        else:"},{"line_number":1151,"context_line":"            rep_status \u003d \u0027enabled\u0027"},{"line_number":1152,"context_line":"            mirror_view \u003d self.build_mirror_view(self.config, False)"},{"line_number":1153,"context_line":""},{"line_number":1154,"context_line":"        def failover_volume(volume, new_status):"}],"source_content_type":"text/x-python","patch_set":47,"id":"1aa78d24_c58c54dc","line":1151,"in_reply_to":"1aa78d24_e1ea4973","updated":"2016-07-07 12:05:44.000000000","message":"Done","commit_id":"cebc9e1ab191b66b857ac8b71b18b2a8caa1ca56"}],"cinder/volume/drivers/emc/vnx/client.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9aa1a517bf1e42bcffc5719e92269d1de92f4ed9","unresolved":false,"context_lines":[{"line_number":55,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    @staticmethod"},{"line_number":58,"context_line":"    def is_object_existed(vnx_obj):"},{"line_number":59,"context_line":"        utils.update_res_without_poll(vnx_obj)"},{"line_number":60,"context_line":"        return vnx_obj.existed"},{"line_number":61,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"7aa08908_8af2ca98","line":58,"updated":"2016-06-10 18:01:26.000000000","message":"s/existed/existing","commit_id":"4f7fe68635f0baa9f511dfe4c5f65a461a89171b"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"ea2a20b05cf7b9fb52c1ede1eb058686eaca0468","unresolved":false,"context_lines":[{"line_number":55,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    @staticmethod"},{"line_number":58,"context_line":"    def is_object_existed(vnx_obj):"},{"line_number":59,"context_line":"        utils.update_res_without_poll(vnx_obj)"},{"line_number":60,"context_line":"        return vnx_obj.existed"},{"line_number":61,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"7aa08908_695aec84","line":58,"in_reply_to":"7aa08908_8af2ca98","updated":"2016-06-12 09:58:41.000000000","message":"Hi Xing, I Will defer this comments, since it\u0027s not just for driver but also for storops.\nif we decide to update this function name, storops needs to update accordingly as well.","commit_id":"4f7fe68635f0baa9f511dfe4c5f65a461a89171b"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9aa1a517bf1e42bcffc5719e92269d1de92f4ed9","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    @staticmethod"},{"line_number":58,"context_line":"    def is_object_existed(vnx_obj):"},{"line_number":59,"context_line":"        utils.update_res_without_poll(vnx_obj)"},{"line_number":60,"context_line":"        return vnx_obj.existed"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    @staticmethod"},{"line_number":63,"context_line":"    def is_lun_ops_ready(lun):"}],"source_content_type":"text/x-python","patch_set":25,"id":"7aa08908_4a6d8231","line":60,"updated":"2016-06-10 18:01:26.000000000","message":"existing","commit_id":"4f7fe68635f0baa9f511dfe4c5f65a461a89171b"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"ea2a20b05cf7b9fb52c1ede1eb058686eaca0468","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    @staticmethod"},{"line_number":58,"context_line":"    def is_object_existed(vnx_obj):"},{"line_number":59,"context_line":"        utils.update_res_without_poll(vnx_obj)"},{"line_number":60,"context_line":"        return vnx_obj.existed"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    @staticmethod"},{"line_number":63,"context_line":"    def is_lun_ops_ready(lun):"}],"source_content_type":"text/x-python","patch_set":25,"id":"7aa08908_a954d453","line":60,"in_reply_to":"7aa08908_4a6d8231","updated":"2016-06-12 09:58:41.000000000","message":"See my last comment","commit_id":"4f7fe68635f0baa9f511dfe4c5f65a461a89171b"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9aa1a517bf1e42bcffc5719e92269d1de92f4ed9","unresolved":false,"context_lines":[{"line_number":386,"context_line":"        try:"},{"line_number":387,"context_line":"            lun.enable_compression(ignore_thresholds\u003dTrue)"},{"line_number":388,"context_line":"        except storops_ex.VNXCompressionAlreadyEnabledError:"},{"line_number":389,"context_line":"            LOG.warning(_LW(\"Compression has already enabled on %s.\"),"},{"line_number":390,"context_line":"                        lun.name)"},{"line_number":391,"context_line":"            pass"},{"line_number":392,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"7aa08908_caedf28f","line":389,"updated":"2016-06-10 18:01:26.000000000","message":"Compression has already been enabled on...","commit_id":"4f7fe68635f0baa9f511dfe4c5f65a461a89171b"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"ea2a20b05cf7b9fb52c1ede1eb058686eaca0468","unresolved":false,"context_lines":[{"line_number":386,"context_line":"        try:"},{"line_number":387,"context_line":"            lun.enable_compression(ignore_thresholds\u003dTrue)"},{"line_number":388,"context_line":"        except storops_ex.VNXCompressionAlreadyEnabledError:"},{"line_number":389,"context_line":"            LOG.warning(_LW(\"Compression has already enabled on %s.\"),"},{"line_number":390,"context_line":"                        lun.name)"},{"line_number":391,"context_line":"            pass"},{"line_number":392,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"7aa08908_299bc4ca","line":389,"in_reply_to":"7aa08908_caedf28f","updated":"2016-06-12 09:58:41.000000000","message":"Done","commit_id":"4f7fe68635f0baa9f511dfe4c5f65a461a89171b"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e775c57ff348efab8a2f996701afeef853a36e3a","unresolved":false,"context_lines":[{"line_number":247,"context_line":"        try:"},{"line_number":248,"context_line":"            snap.delete()"},{"line_number":249,"context_line":"        except storops_ex.VNXSnapNotExistsError as ex:"},{"line_number":250,"context_line":"            LOG.warning(_LW(\"Snapshot %(name)s may deleted already. \""},{"line_number":251,"context_line":"                            \"Message: %(msg)s\"),"},{"line_number":252,"context_line":"                        {\u0027name\u0027: snapshot_name, \u0027msg\u0027: ex.message})"},{"line_number":253,"context_line":"            pass  # Ignore the failure that due to retry."}],"source_content_type":"text/x-python","patch_set":34,"id":"3aaa91ec_f52edff8","line":250,"updated":"2016-06-22 18:54:10.000000000","message":"may be deleted","commit_id":"704045733e41f830bd312511795fa190932708a6"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"5852d532d103ada33c57e4cd42bc13a2d23fc383","unresolved":false,"context_lines":[{"line_number":247,"context_line":"        try:"},{"line_number":248,"context_line":"            snap.delete()"},{"line_number":249,"context_line":"        except storops_ex.VNXSnapNotExistsError as ex:"},{"line_number":250,"context_line":"            LOG.warning(_LW(\"Snapshot %(name)s may deleted already. \""},{"line_number":251,"context_line":"                            \"Message: %(msg)s\"),"},{"line_number":252,"context_line":"                        {\u0027name\u0027: snapshot_name, \u0027msg\u0027: ex.message})"},{"line_number":253,"context_line":"            pass  # Ignore the failure that due to retry."}],"source_content_type":"text/x-python","patch_set":34,"id":"3aaa91ec_39d9ddf3","line":250,"in_reply_to":"3aaa91ec_f52edff8","updated":"2016-06-27 08:52:45.000000000","message":"Done","commit_id":"704045733e41f830bd312511795fa190932708a6"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"492644467fe0b5a6d3be33d38cd5b729ea4e2d75","unresolved":false,"context_lines":[{"line_number":238,"context_line":"            LOG.warning(_LW(\u0027Snapshot %(name)s already exists. \u0027"},{"line_number":239,"context_line":"                            \u0027Message: %(msg)s\u0027),"},{"line_number":240,"context_line":"                        {\u0027name\u0027: snap_name, \u0027msg\u0027: ex.message})"},{"line_number":241,"context_line":"            pass  # Ignore the failure that due to retry."},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"    def delete_snapshot(self, snapshot_name):"},{"line_number":244,"context_line":"        \"\"\"Deletes a snapshot.\"\"\""}],"source_content_type":"text/x-python","patch_set":38,"id":"3aaa91ec_9ec90229","line":241,"updated":"2016-06-30 15:28:27.000000000","message":"Remove this line.","commit_id":"1b255e3e9d5a64504463f1c905b216a7b1cb6a2e"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"17c6671e7ab9d27c92231a243ce916d064c9a4ad","unresolved":false,"context_lines":[{"line_number":238,"context_line":"            LOG.warning(_LW(\u0027Snapshot %(name)s already exists. \u0027"},{"line_number":239,"context_line":"                            \u0027Message: %(msg)s\u0027),"},{"line_number":240,"context_line":"                        {\u0027name\u0027: snap_name, \u0027msg\u0027: ex.message})"},{"line_number":241,"context_line":"            pass  # Ignore the failure that due to retry."},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"    def delete_snapshot(self, snapshot_name):"},{"line_number":244,"context_line":"        \"\"\"Deletes a snapshot.\"\"\""}],"source_content_type":"text/x-python","patch_set":38,"id":"3aaa91ec_01c11ce4","line":241,"in_reply_to":"3aaa91ec_9ec90229","updated":"2016-07-01 02:18:04.000000000","message":"Done","commit_id":"1b255e3e9d5a64504463f1c905b216a7b1cb6a2e"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"492644467fe0b5a6d3be33d38cd5b729ea4e2d75","unresolved":false,"context_lines":[{"line_number":283,"context_line":"                        {\u0027snap_name\u0027: snap_name,"},{"line_number":284,"context_line":"                         \u0027smp_name\u0027: smp_name,"},{"line_number":285,"context_line":"                         \u0027msg\u0027: ex.message})"},{"line_number":286,"context_line":"            pass  # Ignore the failure that due to retry."},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"    def detach_snapshot(self, smp_name):"},{"line_number":289,"context_line":"        lun \u003d self.vnx.get_lun(name\u003dsmp_name)"}],"source_content_type":"text/x-python","patch_set":38,"id":"3aaa91ec_be5b1e85","line":286,"updated":"2016-06-30 15:28:27.000000000","message":"Remove this line.","commit_id":"1b255e3e9d5a64504463f1c905b216a7b1cb6a2e"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"17c6671e7ab9d27c92231a243ce916d064c9a4ad","unresolved":false,"context_lines":[{"line_number":283,"context_line":"                        {\u0027snap_name\u0027: snap_name,"},{"line_number":284,"context_line":"                         \u0027smp_name\u0027: smp_name,"},{"line_number":285,"context_line":"                         \u0027msg\u0027: ex.message})"},{"line_number":286,"context_line":"            pass  # Ignore the failure that due to retry."},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"    def detach_snapshot(self, smp_name):"},{"line_number":289,"context_line":"        lun \u003d self.vnx.get_lun(name\u003dsmp_name)"}],"source_content_type":"text/x-python","patch_set":38,"id":"3aaa91ec_a1564859","line":286,"in_reply_to":"3aaa91ec_be5b1e85","updated":"2016-07-01 02:18:04.000000000","message":"Done","commit_id":"1b255e3e9d5a64504463f1c905b216a7b1cb6a2e"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"492644467fe0b5a6d3be33d38cd5b729ea4e2d75","unresolved":false,"context_lines":[{"line_number":293,"context_line":"            LOG.warning(_LW(\"Snapshot mount point %(smp_name)s is not \""},{"line_number":294,"context_line":"                            \"currently attached. Message: %(msg)s\"),"},{"line_number":295,"context_line":"                        {\u0027smp_name\u0027: smp_name, \u0027msg\u0027: ex.message})"},{"line_number":296,"context_line":"            pass  # Ignore the failure that due to retry."},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"    def modify_snapshot(self, snap_name, allow_rw\u003dNone, auto_delete\u003dNone):"},{"line_number":299,"context_line":"        snap \u003d self.vnx.get_snap(name\u003dsnap_name)"}],"source_content_type":"text/x-python","patch_set":38,"id":"3aaa91ec_be84bed2","line":296,"updated":"2016-06-30 15:28:27.000000000","message":"Remove this line.","commit_id":"1b255e3e9d5a64504463f1c905b216a7b1cb6a2e"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"17c6671e7ab9d27c92231a243ce916d064c9a4ad","unresolved":false,"context_lines":[{"line_number":293,"context_line":"            LOG.warning(_LW(\"Snapshot mount point %(smp_name)s is not \""},{"line_number":294,"context_line":"                            \"currently attached. Message: %(msg)s\"),"},{"line_number":295,"context_line":"                        {\u0027smp_name\u0027: smp_name, \u0027msg\u0027: ex.message})"},{"line_number":296,"context_line":"            pass  # Ignore the failure that due to retry."},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"    def modify_snapshot(self, snap_name, allow_rw\u003dNone, auto_delete\u003dNone):"},{"line_number":299,"context_line":"        snap \u003d self.vnx.get_snap(name\u003dsnap_name)"}],"source_content_type":"text/x-python","patch_set":38,"id":"3aaa91ec_c14714a1","line":296,"in_reply_to":"3aaa91ec_be84bed2","updated":"2016-07-01 02:18:04.000000000","message":"Done","commit_id":"1b255e3e9d5a64504463f1c905b216a7b1cb6a2e"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"492644467fe0b5a6d3be33d38cd5b729ea4e2d75","unresolved":false,"context_lines":[{"line_number":390,"context_line":"        except storops_ex.VNXCompressionAlreadyEnabledError:"},{"line_number":391,"context_line":"            LOG.warning(_LW(\"Compression has already been enabled on %s.\"),"},{"line_number":392,"context_line":"                        lun.name)"},{"line_number":393,"context_line":"            pass"},{"line_number":394,"context_line":""},{"line_number":395,"context_line":"    def get_vnx_enabler_status(self):"},{"line_number":396,"context_line":"        return common.VNXEnablerStatus("}],"source_content_type":"text/x-python","patch_set":38,"id":"3aaa91ec_7e7ed6e4","line":393,"updated":"2016-06-30 15:28:27.000000000","message":"Remove pass.","commit_id":"1b255e3e9d5a64504463f1c905b216a7b1cb6a2e"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"17c6671e7ab9d27c92231a243ce916d064c9a4ad","unresolved":false,"context_lines":[{"line_number":390,"context_line":"        except storops_ex.VNXCompressionAlreadyEnabledError:"},{"line_number":391,"context_line":"            LOG.warning(_LW(\"Compression has already been enabled on %s.\"),"},{"line_number":392,"context_line":"                        lun.name)"},{"line_number":393,"context_line":"            pass"},{"line_number":394,"context_line":""},{"line_number":395,"context_line":"    def get_vnx_enabler_status(self):"},{"line_number":396,"context_line":"        return common.VNXEnablerStatus("}],"source_content_type":"text/x-python","patch_set":38,"id":"3aaa91ec_61cf4029","line":393,"in_reply_to":"3aaa91ec_7e7ed6e4","updated":"2016-07-01 02:18:04.000000000","message":"Done","commit_id":"1b255e3e9d5a64504463f1c905b216a7b1cb6a2e"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"492644467fe0b5a6d3be33d38cd5b729ea4e2d75","unresolved":false,"context_lines":[{"line_number":431,"context_line":"                                    \u0027initiator %(hba_id)s. Message: %(msg)s\u0027),"},{"line_number":432,"context_line":"                                {\u0027port\u0027: port, \u0027hba_id\u0027: initiator_id,"},{"line_number":433,"context_line":"                                 \u0027msg\u0027: ex.message})"},{"line_number":434,"context_line":"                    pass  # Ignore the failure, just write a warning."},{"line_number":435,"context_line":"        if initiator_port_map:"},{"line_number":436,"context_line":"            utils.update_res_with_poll(storage_group)"},{"line_number":437,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"3aaa91ec_bed2fece","line":434,"updated":"2016-06-30 15:28:27.000000000","message":"Remove","commit_id":"1b255e3e9d5a64504463f1c905b216a7b1cb6a2e"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"17c6671e7ab9d27c92231a243ce916d064c9a4ad","unresolved":false,"context_lines":[{"line_number":431,"context_line":"                                    \u0027initiator %(hba_id)s. Message: %(msg)s\u0027),"},{"line_number":432,"context_line":"                                {\u0027port\u0027: port, \u0027hba_id\u0027: initiator_id,"},{"line_number":433,"context_line":"                                 \u0027msg\u0027: ex.message})"},{"line_number":434,"context_line":"                    pass  # Ignore the failure, just write a warning."},{"line_number":435,"context_line":"        if initiator_port_map:"},{"line_number":436,"context_line":"            utils.update_res_with_poll(storage_group)"},{"line_number":437,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"3aaa91ec_c1f55451","line":434,"in_reply_to":"3aaa91ec_bed2fece","updated":"2016-07-01 02:18:04.000000000","message":"Done","commit_id":"1b255e3e9d5a64504463f1c905b216a7b1cb6a2e"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"492644467fe0b5a6d3be33d38cd5b729ea4e2d75","unresolved":false,"context_lines":[{"line_number":457,"context_line":"                # Reach the max times of retry, fail the attach action."},{"line_number":458,"context_line":"                LOG.error(_LE(\u0027Failed to add %(lun)s into %(sg)s after \u0027"},{"line_number":459,"context_line":"                              \u0027%(tried)s tries. Reach the max retry times. \u0027"},{"line_number":460,"context_line":"                              \u0027Message: %(msg)s\u0027) %"},{"line_number":461,"context_line":"                          {\u0027lun\u0027: lun.lun_id, \u0027sg\u0027: storage_group.name,"},{"line_number":462,"context_line":"                           \u0027tried\u0027: max_retries, \u0027msg\u0027: ex.message})"},{"line_number":463,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"3aaa91ec_3edf2ed7","line":460,"range":{"start_line":460,"start_character":50,"end_line":460,"end_character":51},"updated":"2016-06-30 15:28:27.000000000","message":"% \u003e ,","commit_id":"1b255e3e9d5a64504463f1c905b216a7b1cb6a2e"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"17c6671e7ab9d27c92231a243ce916d064c9a4ad","unresolved":false,"context_lines":[{"line_number":457,"context_line":"                # Reach the max times of retry, fail the attach action."},{"line_number":458,"context_line":"                LOG.error(_LE(\u0027Failed to add %(lun)s into %(sg)s after \u0027"},{"line_number":459,"context_line":"                              \u0027%(tried)s tries. Reach the max retry times. \u0027"},{"line_number":460,"context_line":"                              \u0027Message: %(msg)s\u0027) %"},{"line_number":461,"context_line":"                          {\u0027lun\u0027: lun.lun_id, \u0027sg\u0027: storage_group.name,"},{"line_number":462,"context_line":"                           \u0027tried\u0027: max_retries, \u0027msg\u0027: ex.message})"},{"line_number":463,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"3aaa91ec_2197f8ec","line":460,"range":{"start_line":460,"start_character":50,"end_line":460,"end_character":51},"in_reply_to":"3aaa91ec_3edf2ed7","updated":"2016-07-01 02:18:04.000000000","message":"Done","commit_id":"1b255e3e9d5a64504463f1c905b216a7b1cb6a2e"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ca82ff5172e3ad053b37e5a4500204ee4d6af0a7","unresolved":false,"context_lines":[{"line_number":25,"context_line":"from cinder.volume.drivers.emc.vnx import utils"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"storops \u003d importutils.try_import(\u0027storops\u0027)"},{"line_number":29,"context_line":"if storops:"},{"line_number":30,"context_line":"    from storops import exception as storops_ex"},{"line_number":31,"context_line":""}],"source_content_type":"text/x-python","patch_set":46,"id":"1aa78d24_e2774b9d","line":28,"updated":"2016-07-05 03:57:25.000000000","message":"3rd party libs should be imported before cinder imports.","commit_id":"5f4273ffca5f5b8cf478ed10da4191c8b0eeb1d2"}],"cinder/volume/drivers/emc/vnx/common.py":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"1ea0ad6b8167a7379bb1f02116888de666b60ae5","unresolved":false,"context_lines":[{"line_number":40,"context_line":"INTERVAL_60_SEC \u003d 60"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"EMC_VNX_OPTS \u003d ["},{"line_number":43,"context_line":"    cfg.StrOpt(\u0027storage_protocol\u0027,"},{"line_number":44,"context_line":"               default\u003d\u0027iSCSI\u0027,"},{"line_number":45,"context_line":"               help\u003d\u0027Protocol to access the storage \u0027"},{"line_number":46,"context_line":"                    \u0027allocated from this Cinder backend\u0027),"}],"source_content_type":"text/x-python","patch_set":21,"id":"9abb7d3a_965ae128","line":43,"updated":"2016-06-03 18:24:18.000000000","message":"This is too generic of a name to use for an option here (likely to be misinterpreted in other contexts in Cinder, or collide with other places that would want to use the same name).\n\nPlease use something more driver-specific.","commit_id":"e0cbaa8db0d9a53123a80b22b01452a83a22e3bd"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"5a1e0730fda9df5dba1d5d9f594871a2ff018ab7","unresolved":false,"context_lines":[{"line_number":40,"context_line":"INTERVAL_60_SEC \u003d 60"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"EMC_VNX_OPTS \u003d ["},{"line_number":43,"context_line":"    cfg.StrOpt(\u0027storage_protocol\u0027,"},{"line_number":44,"context_line":"               default\u003d\u0027iSCSI\u0027,"},{"line_number":45,"context_line":"               help\u003d\u0027Protocol to access the storage \u0027"},{"line_number":46,"context_line":"                    \u0027allocated from this Cinder backend\u0027),"}],"source_content_type":"text/x-python","patch_set":21,"id":"7aa08908_26ffd502","line":43,"in_reply_to":"9abb7d3a_965ae128","updated":"2016-06-06 05:34:21.000000000","message":"This is a new option added in this driver.\nregarding your comments, I will defer it and will get back to you after a internal discussion.","commit_id":"e0cbaa8db0d9a53123a80b22b01452a83a22e3bd"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"1ea0ad6b8167a7379bb1f02116888de666b60ae5","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    cfg.StrOpt(\u0027storage_protocol\u0027,"},{"line_number":44,"context_line":"               default\u003d\u0027iSCSI\u0027,"},{"line_number":45,"context_line":"               help\u003d\u0027Protocol to access the storage \u0027"},{"line_number":46,"context_line":"                    \u0027allocated from this Cinder backend\u0027),"},{"line_number":47,"context_line":"    cfg.StrOpt(\u0027storage_vnx_authentication_type\u0027,"},{"line_number":48,"context_line":"               default\u003d\u0027global\u0027,"},{"line_number":49,"context_line":"               help\u003d\u0027VNX authentication scope type.\u0027),"}],"source_content_type":"text/x-python","patch_set":21,"id":"9abb7d3a_f6136d5a","line":46,"updated":"2016-06-03 18:24:18.000000000","message":"Add choices\u003d[\u0027iSCSI\u0027,\u0027other_protocol\u0027].","commit_id":"e0cbaa8db0d9a53123a80b22b01452a83a22e3bd"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"5a1e0730fda9df5dba1d5d9f594871a2ff018ab7","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    cfg.StrOpt(\u0027storage_protocol\u0027,"},{"line_number":44,"context_line":"               default\u003d\u0027iSCSI\u0027,"},{"line_number":45,"context_line":"               help\u003d\u0027Protocol to access the storage \u0027"},{"line_number":46,"context_line":"                    \u0027allocated from this Cinder backend\u0027),"},{"line_number":47,"context_line":"    cfg.StrOpt(\u0027storage_vnx_authentication_type\u0027,"},{"line_number":48,"context_line":"               default\u003d\u0027global\u0027,"},{"line_number":49,"context_line":"               help\u003d\u0027VNX authentication scope type.\u0027),"}],"source_content_type":"text/x-python","patch_set":21,"id":"7aa08908_43177351","line":46,"in_reply_to":"9abb7d3a_f6136d5a","updated":"2016-06-06 05:34:21.000000000","message":"Done","commit_id":"e0cbaa8db0d9a53123a80b22b01452a83a22e3bd"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"1ea0ad6b8167a7379bb1f02116888de666b60ae5","unresolved":false,"context_lines":[{"line_number":52,"context_line":"               \u0027Make sure the security file is generated first.\u0027),"},{"line_number":53,"context_line":"    cfg.StrOpt(\u0027naviseccli_path\u0027,"},{"line_number":54,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":55,"context_line":"               help\u003d\u0027Naviseccli Path.\u0027),"},{"line_number":56,"context_line":"    cfg.StrOpt(\u0027storage_vnx_pool_names\u0027,"},{"line_number":57,"context_line":"               deprecated_name\u003d\u0027storage_vnx_pool_name\u0027,"},{"line_number":58,"context_line":"               help\u003d\u0027Comma-separated list of storage pool names to be used.\u0027),"}],"source_content_type":"text/x-python","patch_set":21,"id":"9abb7d3a_76d01d54","line":55,"updated":"2016-06-03 18:24:18.000000000","message":"Need to check that this is set to something in your driver\u0027s check_for_setup_error().","commit_id":"e0cbaa8db0d9a53123a80b22b01452a83a22e3bd"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"5a1e0730fda9df5dba1d5d9f594871a2ff018ab7","unresolved":false,"context_lines":[{"line_number":52,"context_line":"               \u0027Make sure the security file is generated first.\u0027),"},{"line_number":53,"context_line":"    cfg.StrOpt(\u0027naviseccli_path\u0027,"},{"line_number":54,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":55,"context_line":"               help\u003d\u0027Naviseccli Path.\u0027),"},{"line_number":56,"context_line":"    cfg.StrOpt(\u0027storage_vnx_pool_names\u0027,"},{"line_number":57,"context_line":"               deprecated_name\u003d\u0027storage_vnx_pool_name\u0027,"},{"line_number":58,"context_line":"               help\u003d\u0027Comma-separated list of storage pool names to be used.\u0027),"}],"source_content_type":"text/x-python","patch_set":21,"id":"7aa08908_46466124","line":55,"in_reply_to":"9abb7d3a_76d01d54","updated":"2016-06-06 05:34:21.000000000","message":"In our current design, we make the driver layer as simple as possible, we already split our logic to FC and iSCSI adaper. so we tend to keep current design.\n\nHow do you think?","commit_id":"e0cbaa8db0d9a53123a80b22b01452a83a22e3bd"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"1ea0ad6b8167a7379bb1f02116888de666b60ae5","unresolved":false,"context_lines":[{"line_number":56,"context_line":"    cfg.StrOpt(\u0027storage_vnx_pool_names\u0027,"},{"line_number":57,"context_line":"               deprecated_name\u003d\u0027storage_vnx_pool_name\u0027,"},{"line_number":58,"context_line":"               help\u003d\u0027Comma-separated list of storage pool names to be used.\u0027),"},{"line_number":59,"context_line":"    cfg.StrOpt(\u0027san_secondary_ip\u0027,"},{"line_number":60,"context_line":"               help\u003d\u0027VNX secondary SP IP Address.\u0027),"},{"line_number":61,"context_line":"    cfg.IntOpt(\u0027default_timeout\u0027,"},{"line_number":62,"context_line":"               default\u003dDEFAULT_TIMEOUT,"}],"source_content_type":"text/x-python","patch_set":21,"id":"9abb7d3a_f6688dbc","line":59,"updated":"2016-06-03 18:24:18.000000000","message":"This option is also defined in emc_vnx_cli.","commit_id":"e0cbaa8db0d9a53123a80b22b01452a83a22e3bd"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"5a1e0730fda9df5dba1d5d9f594871a2ff018ab7","unresolved":false,"context_lines":[{"line_number":56,"context_line":"    cfg.StrOpt(\u0027storage_vnx_pool_names\u0027,"},{"line_number":57,"context_line":"               deprecated_name\u003d\u0027storage_vnx_pool_name\u0027,"},{"line_number":58,"context_line":"               help\u003d\u0027Comma-separated list of storage pool names to be used.\u0027),"},{"line_number":59,"context_line":"    cfg.StrOpt(\u0027san_secondary_ip\u0027,"},{"line_number":60,"context_line":"               help\u003d\u0027VNX secondary SP IP Address.\u0027),"},{"line_number":61,"context_line":"    cfg.IntOpt(\u0027default_timeout\u0027,"},{"line_number":62,"context_line":"               default\u003dDEFAULT_TIMEOUT,"}],"source_content_type":"text/x-python","patch_set":21,"id":"7aa08908_0368cbf4","line":59,"in_reply_to":"9abb7d3a_f6688dbc","updated":"2016-06-06 05:34:21.000000000","message":"Yes, and later the emc_vnx_cli.py and related files will be removed after this merged.","commit_id":"e0cbaa8db0d9a53123a80b22b01452a83a22e3bd"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"1ea0ad6b8167a7379bb1f02116888de666b60ae5","unresolved":false,"context_lines":[{"line_number":76,"context_line":"                help\u003d\u0027To destroy storage group \u0027"},{"line_number":77,"context_line":"                \u0027when the last LUN is removed from it. \u0027"},{"line_number":78,"context_line":"                \u0027By default, the value is False.\u0027),"},{"line_number":79,"context_line":"    cfg.StrOpt(\u0027iscsi_initiators\u0027,"},{"line_number":80,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":81,"context_line":"               help\u003d\u0027Mapping between hostname and \u0027"},{"line_number":82,"context_line":"               \u0027its iSCSI initiator IP addresses.\u0027),"}],"source_content_type":"text/x-python","patch_set":21,"id":"9abb7d3a_1b2bba95","line":79,"updated":"2016-06-03 18:24:18.000000000","message":"iscsi_initiators is too generic of a name to use here.  Please make this something more driver-specific.","commit_id":"e0cbaa8db0d9a53123a80b22b01452a83a22e3bd"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"5a1e0730fda9df5dba1d5d9f594871a2ff018ab7","unresolved":false,"context_lines":[{"line_number":76,"context_line":"                help\u003d\u0027To destroy storage group \u0027"},{"line_number":77,"context_line":"                \u0027when the last LUN is removed from it. \u0027"},{"line_number":78,"context_line":"                \u0027By default, the value is False.\u0027),"},{"line_number":79,"context_line":"    cfg.StrOpt(\u0027iscsi_initiators\u0027,"},{"line_number":80,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":81,"context_line":"               help\u003d\u0027Mapping between hostname and \u0027"},{"line_number":82,"context_line":"               \u0027its iSCSI initiator IP addresses.\u0027),"}],"source_content_type":"text/x-python","patch_set":21,"id":"7aa08908_23186784","line":79,"in_reply_to":"9abb7d3a_1b2bba95","updated":"2016-06-06 05:34:21.000000000","message":"We already made this option in our legacy driver(emc_vnx_cli.py) changing this option name most likely impact our customers.\nHow do you think?","commit_id":"e0cbaa8db0d9a53123a80b22b01452a83a22e3bd"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"1ea0ad6b8167a7379bb1f02116888de666b60ae5","unresolved":false,"context_lines":[{"line_number":83,"context_line":"    cfg.StrOpt(\u0027io_port_list\u0027,"},{"line_number":84,"context_line":"               default\u003d\u0027*\u0027,"},{"line_number":85,"context_line":"               help\u003d\u0027Comma separated iSCSI or FC ports \u0027"},{"line_number":86,"context_line":"               \u0027to be used in Nova or Cinder.\u0027),"},{"line_number":87,"context_line":"    cfg.BoolOpt(\u0027initiator_auto_registration\u0027,"},{"line_number":88,"context_line":"                default\u003dFalse,"},{"line_number":89,"context_line":"                help\u003d\u0027Automatically register initiators. \u0027"}],"source_content_type":"text/x-python","patch_set":21,"id":"9abb7d3a_db07721b","line":86,"updated":"2016-06-03 18:24:18.000000000","message":"I think making this a MultiStrOpt would simplify your code.","commit_id":"e0cbaa8db0d9a53123a80b22b01452a83a22e3bd"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"5a1e0730fda9df5dba1d5d9f594871a2ff018ab7","unresolved":false,"context_lines":[{"line_number":83,"context_line":"    cfg.StrOpt(\u0027io_port_list\u0027,"},{"line_number":84,"context_line":"               default\u003d\u0027*\u0027,"},{"line_number":85,"context_line":"               help\u003d\u0027Comma separated iSCSI or FC ports \u0027"},{"line_number":86,"context_line":"               \u0027to be used in Nova or Cinder.\u0027),"},{"line_number":87,"context_line":"    cfg.BoolOpt(\u0027initiator_auto_registration\u0027,"},{"line_number":88,"context_line":"                default\u003dFalse,"},{"line_number":89,"context_line":"                help\u003d\u0027Automatically register initiators. \u0027"}],"source_content_type":"text/x-python","patch_set":21,"id":"7aa08908_4372d3e6","line":86,"in_reply_to":"9abb7d3a_db07721b","updated":"2016-06-06 05:34:21.000000000","message":"See my previous comment in adapter.py","commit_id":"e0cbaa8db0d9a53123a80b22b01452a83a22e3bd"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"492644467fe0b5a6d3be33d38cd5b729ea4e2d75","unresolved":false,"context_lines":[{"line_number":159,"context_line":"            try:"},{"line_number":160,"context_line":"                value \u003d enum_class.parse(value)"},{"line_number":161,"context_line":"            except ValueError:"},{"line_number":162,"context_line":"                reason \u003d (\"The value %(value)s for key %(key)s in extra \""},{"line_number":163,"context_line":"                          \"specs is invalid.\","},{"line_number":164,"context_line":"                          {\u0027key\u0027: key, \u0027value\u0027: value})"},{"line_number":165,"context_line":"                raise exception.InvalidVolumeType(reason\u003dreason)"}],"source_content_type":"text/x-python","patch_set":38,"id":"3aaa91ec_3e8d6ed3","line":162,"updated":"2016-06-30 15:28:27.000000000","message":"Needs _() translation.","commit_id":"1b255e3e9d5a64504463f1c905b216a7b1cb6a2e"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"17c6671e7ab9d27c92231a243ce916d064c9a4ad","unresolved":false,"context_lines":[{"line_number":159,"context_line":"            try:"},{"line_number":160,"context_line":"                value \u003d enum_class.parse(value)"},{"line_number":161,"context_line":"            except ValueError:"},{"line_number":162,"context_line":"                reason \u003d (\"The value %(value)s for key %(key)s in extra \""},{"line_number":163,"context_line":"                          \"specs is invalid.\","},{"line_number":164,"context_line":"                          {\u0027key\u0027: key, \u0027value\u0027: value})"},{"line_number":165,"context_line":"                raise exception.InvalidVolumeType(reason\u003dreason)"}],"source_content_type":"text/x-python","patch_set":38,"id":"3aaa91ec_6142a069","line":162,"in_reply_to":"3aaa91ec_3e8d6ed3","updated":"2016-07-01 02:18:04.000000000","message":"Done","commit_id":"1b255e3e9d5a64504463f1c905b216a7b1cb6a2e"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"492644467fe0b5a6d3be33d38cd5b729ea4e2d75","unresolved":false,"context_lines":[{"line_number":301,"context_line":"        # ip and wwpns are optional."},{"line_number":302,"context_line":"        self.name \u003d name"},{"line_number":303,"context_line":"        if not self.name:"},{"line_number":304,"context_line":"            raise ValueError(\u0027Name of host cannot be empty.\u0027)"},{"line_number":305,"context_line":"        self.initiators \u003d initiators"},{"line_number":306,"context_line":"        if not self.initiators:"},{"line_number":307,"context_line":"            raise ValueError(\u0027Initiators of host cannot be empty.\u0027)"}],"source_content_type":"text/x-python","patch_set":38,"id":"3aaa91ec_de6b8aef","line":304,"updated":"2016-06-30 15:28:27.000000000","message":"_()","commit_id":"1b255e3e9d5a64504463f1c905b216a7b1cb6a2e"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"17c6671e7ab9d27c92231a243ce916d064c9a4ad","unresolved":false,"context_lines":[{"line_number":301,"context_line":"        # ip and wwpns are optional."},{"line_number":302,"context_line":"        self.name \u003d name"},{"line_number":303,"context_line":"        if not self.name:"},{"line_number":304,"context_line":"            raise ValueError(\u0027Name of host cannot be empty.\u0027)"},{"line_number":305,"context_line":"        self.initiators \u003d initiators"},{"line_number":306,"context_line":"        if not self.initiators:"},{"line_number":307,"context_line":"            raise ValueError(\u0027Initiators of host cannot be empty.\u0027)"}],"source_content_type":"text/x-python","patch_set":38,"id":"3aaa91ec_815b4c53","line":304,"in_reply_to":"3aaa91ec_de6b8aef","updated":"2016-07-01 02:18:04.000000000","message":"Done","commit_id":"1b255e3e9d5a64504463f1c905b216a7b1cb6a2e"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"492644467fe0b5a6d3be33d38cd5b729ea4e2d75","unresolved":false,"context_lines":[{"line_number":304,"context_line":"            raise ValueError(\u0027Name of host cannot be empty.\u0027)"},{"line_number":305,"context_line":"        self.initiators \u003d initiators"},{"line_number":306,"context_line":"        if not self.initiators:"},{"line_number":307,"context_line":"            raise ValueError(\u0027Initiators of host cannot be empty.\u0027)"},{"line_number":308,"context_line":"        self.ip \u003d ip"},{"line_number":309,"context_line":"        self.wwpns \u003d wwpns"},{"line_number":310,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"3aaa91ec_fe7486cf","line":307,"updated":"2016-06-30 15:28:27.000000000","message":"_()","commit_id":"1b255e3e9d5a64504463f1c905b216a7b1cb6a2e"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"17c6671e7ab9d27c92231a243ce916d064c9a4ad","unresolved":false,"context_lines":[{"line_number":304,"context_line":"            raise ValueError(\u0027Name of host cannot be empty.\u0027)"},{"line_number":305,"context_line":"        self.initiators \u003d initiators"},{"line_number":306,"context_line":"        if not self.initiators:"},{"line_number":307,"context_line":"            raise ValueError(\u0027Initiators of host cannot be empty.\u0027)"},{"line_number":308,"context_line":"        self.ip \u003d ip"},{"line_number":309,"context_line":"        self.wwpns \u003d wwpns"},{"line_number":310,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"3aaa91ec_c151d431","line":307,"in_reply_to":"3aaa91ec_fe7486cf","updated":"2016-07-01 02:18:04.000000000","message":"Done","commit_id":"1b255e3e9d5a64504463f1c905b216a7b1cb6a2e"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ca82ff5172e3ad053b37e5a4500204ee4d6af0a7","unresolved":false,"context_lines":[{"line_number":465,"context_line":"        self.secondary_client.promote_image(mirror_name)"},{"line_number":466,"context_line":""},{"line_number":467,"context_line":"    def destroy_mirror(self, mirror_name, secondary_lun_name):"},{"line_number":468,"context_line":"        \"\"\"Destroy the mirror view\u0027s related VNX objects"},{"line_number":469,"context_line":""},{"line_number":470,"context_line":"        NOTE: primary lun will not be deleted here."},{"line_number":471,"context_line":"        :param mirror_name: name of mirror to be destroyed"}],"source_content_type":"text/x-python","patch_set":46,"id":"1aa78d24_c2568fd1","line":468,"updated":"2016-07-05 03:57:25.000000000","message":"Add period at the end.","commit_id":"5f4273ffca5f5b8cf478ed10da4191c8b0eeb1d2"}],"cinder/volume/drivers/emc/vnx/const.py":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"59de7b35dfc1a3923d0379226d68ede4b0faeff0","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    MIGRATION_RATE_HIGH \u003d storops.VNXMigrationRate.HIGH"},{"line_number":28,"context_line":"    PROVISION_THICK \u003d storops.VNXProvisionEnum.THICK"},{"line_number":29,"context_line":"else:"},{"line_number":30,"context_line":"    VNXLunPreparingError \u003d None"},{"line_number":31,"context_line":"    MIGRATION_RATE_HIGH \u003d None"},{"line_number":32,"context_line":"    PROVISION_THICK \u003d None"},{"line_number":33,"context_line":"    VNXTargetNotReadyError \u003d None"}],"source_content_type":"text/x-python","patch_set":32,"id":"5a9d85d2_6291b299","line":30,"updated":"2016-06-20 18:03:12.000000000","message":"I think it would be safer to just not define these, or set them to some obviously wrong string rather than None.\n\nThis is likely to get passed into something that accepts None as a valid parameter and cause confusing issues.","commit_id":"65273faf58061ab53ec38b14a6ad3bb90ff60753"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"ea5a4923d1fc1412cade864150236ae67d40f3c3","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    MIGRATION_RATE_HIGH \u003d storops.VNXMigrationRate.HIGH"},{"line_number":28,"context_line":"    PROVISION_THICK \u003d storops.VNXProvisionEnum.THICK"},{"line_number":29,"context_line":"else:"},{"line_number":30,"context_line":"    VNXLunPreparingError \u003d None"},{"line_number":31,"context_line":"    MIGRATION_RATE_HIGH \u003d None"},{"line_number":32,"context_line":"    PROVISION_THICK \u003d None"},{"line_number":33,"context_line":"    VNXTargetNotReadyError \u003d None"}],"source_content_type":"text/x-python","patch_set":32,"id":"5a9d85d2_0beb99b1","line":30,"in_reply_to":"5a9d85d2_6291b299","updated":"2016-06-21 03:23:52.000000000","message":"Hi We set these exception/enum to None just because our code used these constants located in 3rd party lib which is not in requirements.txt.\n\nThere are error when driver is imported statistically(not for running unittest) without storops: the example is  http://logs.openstack.org/27/312427/26/check/gate-cinder-docs/9ff9a15/console.html. \n\nactually, these code is not involved in any logic, just to pass the static import check .\n\nTo address your concerns, I will add more comments here.","commit_id":"65273faf58061ab53ec38b14a6ad3bb90ff60753"}],"cinder/volume/drivers/emc/vnx/driver.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"6bae1a17a60c52b740e3224ad95183188c1e6548","unresolved":false,"context_lines":[{"line_number":144,"context_line":"        \"\"\"Make sure volume is exported.\"\"\""},{"line_number":145,"context_line":"        pass"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"    @zm_utils.AddFCZone"},{"line_number":148,"context_line":"    def initialize_connection(self, volume, connector):"},{"line_number":149,"context_line":"        \"\"\"Initializes the connection and returns connection info."},{"line_number":150,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1a122d0e_0a404f5e","line":147,"updated":"2016-05-05 13:01:02.000000000","message":"Have you tested with zone manager configured to make sure it can handle iSCSI driver instances? BY handle I mean that it doesn\u0027t cause any bad or unexpected errors.","commit_id":"8d5e3263088d34b113b2fbe5d462f87f59ed2dcc"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"ba13f52cbbeaf1ff7997038d2564969aa34581d0","unresolved":false,"context_lines":[{"line_number":144,"context_line":"        \"\"\"Make sure volume is exported.\"\"\""},{"line_number":145,"context_line":"        pass"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"    @zm_utils.AddFCZone"},{"line_number":148,"context_line":"    def initialize_connection(self, volume, connector):"},{"line_number":149,"context_line":"        \"\"\"Initializes the connection and returns connection info."},{"line_number":150,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1a122d0e_b3042fc6","line":147,"in_reply_to":"1a122d0e_0a404f5e","updated":"2016-05-05 14:58:39.000000000","message":"The zone manager is compabile with iSCSI driver, see:\n\nhttps://github.com/openstack/cinder/blob/master/cinder/zonemanager/utils.py#L71\n\ndef AddFCZone(initialize_connection):\n    \"\"\"Decorator to add a FC Zone.\"\"\"\n\n    def decorator(self, *args, **kwargs):\n        conn_info \u003d initialize_connection(self, *args, **kwargs)\n        if not conn_info:\n            LOG.warning(_LW(\"Driver didn\u0027t return connection info, \"\n                            \"can\u0027t add zone.\"))\n            return None\n\n        vol_type \u003d conn_info.get(\u0027driver_volume_type\u0027, None)\n        if vol_type \u003d\u003d \u0027fibre_channel\u0027:\n            if \u0027initiator_target_map\u0027 in conn_info[\u0027data\u0027]:\n                zm \u003d create_zone_manager()\n                if zm:\n                    LOG.debug(\"AddFCZone connection info: %(conninfo)s.\",\n                              {\u0027conninfo\u0027: conn_info})\n                    zm.add_connection(conn_info)\n\n        return conn_info\n\n    return decorator\n\nSo  the zone manager decorator will not interfere the iSCSI driver behavior.","commit_id":"8d5e3263088d34b113b2fbe5d462f87f59ed2dcc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"affb577eb3efca4ded080440688d56fef41d247c","unresolved":false,"context_lines":[{"line_number":68,"context_line":"                White list target ports support"},{"line_number":69,"context_line":"                Snap copy support"},{"line_number":70,"context_line":"                Support efficient non-disruptive backup"},{"line_number":71,"context_line":"        7.0.0 - Clone consistency group support"},{"line_number":72,"context_line":"    \"\"\""},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def __init__(self, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":12,"id":"dab17558_539b6ac9","line":71,"updated":"2016-05-14 04:35:33.000000000","message":"Can you add version history for this big change?","commit_id":"523531e128f177874921d8dc993372049bd068af"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"7f9c9ea5f478894a0d3e03d8807bdad61146bb47","unresolved":false,"context_lines":[{"line_number":68,"context_line":"                White list target ports support"},{"line_number":69,"context_line":"                Snap copy support"},{"line_number":70,"context_line":"                Support efficient non-disruptive backup"},{"line_number":71,"context_line":"        7.0.0 - Clone consistency group support"},{"line_number":72,"context_line":"    \"\"\""},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def __init__(self, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":12,"id":"dab17558_b213a75b","line":71,"in_reply_to":"dab17558_539b6ac9","updated":"2016-05-15 07:27:04.000000000","message":"added \"VNX new Cinder driver\" as 8.0.0\nand also append 2 entries under 7.0.0","commit_id":"523531e128f177874921d8dc993372049bd068af"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"1ea0ad6b8167a7379bb1f02116888de666b60ae5","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        super(EMCVNXDriver, self).__init__(*args, **kwargs)"},{"line_number":79,"context_line":"        utils.init_ops(self.configuration)"},{"line_number":80,"context_line":"        self.protocol \u003d self.configuration.storage_protocol"},{"line_number":81,"context_line":"        active_backend_id \u003d kwargs.get(\u0027active_backend_id\u0027, None)"},{"line_number":82,"context_line":"        if self.protocol \u003d\u003d common.PROTOCOL_FC:"},{"line_number":83,"context_line":"            self.adapter \u003d adapter.FCAdapter(self.configuration,"},{"line_number":84,"context_line":"                                             active_backend_id)"}],"source_content_type":"text/x-python","patch_set":21,"id":"9abb7d3a_802bbbea","line":81,"updated":"2016-06-03 18:24:18.000000000","message":"__init__ should set self.adapter \u003d\u003d None.\n\nThen do the check for the protocol being iscsi/fc and set self.adapter in do_setup.","commit_id":"e0cbaa8db0d9a53123a80b22b01452a83a22e3bd"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"5a1e0730fda9df5dba1d5d9f594871a2ff018ab7","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        super(EMCVNXDriver, self).__init__(*args, **kwargs)"},{"line_number":79,"context_line":"        utils.init_ops(self.configuration)"},{"line_number":80,"context_line":"        self.protocol \u003d self.configuration.storage_protocol"},{"line_number":81,"context_line":"        active_backend_id \u003d kwargs.get(\u0027active_backend_id\u0027, None)"},{"line_number":82,"context_line":"        if self.protocol \u003d\u003d common.PROTOCOL_FC:"},{"line_number":83,"context_line":"            self.adapter \u003d adapter.FCAdapter(self.configuration,"},{"line_number":84,"context_line":"                                             active_backend_id)"}],"source_content_type":"text/x-python","patch_set":21,"id":"7aa08908_9c3a5ccc","line":81,"in_reply_to":"9abb7d3a_802bbbea","updated":"2016-06-06 05:34:21.000000000","message":"Done","commit_id":"e0cbaa8db0d9a53123a80b22b01452a83a22e3bd"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"51554fb8abc2c8cbb8214cfc28021eaf6cf86607","unresolved":false,"context_lines":[{"line_number":25,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"class EMCVNXDriver(driver.TransferVD,"},{"line_number":29,"context_line":"                   driver.ManageableVD,"},{"line_number":30,"context_line":"                   driver.ExtendVD,"},{"line_number":31,"context_line":"                   driver.SnapshotVD,"}],"source_content_type":"text/x-python","patch_set":31,"id":"7aa08908_1bec39ba","line":28,"updated":"2016-06-17 15:40:56.000000000","message":"Now that https://review.openstack.org/#/c/297140/ has merged, please add the class decorator @cinder.interface.volumedriver on all concrete volume driver implementations.\n\nThis will allow driver compliance checks to be run against the drivers to ensure they implement all required parameters as well as enable future checks and capabilities planned.","commit_id":"64ba00acff88fef08331bf9b9add15dbae210666"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"e16d515f74d378486a0d501875998cd7b6add111","unresolved":false,"context_lines":[{"line_number":25,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"class EMCVNXDriver(driver.TransferVD,"},{"line_number":29,"context_line":"                   driver.ManageableVD,"},{"line_number":30,"context_line":"                   driver.ExtendVD,"},{"line_number":31,"context_line":"                   driver.SnapshotVD,"}],"source_content_type":"text/x-python","patch_set":31,"id":"5a9d85d2_5ecbd372","line":28,"in_reply_to":"7aa08908_1bec39ba","updated":"2016-06-20 09:43:08.000000000","message":"Thanks for pointing out it.\nDone","commit_id":"64ba00acff88fef08331bf9b9add15dbae210666"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e775c57ff348efab8a2f996701afeef853a36e3a","unresolved":false,"context_lines":[{"line_number":164,"context_line":"                    \u0027target_discovered\u0027: True,"},{"line_number":165,"context_line":"                    \u0027target_lun\u0027: 1,"},{"line_number":166,"context_line":"                    \u0027target_wwn\u0027: [\u00271234567890123\u0027, \u00270987654321321\u0027],"},{"line_number":167,"context_line":"                    \u0027access_mode\u0027: \u0027rw\u0027"},{"line_number":168,"context_line":"                    \u0027initiator_target_map\u0027: {"},{"line_number":169,"context_line":"                        \u00271122334455667788\u0027: [\u00271234567890123\u0027,"},{"line_number":170,"context_line":"                                             \u00270987654321321\u0027]"}],"source_content_type":"text/x-python","patch_set":34,"id":"3aaa91ec_55b7f385","line":167,"updated":"2016-06-22 18:54:10.000000000","message":"access_mode should be removed as it is set in the manager.","commit_id":"704045733e41f830bd312511795fa190932708a6"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"5852d532d103ada33c57e4cd42bc13a2d23fc383","unresolved":false,"context_lines":[{"line_number":164,"context_line":"                    \u0027target_discovered\u0027: True,"},{"line_number":165,"context_line":"                    \u0027target_lun\u0027: 1,"},{"line_number":166,"context_line":"                    \u0027target_wwn\u0027: [\u00271234567890123\u0027, \u00270987654321321\u0027],"},{"line_number":167,"context_line":"                    \u0027access_mode\u0027: \u0027rw\u0027"},{"line_number":168,"context_line":"                    \u0027initiator_target_map\u0027: {"},{"line_number":169,"context_line":"                        \u00271122334455667788\u0027: [\u00271234567890123\u0027,"},{"line_number":170,"context_line":"                                             \u00270987654321321\u0027]"}],"source_content_type":"text/x-python","patch_set":34,"id":"3aaa91ec_b9f30d72","line":167,"in_reply_to":"3aaa91ec_55b7f385","updated":"2016-06-27 08:52:45.000000000","message":"Done","commit_id":"704045733e41f830bd312511795fa190932708a6"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e775c57ff348efab8a2f996701afeef853a36e3a","unresolved":false,"context_lines":[{"line_number":180,"context_line":"                                    \u0027iqn.2010-10.org.openstack:volume-00002\u0027],"},{"line_number":181,"context_line":"                    \u0027target_portals\u0027: [\u0027127.0.0.1:3260\u0027, \u0027127.0.1.1:3260\u0027],"},{"line_number":182,"context_line":"                    \u0027target_luns\u0027: [1, 1],"},{"line_number":183,"context_line":"                    \u0027access_mode\u0027: \u0027rw\u0027"},{"line_number":184,"context_line":"                }"},{"line_number":185,"context_line":"            }"},{"line_number":186,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":34,"id":"3aaa91ec_d5abe31b","line":183,"updated":"2016-06-22 18:54:10.000000000","message":"same","commit_id":"704045733e41f830bd312511795fa190932708a6"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"5852d532d103ada33c57e4cd42bc13a2d23fc383","unresolved":false,"context_lines":[{"line_number":180,"context_line":"                                    \u0027iqn.2010-10.org.openstack:volume-00002\u0027],"},{"line_number":181,"context_line":"                    \u0027target_portals\u0027: [\u0027127.0.0.1:3260\u0027, \u0027127.0.1.1:3260\u0027],"},{"line_number":182,"context_line":"                    \u0027target_luns\u0027: [1, 1],"},{"line_number":183,"context_line":"                    \u0027access_mode\u0027: \u0027rw\u0027"},{"line_number":184,"context_line":"                }"},{"line_number":185,"context_line":"            }"},{"line_number":186,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":34,"id":"3aaa91ec_19e7c1ac","line":183,"in_reply_to":"3aaa91ec_d5abe31b","updated":"2016-06-27 08:52:45.000000000","message":"Done","commit_id":"704045733e41f830bd312511795fa190932708a6"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"492644467fe0b5a6d3be33d38cd5b729ea4e2d75","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from cinder.volume.drivers.emc.vnx import utils"},{"line_number":22,"context_line":"from cinder.zonemanager import utils as zm_utils"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"from oslo_log import log as logging"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"3aaa91ec_1e287299","line":24,"updated":"2016-06-30 15:28:27.000000000","message":"Move back above local imports.","commit_id":"1b255e3e9d5a64504463f1c905b216a7b1cb6a2e"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"17c6671e7ab9d27c92231a243ce916d064c9a4ad","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from cinder.volume.drivers.emc.vnx import utils"},{"line_number":22,"context_line":"from cinder.zonemanager import utils as zm_utils"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"from oslo_log import log as logging"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"3aaa91ec_41132465","line":24,"in_reply_to":"3aaa91ec_1e287299","updated":"2016-07-01 02:18:04.000000000","message":"Done","commit_id":"1b255e3e9d5a64504463f1c905b216a7b1cb6a2e"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ca82ff5172e3ad053b37e5a4500204ee4d6af0a7","unresolved":false,"context_lines":[{"line_number":147,"context_line":"        pass"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    @zm_utils.AddFCZone"},{"line_number":150,"context_line":"    def initialize_connection(self, volume, connector, **kwargs):"},{"line_number":151,"context_line":"        \"\"\"Initializes the connection and returns connection info."},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"        Assign any created volume to a compute node/host so that it can be"}],"source_content_type":"text/x-python","patch_set":46,"id":"1aa78d24_22eb13b2","line":150,"updated":"2016-07-05 03:57:25.000000000","message":"initialize_connection in BaseVD does not have **kwargs.","commit_id":"5f4273ffca5f5b8cf478ed10da4191c8b0eeb1d2"}],"cinder/volume/drivers/emc/vnx/taskflows.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ca82ff5172e3ad053b37e5a4500204ee4d6af0a7","unresolved":false,"context_lines":[{"line_number":53,"context_line":"            migrated \u003d client.verify_migration(src_id, dst_id, dst_wwn)"},{"line_number":54,"context_line":"            if not migrated:"},{"line_number":55,"context_line":"                msg \u003d (_(\"Failed to migrate volume between source vol %(src)s\""},{"line_number":56,"context_line":"                         \" and dest vol %(dst)s.\"),"},{"line_number":57,"context_line":"                       {\u0027src\u0027: src_id, \u0027dst\u0027: dst_id})"},{"line_number":58,"context_line":"                LOG.error(msg)"},{"line_number":59,"context_line":"                raise exception.VolumeBackendAPIException(data\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":46,"id":"1aa78d24_c2f32f9d","line":56,"updated":"2016-07-05 03:57:25.000000000","message":"This should be % instead of , because it is in an exception message.  The message won\u0027t format right if you delay it with \",\".","commit_id":"5f4273ffca5f5b8cf478ed10da4191c8b0eeb1d2"}],"cinder/volume/drivers/emc/vnx/utils.py":[{"author":{"_account_id":11637,"name":"jay.xu","email":"jay.xu@emc.com","username":"jay.xu"},"change_message_id":"6a761c65ca4c1753547b0e116bb86ff00a07767f","unresolved":false,"context_lines":[{"line_number":282,"context_line":""},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"def sift_port_white_list(port_white_list, registered_io_ports):"},{"line_number":285,"context_line":"    \"\"\"Filters out the unregisterred ports."},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"    Goes through the `port_white_list`, and filters out the ones not"},{"line_number":288,"context_line":"    registered (that is not in `registered_io_ports`)."}],"source_content_type":"text/x-python","patch_set":10,"id":"dab17558_15ed3d25","line":285,"updated":"2016-05-10 01:52:13.000000000","message":"typo. :s/unregisterred/unregistered","commit_id":"e4bf298b7c92722af594a8452256d72a58325d87"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"59de7b35dfc1a3923d0379226d68ede4b0faeff0","unresolved":false,"context_lines":[{"line_number":34,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"def init_ops(configuration):"},{"line_number":38,"context_line":"    configuration.append_config_values(common.EMC_VNX_OPTS)"},{"line_number":39,"context_line":"    configuration.append_config_values(san_opts)"},{"line_number":40,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"5a9d85d2_6256d2d3","line":37,"updated":"2016-06-20 18:03:12.000000000","message":"It would be more clear to just have this in the driver rather than in a separate util method.","commit_id":"65273faf58061ab53ec38b14a6ad3bb90ff60753"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"ea5a4923d1fc1412cade864150236ae67d40f3c3","unresolved":false,"context_lines":[{"line_number":34,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"def init_ops(configuration):"},{"line_number":38,"context_line":"    configuration.append_config_values(common.EMC_VNX_OPTS)"},{"line_number":39,"context_line":"    configuration.append_config_values(san_opts)"},{"line_number":40,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"5a9d85d2_8be1499d","line":37,"in_reply_to":"5a9d85d2_6256d2d3","updated":"2016-06-21 03:23:52.000000000","message":"Hi Eric\nWe share this logic in code and unittest(for several times), so configuration registration can be more concise.\n\nLet me know if you still insist on this.","commit_id":"65273faf58061ab53ec38b14a6ad3bb90ff60753"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"59de7b35dfc1a3923d0379226d68ede4b0faeff0","unresolved":false,"context_lines":[{"line_number":91,"context_line":"            return fields[1]"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"def update_provider_location(provider_location, items):"},{"line_number":95,"context_line":"    location_dict \u003d {tp.split(\u0027^\u0027)[0]: tp.split(\u0027^\u0027)[1]"},{"line_number":96,"context_line":"                     for tp in provider_location.split(\u0027|\u0027)}"},{"line_number":97,"context_line":"    for key, value in items.items():"}],"source_content_type":"text/x-python","patch_set":32,"id":"5a9d85d2_820aded0","line":94,"updated":"2016-06-20 18:03:12.000000000","message":"This should have a unit test, or at least a comment explaining what\u0027s going on here.","commit_id":"65273faf58061ab53ec38b14a6ad3bb90ff60753"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"ea5a4923d1fc1412cade864150236ae67d40f3c3","unresolved":false,"context_lines":[{"line_number":91,"context_line":"            return fields[1]"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"def update_provider_location(provider_location, items):"},{"line_number":95,"context_line":"    location_dict \u003d {tp.split(\u0027^\u0027)[0]: tp.split(\u0027^\u0027)[1]"},{"line_number":96,"context_line":"                     for tp in provider_location.split(\u0027|\u0027)}"},{"line_number":97,"context_line":"    for key, value in items.items():"}],"source_content_type":"text/x-python","patch_set":32,"id":"5a9d85d2_ebbc4d6e","line":94,"in_reply_to":"5a9d85d2_820aded0","updated":"2016-06-21 03:23:52.000000000","message":"This function actually tested by many unit tests. we were not adding a new specific test to cover it again.\n\na note is added for it\u0027s purpose.","commit_id":"65273faf58061ab53ec38b14a6ad3bb90ff60753"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ca82ff5172e3ad053b37e5a4500204ee4d6af0a7","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"storops \u003d importutils.try_import(\u0027storops\u0027)"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"from cinder import exception"},{"line_number":28,"context_line":"from cinder.i18n import _, _LW"},{"line_number":29,"context_line":"from cinder.volume.drivers.emc.vnx import common"}],"source_content_type":"text/x-python","patch_set":46,"id":"1aa78d24_a21c23c2","line":26,"updated":"2016-07-05 03:57:25.000000000","message":"Remove one blank line.","commit_id":"5f4273ffca5f5b8cf478ed10da4191c8b0eeb1d2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"91b02f0921da5fb5eb4c8ec522286eae30853283","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"storops \u003d importutils.try_import(\u0027storops\u0027)"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"from cinder import exception"},{"line_number":28,"context_line":"from cinder.i18n import _, _LW"},{"line_number":29,"context_line":"from cinder.volume.drivers.emc.vnx import common"}],"source_content_type":"text/x-python","patch_set":47,"id":"1aa78d24_dcb730d6","line":26,"updated":"2016-07-06 15:49:42.000000000","message":"Remove the extra blank line.","commit_id":"cebc9e1ab191b66b857ac8b71b18b2a8caa1ca56"},{"author":{"_account_id":18742,"name":"Ryan Liang","email":"ryan.liang@emc.com","username":"RyanLiang"},"change_message_id":"dd01b646873d0a2c93dd68a58109ebbf8134d2e1","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"storops \u003d importutils.try_import(\u0027storops\u0027)"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"from cinder import exception"},{"line_number":28,"context_line":"from cinder.i18n import _, _LW"},{"line_number":29,"context_line":"from cinder.volume.drivers.emc.vnx import common"}],"source_content_type":"text/x-python","patch_set":47,"id":"1aa78d24_886c2109","line":26,"in_reply_to":"1aa78d24_dcb730d6","updated":"2016-07-07 12:05:44.000000000","message":"Done","commit_id":"cebc9e1ab191b66b857ac8b71b18b2a8caa1ca56"}],"releasenotes/notes/vnx-new-driver-7e96934c2d3a6edc.yaml":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"affb577eb3efca4ded080440688d56fef41d247c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Adds VNX new Cinder driver which based on storops and deprecates legacy"},{"line_number":4,"context_line":"    VNX FC/iSCSI driver."}],"source_content_type":"text/x-yaml","patch_set":12,"id":"dab17558_5af3859e","line":4,"updated":"2016-05-14 04:35:33.000000000","message":"Can you also add a note under \"upgrade\" on how to upgrade from the legacy to new driver?\n\nThere is also a \"deprecations\" section. Can you specify that the old driver is deprecated there?","commit_id":"523531e128f177874921d8dc993372049bd068af"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"7f9c9ea5f478894a0d3e03d8807bdad61146bb47","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Adds VNX new Cinder driver which based on storops and deprecates legacy"},{"line_number":4,"context_line":"    VNX FC/iSCSI driver."}],"source_content_type":"text/x-yaml","patch_set":12,"id":"dab17558_72201f9c","line":4,"in_reply_to":"dab17558_5af3859e","updated":"2016-05-15 07:27:04.000000000","message":"Done","commit_id":"523531e128f177874921d8dc993372049bd068af"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"af2475aebe05c4dcd9eb32c1ef422767f8a4d208","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - Adds VNX new Cinder driver which based on storops."},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"upgrade:"},{"line_number":6,"context_line":"  - Please replcace volume_driver to \u0027cinder.volume.drivers.emc.vnx.driver.EMCVNXDriver\u0027."},{"line_number":7,"context_line":"    new option"},{"line_number":8,"context_line":"      For FC driver, adds \u0027storage_protocol \u003d FC\u0027 to driver section."},{"line_number":9,"context_line":"      For iSCSI driver, adds \u0027storage_protocol \u003d iSCSI\u0027 to driver section."}],"source_content_type":"text/x-yaml","patch_set":23,"id":"7aa08908_0d053bbb","line":6,"updated":"2016-06-07 13:19:32.000000000","message":"This line appears to be longer than 79 characters.\n\ns/replcace/replace","commit_id":"88f464e193168eae7e8b64acfe30485227f38f7b"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"7b772ba91991041eb80d003be94104cdba857f7b","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - Adds VNX new Cinder driver which based on storops."},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"upgrade:"},{"line_number":6,"context_line":"  - Please replcace volume_driver to \u0027cinder.volume.drivers.emc.vnx.driver.EMCVNXDriver\u0027."},{"line_number":7,"context_line":"    new option"},{"line_number":8,"context_line":"      For FC driver, adds \u0027storage_protocol \u003d FC\u0027 to driver section."},{"line_number":9,"context_line":"      For iSCSI driver, adds \u0027storage_protocol \u003d iSCSI\u0027 to driver section."}],"source_content_type":"text/x-yaml","patch_set":23,"id":"7aa08908_88fe0fac","line":6,"in_reply_to":"7aa08908_0d053bbb","updated":"2016-06-08 03:37:48.000000000","message":"Done","commit_id":"88f464e193168eae7e8b64acfe30485227f38f7b"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"af2475aebe05c4dcd9eb32c1ef422767f8a4d208","unresolved":false,"context_lines":[{"line_number":5,"context_line":"upgrade:"},{"line_number":6,"context_line":"  - Please replcace volume_driver to \u0027cinder.volume.drivers.emc.vnx.driver.EMCVNXDriver\u0027."},{"line_number":7,"context_line":"    new option"},{"line_number":8,"context_line":"      For FC driver, adds \u0027storage_protocol \u003d FC\u0027 to driver section."},{"line_number":9,"context_line":"      For iSCSI driver, adds \u0027storage_protocol \u003d iSCSI\u0027 to driver section."},{"line_number":10,"context_line":"deprecations:"},{"line_number":11,"context_line":"  - Old VNX FC/iSCSI drivers were deprecated in Newton."}],"source_content_type":"text/x-yaml","patch_set":23,"id":"7aa08908_6db83fe6","line":8,"updated":"2016-06-07 13:19:32.000000000","message":"vnx_io_protocol is used in the code.  The release not is out of sync with the code.","commit_id":"88f464e193168eae7e8b64acfe30485227f38f7b"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"7b772ba91991041eb80d003be94104cdba857f7b","unresolved":false,"context_lines":[{"line_number":5,"context_line":"upgrade:"},{"line_number":6,"context_line":"  - Please replcace volume_driver to \u0027cinder.volume.drivers.emc.vnx.driver.EMCVNXDriver\u0027."},{"line_number":7,"context_line":"    new option"},{"line_number":8,"context_line":"      For FC driver, adds \u0027storage_protocol \u003d FC\u0027 to driver section."},{"line_number":9,"context_line":"      For iSCSI driver, adds \u0027storage_protocol \u003d iSCSI\u0027 to driver section."},{"line_number":10,"context_line":"deprecations:"},{"line_number":11,"context_line":"  - Old VNX FC/iSCSI drivers were deprecated in Newton."}],"source_content_type":"text/x-yaml","patch_set":23,"id":"7aa08908_28b27b06","line":8,"in_reply_to":"7aa08908_6db83fe6","updated":"2016-06-08 03:37:48.000000000","message":"per your suggestion, storage_protocol will be used then","commit_id":"88f464e193168eae7e8b64acfe30485227f38f7b"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9aa1a517bf1e42bcffc5719e92269d1de92f4ed9","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Adds VNX new Cinder driver which based on storops."},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"upgrade:"},{"line_number":6,"context_line":"  - Please replace volume_driver to"}],"source_content_type":"text/x-yaml","patch_set":25,"id":"7aa08908_652fcf88","line":3,"updated":"2016-06-10 18:01:26.000000000","message":"......which is based on storops. storops is a library released to pypi.","commit_id":"4f7fe68635f0baa9f511dfe4c5f65a461a89171b"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"ea2a20b05cf7b9fb52c1ede1eb058686eaca0468","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Adds VNX new Cinder driver which based on storops."},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"upgrade:"},{"line_number":6,"context_line":"  - Please replace volume_driver to"}],"source_content_type":"text/x-yaml","patch_set":25,"id":"7aa08908_497f3066","line":3,"in_reply_to":"7aa08908_652fcf88","updated":"2016-06-12 09:58:41.000000000","message":"Done","commit_id":"4f7fe68635f0baa9f511dfe4c5f65a461a89171b"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9aa1a517bf1e42bcffc5719e92269d1de92f4ed9","unresolved":false,"context_lines":[{"line_number":9,"context_line":"      For FC driver, adds \u0027storage_protocol \u003d FC\u0027 to driver section."},{"line_number":10,"context_line":"      For iSCSI driver, adds \u0027storage_protocol \u003d iSCSI\u0027 to driver section."},{"line_number":11,"context_line":"deprecations:"},{"line_number":12,"context_line":"  - Old VNX FC/iSCSI drivers were deprecated in Newton."}],"source_content_type":"text/x-yaml","patch_set":25,"id":"7aa08908_ea3d4ede","line":12,"updated":"2016-06-10 18:01:26.000000000","message":"Can you spell out the full driver paths for the old drivers like that on line 7?","commit_id":"4f7fe68635f0baa9f511dfe4c5f65a461a89171b"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"ea2a20b05cf7b9fb52c1ede1eb058686eaca0468","unresolved":false,"context_lines":[{"line_number":9,"context_line":"      For FC driver, adds \u0027storage_protocol \u003d FC\u0027 to driver section."},{"line_number":10,"context_line":"      For iSCSI driver, adds \u0027storage_protocol \u003d iSCSI\u0027 to driver section."},{"line_number":11,"context_line":"deprecations:"},{"line_number":12,"context_line":"  - Old VNX FC/iSCSI drivers were deprecated in Newton."}],"source_content_type":"text/x-yaml","patch_set":25,"id":"7aa08908_a9ce9480","line":12,"in_reply_to":"7aa08908_ea3d4ede","updated":"2016-06-12 09:58:41.000000000","message":"Done","commit_id":"4f7fe68635f0baa9f511dfe4c5f65a461a89171b"},{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"e0a0d4302af25873801b9c7200aa0b9c17f36135","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    storops is a library released to pypi."},{"line_number":5,"context_line":""},{"line_number":6,"context_line":"upgrade:"},{"line_number":7,"context_line":"  - Please replace volume_driver to"},{"line_number":8,"context_line":"    \u0027cinder.volume.drivers.emc.vnx.driver.EMCVNXDriver\u0027."},{"line_number":9,"context_line":"    new option"},{"line_number":10,"context_line":"      For FC driver, adds \u0027storage_protocol \u003d FC\u0027 to driver section."},{"line_number":11,"context_line":"      For iSCSI driver, adds \u0027storage_protocol \u003d iSCSI\u0027 to driver section."},{"line_number":12,"context_line":"deprecations:"},{"line_number":13,"context_line":"  - Old VNX FC(cinder.volume.drivers.emc.emc_cli_fc.EMCCLIFCDriver)/"},{"line_number":14,"context_line":"    iSCSI(cinder.volume.drivers.emc.emc_cli_iscsi.EMCCLIISCSIDriver) drivers"}],"source_content_type":"text/x-yaml","patch_set":29,"id":"7aa08908_80bdb8d9","line":11,"range":{"start_line":7,"start_character":4,"end_line":11,"end_character":74},"updated":"2016-06-15 23:01:19.000000000","message":"Might want more context for this, just \u0027replace volume_driver\u0027 doesn\u0027t really explain who should replace it. Maybe something more like:\n\n\"For EMC VNX backends upgrade to using \u0027cinder.volume.drivers.emc.vnx.driver.EMCVNXDriver\u0027\"","commit_id":"577020cfeff968e09504e0828000a9a5e2b40042"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"7c89a77ce132c20baa81c42d51aaba52d3caabd1","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    storops is a library released to pypi."},{"line_number":5,"context_line":""},{"line_number":6,"context_line":"upgrade:"},{"line_number":7,"context_line":"  - Please replace volume_driver to"},{"line_number":8,"context_line":"    \u0027cinder.volume.drivers.emc.vnx.driver.EMCVNXDriver\u0027."},{"line_number":9,"context_line":"    new option"},{"line_number":10,"context_line":"      For FC driver, adds \u0027storage_protocol \u003d FC\u0027 to driver section."},{"line_number":11,"context_line":"      For iSCSI driver, adds \u0027storage_protocol \u003d iSCSI\u0027 to driver section."},{"line_number":12,"context_line":"deprecations:"},{"line_number":13,"context_line":"  - Old VNX FC(cinder.volume.drivers.emc.emc_cli_fc.EMCCLIFCDriver)/"},{"line_number":14,"context_line":"    iSCSI(cinder.volume.drivers.emc.emc_cli_iscsi.EMCCLIISCSIDriver) drivers"}],"source_content_type":"text/x-yaml","patch_set":29,"id":"7aa08908_ef90e750","line":11,"range":{"start_line":7,"start_character":4,"end_line":11,"end_character":74},"in_reply_to":"7aa08908_80bdb8d9","updated":"2016-06-16 03:02:34.000000000","message":"Done","commit_id":"577020cfeff968e09504e0828000a9a5e2b40042"},{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"e0a0d4302af25873801b9c7200aa0b9c17f36135","unresolved":false,"context_lines":[{"line_number":12,"context_line":"deprecations:"},{"line_number":13,"context_line":"  - Old VNX FC(cinder.volume.drivers.emc.emc_cli_fc.EMCCLIFCDriver)/"},{"line_number":14,"context_line":"    iSCSI(cinder.volume.drivers.emc.emc_cli_iscsi.EMCCLIISCSIDriver) drivers"},{"line_number":15,"context_line":"    were deprecated in Newton."}],"source_content_type":"text/x-yaml","patch_set":29,"id":"7aa08908_00f548ca","line":15,"range":{"start_line":15,"start_character":3,"end_line":15,"end_character":30},"updated":"2016-06-15 23:01:19.000000000","message":"Probably don\u0027t need to specify Newton on here, since this would be the Netwon release notes.","commit_id":"577020cfeff968e09504e0828000a9a5e2b40042"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"7c89a77ce132c20baa81c42d51aaba52d3caabd1","unresolved":false,"context_lines":[{"line_number":12,"context_line":"deprecations:"},{"line_number":13,"context_line":"  - Old VNX FC(cinder.volume.drivers.emc.emc_cli_fc.EMCCLIFCDriver)/"},{"line_number":14,"context_line":"    iSCSI(cinder.volume.drivers.emc.emc_cli_iscsi.EMCCLIISCSIDriver) drivers"},{"line_number":15,"context_line":"    were deprecated in Newton."}],"source_content_type":"text/x-yaml","patch_set":29,"id":"7aa08908_2f9b0f74","line":15,"range":{"start_line":15,"start_character":3,"end_line":15,"end_character":30},"in_reply_to":"7aa08908_00f548ca","updated":"2016-06-16 03:02:34.000000000","message":"Done","commit_id":"577020cfeff968e09504e0828000a9a5e2b40042"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"51554fb8abc2c8cbb8214cfc28021eaf6cf86607","unresolved":false,"context_lines":[{"line_number":12,"context_line":"deprecations:"},{"line_number":13,"context_line":"  - Old VNX FC(cinder.volume.drivers.emc.emc_cli_fc.EMCCLIFCDriver)/"},{"line_number":14,"context_line":"    iSCSI(cinder.volume.drivers.emc.emc_cli_iscsi.EMCCLIISCSIDriver) drivers"},{"line_number":15,"context_line":"    were deprecated."}],"source_content_type":"text/x-yaml","patch_set":31,"id":"7aa08908_1bbef9ad","line":15,"updated":"2016-06-17 15:40:56.000000000","message":"I would add a mention in the deprecations section to direct them to use the EMCVNXDriver in case they didn\u0027t notice the note in the upgrade section. Or at least refer them to the upgrade section to get that information.","commit_id":"64ba00acff88fef08331bf9b9add15dbae210666"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"e16d515f74d378486a0d501875998cd7b6add111","unresolved":false,"context_lines":[{"line_number":12,"context_line":"deprecations:"},{"line_number":13,"context_line":"  - Old VNX FC(cinder.volume.drivers.emc.emc_cli_fc.EMCCLIFCDriver)/"},{"line_number":14,"context_line":"    iSCSI(cinder.volume.drivers.emc.emc_cli_iscsi.EMCCLIISCSIDriver) drivers"},{"line_number":15,"context_line":"    were deprecated."}],"source_content_type":"text/x-yaml","patch_set":31,"id":"5a9d85d2_3e824701","line":15,"in_reply_to":"7aa08908_1bbef9ad","updated":"2016-06-20 09:43:08.000000000","message":"Will redirect user to upgrade section.\n\nThanks\nPeter","commit_id":"64ba00acff88fef08331bf9b9add15dbae210666"}],"requirements.txt":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"5b2de62ffdd55c70c827ba35b2047ae8149ace5a","unresolved":false,"context_lines":[{"line_number":50,"context_line":"SQLAlchemy\u003c1.1.0,\u003e\u003d1.0.10 # MIT"},{"line_number":51,"context_line":"sqlalchemy-migrate\u003e\u003d0.9.6 # Apache-2.0"},{"line_number":52,"context_line":"stevedore\u003e\u003d1.9.0 # Apache-2.0"},{"line_number":53,"context_line":"storops\u003c0.3.0,\u003e0.2.0 # Apache-2.0"},{"line_number":54,"context_line":"suds-jurko\u003e\u003d0.6 # LGPL"},{"line_number":55,"context_line":"WebOb\u003e\u003d1.2.3 # MIT"},{"line_number":56,"context_line":"oslo.i18n\u003e\u003d2.1.0 # Apache-2.0"}],"source_content_type":"text/plain","patch_set":1,"id":"1a122d0e_37ecc7f2","line":53,"updated":"2016-05-04 13:54:54.000000000","message":"This is required by the VNX driver only. So we should not require everyone to install this. See examples of how other drivers import driver specific required libs:\n\nhttps://github.com/openstack/cinder/blob/master/cinder/volume/drivers/hpe/hpe_3par_common.py#L48\n\nhttps://github.com/openstack/cinder/blob/master/cinder/volume/drivers/emc/emc_vmax_common.py#L41\n\nAlso please make sure that unit tests don\u0027t depend on this lib.","commit_id":"4abea7349899a22ae9104f1fe46b5a15dde362a7"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"c85342352c9fbd6ea4971a2a6a7d60851625510e","unresolved":false,"context_lines":[{"line_number":50,"context_line":"SQLAlchemy\u003c1.1.0,\u003e\u003d1.0.10 # MIT"},{"line_number":51,"context_line":"sqlalchemy-migrate\u003e\u003d0.9.6 # Apache-2.0"},{"line_number":52,"context_line":"stevedore\u003e\u003d1.9.0 # Apache-2.0"},{"line_number":53,"context_line":"storops\u003c0.3.0,\u003e0.2.0 # Apache-2.0"},{"line_number":54,"context_line":"suds-jurko\u003e\u003d0.6 # LGPL"},{"line_number":55,"context_line":"WebOb\u003e\u003d1.2.3 # MIT"},{"line_number":56,"context_line":"oslo.i18n\u003e\u003d2.1.0 # Apache-2.0"}],"source_content_type":"text/plain","patch_set":1,"id":"1a122d0e_f21d0f10","line":53,"in_reply_to":"1a122d0e_37ecc7f2","updated":"2016-05-05 10:50:04.000000000","message":"Done as your example;\nwe have remove the dependency to storops lib\nThanks\nPeter","commit_id":"4abea7349899a22ae9104f1fe46b5a15dde362a7"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"17cbc04421557b2eaeedd727a6e8ff54aed466df","unresolved":false,"context_lines":[{"line_number":50,"context_line":"SQLAlchemy\u003c1.1.0,\u003e\u003d1.0.10 # MIT"},{"line_number":51,"context_line":"sqlalchemy-migrate\u003e\u003d0.9.6 # Apache-2.0"},{"line_number":52,"context_line":"stevedore\u003e\u003d1.9.0 # Apache-2.0"},{"line_number":53,"context_line":"storops\u003c0.3.0,\u003e0.2.0 # Apache-2.0"},{"line_number":54,"context_line":"suds-jurko\u003e\u003d0.6 # LGPL"},{"line_number":55,"context_line":"WebOb\u003e\u003d1.2.3 # MIT"},{"line_number":56,"context_line":"oslo.i18n\u003e\u003d2.1.0 # Apache-2.0"}],"source_content_type":"text/plain","patch_set":2,"id":"1a122d0e_f596a692","line":53,"updated":"2016-05-05 04:17:19.000000000","message":"Please address my comments in patch set 1.  Thanks.\n\nhttps://review.openstack.org/#/c/312427/1/requirements.txt","commit_id":"950843b2317b13d4887e95ee8a4d093aa43ffcb9"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"c363cfc8c8729c9def3cba29cd8e368fbc61e2d1","unresolved":false,"context_lines":[{"line_number":50,"context_line":"SQLAlchemy\u003c1.1.0,\u003e\u003d1.0.10 # MIT"},{"line_number":51,"context_line":"sqlalchemy-migrate\u003e\u003d0.9.6 # Apache-2.0"},{"line_number":52,"context_line":"stevedore\u003e\u003d1.9.0 # Apache-2.0"},{"line_number":53,"context_line":"storops\u003c0.3.0,\u003e0.2.0 # Apache-2.0"},{"line_number":54,"context_line":"suds-jurko\u003e\u003d0.6 # LGPL"},{"line_number":55,"context_line":"WebOb\u003e\u003d1.2.3 # MIT"},{"line_number":56,"context_line":"oslo.i18n\u003e\u003d2.1.0 # Apache-2.0"}],"source_content_type":"text/plain","patch_set":2,"id":"1a122d0e_5804ef13","line":53,"in_reply_to":"1a122d0e_f596a692","updated":"2016-05-05 05:02:25.000000000","message":"Will address it in next patch, we need some effort to mock  storops dependencies in unittests","commit_id":"950843b2317b13d4887e95ee8a4d093aa43ffcb9"}]}
