)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"92a390427874a3fd437103a197565a0a070ee677","unresolved":false,"context_lines":[{"line_number":10,"context_line":"It manages storage by Infortrend CLI tool."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"common_cli.py implements the basic Cinder Driver API."},{"line_number":13,"context_line":"infortrend_fc_cli.py and infortrend_iscsi_cli.py use them to provide FC and iSCSI specific support."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Support features:"},{"line_number":16,"context_line":"- Volume Create/Delete"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"bab921fb_f1c97c79","line":13,"updated":"2015-04-24 15:02:22.000000000","message":"Please add line breaks to limit length.\n\nhttps://wiki.openstack.org/wiki/GitCommitMessages#Summary_of_Git_commit_message_structure","commit_id":"456fe18e13bb91f5a16cdf25b0d9a28e21ac6bcb"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"451209206929ff47bb83b4a97010e0c575b531c2","unresolved":false,"context_lines":[{"line_number":10,"context_line":"It manages storage by Infortrend CLI tool."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"common_cli.py implements the basic Cinder Driver API."},{"line_number":13,"context_line":"infortrend_fc_cli.py and infortrend_iscsi_cli.py use them to provide FC and iSCSI specific support."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Support features:"},{"line_number":16,"context_line":"- Volume Create/Delete"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"9abe1de1_dd039b0c","line":13,"in_reply_to":"bab921fb_f1c97c79","updated":"2015-04-27 09:21:18.000000000","message":"Done","commit_id":"456fe18e13bb91f5a16cdf25b0d9a28e21ac6bcb"}],"cinder/exception.py":[{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"7aa78543fba5421c01841b365c7480565f171aa1","unresolved":false,"context_lines":[{"line_number":985,"context_line":"    message \u003d _(\"Volume to Initiator Group mapping already exists\")"},{"line_number":986,"context_line":""},{"line_number":987,"context_line":""},{"line_number":988,"context_line":"# Infortrend EonStor DS Driver"},{"line_number":989,"context_line":"class InfortrendiSCSIAPIException(VolumeBackendAPIException):"},{"line_number":990,"context_line":"    message \u003d _(\"Bad Values from Cinder API: %(err)s\")"},{"line_number":991,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"bab921fb_f7971a46","line":988,"updated":"2015-04-24 23:35:45.000000000","message":"In general, your exceptions should be more specific.  These are really vague.","commit_id":"456fe18e13bb91f5a16cdf25b0d9a28e21ac6bcb"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"451209206929ff47bb83b4a97010e0c575b531c2","unresolved":false,"context_lines":[{"line_number":985,"context_line":"    message \u003d _(\"Volume to Initiator Group mapping already exists\")"},{"line_number":986,"context_line":""},{"line_number":987,"context_line":""},{"line_number":988,"context_line":"# Infortrend EonStor DS Driver"},{"line_number":989,"context_line":"class InfortrendiSCSIAPIException(VolumeBackendAPIException):"},{"line_number":990,"context_line":"    message \u003d _(\"Bad Values from Cinder API: %(err)s\")"},{"line_number":991,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9abe1de1_bd08e729","line":988,"in_reply_to":"bab921fb_f7971a46","updated":"2015-04-27 09:21:18.000000000","message":"Done","commit_id":"456fe18e13bb91f5a16cdf25b0d9a28e21ac6bcb"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"7aa78543fba5421c01841b365c7480565f171aa1","unresolved":false,"context_lines":[{"line_number":987,"context_line":""},{"line_number":988,"context_line":"# Infortrend EonStor DS Driver"},{"line_number":989,"context_line":"class InfortrendiSCSIAPIException(VolumeBackendAPIException):"},{"line_number":990,"context_line":"    message \u003d _(\"Bad Values from Cinder API: %(err)s\")"},{"line_number":991,"context_line":""},{"line_number":992,"context_line":""},{"line_number":993,"context_line":"class InfortrendiSCSIDriverException(VolumeDriverException):"}],"source_content_type":"text/x-python","patch_set":3,"id":"bab921fb_d7ae56e5","line":990,"updated":"2015-04-24 23:35:45.000000000","message":"s/Values/values/","commit_id":"456fe18e13bb91f5a16cdf25b0d9a28e21ac6bcb"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"451209206929ff47bb83b4a97010e0c575b531c2","unresolved":false,"context_lines":[{"line_number":987,"context_line":""},{"line_number":988,"context_line":"# Infortrend EonStor DS Driver"},{"line_number":989,"context_line":"class InfortrendiSCSIAPIException(VolumeBackendAPIException):"},{"line_number":990,"context_line":"    message \u003d _(\"Bad Values from Cinder API: %(err)s\")"},{"line_number":991,"context_line":""},{"line_number":992,"context_line":""},{"line_number":993,"context_line":"class InfortrendiSCSIDriverException(VolumeDriverException):"}],"source_content_type":"text/x-python","patch_set":3,"id":"9abe1de1_9d0d233a","line":990,"in_reply_to":"bab921fb_d7ae56e5","updated":"2015-04-27 09:21:18.000000000","message":"Done","commit_id":"456fe18e13bb91f5a16cdf25b0d9a28e21ac6bcb"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"60eebddb12affaa61727b6bb4da955641be500e1","unresolved":false,"context_lines":[{"line_number":989,"context_line":""},{"line_number":990,"context_line":""},{"line_number":991,"context_line":"class InfortrendDriverException(VolumeDriverException):"},{"line_number":992,"context_line":"    message \u003d _(\"Infortrend cinder driver exception: %(err)s\")"},{"line_number":993,"context_line":""},{"line_number":994,"context_line":""},{"line_number":995,"context_line":"class InfortrendCliException(CinderException):"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a016987_7f482ccc","line":992,"updated":"2015-05-23 04:36:51.000000000","message":"s/cinder/Cinder/.  Just to be consistent with L988.","commit_id":"ff03b70a66f5c591b124929b85a10d10edf77533"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"8b43e767e0f898b36423c888b728de3d844c5ebd","unresolved":false,"context_lines":[{"line_number":989,"context_line":""},{"line_number":990,"context_line":""},{"line_number":991,"context_line":"class InfortrendDriverException(VolumeDriverException):"},{"line_number":992,"context_line":"    message \u003d _(\"Infortrend cinder driver exception: %(err)s\")"},{"line_number":993,"context_line":""},{"line_number":994,"context_line":""},{"line_number":995,"context_line":"class InfortrendCliException(CinderException):"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a016987_477c3a20","line":992,"in_reply_to":"7a016987_7f482ccc","updated":"2015-05-28 06:23:40.000000000","message":"Done","commit_id":"ff03b70a66f5c591b124929b85a10d10edf77533"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"79d57c9a31c7200a8293b970545f689ebb72fb64","unresolved":false,"context_lines":[{"line_number":904,"context_line":""},{"line_number":905,"context_line":""},{"line_number":906,"context_line":"# Infortrend EonStor DS Driver"},{"line_number":907,"context_line":"class InfortrendAPIException(VolumeBackendAPIException):"},{"line_number":908,"context_line":"    message \u003d _(\"The wrong parameters were transmitted from \""},{"line_number":909,"context_line":"                \"Cinder API: %(err)s\")"},{"line_number":910,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"3afb71cf_d8d71d22","line":907,"updated":"2015-06-04 21:09:17.000000000","message":"I don\u0027t think this is really necessary to add, why not just use VolumeBackendAPIException?\n\n(The message here may be misleading, too.)","commit_id":"6d84c045049d5fe34a2d2d3a8824a7c7b37383f0"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"08a9e60e463b3efc7a49ec56e299ed58b4535b8e","unresolved":false,"context_lines":[{"line_number":904,"context_line":""},{"line_number":905,"context_line":""},{"line_number":906,"context_line":"# Infortrend EonStor DS Driver"},{"line_number":907,"context_line":"class InfortrendAPIException(VolumeBackendAPIException):"},{"line_number":908,"context_line":"    message \u003d _(\"The wrong parameters were transmitted from \""},{"line_number":909,"context_line":"                \"Cinder API: %(err)s\")"},{"line_number":910,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"3afb71cf_61226a03","line":907,"in_reply_to":"3afb71cf_d8d71d22","updated":"2015-06-08 09:45:11.000000000","message":"Ok, your right. It uses VolumeBackendAPIException and VolumeDriverException enough.\n\nI would update on next patchset.\n\nThanks for suggestion.","commit_id":"6d84c045049d5fe34a2d2d3a8824a7c7b37383f0"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"79d57c9a31c7200a8293b970545f689ebb72fb64","unresolved":false,"context_lines":[{"line_number":909,"context_line":"                \"Cinder API: %(err)s\")"},{"line_number":910,"context_line":""},{"line_number":911,"context_line":""},{"line_number":912,"context_line":"class InfortrendDriverException(VolumeDriverException):"},{"line_number":913,"context_line":"    message \u003d _(\"Infortrend Cinder Driver exception: %(err)s\")"},{"line_number":914,"context_line":""},{"line_number":915,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"3afb71cf_b8dc6147","line":912,"updated":"2015-06-04 21:09:17.000000000","message":"Same as above.","commit_id":"6d84c045049d5fe34a2d2d3a8824a7c7b37383f0"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"08a9e60e463b3efc7a49ec56e299ed58b4535b8e","unresolved":false,"context_lines":[{"line_number":909,"context_line":"                \"Cinder API: %(err)s\")"},{"line_number":910,"context_line":""},{"line_number":911,"context_line":""},{"line_number":912,"context_line":"class InfortrendDriverException(VolumeDriverException):"},{"line_number":913,"context_line":"    message \u003d _(\"Infortrend Cinder Driver exception: %(err)s\")"},{"line_number":914,"context_line":""},{"line_number":915,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"3afb71cf_4121aefa","line":912,"in_reply_to":"3afb71cf_b8dc6147","updated":"2015-06-08 09:45:11.000000000","message":"Same as above.","commit_id":"6d84c045049d5fe34a2d2d3a8824a7c7b37383f0"}],"cinder/tests/unit/test_infortrend_cli.py":[{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"7aa78543fba5421c01841b365c7480565f171aa1","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from cinder.volume.drivers.infortrend.eonstor_ds_cli import cli_factory as cli"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"SUCCEED \u003d (0, \u0027\u0027)"},{"line_number":22,"context_line":"FAKE_ERROR_RETURN \u003d (-1, \u0027\u0027)"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class InfortrendCLITestData(object):"}],"source_content_type":"text/x-python","patch_set":3,"id":"bab921fb_7791ca46","line":22,"updated":"2015-04-24 23:35:45.000000000","message":"These two variables are not used anywhere in this file.  Is there a reason they are here?","commit_id":"456fe18e13bb91f5a16cdf25b0d9a28e21ac6bcb"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"451209206929ff47bb83b4a97010e0c575b531c2","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from cinder.volume.drivers.infortrend.eonstor_ds_cli import cli_factory as cli"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"SUCCEED \u003d (0, \u0027\u0027)"},{"line_number":22,"context_line":"FAKE_ERROR_RETURN \u003d (-1, \u0027\u0027)"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class InfortrendCLITestData(object):"}],"source_content_type":"text/x-python","patch_set":3,"id":"9abe1de1_7d136f5d","line":22,"in_reply_to":"bab921fb_7791ca46","updated":"2015-04-27 09:21:18.000000000","message":"Done","commit_id":"456fe18e13bb91f5a16cdf25b0d9a28e21ac6bcb"},{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"4c1fbad2546e142eab6ea3ed6422bb3e09982ff5","unresolved":false,"context_lines":[{"line_number":1755,"context_line":"        test_command \u003d self._cli_set(command, fake_cli_succeed)"},{"line_number":1756,"context_line":""},{"line_number":1757,"context_line":"        rc, out \u003d test_command.execute()"},{"line_number":1758,"context_line":"        assert(rc \u003d\u003d 0)"},{"line_number":1759,"context_line":""},{"line_number":1760,"context_line":"    def _test_command_failed(self, command):"},{"line_number":1761,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"7a016987_f4452f17","line":1758,"updated":"2015-05-14 15:22:07.000000000","message":"Please use asserts from unittest for unit tests","commit_id":"2e29892ce1d541fe1e6adb11264305d6efd03213"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"40cf25b11951da4b9c84ed48fc5c927dec7b4aac","unresolved":false,"context_lines":[{"line_number":1755,"context_line":"        test_command \u003d self._cli_set(command, fake_cli_succeed)"},{"line_number":1756,"context_line":""},{"line_number":1757,"context_line":"        rc, out \u003d test_command.execute()"},{"line_number":1758,"context_line":"        assert(rc \u003d\u003d 0)"},{"line_number":1759,"context_line":""},{"line_number":1760,"context_line":"    def _test_command_failed(self, command):"},{"line_number":1761,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"7a016987_7210e101","line":1758,"in_reply_to":"7a016987_f4452f17","updated":"2015-05-18 06:09:49.000000000","message":"Ok, I would use self.assertEqual instead.","commit_id":"2e29892ce1d541fe1e6adb11264305d6efd03213"},{"author":{"_account_id":14428,"name":"Bharat Kumar Kobagana","email":"bharath.kobagana@gmail.com","username":"bharatkk"},"change_message_id":"cb1ed288f350e3690fe8eab4c54adf4d0a614c2c","unresolved":false,"context_lines":[{"line_number":380,"context_line":"        return (0, [])"},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"    def get_test_show_snapshot(self, partition_id\u003dNone, snapshot_id\u003dNone):"},{"line_number":383,"context_line":"        if partition_id is not None and snapshot_id is not None:"},{"line_number":384,"context_line":"            return (0, [{"},{"line_number":385,"context_line":"                \u0027Map\u0027: \u0027No\u0027,"},{"line_number":386,"context_line":"                \u0027Partition-ID\u0027: partition_id,"}],"source_content_type":"text/x-python","patch_set":11,"id":"7a016987_f06cb036","line":383,"updated":"2015-05-19 09:43:55.000000000","message":"We can simply test this condition by:\n\nif partition_id and snapshot_id:","commit_id":"b7e6cdbb1c300d2839563385f45616dafec65b4c"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"87f5960830aa793f09f9ecc9813a9e4616a572a0","unresolved":false,"context_lines":[{"line_number":380,"context_line":"        return (0, [])"},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"    def get_test_show_snapshot(self, partition_id\u003dNone, snapshot_id\u003dNone):"},{"line_number":383,"context_line":"        if partition_id is not None and snapshot_id is not None:"},{"line_number":384,"context_line":"            return (0, [{"},{"line_number":385,"context_line":"                \u0027Map\u0027: \u0027No\u0027,"},{"line_number":386,"context_line":"                \u0027Partition-ID\u0027: partition_id,"}],"source_content_type":"text/x-python","patch_set":11,"id":"7a016987_dd01ccb0","line":383,"in_reply_to":"7a016987_f06cb036","updated":"2015-05-19 10:50:57.000000000","message":"Done","commit_id":"b7e6cdbb1c300d2839563385f45616dafec65b4c"},{"author":{"_account_id":14428,"name":"Bharat Kumar Kobagana","email":"bharath.kobagana@gmail.com","username":"bharatkk"},"change_message_id":"cb1ed288f350e3690fe8eab4c54adf4d0a614c2c","unresolved":false,"context_lines":[{"line_number":1755,"context_line":"        test_command \u003d self._cli_set(command, fake_cli_succeed)"},{"line_number":1756,"context_line":""},{"line_number":1757,"context_line":"        rc, out \u003d test_command.execute()"},{"line_number":1758,"context_line":"        self.assertEqual(rc, 0)"},{"line_number":1759,"context_line":""},{"line_number":1760,"context_line":"    def _test_command_failed(self, command):"},{"line_number":1761,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"7a016987_70ce802f","line":1758,"updated":"2015-05-19 09:43:55.000000000","message":"The order of parameters is wrong. This should be (expected, actual)\n\nself.assertEqual(0, rc)","commit_id":"b7e6cdbb1c300d2839563385f45616dafec65b4c"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"87f5960830aa793f09f9ecc9813a9e4616a572a0","unresolved":false,"context_lines":[{"line_number":1755,"context_line":"        test_command \u003d self._cli_set(command, fake_cli_succeed)"},{"line_number":1756,"context_line":""},{"line_number":1757,"context_line":"        rc, out \u003d test_command.execute()"},{"line_number":1758,"context_line":"        self.assertEqual(rc, 0)"},{"line_number":1759,"context_line":""},{"line_number":1760,"context_line":"    def _test_command_failed(self, command):"},{"line_number":1761,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"7a016987_bdfe10ac","line":1758,"in_reply_to":"7a016987_70ce802f","updated":"2015-05-19 10:50:57.000000000","message":"Done","commit_id":"b7e6cdbb1c300d2839563385f45616dafec65b4c"},{"author":{"_account_id":14428,"name":"Bharat Kumar Kobagana","email":"bharath.kobagana@gmail.com","username":"bharatkk"},"change_message_id":"cb1ed288f350e3690fe8eab4c54adf4d0a614c2c","unresolved":false,"context_lines":[{"line_number":1763,"context_line":"        test_command \u003d self._cli_set(command, fake_cli_failed)"},{"line_number":1764,"context_line":""},{"line_number":1765,"context_line":"        rc, out \u003d test_command.execute()"},{"line_number":1766,"context_line":"        self.assertEqual(rc, int(\u00270x000c\u0027, 16))"},{"line_number":1767,"context_line":""},{"line_number":1768,"context_line":"    def _test_command_failed_retry_succeed(self, log_error, command):"},{"line_number":1769,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"7a016987_30d488bb","line":1766,"updated":"2015-05-19 09:43:55.000000000","message":"Same as above","commit_id":"b7e6cdbb1c300d2839563385f45616dafec65b4c"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"87f5960830aa793f09f9ecc9813a9e4616a572a0","unresolved":false,"context_lines":[{"line_number":1763,"context_line":"        test_command \u003d self._cli_set(command, fake_cli_failed)"},{"line_number":1764,"context_line":""},{"line_number":1765,"context_line":"        rc, out \u003d test_command.execute()"},{"line_number":1766,"context_line":"        self.assertEqual(rc, int(\u00270x000c\u0027, 16))"},{"line_number":1767,"context_line":""},{"line_number":1768,"context_line":"    def _test_command_failed_retry_succeed(self, log_error, command):"},{"line_number":1769,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"7a016987_9d2eb441","line":1766,"in_reply_to":"7a016987_30d488bb","updated":"2015-05-19 10:50:57.000000000","message":"Done","commit_id":"b7e6cdbb1c300d2839563385f45616dafec65b4c"},{"author":{"_account_id":14428,"name":"Bharat Kumar Kobagana","email":"bharath.kobagana@gmail.com","username":"bharatkk"},"change_message_id":"cb1ed288f350e3690fe8eab4c54adf4d0a614c2c","unresolved":false,"context_lines":[{"line_number":1780,"context_line":"        test_command \u003d self._cli_multi_set(command, fake_result_list)"},{"line_number":1781,"context_line":""},{"line_number":1782,"context_line":"        rc, out \u003d test_command.execute()"},{"line_number":1783,"context_line":"        self.assertEqual(rc, 0)"},{"line_number":1784,"context_line":""},{"line_number":1785,"context_line":"        expect_log_error \u003d ["},{"line_number":1786,"context_line":"            mock.call(LOG_ERROR_STR, {"}],"source_content_type":"text/x-python","patch_set":11,"id":"7a016987_10de2cdd","line":1783,"updated":"2015-05-19 09:43:55.000000000","message":"Same as above","commit_id":"b7e6cdbb1c300d2839563385f45616dafec65b4c"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"87f5960830aa793f09f9ecc9813a9e4616a572a0","unresolved":false,"context_lines":[{"line_number":1780,"context_line":"        test_command \u003d self._cli_multi_set(command, fake_result_list)"},{"line_number":1781,"context_line":""},{"line_number":1782,"context_line":"        rc, out \u003d test_command.execute()"},{"line_number":1783,"context_line":"        self.assertEqual(rc, 0)"},{"line_number":1784,"context_line":""},{"line_number":1785,"context_line":"        expect_log_error \u003d ["},{"line_number":1786,"context_line":"            mock.call(LOG_ERROR_STR, {"}],"source_content_type":"text/x-python","patch_set":11,"id":"7a016987_7d33f8ab","line":1783,"in_reply_to":"7a016987_10de2cdd","updated":"2015-05-19 10:50:57.000000000","message":"Done","commit_id":"b7e6cdbb1c300d2839563385f45616dafec65b4c"},{"author":{"_account_id":14428,"name":"Bharat Kumar Kobagana","email":"bharath.kobagana@gmail.com","username":"bharatkk"},"change_message_id":"cb1ed288f350e3690fe8eab4c54adf4d0a614c2c","unresolved":false,"context_lines":[{"line_number":1815,"context_line":"        test_command \u003d self._cli_multi_set(command, fake_result_list)"},{"line_number":1816,"context_line":""},{"line_number":1817,"context_line":"        rc, out \u003d test_command.execute()"},{"line_number":1818,"context_line":"        self.assertEqual(rc, int(\u00270x000b\u0027, 16))"},{"line_number":1819,"context_line":"        self.assertEqual(out, \u0027No network\u0027)"},{"line_number":1820,"context_line":""},{"line_number":1821,"context_line":"        expect_log_error \u003d ["}],"source_content_type":"text/x-python","patch_set":11,"id":"7a016987_90f0dc68","line":1818,"updated":"2015-05-19 09:43:55.000000000","message":"Same as above","commit_id":"b7e6cdbb1c300d2839563385f45616dafec65b4c"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"87f5960830aa793f09f9ecc9813a9e4616a572a0","unresolved":false,"context_lines":[{"line_number":1815,"context_line":"        test_command \u003d self._cli_multi_set(command, fake_result_list)"},{"line_number":1816,"context_line":""},{"line_number":1817,"context_line":"        rc, out \u003d test_command.execute()"},{"line_number":1818,"context_line":"        self.assertEqual(rc, int(\u00270x000b\u0027, 16))"},{"line_number":1819,"context_line":"        self.assertEqual(out, \u0027No network\u0027)"},{"line_number":1820,"context_line":""},{"line_number":1821,"context_line":"        expect_log_error \u003d ["}],"source_content_type":"text/x-python","patch_set":11,"id":"7a016987_5d24bc5e","line":1818,"in_reply_to":"7a016987_90f0dc68","updated":"2015-05-19 10:50:57.000000000","message":"Done","commit_id":"b7e6cdbb1c300d2839563385f45616dafec65b4c"},{"author":{"_account_id":14428,"name":"Bharat Kumar Kobagana","email":"bharath.kobagana@gmail.com","username":"bharatkk"},"change_message_id":"cb1ed288f350e3690fe8eab4c54adf4d0a614c2c","unresolved":false,"context_lines":[{"line_number":1816,"context_line":""},{"line_number":1817,"context_line":"        rc, out \u003d test_command.execute()"},{"line_number":1818,"context_line":"        self.assertEqual(rc, int(\u00270x000b\u0027, 16))"},{"line_number":1819,"context_line":"        self.assertEqual(out, \u0027No network\u0027)"},{"line_number":1820,"context_line":""},{"line_number":1821,"context_line":"        expect_log_error \u003d ["},{"line_number":1822,"context_line":"            mock.call(LOG_ERROR_STR, {"}],"source_content_type":"text/x-python","patch_set":11,"id":"7a016987_70f56055","line":1819,"updated":"2015-05-19 09:43:55.000000000","message":"Same as above","commit_id":"b7e6cdbb1c300d2839563385f45616dafec65b4c"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"87f5960830aa793f09f9ecc9813a9e4616a572a0","unresolved":false,"context_lines":[{"line_number":1816,"context_line":""},{"line_number":1817,"context_line":"        rc, out \u003d test_command.execute()"},{"line_number":1818,"context_line":"        self.assertEqual(rc, int(\u00270x000b\u0027, 16))"},{"line_number":1819,"context_line":"        self.assertEqual(out, \u0027No network\u0027)"},{"line_number":1820,"context_line":""},{"line_number":1821,"context_line":"        expect_log_error \u003d ["},{"line_number":1822,"context_line":"            mock.call(LOG_ERROR_STR, {"}],"source_content_type":"text/x-python","patch_set":11,"id":"7a016987_1d23e457","line":1819,"in_reply_to":"7a016987_70f56055","updated":"2015-05-19 10:50:57.000000000","message":"Done","commit_id":"b7e6cdbb1c300d2839563385f45616dafec65b4c"},{"author":{"_account_id":14428,"name":"Bharat Kumar Kobagana","email":"bharath.kobagana@gmail.com","username":"bharatkk"},"change_message_id":"cb1ed288f350e3690fe8eab4c54adf4d0a614c2c","unresolved":false,"context_lines":[{"line_number":1858,"context_line":""},{"line_number":1859,"context_line":"        rc, out \u003d test_command.execute(*params)"},{"line_number":1860,"context_line":""},{"line_number":1861,"context_line":"        self.assertEqual(rc, test_data[0])"},{"line_number":1862,"context_line":""},{"line_number":1863,"context_line":"        if isinstance(out, list):"},{"line_number":1864,"context_line":"            for i in range(len(test_data[1])):"}],"source_content_type":"text/x-python","patch_set":11,"id":"7a016987_b0f75858","line":1861,"updated":"2015-05-19 09:43:55.000000000","message":"Same as above","commit_id":"b7e6cdbb1c300d2839563385f45616dafec65b4c"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"87f5960830aa793f09f9ecc9813a9e4616a572a0","unresolved":false,"context_lines":[{"line_number":1858,"context_line":""},{"line_number":1859,"context_line":"        rc, out \u003d test_command.execute(*params)"},{"line_number":1860,"context_line":""},{"line_number":1861,"context_line":"        self.assertEqual(rc, test_data[0])"},{"line_number":1862,"context_line":""},{"line_number":1863,"context_line":"        if isinstance(out, list):"},{"line_number":1864,"context_line":"            for i in range(len(test_data[1])):"}],"source_content_type":"text/x-python","patch_set":11,"id":"7a016987_fd1fe805","line":1861,"in_reply_to":"7a016987_b0f75858","updated":"2015-05-19 10:50:57.000000000","message":"Done","commit_id":"b7e6cdbb1c300d2839563385f45616dafec65b4c"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"60eebddb12affaa61727b6bb4da955641be500e1","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        \u0027display_name\u0027: None,"},{"line_number":78,"context_line":"        \u0027display_description\u0027: \u0027Part-1\u0027,"},{"line_number":79,"context_line":"        \u0027volume_type_id\u0027: None,"},{"line_number":80,"context_line":"        \u0027provider_location\u0027: test_provider_location[0]"},{"line_number":81,"context_line":"    }"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    test_dst_volume \u003d {"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a016987_df0de08f","line":80,"updated":"2015-05-23 04:36:51.000000000","message":"Extra comma needed at the end - http://docs.openstack.org/developer/hacking/#dictionaries-lists.  This also applies to the other dicts below.","commit_id":"ff03b70a66f5c591b124929b85a10d10edf77533"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"8b43e767e0f898b36423c888b728de3d844c5ebd","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        \u0027display_name\u0027: None,"},{"line_number":78,"context_line":"        \u0027display_description\u0027: \u0027Part-1\u0027,"},{"line_number":79,"context_line":"        \u0027volume_type_id\u0027: None,"},{"line_number":80,"context_line":"        \u0027provider_location\u0027: test_provider_location[0]"},{"line_number":81,"context_line":"    }"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    test_dst_volume \u003d {"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a016987_679df658","line":80,"in_reply_to":"7a016987_df0de08f","updated":"2015-05-28 06:23:40.000000000","message":"Sorry I miss it. Thanks for catching. I would update on the next patch set.","commit_id":"ff03b70a66f5c591b124929b85a10d10edf77533"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c6ccd9bd585ce3e92261dca44ca53ae817a5ccab","unresolved":false,"context_lines":[{"line_number":1903,"context_line":""},{"line_number":1904,"context_line":"        log_error.reset_mock()"},{"line_number":1905,"context_line":""},{"line_number":1906,"context_line":"        LOG_ERROR_STR \u003d \\"},{"line_number":1907,"context_line":"            \u0027Retry %(retry)s times: %(method)s Failed %(rc)s: %(reason)s\u0027"},{"line_number":1908,"context_line":""},{"line_number":1909,"context_line":"        fake_result_list \u003d ["}],"source_content_type":"text/x-python","patch_set":25,"id":"3afb71cf_ed637240","line":1906,"updated":"2015-06-10 15:29:44.000000000","message":"It\u0027s preferred to use () instead of \\ for multi-line statement.","commit_id":"b9cf02c8fc869240ee4c9257ade5ca3b1c5469bf"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"4f54d8eab952febd728033e02453c13097a8e023","unresolved":false,"context_lines":[{"line_number":1903,"context_line":""},{"line_number":1904,"context_line":"        log_error.reset_mock()"},{"line_number":1905,"context_line":""},{"line_number":1906,"context_line":"        LOG_ERROR_STR \u003d \\"},{"line_number":1907,"context_line":"            \u0027Retry %(retry)s times: %(method)s Failed %(rc)s: %(reason)s\u0027"},{"line_number":1908,"context_line":""},{"line_number":1909,"context_line":"        fake_result_list \u003d ["}],"source_content_type":"text/x-python","patch_set":25,"id":"3afb71cf_1b25c85a","line":1906,"in_reply_to":"3afb71cf_ed637240","updated":"2015-06-11 05:48:08.000000000","message":"Done","commit_id":"b9cf02c8fc869240ee4c9257ade5ca3b1c5469bf"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c6ccd9bd585ce3e92261dca44ca53ae817a5ccab","unresolved":false,"context_lines":[{"line_number":1936,"context_line":""},{"line_number":1937,"context_line":"        log_error.reset_mock()"},{"line_number":1938,"context_line":""},{"line_number":1939,"context_line":"        LOG_ERROR_STR \u003d \\"},{"line_number":1940,"context_line":"            \u0027Retry %(retry)s times: %(method)s Failed %(rc)s: %(reason)s\u0027"},{"line_number":1941,"context_line":""},{"line_number":1942,"context_line":"        fake_result_list \u003d ["}],"source_content_type":"text/x-python","patch_set":25,"id":"3afb71cf_8d5cfe7d","line":1939,"updated":"2015-06-10 15:29:44.000000000","message":"Here too","commit_id":"b9cf02c8fc869240ee4c9257ade5ca3b1c5469bf"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"4f54d8eab952febd728033e02453c13097a8e023","unresolved":false,"context_lines":[{"line_number":1936,"context_line":""},{"line_number":1937,"context_line":"        log_error.reset_mock()"},{"line_number":1938,"context_line":""},{"line_number":1939,"context_line":"        LOG_ERROR_STR \u003d \\"},{"line_number":1940,"context_line":"            \u0027Retry %(retry)s times: %(method)s Failed %(rc)s: %(reason)s\u0027"},{"line_number":1941,"context_line":""},{"line_number":1942,"context_line":"        fake_result_list \u003d ["}],"source_content_type":"text/x-python","patch_set":25,"id":"3afb71cf_db23b054","line":1939,"in_reply_to":"3afb71cf_8d5cfe7d","updated":"2015-06-11 05:48:08.000000000","message":"Done","commit_id":"b9cf02c8fc869240ee4c9257ade5ca3b1c5469bf"}],"cinder/tests/unit/test_infortrend_common.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"4b4740e08d5d3f5e9cd45225388e901b73d1c8ed","unresolved":false,"context_lines":[{"line_number":189,"context_line":"            self.driver.initialize_connection,"},{"line_number":190,"context_line":"            test_volume,"},{"line_number":191,"context_line":"            test_connector)"},{"line_number":192,"context_line":"        self.assertTrue(re.match(r\u0027.*Failed to get wwn info.*\u0027, ex.msg))"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"    @mock.patch.object(LOG, \u0027info\u0027, mock.Mock())"},{"line_number":195,"context_line":"    def test_initialize_connection_with_zoning(self):"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a016987_5b4d5671","line":192,"updated":"2015-05-14 14:27:49.000000000","message":"I\u0027m generally against assert against exact strings in unit tests. I think the important part is verifying the exception is raised. The content of the exception message is something that could change slightly in the future and it might not be obvious (until running tests) that there is any implication in changing that text.\n\nI think this is fine, we certainly have plenty of other unit tests already doing this, but just wanted to mention it.","commit_id":"2e29892ce1d541fe1e6adb11264305d6efd03213"},{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"4c1fbad2546e142eab6ea3ed6422bb3e09982ff5","unresolved":false,"context_lines":[{"line_number":189,"context_line":"            self.driver.initialize_connection,"},{"line_number":190,"context_line":"            test_volume,"},{"line_number":191,"context_line":"            test_connector)"},{"line_number":192,"context_line":"        self.assertTrue(re.match(r\u0027.*Failed to get wwn info.*\u0027, ex.msg))"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"    @mock.patch.object(LOG, \u0027info\u0027, mock.Mock())"},{"line_number":195,"context_line":"    def test_initialize_connection_with_zoning(self):"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a016987_b4ce9758","line":192,"in_reply_to":"7a016987_5b4d5671","updated":"2015-05-14 15:22:07.000000000","message":"+1 assert exception messages is bad practice","commit_id":"2e29892ce1d541fe1e6adb11264305d6efd03213"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"40cf25b11951da4b9c84ed48fc5c927dec7b4aac","unresolved":false,"context_lines":[{"line_number":189,"context_line":"            self.driver.initialize_connection,"},{"line_number":190,"context_line":"            test_volume,"},{"line_number":191,"context_line":"            test_connector)"},{"line_number":192,"context_line":"        self.assertTrue(re.match(r\u0027.*Failed to get wwn info.*\u0027, ex.msg))"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"    @mock.patch.object(LOG, \u0027info\u0027, mock.Mock())"},{"line_number":195,"context_line":"    def test_initialize_connection_with_zoning(self):"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a016987_5c485e87","line":192,"in_reply_to":"7a016987_b4ce9758","updated":"2015-05-18 06:09:49.000000000","message":"Ok, thanks for suggestion. I agree the important part is verifying the exception is raised. I would remove in next patchset.","commit_id":"2e29892ce1d541fe1e6adb11264305d6efd03213"},{"author":{"_account_id":14428,"name":"Bharat Kumar Kobagana","email":"bharath.kobagana@gmail.com","username":"bharatkk"},"change_message_id":"cb1ed288f350e3690fe8eab4c54adf4d0a614c2c","unresolved":false,"context_lines":[{"line_number":75,"context_line":"    def _mock_show_lv_for_migrate(self, *args, **kwargs):"},{"line_number":76,"context_line":"        if \u0027tier\u0027 in args:"},{"line_number":77,"context_line":"            return self.cli_data.get_test_show_lv_tier_for_migration()"},{"line_number":78,"context_line":"        else:"},{"line_number":79,"context_line":"            return self.cli_data.get_test_show_lv()"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    def _mock_show_lv(self, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":11,"id":"7a016987_f024b0c5","line":78,"updated":"2015-05-19 09:43:55.000000000","message":"No need of else here. But that is up to you. (Other places as well)","commit_id":"b7e6cdbb1c300d2839563385f45616dafec65b4c"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"87f5960830aa793f09f9ecc9813a9e4616a572a0","unresolved":false,"context_lines":[{"line_number":75,"context_line":"    def _mock_show_lv_for_migrate(self, *args, **kwargs):"},{"line_number":76,"context_line":"        if \u0027tier\u0027 in args:"},{"line_number":77,"context_line":"            return self.cli_data.get_test_show_lv_tier_for_migration()"},{"line_number":78,"context_line":"        else:"},{"line_number":79,"context_line":"            return self.cli_data.get_test_show_lv()"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    def _mock_show_lv(self, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":11,"id":"7a016987_7dc1b853","line":78,"in_reply_to":"7a016987_f024b0c5","updated":"2015-05-19 10:50:57.000000000","message":"Done","commit_id":"b7e6cdbb1c300d2839563385f45616dafec65b4c"},{"author":{"_account_id":14428,"name":"Bharat Kumar Kobagana","email":"bharath.kobagana@gmail.com","username":"bharatkk"},"change_message_id":"cb1ed288f350e3690fe8eab4c54adf4d0a614c2c","unresolved":false,"context_lines":[{"line_number":457,"context_line":"        map_chl, map_lun, mcs_id \u003d self.driver._get_mapping_info_with_mcs()"},{"line_number":458,"context_line":""},{"line_number":459,"context_line":"        self.assertDictMatch(map_chl, test_map_chl)"},{"line_number":460,"context_line":"        self.assertEqual(map_lun, test_map_lun)"},{"line_number":461,"context_line":"        self.assertEqual(mcs_id, test_mcs_id)"},{"line_number":462,"context_line":""},{"line_number":463,"context_line":"    def test_mapping_info_with_mcs_multi_group(self):"}],"source_content_type":"text/x-python","patch_set":11,"id":"7a016987_d0a89422","line":460,"updated":"2015-05-19 09:43:55.000000000","message":"Please change change the order of parameters","commit_id":"b7e6cdbb1c300d2839563385f45616dafec65b4c"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"87f5960830aa793f09f9ecc9813a9e4616a572a0","unresolved":false,"context_lines":[{"line_number":457,"context_line":"        map_chl, map_lun, mcs_id \u003d self.driver._get_mapping_info_with_mcs()"},{"line_number":458,"context_line":""},{"line_number":459,"context_line":"        self.assertDictMatch(map_chl, test_map_chl)"},{"line_number":460,"context_line":"        self.assertEqual(map_lun, test_map_lun)"},{"line_number":461,"context_line":"        self.assertEqual(mcs_id, test_mcs_id)"},{"line_number":462,"context_line":""},{"line_number":463,"context_line":"    def test_mapping_info_with_mcs_multi_group(self):"}],"source_content_type":"text/x-python","patch_set":11,"id":"7a016987_3db7c0f6","line":460,"in_reply_to":"7a016987_d0a89422","updated":"2015-05-19 10:50:57.000000000","message":"Done","commit_id":"b7e6cdbb1c300d2839563385f45616dafec65b4c"},{"author":{"_account_id":14428,"name":"Bharat Kumar Kobagana","email":"bharath.kobagana@gmail.com","username":"bharatkk"},"change_message_id":"cb1ed288f350e3690fe8eab4c54adf4d0a614c2c","unresolved":false,"context_lines":[{"line_number":458,"context_line":""},{"line_number":459,"context_line":"        self.assertDictMatch(map_chl, test_map_chl)"},{"line_number":460,"context_line":"        self.assertEqual(map_lun, test_map_lun)"},{"line_number":461,"context_line":"        self.assertEqual(mcs_id, test_mcs_id)"},{"line_number":462,"context_line":""},{"line_number":463,"context_line":"    def test_mapping_info_with_mcs_multi_group(self):"},{"line_number":464,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"7a016987_706a00f0","line":461,"updated":"2015-05-19 09:43:55.000000000","message":"Same as above","commit_id":"b7e6cdbb1c300d2839563385f45616dafec65b4c"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"87f5960830aa793f09f9ecc9813a9e4616a572a0","unresolved":false,"context_lines":[{"line_number":458,"context_line":""},{"line_number":459,"context_line":"        self.assertDictMatch(map_chl, test_map_chl)"},{"line_number":460,"context_line":"        self.assertEqual(map_lun, test_map_lun)"},{"line_number":461,"context_line":"        self.assertEqual(mcs_id, test_mcs_id)"},{"line_number":462,"context_line":""},{"line_number":463,"context_line":"    def test_mapping_info_with_mcs_multi_group(self):"},{"line_number":464,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"7a016987_1dd1a423","line":461,"in_reply_to":"7a016987_706a00f0","updated":"2015-05-19 10:50:57.000000000","message":"Done","commit_id":"b7e6cdbb1c300d2839563385f45616dafec65b4c"},{"author":{"_account_id":14428,"name":"Bharat Kumar Kobagana","email":"bharath.kobagana@gmail.com","username":"bharatkk"},"change_message_id":"cb1ed288f350e3690fe8eab4c54adf4d0a614c2c","unresolved":false,"context_lines":[{"line_number":493,"context_line":"        map_chl, map_lun, mcs_id \u003d self.driver._get_mapping_info_with_mcs()"},{"line_number":494,"context_line":""},{"line_number":495,"context_line":"        self.assertDictMatch(map_chl, test_map_chl)"},{"line_number":496,"context_line":"        self.assertEqual(map_lun, test_map_lun)"},{"line_number":497,"context_line":"        self.assertEqual(mcs_id, test_mcs_id)"},{"line_number":498,"context_line":""},{"line_number":499,"context_line":"    def test_specific_channel_with_multipath(self):"}],"source_content_type":"text/x-python","patch_set":11,"id":"7a016987_307008dc","line":496,"updated":"2015-05-19 09:43:55.000000000","message":"Same as above","commit_id":"b7e6cdbb1c300d2839563385f45616dafec65b4c"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"87f5960830aa793f09f9ecc9813a9e4616a572a0","unresolved":false,"context_lines":[{"line_number":493,"context_line":"        map_chl, map_lun, mcs_id \u003d self.driver._get_mapping_info_with_mcs()"},{"line_number":494,"context_line":""},{"line_number":495,"context_line":"        self.assertDictMatch(map_chl, test_map_chl)"},{"line_number":496,"context_line":"        self.assertEqual(map_lun, test_map_lun)"},{"line_number":497,"context_line":"        self.assertEqual(mcs_id, test_mcs_id)"},{"line_number":498,"context_line":""},{"line_number":499,"context_line":"    def test_specific_channel_with_multipath(self):"}],"source_content_type":"text/x-python","patch_set":11,"id":"7a016987_ddc66c67","line":496,"in_reply_to":"7a016987_307008dc","updated":"2015-05-19 10:50:57.000000000","message":"Done","commit_id":"b7e6cdbb1c300d2839563385f45616dafec65b4c"},{"author":{"_account_id":14428,"name":"Bharat Kumar Kobagana","email":"bharath.kobagana@gmail.com","username":"bharatkk"},"change_message_id":"cb1ed288f350e3690fe8eab4c54adf4d0a614c2c","unresolved":false,"context_lines":[{"line_number":494,"context_line":""},{"line_number":495,"context_line":"        self.assertDictMatch(map_chl, test_map_chl)"},{"line_number":496,"context_line":"        self.assertEqual(map_lun, test_map_lun)"},{"line_number":497,"context_line":"        self.assertEqual(mcs_id, test_mcs_id)"},{"line_number":498,"context_line":""},{"line_number":499,"context_line":"    def test_specific_channel_with_multipath(self):"},{"line_number":500,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"7a016987_107aacbd","line":497,"updated":"2015-05-19 09:43:55.000000000","message":"Same as above","commit_id":"b7e6cdbb1c300d2839563385f45616dafec65b4c"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"87f5960830aa793f09f9ecc9813a9e4616a572a0","unresolved":false,"context_lines":[{"line_number":494,"context_line":""},{"line_number":495,"context_line":"        self.assertDictMatch(map_chl, test_map_chl)"},{"line_number":496,"context_line":"        self.assertEqual(map_lun, test_map_lun)"},{"line_number":497,"context_line":"        self.assertEqual(mcs_id, test_mcs_id)"},{"line_number":498,"context_line":""},{"line_number":499,"context_line":"    def test_specific_channel_with_multipath(self):"},{"line_number":500,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"7a016987_bdc3b056","line":497,"in_reply_to":"7a016987_107aacbd","updated":"2015-05-19 10:50:57.000000000","message":"Done","commit_id":"b7e6cdbb1c300d2839563385f45616dafec65b4c"},{"author":{"_account_id":14428,"name":"Bharat Kumar Kobagana","email":"bharath.kobagana@gmail.com","username":"bharatkk"},"change_message_id":"cb1ed288f350e3690fe8eab4c54adf4d0a614c2c","unresolved":false,"context_lines":[{"line_number":832,"context_line":""},{"line_number":833,"context_line":"        model_update \u003d self.driver.create_snapshot(self.cli_data.test_snapshot)"},{"line_number":834,"context_line":""},{"line_number":835,"context_line":"        self.assertEqual(model_update[\u0027provider_location\u0027], fake_snapshot_id)"},{"line_number":836,"context_line":""},{"line_number":837,"context_line":"    @mock.patch.object(LOG, \u0027info\u0027, mock.Mock())"},{"line_number":838,"context_line":"    def test_create_snapshot_without_partition_id(self):"}],"source_content_type":"text/x-python","patch_set":11,"id":"7a016987_d07f74a9","line":835,"updated":"2015-05-19 09:43:55.000000000","message":"Same as above","commit_id":"b7e6cdbb1c300d2839563385f45616dafec65b4c"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"87f5960830aa793f09f9ecc9813a9e4616a572a0","unresolved":false,"context_lines":[{"line_number":832,"context_line":""},{"line_number":833,"context_line":"        model_update \u003d self.driver.create_snapshot(self.cli_data.test_snapshot)"},{"line_number":834,"context_line":""},{"line_number":835,"context_line":"        self.assertEqual(model_update[\u0027provider_location\u0027], fake_snapshot_id)"},{"line_number":836,"context_line":""},{"line_number":837,"context_line":"    @mock.patch.object(LOG, \u0027info\u0027, mock.Mock())"},{"line_number":838,"context_line":"    def test_create_snapshot_without_partition_id(self):"}],"source_content_type":"text/x-python","patch_set":11,"id":"7a016987_9da354b2","line":835,"in_reply_to":"7a016987_d07f74a9","updated":"2015-05-19 10:50:57.000000000","message":"Done","commit_id":"b7e6cdbb1c300d2839563385f45616dafec65b4c"},{"author":{"_account_id":14428,"name":"Bharat Kumar Kobagana","email":"bharath.kobagana@gmail.com","username":"bharatkk"},"change_message_id":"cb1ed288f350e3690fe8eab4c54adf4d0a614c2c","unresolved":false,"context_lines":[{"line_number":1449,"context_line":"            mock.call(\u0027ShowMap\u0027, \u0027part\u003d%s\u0027 % test_partition_id)"},{"line_number":1450,"context_line":"        ]"},{"line_number":1451,"context_line":"        self._assert_cli_has_calls(expect_cli_cmd)"},{"line_number":1452,"context_line":"        self.assertEqual(size, 1)"},{"line_number":1453,"context_line":""},{"line_number":1454,"context_line":"    def test_manage_existing_get_size_in_use(self):"},{"line_number":1455,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"7a016987_b07cf8b5","line":1452,"updated":"2015-05-19 09:43:55.000000000","message":"Same as above","commit_id":"b7e6cdbb1c300d2839563385f45616dafec65b4c"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"87f5960830aa793f09f9ecc9813a9e4616a572a0","unresolved":false,"context_lines":[{"line_number":1449,"context_line":"            mock.call(\u0027ShowMap\u0027, \u0027part\u003d%s\u0027 % test_partition_id)"},{"line_number":1450,"context_line":"        ]"},{"line_number":1451,"context_line":"        self._assert_cli_has_calls(expect_cli_cmd)"},{"line_number":1452,"context_line":"        self.assertEqual(size, 1)"},{"line_number":1453,"context_line":""},{"line_number":1454,"context_line":"    def test_manage_existing_get_size_in_use(self):"},{"line_number":1455,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"7a016987_5da95c8f","line":1452,"in_reply_to":"7a016987_b07cf8b5","updated":"2015-05-19 10:50:57.000000000","message":"Done","commit_id":"b7e6cdbb1c300d2839563385f45616dafec65b4c"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"dc260ff0bbd5f4face7cb0125ae174e7ebd3d101","unresolved":false,"context_lines":[{"line_number":312,"context_line":"        self._driver_setup(mock_commands)"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"        self.driver._create_map()"},{"line_number":315,"context_line":"        log_warning.assert_called_once_with(\u0027The MCS Channel is grouped\u0027)"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"    @mock.patch.object(LOG, \u0027warning\u0027)"},{"line_number":318,"context_line":"    def test_delete_map_warning_return_code(self, log_warning):"}],"source_content_type":"text/x-python","patch_set":13,"id":"7a016987_f4fb6479","line":315,"updated":"2015-05-20 14:25:49.000000000","message":"For all of these please don\u0027t assert on exact text. Just assert that log_warning was called at least once to make sure we are properly logging.\n\nSame idea as in patchset 9 in regards to exception text.","commit_id":"abcac1a88eaa8c0bb069880e1419b9e0e9ac06e4"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"7a209adb7cc082a039ea4df0ac15ec81551164fd","unresolved":false,"context_lines":[{"line_number":312,"context_line":"        self._driver_setup(mock_commands)"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"        self.driver._create_map()"},{"line_number":315,"context_line":"        log_warning.assert_called_once_with(\u0027The MCS Channel is grouped\u0027)"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"    @mock.patch.object(LOG, \u0027warning\u0027)"},{"line_number":318,"context_line":"    def test_delete_map_warning_return_code(self, log_warning):"}],"source_content_type":"text/x-python","patch_set":13,"id":"7a016987_978e6477","line":315,"in_reply_to":"7a016987_f4fb6479","updated":"2015-05-21 02:32:29.000000000","message":"Ok, I would update in next patch set. I agree to just make sure we are properly logging.","commit_id":"abcac1a88eaa8c0bb069880e1419b9e0e9ac06e4"},{"author":{"_account_id":14428,"name":"Bharat Kumar Kobagana","email":"bharath.kobagana@gmail.com","username":"bharatkk"},"change_message_id":"7a32fdc2427939a8d62de192de256d7c1a2c5201","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from cinder import exception"},{"line_number":21,"context_line":"from cinder import test"},{"line_number":22,"context_line":"from cinder.tests.unit.test_infortrend_cli import InfortrendCLITestData"},{"line_number":23,"context_line":"from cinder.tests.unit import utils"},{"line_number":24,"context_line":"from cinder.volume.configuration import Configuration"},{"line_number":25,"context_line":"from cinder.volume.drivers.infortrend.eonstor_ds_cli import common_cli"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a016987_51640748","line":22,"updated":"2015-05-26 19:08:34.000000000","message":"Please import only modules, but not classes/objects.\n\nLike:\n\nfrom cinder.tests import test_infortrend_cli\ntest_infortrend_cli.InfortrendCLITestData\n\nhttp://docs.openstack.org/developer/hacking/#imports","commit_id":"ff03b70a66f5c591b124929b85a10d10edf77533"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"8b43e767e0f898b36423c888b728de3d844c5ebd","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from cinder import exception"},{"line_number":21,"context_line":"from cinder import test"},{"line_number":22,"context_line":"from cinder.tests.unit.test_infortrend_cli import InfortrendCLITestData"},{"line_number":23,"context_line":"from cinder.tests.unit import utils"},{"line_number":24,"context_line":"from cinder.volume.configuration import Configuration"},{"line_number":25,"context_line":"from cinder.volume.drivers.infortrend.eonstor_ds_cli import common_cli"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a016987_c7870a11","line":22,"in_reply_to":"7a016987_51640748","updated":"2015-05-28 06:23:40.000000000","message":"Sorry I miss it. I would update on the next patch set.","commit_id":"ff03b70a66f5c591b124929b85a10d10edf77533"},{"author":{"_account_id":14428,"name":"Bharat Kumar Kobagana","email":"bharath.kobagana@gmail.com","username":"bharatkk"},"change_message_id":"7a32fdc2427939a8d62de192de256d7c1a2c5201","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from cinder import test"},{"line_number":22,"context_line":"from cinder.tests.unit.test_infortrend_cli import InfortrendCLITestData"},{"line_number":23,"context_line":"from cinder.tests.unit import utils"},{"line_number":24,"context_line":"from cinder.volume.configuration import Configuration"},{"line_number":25,"context_line":"from cinder.volume.drivers.infortrend.eonstor_ds_cli import common_cli"},{"line_number":26,"context_line":"from cinder.volume.drivers.infortrend.eonstor_ds_cli.common_cli import LOG"},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"7a016987_f153f36a","line":24,"updated":"2015-05-26 19:08:34.000000000","message":"Same as above.","commit_id":"ff03b70a66f5c591b124929b85a10d10edf77533"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"8b43e767e0f898b36423c888b728de3d844c5ebd","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from cinder import test"},{"line_number":22,"context_line":"from cinder.tests.unit.test_infortrend_cli import InfortrendCLITestData"},{"line_number":23,"context_line":"from cinder.tests.unit import utils"},{"line_number":24,"context_line":"from cinder.volume.configuration import Configuration"},{"line_number":25,"context_line":"from cinder.volume.drivers.infortrend.eonstor_ds_cli import common_cli"},{"line_number":26,"context_line":"from cinder.volume.drivers.infortrend.eonstor_ds_cli.common_cli import LOG"},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"7a016987_07c88273","line":24,"in_reply_to":"7a016987_f153f36a","updated":"2015-05-28 06:23:40.000000000","message":"Done","commit_id":"ff03b70a66f5c591b124929b85a10d10edf77533"},{"author":{"_account_id":14428,"name":"Bharat Kumar Kobagana","email":"bharath.kobagana@gmail.com","username":"bharatkk"},"change_message_id":"7a32fdc2427939a8d62de192de256d7c1a2c5201","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from cinder.tests.unit import utils"},{"line_number":24,"context_line":"from cinder.volume.configuration import Configuration"},{"line_number":25,"context_line":"from cinder.volume.drivers.infortrend.eonstor_ds_cli import common_cli"},{"line_number":26,"context_line":"from cinder.volume.drivers.infortrend.eonstor_ds_cli.common_cli import LOG"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"SUCCEED \u003d (0, \u0027\u0027)"},{"line_number":29,"context_line":"FAKE_ERROR_RETURN \u003d (-1, \u0027\u0027)"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a016987_d150f760","line":26,"updated":"2015-05-26 19:08:34.000000000","message":"Saem as above.","commit_id":"ff03b70a66f5c591b124929b85a10d10edf77533"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"8b43e767e0f898b36423c888b728de3d844c5ebd","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from cinder.tests.unit import utils"},{"line_number":24,"context_line":"from cinder.volume.configuration import Configuration"},{"line_number":25,"context_line":"from cinder.volume.drivers.infortrend.eonstor_ds_cli import common_cli"},{"line_number":26,"context_line":"from cinder.volume.drivers.infortrend.eonstor_ds_cli.common_cli import LOG"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"SUCCEED \u003d (0, \u0027\u0027)"},{"line_number":29,"context_line":"FAKE_ERROR_RETURN \u003d (-1, \u0027\u0027)"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a016987_e7c44660","line":26,"in_reply_to":"7a016987_d150f760","updated":"2015-05-28 06:23:40.000000000","message":"Done","commit_id":"ff03b70a66f5c591b124929b85a10d10edf77533"}],"cinder/volume/drivers/infortrend/eonstor_ds_cli/cli_factory.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"92a390427874a3fd437103a197565a0a070ee677","unresolved":false,"context_lines":[{"line_number":168,"context_line":"        self.parameters \u003d ()"},{"line_number":169,"context_line":"        self.command_line \u003d \"\""},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    def _genertate_command(self, parameters):"},{"line_number":172,"context_line":"        \"\"\"Geneate execute Command. use java, execute, command, parameters\"\"\""},{"line_number":173,"context_line":"        self.parameters \u003d parameters"},{"line_number":174,"context_line":"        parameters_line \u003d \u0027 \u0027.join(parameters)"}],"source_content_type":"text/x-python","patch_set":3,"id":"bab921fb_e8e1949b","line":171,"updated":"2015-04-24 15:02:22.000000000","message":"/genertate/generate/","commit_id":"456fe18e13bb91f5a16cdf25b0d9a28e21ac6bcb"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"451209206929ff47bb83b4a97010e0c575b531c2","unresolved":false,"context_lines":[{"line_number":168,"context_line":"        self.parameters \u003d ()"},{"line_number":169,"context_line":"        self.command_line \u003d \"\""},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    def _genertate_command(self, parameters):"},{"line_number":172,"context_line":"        \"\"\"Geneate execute Command. use java, execute, command, parameters\"\"\""},{"line_number":173,"context_line":"        self.parameters \u003d parameters"},{"line_number":174,"context_line":"        parameters_line \u003d \u0027 \u0027.join(parameters)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9abe1de1_fd253fae","line":171,"in_reply_to":"bab921fb_e8e1949b","updated":"2015-04-27 09:21:18.000000000","message":"Done","commit_id":"456fe18e13bb91f5a16cdf25b0d9a28e21ac6bcb"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"92a390427874a3fd437103a197565a0a070ee677","unresolved":false,"context_lines":[{"line_number":169,"context_line":"        self.command_line \u003d \"\""},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    def _genertate_command(self, parameters):"},{"line_number":172,"context_line":"        \"\"\"Geneate execute Command. use java, execute, command, parameters\"\"\""},{"line_number":173,"context_line":"        self.parameters \u003d parameters"},{"line_number":174,"context_line":"        parameters_line \u003d \u0027 \u0027.join(parameters)"},{"line_number":175,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"bab921fb_08fe0837","line":172,"updated":"2015-04-24 15:02:22.000000000","message":"/Geneate/Generate/","commit_id":"456fe18e13bb91f5a16cdf25b0d9a28e21ac6bcb"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"451209206929ff47bb83b4a97010e0c575b531c2","unresolved":false,"context_lines":[{"line_number":169,"context_line":"        self.command_line \u003d \"\""},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    def _genertate_command(self, parameters):"},{"line_number":172,"context_line":"        \"\"\"Geneate execute Command. use java, execute, command, parameters\"\"\""},{"line_number":173,"context_line":"        self.parameters \u003d parameters"},{"line_number":174,"context_line":"        parameters_line \u003d \u0027 \u0027.join(parameters)"},{"line_number":175,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9abe1de1_9d2403b0","line":172,"in_reply_to":"bab921fb_08fe0837","updated":"2015-04-27 09:21:18.000000000","message":"Done","commit_id":"456fe18e13bb91f5a16cdf25b0d9a28e21ac6bcb"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"92a390427874a3fd437103a197565a0a070ee677","unresolved":false,"context_lines":[{"line_number":194,"context_line":"        \"\"\""},{"line_number":195,"context_line":"        content \u003d content.replace(\"\\r\", \"\")"},{"line_number":196,"context_line":"        content \u003d content.replace(\"\\\\/-\", \"\")"},{"line_number":197,"context_line":"        # content \u003d re.sub(r\u0027(\\\\\\/)+-+\u0027, \u0027\u0027, content)"},{"line_number":198,"context_line":"        content \u003d content.strip()"},{"line_number":199,"context_line":"        LOG.debug(content)"},{"line_number":200,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"bab921fb_28866cb9","line":197,"updated":"2015-04-24 15:02:22.000000000","message":"Please remove commented out code.","commit_id":"456fe18e13bb91f5a16cdf25b0d9a28e21ac6bcb"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"451209206929ff47bb83b4a97010e0c575b531c2","unresolved":false,"context_lines":[{"line_number":194,"context_line":"        \"\"\""},{"line_number":195,"context_line":"        content \u003d content.replace(\"\\r\", \"\")"},{"line_number":196,"context_line":"        content \u003d content.replace(\"\\\\/-\", \"\")"},{"line_number":197,"context_line":"        # content \u003d re.sub(r\u0027(\\\\\\/)+-+\u0027, \u0027\u0027, content)"},{"line_number":198,"context_line":"        content \u003d content.strip()"},{"line_number":199,"context_line":"        LOG.debug(content)"},{"line_number":200,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9abe1de1_7d3a4fcf","line":197,"in_reply_to":"bab921fb_28866cb9","updated":"2015-04-27 09:21:18.000000000","message":"Done","commit_id":"456fe18e13bb91f5a16cdf25b0d9a28e21ac6bcb"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"0172bf1a58abcc39a7b0cafba9fc5e22668ce1de","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"def retry_cli(func):"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def inner(self, *args, **kwargs):"},{"line_number":34,"context_line":"        total_retry_time \u003d self.cli_retry_time"},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"7a016987_855fae40","line":32,"updated":"2015-05-15 20:41:11.000000000","message":"Please, don\u0027t start classes and functions implementation with blank line","commit_id":"2e29892ce1d541fe1e6adb11264305d6efd03213"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"0172bf1a58abcc39a7b0cafba9fc5e22668ce1de","unresolved":false,"context_lines":[{"line_number":137,"context_line":"    @retry_cli"},{"line_number":138,"context_line":"    def execute(self, *args, **kwargs):"},{"line_number":139,"context_line":"        result \u003d None"},{"line_number":140,"context_line":"        rc \u003d 0"},{"line_number":141,"context_line":"        try:"},{"line_number":142,"context_line":"            result, err \u003d utils.execute(*args, **kwargs)"},{"line_number":143,"context_line":"        except processutils.ProcessExecutionError as pe:"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a016987_90712eab","line":140,"updated":"2015-05-15 20:41:11.000000000","message":"Please, use exceptions instead of return code","commit_id":"2e29892ce1d541fe1e6adb11264305d6efd03213"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"40cf25b11951da4b9c84ed48fc5c927dec7b4aac","unresolved":false,"context_lines":[{"line_number":137,"context_line":"    @retry_cli"},{"line_number":138,"context_line":"    def execute(self, *args, **kwargs):"},{"line_number":139,"context_line":"        result \u003d None"},{"line_number":140,"context_line":"        rc \u003d 0"},{"line_number":141,"context_line":"        try:"},{"line_number":142,"context_line":"            result, err \u003d utils.execute(*args, **kwargs)"},{"line_number":143,"context_line":"        except processutils.ProcessExecutionError as pe:"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a016987_af9cb2c0","line":140,"in_reply_to":"7a016987_90712eab","updated":"2015-05-18 06:09:49.000000000","message":"Thanks for suggestion. But I want to return to the upper layer for checking what kind of command error. \n\nI think I should remove catching Exception, just catch ProcessExecutionError.","commit_id":"2e29892ce1d541fe1e6adb11264305d6efd03213"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"0172bf1a58abcc39a7b0cafba9fc5e22668ce1de","unresolved":false,"context_lines":[{"line_number":148,"context_line":"                \u0027Error on execute command. \u0027"},{"line_number":149,"context_line":"                \u0027Error code: %(exit_code)d Error msg: %(result)s\u0027), {"},{"line_number":150,"context_line":"                    \u0027exit_code\u0027: pe.exit_code, \u0027result\u0027: result})"},{"line_number":151,"context_line":"        except Exception:"},{"line_number":152,"context_line":"            rc \u003d -2"},{"line_number":153,"context_line":"        return rc, result"},{"line_number":154,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"7a016987_05197e88","line":151,"updated":"2015-05-15 20:41:11.000000000","message":"Please, add exception logging here and below","commit_id":"2e29892ce1d541fe1e6adb11264305d6efd03213"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"40cf25b11951da4b9c84ed48fc5c927dec7b4aac","unresolved":false,"context_lines":[{"line_number":148,"context_line":"                \u0027Error on execute command. \u0027"},{"line_number":149,"context_line":"                \u0027Error code: %(exit_code)d Error msg: %(result)s\u0027), {"},{"line_number":150,"context_line":"                    \u0027exit_code\u0027: pe.exit_code, \u0027result\u0027: result})"},{"line_number":151,"context_line":"        except Exception:"},{"line_number":152,"context_line":"            rc \u003d -2"},{"line_number":153,"context_line":"        return rc, result"},{"line_number":154,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"7a016987_0face6eb","line":151,"in_reply_to":"7a016987_05197e88","updated":"2015-05-18 06:09:49.000000000","message":"I would remove catching this Exception. Just let it raises.","commit_id":"2e29892ce1d541fe1e6adb11264305d6efd03213"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"0172bf1a58abcc39a7b0cafba9fc5e22668ce1de","unresolved":false,"context_lines":[{"line_number":216,"context_line":"        :returns: execute result"},{"line_number":217,"context_line":"        \"\"\""},{"line_number":218,"context_line":"        command_line \u003d self._generate_command(args)"},{"line_number":219,"context_line":"        rc \u003d 0"},{"line_number":220,"context_line":"        result \u003d None"},{"line_number":221,"context_line":"        try:"},{"line_number":222,"context_line":"            content \u003d self._execute(command_line)"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a016987_3035dad9","line":219,"updated":"2015-05-15 20:41:11.000000000","message":"Add command line to debug log could be useful","commit_id":"2e29892ce1d541fe1e6adb11264305d6efd03213"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"40cf25b11951da4b9c84ed48fc5c927dec7b4aac","unresolved":false,"context_lines":[{"line_number":216,"context_line":"        :returns: execute result"},{"line_number":217,"context_line":"        \"\"\""},{"line_number":218,"context_line":"        command_line \u003d self._generate_command(args)"},{"line_number":219,"context_line":"        rc \u003d 0"},{"line_number":220,"context_line":"        result \u003d None"},{"line_number":221,"context_line":"        try:"},{"line_number":222,"context_line":"            content \u003d self._execute(command_line)"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a016987_6f7d9a6d","line":219,"in_reply_to":"7a016987_3035dad9","updated":"2015-05-18 06:09:49.000000000","message":"Thanks, I would add in the next patchset.","commit_id":"2e29892ce1d541fe1e6adb11264305d6efd03213"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"0172bf1a58abcc39a7b0cafba9fc5e22668ce1de","unresolved":false,"context_lines":[{"line_number":226,"context_line":"            result \u003d pe.stdout"},{"line_number":227,"context_line":"            result \u003d result.replace(\u0027\\n\u0027, \u0027\\\\n\u0027)"},{"line_number":228,"context_line":"            LOG.error(_LE("},{"line_number":229,"context_line":"                \u0027Error on execute command. \u0027"},{"line_number":230,"context_line":"                \u0027Error code: %(exit_code)d Error msg: %(result)s\u0027), {"},{"line_number":231,"context_line":"                    \u0027exit_code\u0027: pe.exit_code, \u0027result\u0027: result})"},{"line_number":232,"context_line":"        except Exception:"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a016987_905a4e29","line":229,"updated":"2015-05-15 20:41:11.000000000","message":"Please, add command_line to debug message","commit_id":"2e29892ce1d541fe1e6adb11264305d6efd03213"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"40cf25b11951da4b9c84ed48fc5c927dec7b4aac","unresolved":false,"context_lines":[{"line_number":226,"context_line":"            result \u003d pe.stdout"},{"line_number":227,"context_line":"            result \u003d result.replace(\u0027\\n\u0027, \u0027\\\\n\u0027)"},{"line_number":228,"context_line":"            LOG.error(_LE("},{"line_number":229,"context_line":"                \u0027Error on execute command. \u0027"},{"line_number":230,"context_line":"                \u0027Error code: %(exit_code)d Error msg: %(result)s\u0027), {"},{"line_number":231,"context_line":"                    \u0027exit_code\u0027: pe.exit_code, \u0027result\u0027: result})"},{"line_number":232,"context_line":"        except Exception:"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a016987_4f809e46","line":229,"in_reply_to":"7a016987_905a4e29","updated":"2015-05-18 06:09:49.000000000","message":"Thanks, I would add in the next patchset.","commit_id":"2e29892ce1d541fe1e6adb11264305d6efd03213"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"0172bf1a58abcc39a7b0cafba9fc5e22668ce1de","unresolved":false,"context_lines":[{"line_number":524,"context_line":"    \"\"\""},{"line_number":525,"context_line":""},{"line_number":526,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":527,"context_line":"        super(ShowLD, self).__init__(*args, **kwargs)"},{"line_number":528,"context_line":"        self.command \u003d \"show ld\""},{"line_number":529,"context_line":""},{"line_number":530,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"7a016987_301efa63","line":527,"updated":"2015-05-15 20:41:11.000000000","message":"IMO, implementation of such commands should be refactored. It\u0027s not a pythonic","commit_id":"2e29892ce1d541fe1e6adb11264305d6efd03213"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"40cf25b11951da4b9c84ed48fc5c927dec7b4aac","unresolved":false,"context_lines":[{"line_number":524,"context_line":"    \"\"\""},{"line_number":525,"context_line":""},{"line_number":526,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":527,"context_line":"        super(ShowLD, self).__init__(*args, **kwargs)"},{"line_number":528,"context_line":"        self.command \u003d \"show ld\""},{"line_number":529,"context_line":""},{"line_number":530,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"7a016987_afd15259","line":527,"in_reply_to":"7a016987_301efa63","updated":"2015-05-18 06:09:49.000000000","message":"In my design, every command has its own parser for parsing its specific format. I\u0027m not sure how to refactor again. \nAny other examples or design patterns? Many thanks.","commit_id":"2e29892ce1d541fe1e6adb11264305d6efd03213"},{"author":{"_account_id":14428,"name":"Bharat Kumar Kobagana","email":"bharath.kobagana@gmail.com","username":"bharatkk"},"change_message_id":"cb1ed288f350e3690fe8eab4c54adf4d0a614c2c","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"            if rc \u003d\u003d 0:"},{"line_number":44,"context_line":"                break"},{"line_number":45,"context_line":"            else:"},{"line_number":46,"context_line":"                LOG.error(_LE("},{"line_number":47,"context_line":"                    \u0027Retry %(retry)s time: %(method)s Fail \u0027"},{"line_number":48,"context_line":"                    \u0027%(rc)s: %(reason)s\u0027), {"}],"source_content_type":"text/x-python","patch_set":11,"id":"7a016987_4b6cf5cf","line":45,"updated":"2015-05-19 09:43:55.000000000","message":"No need of else here. (Optional)","commit_id":"b7e6cdbb1c300d2839563385f45616dafec65b4c"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"87f5960830aa793f09f9ecc9813a9e4616a572a0","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"            if rc \u003d\u003d 0:"},{"line_number":44,"context_line":"                break"},{"line_number":45,"context_line":"            else:"},{"line_number":46,"context_line":"                LOG.error(_LE("},{"line_number":47,"context_line":"                    \u0027Retry %(retry)s time: %(method)s Fail \u0027"},{"line_number":48,"context_line":"                    \u0027%(rc)s: %(reason)s\u0027), {"}],"source_content_type":"text/x-python","patch_set":11,"id":"7a016987_1d988477","line":45,"in_reply_to":"7a016987_4b6cf5cf","updated":"2015-05-19 10:50:57.000000000","message":"Done","commit_id":"b7e6cdbb1c300d2839563385f45616dafec65b4c"},{"author":{"_account_id":14428,"name":"Bharat Kumar Kobagana","email":"bharath.kobagana@gmail.com","username":"bharatkk"},"change_message_id":"cb1ed288f350e3690fe8eab4c54adf4d0a614c2c","unresolved":false,"context_lines":[{"line_number":697,"context_line":"class ShowReplica(ShowCommand):"},{"line_number":698,"context_line":""},{"line_number":699,"context_line":"    \"\"\"Show information of all current replication jobs,"},{"line_number":700,"context_line":"    or details for specific replication volume pairs."},{"line_number":701,"context_line":""},{"line_number":702,"context_line":"    show replica [id\u003d{volume-pair-IDs}] [-l] id\u003d{volume-pair-IDs}"},{"line_number":703,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":11,"id":"7a016987_ebae01e5","line":700,"updated":"2015-05-19 09:43:55.000000000","message":"A multi line docstring has a one-line summary, less than 80 characters.\n\nhttp://docs.openstack.org/developer/hacking/#docstrings","commit_id":"b7e6cdbb1c300d2839563385f45616dafec65b4c"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"87f5960830aa793f09f9ecc9813a9e4616a572a0","unresolved":false,"context_lines":[{"line_number":697,"context_line":"class ShowReplica(ShowCommand):"},{"line_number":698,"context_line":""},{"line_number":699,"context_line":"    \"\"\"Show information of all current replication jobs,"},{"line_number":700,"context_line":"    or details for specific replication volume pairs."},{"line_number":701,"context_line":""},{"line_number":702,"context_line":"    show replica [id\u003d{volume-pair-IDs}] [-l] id\u003d{volume-pair-IDs}"},{"line_number":703,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":11,"id":"7a016987_fd948843","line":700,"in_reply_to":"7a016987_ebae01e5","updated":"2015-05-19 10:50:57.000000000","message":"Done","commit_id":"b7e6cdbb1c300d2839563385f45616dafec65b4c"},{"author":{"_account_id":14428,"name":"Bharat Kumar Kobagana","email":"bharath.kobagana@gmail.com","username":"bharatkk"},"change_message_id":"1a95d9188e69eaa7feca7513040ab947ad9d9080","unresolved":false,"context_lines":[{"line_number":169,"context_line":"        self.parameters \u003d parameters"},{"line_number":170,"context_line":"        parameters_line \u003d \u0027 \u0027.join(parameters)"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"        if self.password !\u003d \u0027\u0027:"},{"line_number":173,"context_line":"            parameters_line \u003d \u0027password\u003d%s %s\u0027 % ("},{"line_number":174,"context_line":"                self.password, parameters_line)"},{"line_number":175,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"7a016987_c0531f38","line":172,"updated":"2015-05-19 12:31:42.000000000","message":"I don\u0027t have the complete idea about this driver, but what will happen if self.password is None.\n\n\"if non self.password:\"\n\nwill test empty string (\u0027\u0027) and None as well.","commit_id":"141899d9a98b0e0b3e48f839081f616d0f1cb5fe"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"69793010d1c70277d96f1fb648c8428d812cc450","unresolved":false,"context_lines":[{"line_number":169,"context_line":"        self.parameters \u003d parameters"},{"line_number":170,"context_line":"        parameters_line \u003d \u0027 \u0027.join(parameters)"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"        if self.password !\u003d \u0027\u0027:"},{"line_number":173,"context_line":"            parameters_line \u003d \u0027password\u003d%s %s\u0027 % ("},{"line_number":174,"context_line":"                self.password, parameters_line)"},{"line_number":175,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"7a016987_647a2dbf","line":172,"in_reply_to":"7a016987_c0531f38","updated":"2015-05-20 07:27:07.000000000","message":"Does python have non?  \n\nI think it could be \"if self.password:\" to handle None and empty string.\n\nIn my design, password never be None. But it\u0027s ok to be simple.","commit_id":"141899d9a98b0e0b3e48f839081f616d0f1cb5fe"},{"author":{"_account_id":14428,"name":"Bharat Kumar Kobagana","email":"bharath.kobagana@gmail.com","username":"bharatkk"},"change_message_id":"1a95d9188e69eaa7feca7513040ab947ad9d9080","unresolved":false,"context_lines":[{"line_number":696,"context_line":""},{"line_number":697,"context_line":"class ShowReplica(ShowCommand):"},{"line_number":698,"context_line":""},{"line_number":699,"context_line":"    \"\"\"Show information of all replication jobs or specific job,"},{"line_number":700,"context_line":""},{"line_number":701,"context_line":"    show replica [id\u003d{volume-pair-IDs}] [-l] id\u003d{volume-pair-IDs}"},{"line_number":702,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":12,"id":"7a016987_e004db18","line":699,"updated":"2015-05-19 12:31:42.000000000","message":"At the end either replace \u0027,\u0027 with \u0027.\u0027 or remove it.","commit_id":"141899d9a98b0e0b3e48f839081f616d0f1cb5fe"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"69793010d1c70277d96f1fb648c8428d812cc450","unresolved":false,"context_lines":[{"line_number":696,"context_line":""},{"line_number":697,"context_line":"class ShowReplica(ShowCommand):"},{"line_number":698,"context_line":""},{"line_number":699,"context_line":"    \"\"\"Show information of all replication jobs or specific job,"},{"line_number":700,"context_line":""},{"line_number":701,"context_line":"    show replica [id\u003d{volume-pair-IDs}] [-l] id\u003d{volume-pair-IDs}"},{"line_number":702,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":12,"id":"7a016987_2480b58a","line":699,"in_reply_to":"7a016987_e004db18","updated":"2015-05-20 07:27:07.000000000","message":"Done","commit_id":"141899d9a98b0e0b3e48f839081f616d0f1cb5fe"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"60eebddb12affaa61727b6bb4da955641be500e1","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        total_retry_time \u003d self.cli_retry_time"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"        if total_retry_time is None:"},{"line_number":36,"context_line":"            total_retry_time \u003d 5"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"        retry_time \u003d 0"},{"line_number":39,"context_line":"        while retry_time \u003c total_retry_time:"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a016987_ff81bcc3","line":36,"updated":"2015-05-23 04:36:51.000000000","message":"Might be good to have this as a constant above, e.g. DEFAULT_RETRY_TIME \u003d 5","commit_id":"ff03b70a66f5c591b124929b85a10d10edf77533"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"8b43e767e0f898b36423c888b728de3d844c5ebd","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        total_retry_time \u003d self.cli_retry_time"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"        if total_retry_time is None:"},{"line_number":36,"context_line":"            total_retry_time \u003d 5"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"        retry_time \u003d 0"},{"line_number":39,"context_line":"        while retry_time \u003c total_retry_time:"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a016987_07ad2288","line":36,"in_reply_to":"7a016987_ff81bcc3","updated":"2015-05-28 06:23:40.000000000","message":"Done","commit_id":"ff03b70a66f5c591b124929b85a10d10edf77533"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"1f9e57795de4842356a0d604c4288709d6146e87","unresolved":false,"context_lines":[{"line_number":30,"context_line":"DEFAULT_RETRY_TIME \u003d 5"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"def retry_cli(func):"},{"line_number":34,"context_line":"    def inner(self, *args, **kwargs):"},{"line_number":35,"context_line":"        total_retry_time \u003d self.cli_retry_time"},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"3afb71cf_0d73394f","line":33,"updated":"2015-06-04 20:42:36.000000000","message":"We already have cinder.utils.retry decorator. It works almost in the same way. Please, re-use it.","commit_id":"6d84c045049d5fe34a2d2d3a8824a7c7b37383f0"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"08a9e60e463b3efc7a49ec56e299ed58b4535b8e","unresolved":false,"context_lines":[{"line_number":30,"context_line":"DEFAULT_RETRY_TIME \u003d 5"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"def retry_cli(func):"},{"line_number":34,"context_line":"    def inner(self, *args, **kwargs):"},{"line_number":35,"context_line":"        total_retry_time \u003d self.cli_retry_time"},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"3afb71cf_b3643fe5","line":33,"in_reply_to":"3afb71cf_0d73394f","updated":"2015-06-08 09:45:11.000000000","message":"I saw the cinder.utils.retry decorator. It didn\u0027t support retry_on_result but I need to check rc value for retrying. \n\nMay I patch for adding retry_on_result in cinder.utils.retry?","commit_id":"6d84c045049d5fe34a2d2d3a8824a7c7b37383f0"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"1f9e57795de4842356a0d604c4288709d6146e87","unresolved":false,"context_lines":[{"line_number":289,"context_line":"    delete part [partition-ID] [-y]"},{"line_number":290,"context_line":"    \"\"\""},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":293,"context_line":"        super(DeletePartition, self).__init__(*args, **kwargs)"},{"line_number":294,"context_line":"        self.command \u003d \"delete part\""},{"line_number":295,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"3afb71cf_6dd18dfb","line":292,"updated":"2015-06-04 20:42:36.000000000","message":"There are a lot of almost the same command like a this one. Do we really need it? This code looks like a Java code, not a Python","commit_id":"6d84c045049d5fe34a2d2d3a8824a7c7b37383f0"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"08a9e60e463b3efc7a49ec56e299ed58b4535b8e","unresolved":false,"context_lines":[{"line_number":289,"context_line":"    delete part [partition-ID] [-y]"},{"line_number":290,"context_line":"    \"\"\""},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":293,"context_line":"        super(DeletePartition, self).__init__(*args, **kwargs)"},{"line_number":294,"context_line":"        self.command \u003d \"delete part\""},{"line_number":295,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"3afb71cf_76191579","line":292,"in_reply_to":"3afb71cf_6dd18dfb","updated":"2015-06-08 09:45:11.000000000","message":"I\u0027m sorry. I just learn python recently and I am not familiar with pythonic style.\n\nWould you please show some design pattern examples here?\n\nFor my design, it is a Simple Factory Pattern for handling difference CLI\u0027s format and response result. \n\nIt is easily for extending and modifying.","commit_id":"6d84c045049d5fe34a2d2d3a8824a7c7b37383f0"},{"author":{"_account_id":14377,"name":"Apoorva","email":"apps.desh@gmail.com","username":"apoorvad"},"change_message_id":"ae99f17fe0a779d7c11f457e60c52b92c0b6f22a","unresolved":false,"context_lines":[{"line_number":338,"context_line":""},{"line_number":339,"context_line":"class CreateSnapshot(CLIBaseCommand):"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"    \"\"\"Create partion\u0027s Snapshot"},{"line_number":342,"context_line":""},{"line_number":343,"context_line":"    create si [part] [partition-ID]"},{"line_number":344,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":21,"id":"3afb71cf_15db057e","line":341,"updated":"2015-06-06 20:17:45.000000000","message":"typo: Partion","commit_id":"6d84c045049d5fe34a2d2d3a8824a7c7b37383f0"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"08a9e60e463b3efc7a49ec56e299ed58b4535b8e","unresolved":false,"context_lines":[{"line_number":338,"context_line":""},{"line_number":339,"context_line":"class CreateSnapshot(CLIBaseCommand):"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"    \"\"\"Create partion\u0027s Snapshot"},{"line_number":342,"context_line":""},{"line_number":343,"context_line":"    create si [part] [partition-ID]"},{"line_number":344,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":21,"id":"3afb71cf_362a7d7f","line":341,"in_reply_to":"3afb71cf_15db057e","updated":"2015-06-08 09:45:11.000000000","message":"Thanks for catching!!","commit_id":"6d84c045049d5fe34a2d2d3a8824a7c7b37383f0"},{"author":{"_account_id":14377,"name":"Apoorva","email":"apps.desh@gmail.com","username":"apoorvad"},"change_message_id":"ae99f17fe0a779d7c11f457e60c52b92c0b6f22a","unresolved":false,"context_lines":[{"line_number":350,"context_line":""},{"line_number":351,"context_line":"class DeleteSnapshot(CLIBaseCommand):"},{"line_number":352,"context_line":""},{"line_number":353,"context_line":"    \"\"\"Delete partion\u0027s Snapshot"},{"line_number":354,"context_line":""},{"line_number":355,"context_line":"    delete si [snapshot-image-ID] [-y]"},{"line_number":356,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":21,"id":"3afb71cf_b5e9d11c","line":353,"updated":"2015-06-06 20:17:45.000000000","message":"typo: Partion","commit_id":"6d84c045049d5fe34a2d2d3a8824a7c7b37383f0"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"08a9e60e463b3efc7a49ec56e299ed58b4535b8e","unresolved":false,"context_lines":[{"line_number":350,"context_line":""},{"line_number":351,"context_line":"class DeleteSnapshot(CLIBaseCommand):"},{"line_number":352,"context_line":""},{"line_number":353,"context_line":"    \"\"\"Delete partion\u0027s Snapshot"},{"line_number":354,"context_line":""},{"line_number":355,"context_line":"    delete si [snapshot-image-ID] [-y]"},{"line_number":356,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":21,"id":"3afb71cf_1621c19f","line":353,"in_reply_to":"3afb71cf_b5e9d11c","updated":"2015-06-08 09:45:11.000000000","message":"Done","commit_id":"6d84c045049d5fe34a2d2d3a8824a7c7b37383f0"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"0eb7f109e6b733053cc68ef5c68a41f6fc8804c4","unresolved":false,"context_lines":[{"line_number":46,"context_line":"                break"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"            LOG.error(_LE("},{"line_number":49,"context_line":"                \u0027Retry %(retry)s time: %(method)s Fail \u0027"},{"line_number":50,"context_line":"                \u0027%(rc)s: %(reason)s\u0027), {"},{"line_number":51,"context_line":"                    \u0027retry\u0027: retry_time,"},{"line_number":52,"context_line":"                    \u0027method\u0027: self.__class__.__name__,"}],"source_content_type":"text/x-python","patch_set":24,"id":"3afb71cf_797cfdb4","line":49,"updated":"2015-06-10 04:45:03.000000000","message":"time-\u003etimes\n\nFail-\u003efailed.","commit_id":"c4d0818d1c26191fed581b8f7918f870cd63b7c1"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"2845f463a93d00ddfdaa0f5fb5da74a8975c1d40","unresolved":false,"context_lines":[{"line_number":46,"context_line":"                break"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"            LOG.error(_LE("},{"line_number":49,"context_line":"                \u0027Retry %(retry)s time: %(method)s Fail \u0027"},{"line_number":50,"context_line":"                \u0027%(rc)s: %(reason)s\u0027), {"},{"line_number":51,"context_line":"                    \u0027retry\u0027: retry_time,"},{"line_number":52,"context_line":"                    \u0027method\u0027: self.__class__.__name__,"}],"source_content_type":"text/x-python","patch_set":24,"id":"3afb71cf_a0a23197","line":49,"in_reply_to":"3afb71cf_797cfdb4","updated":"2015-06-10 10:54:26.000000000","message":"Done","commit_id":"c4d0818d1c26191fed581b8f7918f870cd63b7c1"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"0eb7f109e6b733053cc68ef5c68a41f6fc8804c4","unresolved":false,"context_lines":[{"line_number":736,"context_line":"    def detect_detail_start_index(self, content):"},{"line_number":737,"context_line":""},{"line_number":738,"context_line":"        for i in range(3, len(content)):"},{"line_number":739,"context_line":"            if content[i].strip() \u003d\u003d \"List of initiator IQN(s):\":"},{"line_number":740,"context_line":"                return i + 2"},{"line_number":741,"context_line":""},{"line_number":742,"context_line":"        return -1"}],"source_content_type":"text/x-python","patch_set":24,"id":"3afb71cf_a4bc8c06","line":739,"updated":"2015-06-10 04:45:03.000000000","message":"Can you put \"List of initiator IQN(s):\" in a constant?","commit_id":"c4d0818d1c26191fed581b8f7918f870cd63b7c1"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"2845f463a93d00ddfdaa0f5fb5da74a8975c1d40","unresolved":false,"context_lines":[{"line_number":736,"context_line":"    def detect_detail_start_index(self, content):"},{"line_number":737,"context_line":""},{"line_number":738,"context_line":"        for i in range(3, len(content)):"},{"line_number":739,"context_line":"            if content[i].strip() \u003d\u003d \"List of initiator IQN(s):\":"},{"line_number":740,"context_line":"                return i + 2"},{"line_number":741,"context_line":""},{"line_number":742,"context_line":"        return -1"}],"source_content_type":"text/x-python","patch_set":24,"id":"3afb71cf_40b81dc8","line":739,"in_reply_to":"3afb71cf_a4bc8c06","updated":"2015-06-10 10:54:26.000000000","message":"OK","commit_id":"c4d0818d1c26191fed581b8f7918f870cd63b7c1"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"2bb4337658c42f843f0411ad68e124ea0ff0818d","unresolved":false,"context_lines":[{"line_number":208,"context_line":""},{"line_number":209,"context_line":"    @retry_cli"},{"line_number":210,"context_line":"    def execute(self, *args, **kwargs):"},{"line_number":211,"context_line":"        \"\"\"The execute command function need to add parameters."},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"        :args args: Command\u0027s parameters"},{"line_number":214,"context_line":"        :returns: execute result"}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_4da0b343","line":211,"updated":"2015-06-16 18:12:10.000000000","message":"This isn\u0027t clear.  Do you mean \"The execute command function adds parameters.\"  ?","commit_id":"9d6cdb555ce292d17a644c1d5b9110519cd52734"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"24143903921844f7ea5562e484be09d545af3d27","unresolved":false,"context_lines":[{"line_number":208,"context_line":""},{"line_number":209,"context_line":"    @retry_cli"},{"line_number":210,"context_line":"    def execute(self, *args, **kwargs):"},{"line_number":211,"context_line":"        \"\"\"The execute command function need to add parameters."},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"        :args args: Command\u0027s parameters"},{"line_number":214,"context_line":"        :returns: execute result"}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_cfe02299","line":211,"in_reply_to":"fa32b979_4da0b343","updated":"2015-06-17 03:48:47.000000000","message":"I would remove. I think it is not necessary.","commit_id":"9d6cdb555ce292d17a644c1d5b9110519cd52734"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"2bb4337658c42f843f0411ad68e124ea0ff0818d","unresolved":false,"context_lines":[{"line_number":214,"context_line":"        :returns: execute result"},{"line_number":215,"context_line":"        \"\"\""},{"line_number":216,"context_line":"        command_line \u003d self._generate_command(args)"},{"line_number":217,"context_line":"        LOG.debug(\u0027Execute %(command)s\u0027, {\u0027command\u0027: command_line})"},{"line_number":218,"context_line":"        rc \u003d 0"},{"line_number":219,"context_line":"        result \u003d None"},{"line_number":220,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_ede1879b","line":217,"updated":"2015-06-16 18:12:10.000000000","message":"Suggest \"Executing:  %(commands)s\"  That would be clearer.","commit_id":"9d6cdb555ce292d17a644c1d5b9110519cd52734"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"24143903921844f7ea5562e484be09d545af3d27","unresolved":false,"context_lines":[{"line_number":214,"context_line":"        :returns: execute result"},{"line_number":215,"context_line":"        \"\"\""},{"line_number":216,"context_line":"        command_line \u003d self._generate_command(args)"},{"line_number":217,"context_line":"        LOG.debug(\u0027Execute %(command)s\u0027, {\u0027command\u0027: command_line})"},{"line_number":218,"context_line":"        rc \u003d 0"},{"line_number":219,"context_line":"        result \u003d None"},{"line_number":220,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_8f80dac1","line":217,"in_reply_to":"fa32b979_ede1879b","updated":"2015-06-17 03:48:47.000000000","message":"Done","commit_id":"9d6cdb555ce292d17a644c1d5b9110519cd52734"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"2bb4337658c42f843f0411ad68e124ea0ff0818d","unresolved":false,"context_lines":[{"line_number":225,"context_line":"            result \u003d pe.stdout"},{"line_number":226,"context_line":"            result \u003d result.replace(\u0027\\n\u0027, \u0027\\\\n\u0027)"},{"line_number":227,"context_line":"            LOG.error(_LE("},{"line_number":228,"context_line":"                \u0027Error on execute %(command)s \u0027"},{"line_number":229,"context_line":"                \u0027Error code: %(exit_code)d Error msg: %(result)s\u0027), {"},{"line_number":230,"context_line":"                    \u0027command\u0027: command_line,"},{"line_number":231,"context_line":"                    \u0027exit_code\u0027: pe.exit_code,"}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_2d744fcd","line":228,"updated":"2015-06-16 18:12:10.000000000","message":"suggest \u0027.\u0027 after %(command)s","commit_id":"9d6cdb555ce292d17a644c1d5b9110519cd52734"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"24143903921844f7ea5562e484be09d545af3d27","unresolved":false,"context_lines":[{"line_number":225,"context_line":"            result \u003d pe.stdout"},{"line_number":226,"context_line":"            result \u003d result.replace(\u0027\\n\u0027, \u0027\\\\n\u0027)"},{"line_number":227,"context_line":"            LOG.error(_LE("},{"line_number":228,"context_line":"                \u0027Error on execute %(command)s \u0027"},{"line_number":229,"context_line":"                \u0027Error code: %(exit_code)d Error msg: %(result)s\u0027), {"},{"line_number":230,"context_line":"                    \u0027command\u0027: command_line,"},{"line_number":231,"context_line":"                    \u0027exit_code\u0027: pe.exit_code,"}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_0f028a3d","line":228,"in_reply_to":"fa32b979_2d744fcd","updated":"2015-06-17 03:48:47.000000000","message":"Done","commit_id":"9d6cdb555ce292d17a644c1d5b9110519cd52734"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"2bb4337658c42f843f0411ad68e124ea0ff0818d","unresolved":false,"context_lines":[{"line_number":720,"context_line":""},{"line_number":721,"context_line":"class ShowIQN(ShowCommand):"},{"line_number":722,"context_line":""},{"line_number":723,"context_line":"    \"\"\"Show iSCSI initiator IQN which set by create iqn."},{"line_number":724,"context_line":""},{"line_number":725,"context_line":"    show iqn"},{"line_number":726,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_78ea1711","line":723,"updated":"2015-06-16 18:12:10.000000000","message":"\"... which is set ...\"","commit_id":"9d6cdb555ce292d17a644c1d5b9110519cd52734"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"24143903921844f7ea5562e484be09d545af3d27","unresolved":false,"context_lines":[{"line_number":720,"context_line":""},{"line_number":721,"context_line":"class ShowIQN(ShowCommand):"},{"line_number":722,"context_line":""},{"line_number":723,"context_line":"    \"\"\"Show iSCSI initiator IQN which set by create iqn."},{"line_number":724,"context_line":""},{"line_number":725,"context_line":"    show iqn"},{"line_number":726,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_6f14769f","line":723,"in_reply_to":"fa32b979_78ea1711","updated":"2015-06-17 03:48:47.000000000","message":"Done","commit_id":"9d6cdb555ce292d17a644c1d5b9110519cd52734"}],"cinder/volume/drivers/infortrend/eonstor_ds_cli/common_cli.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"92a390427874a3fd437103a197565a0a070ee677","unresolved":false,"context_lines":[{"line_number":34,"context_line":"infortrend_esds_opts \u003d ["},{"line_number":35,"context_line":"    cfg.StrOpt(\u0027infortrend_pools_name\u0027,"},{"line_number":36,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":37,"context_line":"               help\u003d\u0027Please Set Infortrend pools name\u0027),"},{"line_number":38,"context_line":"    cfg.StrOpt(\u0027infortrend_cli_path\u0027,"},{"line_number":39,"context_line":"               default\u003d\u0027/opt/bin/Infortrend/raidcmd_ESDS10.jar\u0027,"},{"line_number":40,"context_line":"               help\u003d\u0027Please Set Infortrend CLI path\u0027),"}],"source_content_type":"text/x-python","patch_set":3,"id":"bab921fb_ceb5b931","line":37,"updated":"2015-04-24 15:02:22.000000000","message":"\"Please Set\" not needed for the help text. Just provide a description of what the config option is: \"The Infortrend pools name.\"","commit_id":"456fe18e13bb91f5a16cdf25b0d9a28e21ac6bcb"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"451209206929ff47bb83b4a97010e0c575b531c2","unresolved":false,"context_lines":[{"line_number":34,"context_line":"infortrend_esds_opts \u003d ["},{"line_number":35,"context_line":"    cfg.StrOpt(\u0027infortrend_pools_name\u0027,"},{"line_number":36,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":37,"context_line":"               help\u003d\u0027Please Set Infortrend pools name\u0027),"},{"line_number":38,"context_line":"    cfg.StrOpt(\u0027infortrend_cli_path\u0027,"},{"line_number":39,"context_line":"               default\u003d\u0027/opt/bin/Infortrend/raidcmd_ESDS10.jar\u0027,"},{"line_number":40,"context_line":"               help\u003d\u0027Please Set Infortrend CLI path\u0027),"}],"source_content_type":"text/x-python","patch_set":3,"id":"9abe1de1_9d5be32e","line":37,"in_reply_to":"bab921fb_ceb5b931","updated":"2015-04-27 09:21:18.000000000","message":"Done","commit_id":"456fe18e13bb91f5a16cdf25b0d9a28e21ac6bcb"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"92a390427874a3fd437103a197565a0a070ee677","unresolved":false,"context_lines":[{"line_number":55,"context_line":"infortrend_esds_extra_opts \u003d ["},{"line_number":56,"context_line":"    cfg.StrOpt(\u0027infortrend_provisioning\u0027,"},{"line_number":57,"context_line":"               default\u003d\u0027full\u0027,"},{"line_number":58,"context_line":"               help\u003d\u0027\u0027),"},{"line_number":59,"context_line":"    cfg.StrOpt(\u0027infortrend_tiering\u0027,"},{"line_number":60,"context_line":"               default\u003d\u00270\u0027,"},{"line_number":61,"context_line":"               help\u003d\u0027\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"bab921fb_6ef46df1","line":58,"updated":"2015-04-24 15:02:22.000000000","message":"Please provide help text for these options. Not knowing the product, it\u0027s not really clear to me what these options mean.","commit_id":"456fe18e13bb91f5a16cdf25b0d9a28e21ac6bcb"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"451209206929ff47bb83b4a97010e0c575b531c2","unresolved":false,"context_lines":[{"line_number":55,"context_line":"infortrend_esds_extra_opts \u003d ["},{"line_number":56,"context_line":"    cfg.StrOpt(\u0027infortrend_provisioning\u0027,"},{"line_number":57,"context_line":"               default\u003d\u0027full\u0027,"},{"line_number":58,"context_line":"               help\u003d\u0027\u0027),"},{"line_number":59,"context_line":"    cfg.StrOpt(\u0027infortrend_tiering\u0027,"},{"line_number":60,"context_line":"               default\u003d\u00270\u0027,"},{"line_number":61,"context_line":"               help\u003d\u0027\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9abe1de1_7d412f39","line":58,"in_reply_to":"bab921fb_6ef46df1","updated":"2015-04-27 09:21:18.000000000","message":"Done","commit_id":"456fe18e13bb91f5a16cdf25b0d9a28e21ac6bcb"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"92a390427874a3fd437103a197565a0a070ee677","unresolved":false,"context_lines":[{"line_number":169,"context_line":"            \u0027slot_a\u0027: [],"},{"line_number":170,"context_line":"            \u0027slot_b\u0027: []"},{"line_number":171,"context_line":"        }"},{"line_number":172,"context_line":"        tmp_channel_list \u003d \\"},{"line_number":173,"context_line":"            self.configuration.infortrend_slots_a_channels_id.split(\u0027,\u0027)"},{"line_number":174,"context_line":"        self.channel_list[\u0027slot_a\u0027] \u003d \\"},{"line_number":175,"context_line":"            [channel.strip() for channel in tmp_channel_list]"}],"source_content_type":"text/x-python","patch_set":3,"id":"bab921fb_0e48512c","line":172,"updated":"2015-04-24 15:02:22.000000000","message":"In general you should try to avoid using \\ for line continuation. It\u0027s not a hard and fast rule, but the preference is to use () to wrap anything that needs to span multiple lines.\n\ne.g.:\ntmp_channel_list \u003d (\n    self.configration...)","commit_id":"456fe18e13bb91f5a16cdf25b0d9a28e21ac6bcb"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"451209206929ff47bb83b4a97010e0c575b531c2","unresolved":false,"context_lines":[{"line_number":169,"context_line":"            \u0027slot_a\u0027: [],"},{"line_number":170,"context_line":"            \u0027slot_b\u0027: []"},{"line_number":171,"context_line":"        }"},{"line_number":172,"context_line":"        tmp_channel_list \u003d \\"},{"line_number":173,"context_line":"            self.configuration.infortrend_slots_a_channels_id.split(\u0027,\u0027)"},{"line_number":174,"context_line":"        self.channel_list[\u0027slot_a\u0027] \u003d \\"},{"line_number":175,"context_line":"            [channel.strip() for channel in tmp_channel_list]"}],"source_content_type":"text/x-python","patch_set":3,"id":"9abe1de1_fd73ffb2","line":172,"in_reply_to":"bab921fb_0e48512c","updated":"2015-04-27 09:21:18.000000000","message":"Done","commit_id":"456fe18e13bb91f5a16cdf25b0d9a28e21ac6bcb"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"92a390427874a3fd437103a197565a0a070ee677","unresolved":false,"context_lines":[{"line_number":1027,"context_line":"            self._check_volume_exist(volume_id, part_id)"},{"line_number":1028,"context_line":""},{"line_number":1029,"context_line":"        if not check_exist:"},{"line_number":1030,"context_line":"            LOG.warning(_LW(\u0027Volume %s already delete\u0027) % volume_id)"},{"line_number":1031,"context_line":"            return"},{"line_number":1032,"context_line":""},{"line_number":1033,"context_line":"        replica_list \u003d self._show_replica(\u0027-l\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"bab921fb_0ea0518f","line":1030,"updated":"2015-04-24 15:02:22.000000000","message":"Please use , instead of % for the formatting argument.","commit_id":"456fe18e13bb91f5a16cdf25b0d9a28e21ac6bcb"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"451209206929ff47bb83b4a97010e0c575b531c2","unresolved":false,"context_lines":[{"line_number":1027,"context_line":"            self._check_volume_exist(volume_id, part_id)"},{"line_number":1028,"context_line":""},{"line_number":1029,"context_line":"        if not check_exist:"},{"line_number":1030,"context_line":"            LOG.warning(_LW(\u0027Volume %s already delete\u0027) % volume_id)"},{"line_number":1031,"context_line":"            return"},{"line_number":1032,"context_line":""},{"line_number":1033,"context_line":"        replica_list \u003d self._show_replica(\u0027-l\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9abe1de1_1d5fd30f","line":1030,"in_reply_to":"bab921fb_0ea0518f","updated":"2015-04-27 09:21:18.000000000","message":"Done","commit_id":"456fe18e13bb91f5a16cdf25b0d9a28e21ac6bcb"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"92a390427874a3fd437103a197565a0a070ee677","unresolved":false,"context_lines":[{"line_number":1038,"context_line":"                if not self._check_replica_completed(entry):"},{"line_number":1039,"context_line":"                    has_pair \u003d True"},{"line_number":1040,"context_line":"                    LOG.warning(_LW(\u0027Volume still %s \u0027"},{"line_number":1041,"context_line":"                                    \u0027Cannot delete volume.\u0027) % entry[\u0027Status\u0027])"},{"line_number":1042,"context_line":"                else:"},{"line_number":1043,"context_line":"                    have_map \u003d entry[\u0027Source-Mapped\u0027] \u003d\u003d \u0027Yes\u0027"},{"line_number":1044,"context_line":"                    self._delete_replica(entry[\u0027Pair-ID\u0027], \u0027-y\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"bab921fb_aeb725d7","line":1041,"updated":"2015-04-24 15:02:22.000000000","message":"% \u003d\u003e ,","commit_id":"456fe18e13bb91f5a16cdf25b0d9a28e21ac6bcb"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"451209206929ff47bb83b4a97010e0c575b531c2","unresolved":false,"context_lines":[{"line_number":1038,"context_line":"                if not self._check_replica_completed(entry):"},{"line_number":1039,"context_line":"                    has_pair \u003d True"},{"line_number":1040,"context_line":"                    LOG.warning(_LW(\u0027Volume still %s \u0027"},{"line_number":1041,"context_line":"                                    \u0027Cannot delete volume.\u0027) % entry[\u0027Status\u0027])"},{"line_number":1042,"context_line":"                else:"},{"line_number":1043,"context_line":"                    have_map \u003d entry[\u0027Source-Mapped\u0027] \u003d\u003d \u0027Yes\u0027"},{"line_number":1044,"context_line":"                    self._delete_replica(entry[\u0027Pair-ID\u0027], \u0027-y\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9abe1de1_fd9adfc4","line":1041,"in_reply_to":"bab921fb_aeb725d7","updated":"2015-04-27 09:21:18.000000000","message":"Done","commit_id":"456fe18e13bb91f5a16cdf25b0d9a28e21ac6bcb"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"92a390427874a3fd437103a197565a0a070ee677","unresolved":false,"context_lines":[{"line_number":1160,"context_line":"        return {\u0027provider_location\u0027: model_update}"},{"line_number":1161,"context_line":""},{"line_number":1162,"context_line":"    def get_volume_stats(self, refresh\u003dFalse):"},{"line_number":1163,"context_line":"        \"\"\"Get volume status"},{"line_number":1164,"context_line":"        If refresh is True, update the status first"},{"line_number":1165,"context_line":""},{"line_number":1166,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"bab921fb_8e08e192","line":1163,"updated":"2015-04-24 15:02:22.000000000","message":"Need blank line after the first DocString line. Can remove the extra blank line at the end.","commit_id":"456fe18e13bb91f5a16cdf25b0d9a28e21ac6bcb"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"451209206929ff47bb83b4a97010e0c575b531c2","unresolved":false,"context_lines":[{"line_number":1160,"context_line":"        return {\u0027provider_location\u0027: model_update}"},{"line_number":1161,"context_line":""},{"line_number":1162,"context_line":"    def get_volume_stats(self, refresh\u003dFalse):"},{"line_number":1163,"context_line":"        \"\"\"Get volume status"},{"line_number":1164,"context_line":"        If refresh is True, update the status first"},{"line_number":1165,"context_line":""},{"line_number":1166,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"9abe1de1_bda46708","line":1163,"in_reply_to":"bab921fb_8e08e192","updated":"2015-04-27 09:21:18.000000000","message":"Done","commit_id":"456fe18e13bb91f5a16cdf25b0d9a28e21ac6bcb"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"7aa78543fba5421c01841b365c7480565f171aa1","unresolved":false,"context_lines":[{"line_number":1179,"context_line":"            \u0027vendor_name\u0027: \u0027Infortrend\u0027,"},{"line_number":1180,"context_line":"            \u0027driver_version\u0027: self.VERSION,"},{"line_number":1181,"context_line":"            \u0027storage_protocol\u0027: \u0027iSCSI\u0027,"},{"line_number":1182,"context_line":"            \u0027pools\u0027: self._update_pools_stats()"},{"line_number":1183,"context_line":"        }"},{"line_number":1184,"context_line":"        self._volume_stats \u003d data"},{"line_number":1185,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"bab921fb_d78896c7","line":1182,"updated":"2015-04-24 23:35:45.000000000","message":"Need trailing comma","commit_id":"456fe18e13bb91f5a16cdf25b0d9a28e21ac6bcb"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"451209206929ff47bb83b4a97010e0c575b531c2","unresolved":false,"context_lines":[{"line_number":1179,"context_line":"            \u0027vendor_name\u0027: \u0027Infortrend\u0027,"},{"line_number":1180,"context_line":"            \u0027driver_version\u0027: self.VERSION,"},{"line_number":1181,"context_line":"            \u0027storage_protocol\u0027: \u0027iSCSI\u0027,"},{"line_number":1182,"context_line":"            \u0027pools\u0027: self._update_pools_stats()"},{"line_number":1183,"context_line":"        }"},{"line_number":1184,"context_line":"        self._volume_stats \u003d data"},{"line_number":1185,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9abe1de1_9da9a3e2","line":1182,"in_reply_to":"bab921fb_d78896c7","updated":"2015-04-27 09:21:18.000000000","message":"Done","commit_id":"456fe18e13bb91f5a16cdf25b0d9a28e21ac6bcb"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"92a390427874a3fd437103a197565a0a070ee677","unresolved":false,"context_lines":[{"line_number":1251,"context_line":"        snapshot_id \u003d snapshot[\u0027id\u0027].replace(\u0027-\u0027, \u0027\u0027)"},{"line_number":1252,"context_line":"        volume_id \u003d snapshot[\u0027volume_id\u0027].replace(\u0027-\u0027, \u0027\u0027)"},{"line_number":1253,"context_line":""},{"line_number":1254,"context_line":"        LOG.debug(\u0027Delete Snapshot %(snapshot)s volume %(volume)s\u0027 %"},{"line_number":1255,"context_line":"                  {\u0027snapshot\u0027: snapshot_id, \u0027volume\u0027: volume_id})"},{"line_number":1256,"context_line":""},{"line_number":1257,"context_line":"        raid_snapshot_id \u003d self._get_snapshot_id(snapshot)"}],"source_content_type":"text/x-python","patch_set":3,"id":"bab921fb_0e23b106","line":1254,"updated":"2015-04-24 15:02:22.000000000","message":"% \u003d\u003e ,","commit_id":"456fe18e13bb91f5a16cdf25b0d9a28e21ac6bcb"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"451209206929ff47bb83b4a97010e0c575b531c2","unresolved":false,"context_lines":[{"line_number":1251,"context_line":"        snapshot_id \u003d snapshot[\u0027id\u0027].replace(\u0027-\u0027, \u0027\u0027)"},{"line_number":1252,"context_line":"        volume_id \u003d snapshot[\u0027volume_id\u0027].replace(\u0027-\u0027, \u0027\u0027)"},{"line_number":1253,"context_line":""},{"line_number":1254,"context_line":"        LOG.debug(\u0027Delete Snapshot %(snapshot)s volume %(volume)s\u0027 %"},{"line_number":1255,"context_line":"                  {\u0027snapshot\u0027: snapshot_id, \u0027volume\u0027: volume_id})"},{"line_number":1256,"context_line":""},{"line_number":1257,"context_line":"        raid_snapshot_id \u003d self._get_snapshot_id(snapshot)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9abe1de1_3db9772f","line":1254,"in_reply_to":"bab921fb_0e23b106","updated":"2015-04-27 09:21:18.000000000","message":"Done","commit_id":"456fe18e13bb91f5a16cdf25b0d9a28e21ac6bcb"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"92a390427874a3fd437103a197565a0a070ee677","unresolved":false,"context_lines":[{"line_number":1374,"context_line":"            return self._initialize_connection_fc("},{"line_number":1375,"context_line":"                volume, connector, multipath)"},{"line_number":1376,"context_line":"        else:"},{"line_number":1377,"context_line":"            msg \u003d _(\u0027Unknow protocol\u0027)"},{"line_number":1378,"context_line":"            LOG.error(msg)"},{"line_number":1379,"context_line":"            raise exception.InfortrendiSCSIDriverException(err\u003dmsg)"},{"line_number":1380,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"bab921fb_ae61653b","line":1377,"updated":"2015-04-24 15:02:22.000000000","message":"/Unknow/Unknown/","commit_id":"456fe18e13bb91f5a16cdf25b0d9a28e21ac6bcb"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"451209206929ff47bb83b4a97010e0c575b531c2","unresolved":false,"context_lines":[{"line_number":1374,"context_line":"            return self._initialize_connection_fc("},{"line_number":1375,"context_line":"                volume, connector, multipath)"},{"line_number":1376,"context_line":"        else:"},{"line_number":1377,"context_line":"            msg \u003d _(\u0027Unknow protocol\u0027)"},{"line_number":1378,"context_line":"            LOG.error(msg)"},{"line_number":1379,"context_line":"            raise exception.InfortrendiSCSIDriverException(err\u003dmsg)"},{"line_number":1380,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9abe1de1_dd86fb64","line":1377,"in_reply_to":"bab921fb_ae61653b","updated":"2015-04-27 09:21:18.000000000","message":"Done","commit_id":"456fe18e13bb91f5a16cdf25b0d9a28e21ac6bcb"},{"author":{"_account_id":6043,"name":"Kurt Martin","email":"kurt.f.martin@hpe.com","username":"kurt-f-martin"},"change_message_id":"58987017fa181ac12e8ce66407e898787e53df40","unresolved":false,"context_lines":[{"line_number":1378,"context_line":"            LOG.error(msg)"},{"line_number":1379,"context_line":"            raise exception.InfortrendiSCSIDriverException(err\u003dmsg)"},{"line_number":1380,"context_line":""},{"line_number":1381,"context_line":"    def _initialize_connection_fc(self, volume, connector, multipath):"},{"line_number":1382,"context_line":""},{"line_number":1383,"context_line":"        volume_id \u003d volume[\u0027id\u0027].replace(\u0027-\u0027, \u0027\u0027)"},{"line_number":1384,"context_line":"        target_wwpns \u003d []"}],"source_content_type":"text/x-python","patch_set":3,"id":"bab921fb_b1c65266","line":1381,"updated":"2015-04-24 23:04:02.000000000","message":"You should really look into the fibre channel zone manager decorator, if you want your FC driver to take advantage of auto zoning your Brocade or Cisco fabric. @fczm_utils.AddFCZone","commit_id":"456fe18e13bb91f5a16cdf25b0d9a28e21ac6bcb"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"451209206929ff47bb83b4a97010e0c575b531c2","unresolved":false,"context_lines":[{"line_number":1378,"context_line":"            LOG.error(msg)"},{"line_number":1379,"context_line":"            raise exception.InfortrendiSCSIDriverException(err\u003dmsg)"},{"line_number":1380,"context_line":""},{"line_number":1381,"context_line":"    def _initialize_connection_fc(self, volume, connector, multipath):"},{"line_number":1382,"context_line":""},{"line_number":1383,"context_line":"        volume_id \u003d volume[\u0027id\u0027].replace(\u0027-\u0027, \u0027\u0027)"},{"line_number":1384,"context_line":"        target_wwpns \u003d []"}],"source_content_type":"text/x-python","patch_set":3,"id":"9abe1de1_dd627bad","line":1381,"in_reply_to":"bab921fb_b1c65266","updated":"2015-04-27 09:21:18.000000000","message":"Hi Kurt,\n\nThanks for your comments. It is very useful information but we decide to add this function into next blueprint. :)","commit_id":"456fe18e13bb91f5a16cdf25b0d9a28e21ac6bcb"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"92a390427874a3fd437103a197565a0a070ee677","unresolved":false,"context_lines":[{"line_number":1780,"context_line":"        self._set_part(\u0027expand\u0027, part_id, expand_command)"},{"line_number":1781,"context_line":""},{"line_number":1782,"context_line":"        LOG.info(_LI("},{"line_number":1783,"context_line":"            \u0027Successfully extend volume %(volume_id)s \u0027"},{"line_number":1784,"context_line":"            \u0027size %(size)s\u0027), {"},{"line_number":1785,"context_line":"                \u0027volume_id\u0027: volume[\u0027id\u0027], \u0027size\u0027: new_size})"},{"line_number":1786,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"bab921fb_ee82bd93","line":1783,"updated":"2015-04-24 15:02:22.000000000","message":"/extend/extended/","commit_id":"456fe18e13bb91f5a16cdf25b0d9a28e21ac6bcb"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"451209206929ff47bb83b4a97010e0c575b531c2","unresolved":false,"context_lines":[{"line_number":1780,"context_line":"        self._set_part(\u0027expand\u0027, part_id, expand_command)"},{"line_number":1781,"context_line":""},{"line_number":1782,"context_line":"        LOG.info(_LI("},{"line_number":1783,"context_line":"            \u0027Successfully extend volume %(volume_id)s \u0027"},{"line_number":1784,"context_line":"            \u0027size %(size)s\u0027), {"},{"line_number":1785,"context_line":"                \u0027volume_id\u0027: volume[\u0027id\u0027], \u0027size\u0027: new_size})"},{"line_number":1786,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9abe1de1_9d5c03ef","line":1783,"in_reply_to":"bab921fb_ee82bd93","updated":"2015-04-27 09:21:18.000000000","message":"Done","commit_id":"456fe18e13bb91f5a16cdf25b0d9a28e21ac6bcb"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"92a390427874a3fd437103a197565a0a070ee677","unresolved":false,"context_lines":[{"line_number":1800,"context_line":"            self._delete_iqn(self._truncate_host_name(connector[\u0027initiator\u0027]))"},{"line_number":1801,"context_line":"        self._update_map_info(multipath)"},{"line_number":1802,"context_line":""},{"line_number":1803,"context_line":"        LOG.info(_LI(\u0027Successfully terminate connection\u0027"},{"line_number":1804,"context_line":"                     \u0027for volume %s\u0027), volume[\u0027id\u0027])"},{"line_number":1805,"context_line":""},{"line_number":1806,"context_line":"    def migrate_volume(self, volume, host):"}],"source_content_type":"text/x-python","patch_set":3,"id":"bab921fb_2e60b500","line":1803,"updated":"2015-04-24 15:02:22.000000000","message":"/terminate/terminated/","commit_id":"456fe18e13bb91f5a16cdf25b0d9a28e21ac6bcb"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"451209206929ff47bb83b4a97010e0c575b531c2","unresolved":false,"context_lines":[{"line_number":1800,"context_line":"            self._delete_iqn(self._truncate_host_name(connector[\u0027initiator\u0027]))"},{"line_number":1801,"context_line":"        self._update_map_info(multipath)"},{"line_number":1802,"context_line":""},{"line_number":1803,"context_line":"        LOG.info(_LI(\u0027Successfully terminate connection\u0027"},{"line_number":1804,"context_line":"                     \u0027for volume %s\u0027), volume[\u0027id\u0027])"},{"line_number":1805,"context_line":""},{"line_number":1806,"context_line":"    def migrate_volume(self, volume, host):"}],"source_content_type":"text/x-python","patch_set":3,"id":"9abe1de1_7d724f7e","line":1803,"in_reply_to":"bab921fb_2e60b500","updated":"2015-04-27 09:21:18.000000000","message":"Done","commit_id":"456fe18e13bb91f5a16cdf25b0d9a28e21ac6bcb"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"92a390427874a3fd437103a197565a0a070ee677","unresolved":false,"context_lines":[{"line_number":1889,"context_line":"                        self._delete_replica(entry[\u0027Pair-ID\u0027], \u0027-y\u0027)"},{"line_number":1890,"context_line":"            except Exception as ex:"},{"line_number":1891,"context_line":"                check_done \u003d False"},{"line_number":1892,"context_line":"                LOG.error(_LE("},{"line_number":1893,"context_line":"                    \u0027Cannot detect replica status: exception %s\u0027) % ex)"},{"line_number":1894,"context_line":""},{"line_number":1895,"context_line":"            if check_done:"}],"source_content_type":"text/x-python","patch_set":3,"id":"bab921fb_1110704d","line":1892,"updated":"2015-04-24 15:02:22.000000000","message":"Change this to:\n\nLOG.exception(_LE(\u0027Cannot detect replica status.\u0027)\n\nLOG.exception will take care of logging the exception details without needing to explicitly format it in the string message. Then you can also remove \"as ex\" from the except line as it is no longer needed directly.","commit_id":"456fe18e13bb91f5a16cdf25b0d9a28e21ac6bcb"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"451209206929ff47bb83b4a97010e0c575b531c2","unresolved":false,"context_lines":[{"line_number":1889,"context_line":"                        self._delete_replica(entry[\u0027Pair-ID\u0027], \u0027-y\u0027)"},{"line_number":1890,"context_line":"            except Exception as ex:"},{"line_number":1891,"context_line":"                check_done \u003d False"},{"line_number":1892,"context_line":"                LOG.error(_LE("},{"line_number":1893,"context_line":"                    \u0027Cannot detect replica status: exception %s\u0027) % ex)"},{"line_number":1894,"context_line":""},{"line_number":1895,"context_line":"            if check_done:"}],"source_content_type":"text/x-python","patch_set":3,"id":"9abe1de1_5d6f8b92","line":1892,"in_reply_to":"bab921fb_1110704d","updated":"2015-04-27 09:21:18.000000000","message":"Done","commit_id":"456fe18e13bb91f5a16cdf25b0d9a28e21ac6bcb"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"92a390427874a3fd437103a197565a0a070ee677","unresolved":false,"context_lines":[{"line_number":1896,"context_line":"                raise loopingcall.LoopingCallDone()"},{"line_number":1897,"context_line":""},{"line_number":1898,"context_line":"            if int(time.time()) - start_time \u003e timeout:"},{"line_number":1899,"context_line":"                msg \u003d (_(\u0027Wati replica complete timeout\u0027))"},{"line_number":1900,"context_line":"                LOG.error(msg)"},{"line_number":1901,"context_line":"                raise exception.InfortrendiSCSIDriverException(err\u003dmsg)"},{"line_number":1902,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"bab921fb_b12784b5","line":1899,"updated":"2015-04-24 15:02:22.000000000","message":"/Wati/Wait/","commit_id":"456fe18e13bb91f5a16cdf25b0d9a28e21ac6bcb"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"451209206929ff47bb83b4a97010e0c575b531c2","unresolved":false,"context_lines":[{"line_number":1896,"context_line":"                raise loopingcall.LoopingCallDone()"},{"line_number":1897,"context_line":""},{"line_number":1898,"context_line":"            if int(time.time()) - start_time \u003e timeout:"},{"line_number":1899,"context_line":"                msg \u003d (_(\u0027Wati replica complete timeout\u0027))"},{"line_number":1900,"context_line":"                LOG.error(msg)"},{"line_number":1901,"context_line":"                raise exception.InfortrendiSCSIDriverException(err\u003dmsg)"},{"line_number":1902,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9abe1de1_3d6cd79b","line":1899,"in_reply_to":"bab921fb_b12784b5","updated":"2015-04-27 09:21:18.000000000","message":"Done","commit_id":"456fe18e13bb91f5a16cdf25b0d9a28e21ac6bcb"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"92a390427874a3fd437103a197565a0a070ee677","unresolved":false,"context_lines":[{"line_number":1940,"context_line":"            LOG.error(msg)"},{"line_number":1941,"context_line":"            raise exception.InfortrendiSCSIAPIException(err\u003dmsg)"},{"line_number":1942,"context_line":"            \"\"\""},{"line_number":1943,"context_line":"            reason \u003d _(\u0027The specified volume is mapped to a host.\u0027)"},{"line_number":1944,"context_line":"            raise exception.ManageExistingInvalidReference(existing_ref\u003dref,"},{"line_number":1945,"context_line":"                                                           reason\u003dreason)"},{"line_number":1946,"context_line":"            \"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"bab921fb_113750e4","line":1943,"updated":"2015-04-24 15:02:22.000000000","message":"Please remove commented out code.","commit_id":"456fe18e13bb91f5a16cdf25b0d9a28e21ac6bcb"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"451209206929ff47bb83b4a97010e0c575b531c2","unresolved":false,"context_lines":[{"line_number":1940,"context_line":"            LOG.error(msg)"},{"line_number":1941,"context_line":"            raise exception.InfortrendiSCSIAPIException(err\u003dmsg)"},{"line_number":1942,"context_line":"            \"\"\""},{"line_number":1943,"context_line":"            reason \u003d _(\u0027The specified volume is mapped to a host.\u0027)"},{"line_number":1944,"context_line":"            raise exception.ManageExistingInvalidReference(existing_ref\u003dref,"},{"line_number":1945,"context_line":"                                                           reason\u003dreason)"},{"line_number":1946,"context_line":"            \"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"9abe1de1_1d69138c","line":1943,"in_reply_to":"bab921fb_113750e4","updated":"2015-04-27 09:21:18.000000000","message":"Done","commit_id":"456fe18e13bb91f5a16cdf25b0d9a28e21ac6bcb"},{"author":{"_account_id":14753,"name":"yogeshprasad","email":"yogesh.prasad@cloudbyte.com","username":"yogeshprasad"},"change_message_id":"876df81904a085c3eada2c563a14954ef95aefef","unresolved":false,"context_lines":[{"line_number":240,"context_line":"            msg \u003d _(\u0027Failed to create map\u0027)"},{"line_number":241,"context_line":"            LOG.error(msg)"},{"line_number":242,"context_line":"            raise exception.InfortrendCliException("},{"line_number":243,"context_line":"                err\u003dmsg, param\u003dargs, rc\u003drc, out\u003dout)"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"        return rc"},{"line_number":246,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"9abe1de1_d9b5e67e","line":243,"updated":"2015-04-27 13:12:57.000000000","message":"Here you can just use elif and in may other places also.","commit_id":"4e21f0d0b065bbd13c717740c6fcda52f05b1b3d"},{"author":{"_account_id":14448,"name":"James.Tsai","email":"jameslovee10@gmail.com","username":"James.Tsai"},"change_message_id":"119996adb5c0c8459b15b4e8eb61ef1788bf9da0","unresolved":false,"context_lines":[{"line_number":240,"context_line":"            msg \u003d _(\u0027Failed to create map\u0027)"},{"line_number":241,"context_line":"            LOG.error(msg)"},{"line_number":242,"context_line":"            raise exception.InfortrendCliException("},{"line_number":243,"context_line":"                err\u003dmsg, param\u003dargs, rc\u003drc, out\u003dout)"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"        return rc"},{"line_number":246,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"5ad0253b_fda40909","line":243,"in_reply_to":"9abe1de1_d9b5e67e","updated":"2015-04-29 08:22:33.000000000","message":"Done","commit_id":"4e21f0d0b065bbd13c717740c6fcda52f05b1b3d"},{"author":{"_account_id":14753,"name":"yogeshprasad","email":"yogesh.prasad@cloudbyte.com","username":"yogeshprasad"},"change_message_id":"876df81904a085c3eada2c563a14954ef95aefef","unresolved":false,"context_lines":[{"line_number":341,"context_line":"        return out"},{"line_number":342,"context_line":""},{"line_number":343,"context_line":"    def _show_part(self, *args):"},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"        rc, out \u003d self._execute_command(\u0027ShowPartition\u0027, *args)"},{"line_number":346,"context_line":""},{"line_number":347,"context_line":"        if rc !\u003d 0:"}],"source_content_type":"text/x-python","patch_set":5,"id":"9abe1de1_3655111d","line":344,"updated":"2015-04-27 13:12:57.000000000","message":"Not sure why there is an extra newline.","commit_id":"4e21f0d0b065bbd13c717740c6fcda52f05b1b3d"},{"author":{"_account_id":14448,"name":"James.Tsai","email":"jameslovee10@gmail.com","username":"James.Tsai"},"change_message_id":"119996adb5c0c8459b15b4e8eb61ef1788bf9da0","unresolved":false,"context_lines":[{"line_number":341,"context_line":"        return out"},{"line_number":342,"context_line":""},{"line_number":343,"context_line":"    def _show_part(self, *args):"},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"        rc, out \u003d self._execute_command(\u0027ShowPartition\u0027, *args)"},{"line_number":346,"context_line":""},{"line_number":347,"context_line":"        if rc !\u003d 0:"}],"source_content_type":"text/x-python","patch_set":5,"id":"5ad0253b_dda94de1","line":344,"in_reply_to":"9abe1de1_3655111d","updated":"2015-04-29 08:22:33.000000000","message":"Done","commit_id":"4e21f0d0b065bbd13c717740c6fcda52f05b1b3d"},{"author":{"_account_id":14753,"name":"yogeshprasad","email":"yogesh.prasad@cloudbyte.com","username":"yogeshprasad"},"change_message_id":"876df81904a085c3eada2c563a14954ef95aefef","unresolved":false,"context_lines":[{"line_number":352,"context_line":"        return out"},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"    def _show_snapshot(self, *args):"},{"line_number":355,"context_line":""},{"line_number":356,"context_line":"        rc, out \u003d self._execute_command(\u0027ShowSnapshot\u0027, *args)"},{"line_number":357,"context_line":""},{"line_number":358,"context_line":"        if rc !\u003d 0:"}],"source_content_type":"text/x-python","patch_set":5,"id":"9abe1de1_b9a912e2","line":355,"updated":"2015-04-27 13:12:57.000000000","message":"an extra newline here too and many other places","commit_id":"4e21f0d0b065bbd13c717740c6fcda52f05b1b3d"},{"author":{"_account_id":14448,"name":"James.Tsai","email":"jameslovee10@gmail.com","username":"James.Tsai"},"change_message_id":"119996adb5c0c8459b15b4e8eb61ef1788bf9da0","unresolved":false,"context_lines":[{"line_number":352,"context_line":"        return out"},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"    def _show_snapshot(self, *args):"},{"line_number":355,"context_line":""},{"line_number":356,"context_line":"        rc, out \u003d self._execute_command(\u0027ShowSnapshot\u0027, *args)"},{"line_number":357,"context_line":""},{"line_number":358,"context_line":"        if rc !\u003d 0:"}],"source_content_type":"text/x-python","patch_set":5,"id":"5ad0253b_9dacf5ee","line":355,"in_reply_to":"9abe1de1_b9a912e2","updated":"2015-04-29 08:22:33.000000000","message":"Done","commit_id":"4e21f0d0b065bbd13c717740c6fcda52f05b1b3d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"6f4695c9154bd767618490f4a5192e115d6706a8","unresolved":false,"context_lines":[{"line_number":1220,"context_line":"                    \u0027reserved_percentage\u0027: 0,"},{"line_number":1221,"context_line":"                    \u0027QoS_support\u0027: \u0027False\u0027,"},{"line_number":1222,"context_line":""},{"line_number":1223,"context_line":"                    \u0027infortrend_provisioning\u0027: provisioning,"},{"line_number":1224,"context_line":"                }"},{"line_number":1225,"context_line":"                pools.append(new_pool)"},{"line_number":1226,"context_line":"        return pools"}],"source_content_type":"text/x-python","patch_set":5,"id":"7ad32947_ae81b691","line":1223,"updated":"2015-04-28 03:30:26.000000000","message":"Should report provisioned_capacity_gb, thin_provisioning_support, thick_provisioning_support, and max_over_subscription_ratio.\n\nSee \nhttps://github.com/openstack/cinder/blob/master/cinder/volume/drivers/lvm.py#L236 to L240","commit_id":"4e21f0d0b065bbd13c717740c6fcda52f05b1b3d"},{"author":{"_account_id":14448,"name":"James.Tsai","email":"jameslovee10@gmail.com","username":"James.Tsai"},"change_message_id":"119996adb5c0c8459b15b4e8eb61ef1788bf9da0","unresolved":false,"context_lines":[{"line_number":1220,"context_line":"                    \u0027reserved_percentage\u0027: 0,"},{"line_number":1221,"context_line":"                    \u0027QoS_support\u0027: \u0027False\u0027,"},{"line_number":1222,"context_line":""},{"line_number":1223,"context_line":"                    \u0027infortrend_provisioning\u0027: provisioning,"},{"line_number":1224,"context_line":"                }"},{"line_number":1225,"context_line":"                pools.append(new_pool)"},{"line_number":1226,"context_line":"        return pools"}],"source_content_type":"text/x-python","patch_set":5,"id":"5ad0253b_3b94c435","line":1223,"in_reply_to":"7ad32947_ae81b691","updated":"2015-04-29 08:22:33.000000000","message":"Done","commit_id":"4e21f0d0b065bbd13c717740c6fcda52f05b1b3d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"36267990504213761940937af44d5d34e64a47f0","unresolved":false,"context_lines":[{"line_number":57,"context_line":"               \u0027By default, it is the channel 0~7\u0027),"},{"line_number":58,"context_line":"    cfg.BoolOpt(\u0027infortrend_iscsi_mcs\u0027,"},{"line_number":59,"context_line":"                default\u003dFalse,"},{"line_number":60,"context_line":"                help\u003d\u0027Enable iSCSI MCS multipath\u0027),"},{"line_number":61,"context_line":"    cfg.BoolOpt(\u0027infortrend_fc_multipath\u0027,"},{"line_number":62,"context_line":"                default\u003dFalse,"},{"line_number":63,"context_line":"                help\u003d\u0027Enable FC multipath\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3acd31a7_e7df6c67","line":60,"updated":"2015-05-04 20:22:32.000000000","message":"There are a couple of multipath flags in driver.py already.  Can you use the existing one?","commit_id":"8f18987a9951f8c0869c80195ddf66811db4faf7"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"16a5b28332f62d498d39e079fedf4fd561a0764b","unresolved":false,"context_lines":[{"line_number":57,"context_line":"               \u0027By default, it is the channel 0~7\u0027),"},{"line_number":58,"context_line":"    cfg.BoolOpt(\u0027infortrend_iscsi_mcs\u0027,"},{"line_number":59,"context_line":"                default\u003dFalse,"},{"line_number":60,"context_line":"                help\u003d\u0027Enable iSCSI MCS multipath\u0027),"},{"line_number":61,"context_line":"    cfg.BoolOpt(\u0027infortrend_fc_multipath\u0027,"},{"line_number":62,"context_line":"                default\u003dFalse,"},{"line_number":63,"context_line":"                help\u003d\u0027Enable FC multipath\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"1aca2d91_82ddc472","line":60,"in_reply_to":"1aca2d91_790c9f42","updated":"2015-05-06 05:17:48.000000000","message":"If you set iscsi_use_multipath to True in nova.conf, you should also set multipath_for_image_xfer to True in cinder.conf. Otherwise, create boot volume won\u0027t work properly for multipath. So it still seems to me you should be able to leverage the existing multipath flag. Thanks.","commit_id":"8f18987a9951f8c0869c80195ddf66811db4faf7"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"e478dcf402c87142ee647015f3dd0b82187bd3c4","unresolved":false,"context_lines":[{"line_number":57,"context_line":"               \u0027By default, it is the channel 0~7\u0027),"},{"line_number":58,"context_line":"    cfg.BoolOpt(\u0027infortrend_iscsi_mcs\u0027,"},{"line_number":59,"context_line":"                default\u003dFalse,"},{"line_number":60,"context_line":"                help\u003d\u0027Enable iSCSI MCS multipath\u0027),"},{"line_number":61,"context_line":"    cfg.BoolOpt(\u0027infortrend_fc_multipath\u0027,"},{"line_number":62,"context_line":"                default\u003dFalse,"},{"line_number":63,"context_line":"                help\u003d\u0027Enable FC multipath\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"1aca2d91_d20ee5e4","line":60,"in_reply_to":"1aca2d91_82ddc472","updated":"2015-05-06 08:21:01.000000000","message":"Oh, I understand the topology now. For infortrend raid limit, it would provide MCS only. \nI would use the use_multipath_for_image_xfer instead of infortrend_iscsi_mcs. \n\nThe Multi-Session support would wait for this bp.\nhttps://review.openstack.org/#/c/134683/\n\nMany thanks.","commit_id":"8f18987a9951f8c0869c80195ddf66811db4faf7"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"f5b987cdd9054c5c288da79184cfbc35d6652139","unresolved":false,"context_lines":[{"line_number":57,"context_line":"               \u0027By default, it is the channel 0~7\u0027),"},{"line_number":58,"context_line":"    cfg.BoolOpt(\u0027infortrend_iscsi_mcs\u0027,"},{"line_number":59,"context_line":"                default\u003dFalse,"},{"line_number":60,"context_line":"                help\u003d\u0027Enable iSCSI MCS multipath\u0027),"},{"line_number":61,"context_line":"    cfg.BoolOpt(\u0027infortrend_fc_multipath\u0027,"},{"line_number":62,"context_line":"                default\u003dFalse,"},{"line_number":63,"context_line":"                help\u003d\u0027Enable FC multipath\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a0c5dc1_dee46e3c","line":60,"in_reply_to":"1aca2d91_d20ee5e4","updated":"2015-05-13 04:12:22.000000000","message":"Done","commit_id":"8f18987a9951f8c0869c80195ddf66811db4faf7"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"747e7163889c2ed34fb0981967f0c883ee934b53","unresolved":false,"context_lines":[{"line_number":57,"context_line":"               \u0027By default, it is the channel 0~7\u0027),"},{"line_number":58,"context_line":"    cfg.BoolOpt(\u0027infortrend_iscsi_mcs\u0027,"},{"line_number":59,"context_line":"                default\u003dFalse,"},{"line_number":60,"context_line":"                help\u003d\u0027Enable iSCSI MCS multipath\u0027),"},{"line_number":61,"context_line":"    cfg.BoolOpt(\u0027infortrend_fc_multipath\u0027,"},{"line_number":62,"context_line":"                default\u003dFalse,"},{"line_number":63,"context_line":"                help\u003d\u0027Enable FC multipath\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"1aca2d91_790c9f42","line":60,"in_reply_to":"3acd31a7_e7df6c67","updated":"2015-05-06 03:11:17.000000000","message":"This is for Nova iscsi_use_multipath because Nova use MCS for multipath. It didn\u0027t be transited with  connector[\u0027multipath\u0027]\nSo we need to configure MCS flag. Let driver to search the mcs channel.\n\nIn driver.py, multipath flags were Multi-Session. It is transited with  connector[\u0027multipath\u0027].  ex. use_multipath_for_image_xfer. \nSo I think it is  the deference case.\n\nIf I was wrong, please let me know. Many thanks.","commit_id":"8f18987a9951f8c0869c80195ddf66811db4faf7"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"36267990504213761940937af44d5d34e64a47f0","unresolved":false,"context_lines":[{"line_number":60,"context_line":"                help\u003d\u0027Enable iSCSI MCS multipath\u0027),"},{"line_number":61,"context_line":"    cfg.BoolOpt(\u0027infortrend_fc_multipath\u0027,"},{"line_number":62,"context_line":"                default\u003dFalse,"},{"line_number":63,"context_line":"                help\u003d\u0027Enable FC multipath\u0027)"},{"line_number":64,"context_line":"]"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"infortrend_esds_extra_opts \u003d ["}],"source_content_type":"text/x-python","patch_set":7,"id":"3acd31a7_c46c6e37","line":63,"updated":"2015-05-04 20:22:32.000000000","message":"Same here","commit_id":"8f18987a9951f8c0869c80195ddf66811db4faf7"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"f5b987cdd9054c5c288da79184cfbc35d6652139","unresolved":false,"context_lines":[{"line_number":60,"context_line":"                help\u003d\u0027Enable iSCSI MCS multipath\u0027),"},{"line_number":61,"context_line":"    cfg.BoolOpt(\u0027infortrend_fc_multipath\u0027,"},{"line_number":62,"context_line":"                default\u003dFalse,"},{"line_number":63,"context_line":"                help\u003d\u0027Enable FC multipath\u0027)"},{"line_number":64,"context_line":"]"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"infortrend_esds_extra_opts \u003d ["}],"source_content_type":"text/x-python","patch_set":7,"id":"9a0c5dc1_bed09a54","line":63,"in_reply_to":"1aca2d91_7c136d5d","updated":"2015-05-13 04:12:22.000000000","message":"Done","commit_id":"8f18987a9951f8c0869c80195ddf66811db4faf7"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"747e7163889c2ed34fb0981967f0c883ee934b53","unresolved":false,"context_lines":[{"line_number":60,"context_line":"                help\u003d\u0027Enable iSCSI MCS multipath\u0027),"},{"line_number":61,"context_line":"    cfg.BoolOpt(\u0027infortrend_fc_multipath\u0027,"},{"line_number":62,"context_line":"                default\u003dFalse,"},{"line_number":63,"context_line":"                help\u003d\u0027Enable FC multipath\u0027)"},{"line_number":64,"context_line":"]"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"infortrend_esds_extra_opts \u003d ["}],"source_content_type":"text/x-python","patch_set":7,"id":"1aca2d91_7c136d5d","line":63,"in_reply_to":"3acd31a7_c46c6e37","updated":"2015-05-06 03:11:17.000000000","message":"I would remove it because the fc use multipath as default. :)","commit_id":"8f18987a9951f8c0869c80195ddf66811db4faf7"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"36267990504213761940937af44d5d34e64a47f0","unresolved":false,"context_lines":[{"line_number":144,"context_line":"        self._volume_stats \u003d None"},{"line_number":145,"context_line":"        self._model_type \u003d \u0027R\u0027"},{"line_number":146,"context_line":"        self._base_logical_channel \u003d 16"},{"line_number":147,"context_line":"        self._replica_timeout \u003d 30 * 60  # 30 min"},{"line_number":148,"context_line":"        self.map_dict \u003d {"},{"line_number":149,"context_line":"            \u0027slot_a\u0027: {},"},{"line_number":150,"context_line":"            \u0027slot_b\u0027: {}"}],"source_content_type":"text/x-python","patch_set":7,"id":"3acd31a7_249d620a","line":147,"updated":"2015-05-04 20:22:32.000000000","message":"This is a very large timeout value.  I suggest that you make it configurable.","commit_id":"8f18987a9951f8c0869c80195ddf66811db4faf7"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"f5b987cdd9054c5c288da79184cfbc35d6652139","unresolved":false,"context_lines":[{"line_number":144,"context_line":"        self._volume_stats \u003d None"},{"line_number":145,"context_line":"        self._model_type \u003d \u0027R\u0027"},{"line_number":146,"context_line":"        self._base_logical_channel \u003d 16"},{"line_number":147,"context_line":"        self._replica_timeout \u003d 30 * 60  # 30 min"},{"line_number":148,"context_line":"        self.map_dict \u003d {"},{"line_number":149,"context_line":"            \u0027slot_a\u0027: {},"},{"line_number":150,"context_line":"            \u0027slot_b\u0027: {}"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a0c5dc1_9ed5d644","line":147,"in_reply_to":"1aca2d91_f9b54fd0","updated":"2015-05-13 04:12:22.000000000","message":"Done","commit_id":"8f18987a9951f8c0869c80195ddf66811db4faf7"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"747e7163889c2ed34fb0981967f0c883ee934b53","unresolved":false,"context_lines":[{"line_number":144,"context_line":"        self._volume_stats \u003d None"},{"line_number":145,"context_line":"        self._model_type \u003d \u0027R\u0027"},{"line_number":146,"context_line":"        self._base_logical_channel \u003d 16"},{"line_number":147,"context_line":"        self._replica_timeout \u003d 30 * 60  # 30 min"},{"line_number":148,"context_line":"        self.map_dict \u003d {"},{"line_number":149,"context_line":"            \u0027slot_a\u0027: {},"},{"line_number":150,"context_line":"            \u0027slot_b\u0027: {}"}],"source_content_type":"text/x-python","patch_set":7,"id":"1aca2d91_f9b54fd0","line":147,"in_reply_to":"3acd31a7_249d620a","updated":"2015-05-06 03:11:17.000000000","message":"Ok, I will make is configurable. Thanks.","commit_id":"8f18987a9951f8c0869c80195ddf66811db4faf7"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"36267990504213761940937af44d5d34e64a47f0","unresolved":false,"context_lines":[{"line_number":1363,"context_line":"            return self._initialize_connection_iscsi("},{"line_number":1364,"context_line":"                volume, connector, multipath)"},{"line_number":1365,"context_line":"        elif self.protocol \u003d\u003d \u0027FC\u0027:"},{"line_number":1366,"context_line":"            multipath \u003d multipath or self.fc_multipath"},{"line_number":1367,"context_line":"            return self._initialize_connection_fc("},{"line_number":1368,"context_line":"                volume, connector, multipath)"},{"line_number":1369,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":7,"id":"3acd31a7_8746784d","line":1366,"updated":"2015-05-04 20:22:32.000000000","message":"I don\u0027t see why it is necessary to have your own fc_multipath flag.","commit_id":"8f18987a9951f8c0869c80195ddf66811db4faf7"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"f5b987cdd9054c5c288da79184cfbc35d6652139","unresolved":false,"context_lines":[{"line_number":1363,"context_line":"            return self._initialize_connection_iscsi("},{"line_number":1364,"context_line":"                volume, connector, multipath)"},{"line_number":1365,"context_line":"        elif self.protocol \u003d\u003d \u0027FC\u0027:"},{"line_number":1366,"context_line":"            multipath \u003d multipath or self.fc_multipath"},{"line_number":1367,"context_line":"            return self._initialize_connection_fc("},{"line_number":1368,"context_line":"                volume, connector, multipath)"},{"line_number":1369,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a0c5dc1_5ecf5eb0","line":1366,"in_reply_to":"1aca2d91_1c1a396f","updated":"2015-05-13 04:12:22.000000000","message":"Done","commit_id":"8f18987a9951f8c0869c80195ddf66811db4faf7"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"747e7163889c2ed34fb0981967f0c883ee934b53","unresolved":false,"context_lines":[{"line_number":1363,"context_line":"            return self._initialize_connection_iscsi("},{"line_number":1364,"context_line":"                volume, connector, multipath)"},{"line_number":1365,"context_line":"        elif self.protocol \u003d\u003d \u0027FC\u0027:"},{"line_number":1366,"context_line":"            multipath \u003d multipath or self.fc_multipath"},{"line_number":1367,"context_line":"            return self._initialize_connection_fc("},{"line_number":1368,"context_line":"                volume, connector, multipath)"},{"line_number":1369,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":7,"id":"1aca2d91_1c1a396f","line":1366,"in_reply_to":"3acd31a7_8746784d","updated":"2015-05-06 03:11:17.000000000","message":"Yes, you\u0027re right. I would remove it. Thanks for suggestion.","commit_id":"8f18987a9951f8c0869c80195ddf66811db4faf7"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"0172bf1a58abcc39a7b0cafba9fc5e22668ce1de","unresolved":false,"context_lines":[{"line_number":342,"context_line":"                err\u003dmsg, param\u003dargs, rc\u003drc, out\u003dout)"},{"line_number":343,"context_line":"        return out"},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"    def _show_device(self, *args):"},{"line_number":346,"context_line":"        rc, out \u003d self._execute_command(\u0027ShowDevice\u0027, *args)"},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"        if rc !\u003d 0:"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a016987_5064d6e3","line":345,"updated":"2015-05-15 20:41:11.000000000","message":"_show_something functions are almost the same. Please, refactor them","commit_id":"2e29892ce1d541fe1e6adb11264305d6efd03213"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"40cf25b11951da4b9c84ed48fc5c927dec7b4aac","unresolved":false,"context_lines":[{"line_number":342,"context_line":"                err\u003dmsg, param\u003dargs, rc\u003drc, out\u003dout)"},{"line_number":343,"context_line":"        return out"},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"    def _show_device(self, *args):"},{"line_number":346,"context_line":"        rc, out \u003d self._execute_command(\u0027ShowDevice\u0027, *args)"},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"        if rc !\u003d 0:"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a016987_0f48662c","line":345,"in_reply_to":"7a016987_5064d6e3","updated":"2015-05-18 06:09:49.000000000","message":"Thanks for suggestion. I would refactor for handling return code.","commit_id":"2e29892ce1d541fe1e6adb11264305d6efd03213"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"4b4740e08d5d3f5e9cd45225388e901b73d1c8ed","unresolved":false,"context_lines":[{"line_number":539,"context_line":"            for pool in self.pool_list:"},{"line_number":540,"context_line":"                support_tier_levels \u003d tier_levels_list[:]"},{"line_number":541,"context_line":"                for entry in lv_info:"},{"line_number":542,"context_line":"                    if entry[\u0027LV-Name\u0027] \u003d\u003d pool and \\"},{"line_number":543,"context_line":"                            entry[\u0027Tier\u0027] in support_tier_levels:"},{"line_number":544,"context_line":"                        support_tier_levels.remove(entry[\u0027Tier\u0027])"},{"line_number":545,"context_line":"                    if len(support_tier_levels) \u003d\u003d 0:"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a016987_9b9f4e5f","line":542,"updated":"2015-05-14 14:27:49.000000000","message":"In general we try to avoid line continuation with \\. Instead, wrap the whole if condition block in () so it can span multiple lines.\n\nIf you do another update I would change this, otherwise I don\u0027t think this alone warrants an update.","commit_id":"2e29892ce1d541fe1e6adb11264305d6efd03213"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"0172bf1a58abcc39a7b0cafba9fc5e22668ce1de","unresolved":false,"context_lines":[{"line_number":539,"context_line":"            for pool in self.pool_list:"},{"line_number":540,"context_line":"                support_tier_levels \u003d tier_levels_list[:]"},{"line_number":541,"context_line":"                for entry in lv_info:"},{"line_number":542,"context_line":"                    if entry[\u0027LV-Name\u0027] \u003d\u003d pool and \\"},{"line_number":543,"context_line":"                            entry[\u0027Tier\u0027] in support_tier_levels:"},{"line_number":544,"context_line":"                        support_tier_levels.remove(entry[\u0027Tier\u0027])"},{"line_number":545,"context_line":"                    if len(support_tier_levels) \u003d\u003d 0:"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a016987_f09bc2c7","line":542,"in_reply_to":"7a016987_9b9f4e5f","updated":"2015-05-15 20:41:11.000000000","message":"+1","commit_id":"2e29892ce1d541fe1e6adb11264305d6efd03213"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"40cf25b11951da4b9c84ed48fc5c927dec7b4aac","unresolved":false,"context_lines":[{"line_number":539,"context_line":"            for pool in self.pool_list:"},{"line_number":540,"context_line":"                support_tier_levels \u003d tier_levels_list[:]"},{"line_number":541,"context_line":"                for entry in lv_info:"},{"line_number":542,"context_line":"                    if entry[\u0027LV-Name\u0027] \u003d\u003d pool and \\"},{"line_number":543,"context_line":"                            entry[\u0027Tier\u0027] in support_tier_levels:"},{"line_number":544,"context_line":"                        support_tier_levels.remove(entry[\u0027Tier\u0027])"},{"line_number":545,"context_line":"                    if len(support_tier_levels) \u003d\u003d 0:"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a016987_2fc6829a","line":542,"in_reply_to":"7a016987_f09bc2c7","updated":"2015-05-18 06:09:49.000000000","message":"Thanks for suggestion, I would change in the next patchset. :)","commit_id":"2e29892ce1d541fe1e6adb11264305d6efd03213"},{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"4c1fbad2546e142eab6ea3ed6422bb3e09982ff5","unresolved":false,"context_lines":[{"line_number":598,"context_line":""},{"line_number":599,"context_line":"    def _create_partition_with_pool(self, volume, pool_id):"},{"line_number":600,"context_line":"        volume_id \u003d volume[\u0027id\u0027].replace(\u0027-\u0027, \u0027\u0027)"},{"line_number":601,"context_line":"        volume_size \u003d volume[\u0027size\u0027] * 1024  # GB -\u003e MB"},{"line_number":602,"context_line":""},{"line_number":603,"context_line":"        extraspecs \u003d self._get_extraspecs_dict(volume[\u0027volume_type_id\u0027])"},{"line_number":604,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"7a016987_34c187e5","line":601,"updated":"2015-05-14 15:22:07.000000000","message":"Please use units constants from oslo_utils","commit_id":"2e29892ce1d541fe1e6adb11264305d6efd03213"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"0172bf1a58abcc39a7b0cafba9fc5e22668ce1de","unresolved":false,"context_lines":[{"line_number":598,"context_line":""},{"line_number":599,"context_line":"    def _create_partition_with_pool(self, volume, pool_id):"},{"line_number":600,"context_line":"        volume_id \u003d volume[\u0027id\u0027].replace(\u0027-\u0027, \u0027\u0027)"},{"line_number":601,"context_line":"        volume_size \u003d volume[\u0027size\u0027] * 1024  # GB -\u003e MB"},{"line_number":602,"context_line":""},{"line_number":603,"context_line":"        extraspecs \u003d self._get_extraspecs_dict(volume[\u0027volume_type_id\u0027])"},{"line_number":604,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"7a016987_b0a54a05","line":601,"in_reply_to":"7a016987_34c187e5","updated":"2015-05-15 20:41:11.000000000","message":"+1","commit_id":"2e29892ce1d541fe1e6adb11264305d6efd03213"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"40cf25b11951da4b9c84ed48fc5c927dec7b4aac","unresolved":false,"context_lines":[{"line_number":598,"context_line":""},{"line_number":599,"context_line":"    def _create_partition_with_pool(self, volume, pool_id):"},{"line_number":600,"context_line":"        volume_id \u003d volume[\u0027id\u0027].replace(\u0027-\u0027, \u0027\u0027)"},{"line_number":601,"context_line":"        volume_size \u003d volume[\u0027size\u0027] * 1024  # GB -\u003e MB"},{"line_number":602,"context_line":""},{"line_number":603,"context_line":"        extraspecs \u003d self._get_extraspecs_dict(volume[\u0027volume_type_id\u0027])"},{"line_number":604,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"7a016987_ef562ad1","line":601,"in_reply_to":"7a016987_b0a54a05","updated":"2015-05-18 06:09:49.000000000","message":"Thanks for suggestion, I would change in the next patchset.","commit_id":"2e29892ce1d541fe1e6adb11264305d6efd03213"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"40cf25b11951da4b9c84ed48fc5c927dec7b4aac","unresolved":false,"context_lines":[{"line_number":771,"context_line":"            self.map_dict[controller][ch_id].remove(lun_id)"},{"line_number":772,"context_line":""},{"line_number":773,"context_line":"        if lun_id \u003d\u003d -1:"},{"line_number":774,"context_line":"            msg \u003d _(\u0027LUN number is out of bound\u0027"},{"line_number":775,"context_line":"                    \u0027on channel id: %s\u0027) % ch_id"},{"line_number":776,"context_line":"            LOG.error(msg)"},{"line_number":777,"context_line":"            raise exception.InfortrendDriverException(err\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a016987_f2ba9122","line":774,"updated":"2015-05-18 06:09:49.000000000","message":"Good catch!!","commit_id":"2e29892ce1d541fe1e6adb11264305d6efd03213"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"4b4740e08d5d3f5e9cd45225388e901b73d1c8ed","unresolved":false,"context_lines":[{"line_number":771,"context_line":"            self.map_dict[controller][ch_id].remove(lun_id)"},{"line_number":772,"context_line":""},{"line_number":773,"context_line":"        if lun_id \u003d\u003d -1:"},{"line_number":774,"context_line":"            msg \u003d _(\u0027LUN number is out of bound\u0027"},{"line_number":775,"context_line":"                    \u0027on channel id: %s\u0027) % ch_id"},{"line_number":776,"context_line":"            LOG.error(msg)"},{"line_number":777,"context_line":"            raise exception.InfortrendDriverException(err\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a016987_3bccda34","line":774,"updated":"2015-05-14 14:27:49.000000000","message":"Need a space at the end so the final string doesn\u0027t end up \"boundon\".","commit_id":"2e29892ce1d541fe1e6adb11264305d6efd03213"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"4b4740e08d5d3f5e9cd45225388e901b73d1c8ed","unresolved":false,"context_lines":[{"line_number":1137,"context_line":"        snapshot_id \u003d snapshot[\u0027id\u0027].replace(\u0027-\u0027, \u0027\u0027)"},{"line_number":1138,"context_line":"        volume_id \u003d snapshot[\u0027volume_id\u0027].replace(\u0027-\u0027, \u0027\u0027)"},{"line_number":1139,"context_line":""},{"line_number":1140,"context_line":"        LOG.debug(\u0027Create Snapshot %(snapshot)s volume %(volume)s\u0027 %"},{"line_number":1141,"context_line":"                  {\u0027snapshot\u0027: snapshot_id, \u0027volume\u0027: volume_id})"},{"line_number":1142,"context_line":""},{"line_number":1143,"context_line":"        model_update \u003d {}"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a016987_7b9012ed","line":1140,"updated":"2015-05-14 14:27:49.000000000","message":"% \u003d\u003e ,","commit_id":"2e29892ce1d541fe1e6adb11264305d6efd03213"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"40cf25b11951da4b9c84ed48fc5c927dec7b4aac","unresolved":false,"context_lines":[{"line_number":1137,"context_line":"        snapshot_id \u003d snapshot[\u0027id\u0027].replace(\u0027-\u0027, \u0027\u0027)"},{"line_number":1138,"context_line":"        volume_id \u003d snapshot[\u0027volume_id\u0027].replace(\u0027-\u0027, \u0027\u0027)"},{"line_number":1139,"context_line":""},{"line_number":1140,"context_line":"        LOG.debug(\u0027Create Snapshot %(snapshot)s volume %(volume)s\u0027 %"},{"line_number":1141,"context_line":"                  {\u0027snapshot\u0027: snapshot_id, \u0027volume\u0027: volume_id})"},{"line_number":1142,"context_line":""},{"line_number":1143,"context_line":"        model_update \u003d {}"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a016987_12652de0","line":1140,"in_reply_to":"7a016987_7b9012ed","updated":"2015-05-18 06:09:49.000000000","message":"Done","commit_id":"2e29892ce1d541fe1e6adb11264305d6efd03213"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"4b4740e08d5d3f5e9cd45225388e901b73d1c8ed","unresolved":false,"context_lines":[{"line_number":1158,"context_line":"        snapshot_list \u003d do_create_snapshot()"},{"line_number":1159,"context_line":""},{"line_number":1160,"context_line":"        LOG.info(_LI("},{"line_number":1161,"context_line":"            \u0027Create success\u0027"},{"line_number":1162,"context_line":"            \u0027Snapshot: %(snapshot)s \u0027"},{"line_number":1163,"context_line":"            \u0027Snapshot_id: %(snapshot_id)s \u0027"},{"line_number":1164,"context_line":"            \u0027volume: %(volume)s\u0027), {"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a016987_9baaae18","line":1161,"updated":"2015-05-14 14:27:49.000000000","message":"Need space at the end - \"successSnapshot\"","commit_id":"2e29892ce1d541fe1e6adb11264305d6efd03213"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"40cf25b11951da4b9c84ed48fc5c927dec7b4aac","unresolved":false,"context_lines":[{"line_number":1158,"context_line":"        snapshot_list \u003d do_create_snapshot()"},{"line_number":1159,"context_line":""},{"line_number":1160,"context_line":"        LOG.info(_LI("},{"line_number":1161,"context_line":"            \u0027Create success\u0027"},{"line_number":1162,"context_line":"            \u0027Snapshot: %(snapshot)s \u0027"},{"line_number":1163,"context_line":"            \u0027Snapshot_id: %(snapshot_id)s \u0027"},{"line_number":1164,"context_line":"            \u0027volume: %(volume)s\u0027), {"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a016987_326a69b4","line":1161,"in_reply_to":"7a016987_9baaae18","updated":"2015-05-18 06:09:49.000000000","message":"Done","commit_id":"2e29892ce1d541fe1e6adb11264305d6efd03213"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"4b4740e08d5d3f5e9cd45225388e901b73d1c8ed","unresolved":false,"context_lines":[{"line_number":1306,"context_line":""},{"line_number":1307,"context_line":"        LOG.info(_LI(\u0027Successfully initialize connection \u0027"},{"line_number":1308,"context_line":"                     \u0027target_wwn: %(target_wwn)s \u0027"},{"line_number":1309,"context_line":"                     \u0027initiator_target_map: %(initiator_target_map)s\u0027"},{"line_number":1310,"context_line":"                     \u0027lun: %(target_lun)s \u0027), properties[\u0027data\u0027])"},{"line_number":1311,"context_line":"        return properties"},{"line_number":1312,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"7a016987_7b037210","line":1309,"updated":"2015-05-14 14:27:49.000000000","message":"Need trailing space.","commit_id":"2e29892ce1d541fe1e6adb11264305d6efd03213"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"40cf25b11951da4b9c84ed48fc5c927dec7b4aac","unresolved":false,"context_lines":[{"line_number":1306,"context_line":""},{"line_number":1307,"context_line":"        LOG.info(_LI(\u0027Successfully initialize connection \u0027"},{"line_number":1308,"context_line":"                     \u0027target_wwn: %(target_wwn)s \u0027"},{"line_number":1309,"context_line":"                     \u0027initiator_target_map: %(initiator_target_map)s\u0027"},{"line_number":1310,"context_line":"                     \u0027lun: %(target_lun)s \u0027), properties[\u0027data\u0027])"},{"line_number":1311,"context_line":"        return properties"},{"line_number":1312,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"7a016987_d25e7511","line":1309,"in_reply_to":"7a016987_7b037210","updated":"2015-05-18 06:09:49.000000000","message":"Done","commit_id":"2e29892ce1d541fe1e6adb11264305d6efd03213"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"4b4740e08d5d3f5e9cd45225388e901b73d1c8ed","unresolved":false,"context_lines":[{"line_number":1639,"context_line":"            self._delete_iqn(self._truncate_host_name(connector[\u0027initiator\u0027]))"},{"line_number":1640,"context_line":"        self._update_map_info(multipath)"},{"line_number":1641,"context_line":""},{"line_number":1642,"context_line":"        LOG.info(_LI(\u0027Successfully terminated connection\u0027"},{"line_number":1643,"context_line":"                     \u0027for volume %s\u0027), volume[\u0027id\u0027])"},{"line_number":1644,"context_line":""},{"line_number":1645,"context_line":"    def migrate_volume(self, volume, host):"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a016987_1e6eacc9","line":1642,"updated":"2015-05-14 14:27:49.000000000","message":"Need trailing space.","commit_id":"2e29892ce1d541fe1e6adb11264305d6efd03213"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"40cf25b11951da4b9c84ed48fc5c927dec7b4aac","unresolved":false,"context_lines":[{"line_number":1639,"context_line":"            self._delete_iqn(self._truncate_host_name(connector[\u0027initiator\u0027]))"},{"line_number":1640,"context_line":"        self._update_map_info(multipath)"},{"line_number":1641,"context_line":""},{"line_number":1642,"context_line":"        LOG.info(_LI(\u0027Successfully terminated connection\u0027"},{"line_number":1643,"context_line":"                     \u0027for volume %s\u0027), volume[\u0027id\u0027])"},{"line_number":1644,"context_line":""},{"line_number":1645,"context_line":"    def migrate_volume(self, volume, host):"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a016987_52a965de","line":1642,"in_reply_to":"7a016987_1e6eacc9","updated":"2015-05-18 06:09:49.000000000","message":"Done","commit_id":"2e29892ce1d541fe1e6adb11264305d6efd03213"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"0172bf1a58abcc39a7b0cafba9fc5e22668ce1de","unresolved":false,"context_lines":[{"line_number":1853,"context_line":""},{"line_number":1854,"context_line":"        old_extraspec \u003d self._get_extraspecs_value(old_extraspecs, key)"},{"line_number":1855,"context_line":"        new_extraspec \u003d self._get_extraspecs_value(new_extraspecs, key)"},{"line_number":1856,"context_line":"        if new_extraspec !\u003d old_extraspec:"},{"line_number":1857,"context_line":"            extraspec_diff \u003d True"},{"line_number":1858,"context_line":""},{"line_number":1859,"context_line":"        return extraspec_diff"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a016987_d0ec462b","line":1856,"updated":"2015-05-15 20:41:11.000000000","message":"Could be simplified to:\nreturn new_extraspec !\u003d old_extraspec","commit_id":"2e29892ce1d541fe1e6adb11264305d6efd03213"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"40cf25b11951da4b9c84ed48fc5c927dec7b4aac","unresolved":false,"context_lines":[{"line_number":1853,"context_line":""},{"line_number":1854,"context_line":"        old_extraspec \u003d self._get_extraspecs_value(old_extraspecs, key)"},{"line_number":1855,"context_line":"        new_extraspec \u003d self._get_extraspecs_value(new_extraspecs, key)"},{"line_number":1856,"context_line":"        if new_extraspec !\u003d old_extraspec:"},{"line_number":1857,"context_line":"            extraspec_diff \u003d True"},{"line_number":1858,"context_line":""},{"line_number":1859,"context_line":"        return extraspec_diff"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a016987_12ac0dec","line":1856,"in_reply_to":"7a016987_d0ec462b","updated":"2015-05-18 06:09:49.000000000","message":"Done","commit_id":"2e29892ce1d541fe1e6adb11264305d6efd03213"},{"author":{"_account_id":14428,"name":"Bharat Kumar Kobagana","email":"bharath.kobagana@gmail.com","username":"bharatkk"},"change_message_id":"cb1ed288f350e3690fe8eab4c54adf4d0a614c2c","unresolved":false,"context_lines":[{"line_number":1129,"context_line":""},{"line_number":1130,"context_line":"        raid_snapshot_id \u003d self._get_snapshot_id(snapshot)"},{"line_number":1131,"context_line":""},{"line_number":1132,"context_line":"        if raid_snapshot_id is not None:"},{"line_number":1133,"context_line":""},{"line_number":1134,"context_line":"            rc, replica_list \u003d self._show_replica(\u0027-l\u0027)"},{"line_number":1135,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"7a016987_6bf0d1fe","line":1132,"updated":"2015-05-19 09:43:55.000000000","message":"Simply:\n\nif raid_snapshot_id:","commit_id":"b7e6cdbb1c300d2839563385f45616dafec65b4c"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"87f5960830aa793f09f9ecc9813a9e4616a572a0","unresolved":false,"context_lines":[{"line_number":1129,"context_line":""},{"line_number":1130,"context_line":"        raid_snapshot_id \u003d self._get_snapshot_id(snapshot)"},{"line_number":1131,"context_line":""},{"line_number":1132,"context_line":"        if raid_snapshot_id is not None:"},{"line_number":1133,"context_line":""},{"line_number":1134,"context_line":"            rc, replica_list \u003d self._show_replica(\u0027-l\u0027)"},{"line_number":1135,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"7a016987_7d8f782a","line":1132,"in_reply_to":"7a016987_6bf0d1fe","updated":"2015-05-19 10:50:57.000000000","message":"Done","commit_id":"b7e6cdbb1c300d2839563385f45616dafec65b4c"},{"author":{"_account_id":14428,"name":"Bharat Kumar Kobagana","email":"bharath.kobagana@gmail.com","username":"bharatkk"},"change_message_id":"1a95d9188e69eaa7feca7513040ab947ad9d9080","unresolved":false,"context_lines":[{"line_number":874,"context_line":"        )"},{"line_number":875,"context_line":""},{"line_number":876,"context_line":"        if not check_exist:"},{"line_number":877,"context_line":"            LOG.warning(_LW(\u0027Volume %(volume_id)s already delete\u0027), {"},{"line_number":878,"context_line":"                \u0027volume_id\u0027: volume_id})"},{"line_number":879,"context_line":"            return"},{"line_number":880,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"7a016987_735447fe","line":877,"updated":"2015-05-19 12:31:42.000000000","message":"s/delete/deleted","commit_id":"141899d9a98b0e0b3e48f839081f616d0f1cb5fe"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"69793010d1c70277d96f1fb648c8428d812cc450","unresolved":false,"context_lines":[{"line_number":874,"context_line":"        )"},{"line_number":875,"context_line":""},{"line_number":876,"context_line":"        if not check_exist:"},{"line_number":877,"context_line":"            LOG.warning(_LW(\u0027Volume %(volume_id)s already delete\u0027), {"},{"line_number":878,"context_line":"                \u0027volume_id\u0027: volume_id})"},{"line_number":879,"context_line":"            return"},{"line_number":880,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"7a016987_c451e137","line":877,"in_reply_to":"7a016987_735447fe","updated":"2015-05-20 07:27:07.000000000","message":"Done","commit_id":"141899d9a98b0e0b3e48f839081f616d0f1cb5fe"},{"author":{"_account_id":14428,"name":"Bharat Kumar Kobagana","email":"bharath.kobagana@gmail.com","username":"bharatkk"},"change_message_id":"1a95d9188e69eaa7feca7513040ab947ad9d9080","unresolved":false,"context_lines":[{"line_number":969,"context_line":"        src_part_id \u003d self._extract_specific_provider_location("},{"line_number":970,"context_line":"            src_vref[\u0027provider_location\u0027], \u0027partition_id\u0027)"},{"line_number":971,"context_line":""},{"line_number":972,"context_line":"        if src_part_id \u003d\u003d \u0027None\u0027:"},{"line_number":973,"context_line":"            src_part_id \u003d self._get_part_id(volume_id)"},{"line_number":974,"context_line":""},{"line_number":975,"context_line":"        @lockutils.synchronized("}],"source_content_type":"text/x-python","patch_set":12,"id":"7a016987_d3609bd1","line":972,"updated":"2015-05-19 12:31:42.000000000","message":"Please check once again, whether it is None or \u0027None\u0027.","commit_id":"141899d9a98b0e0b3e48f839081f616d0f1cb5fe"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"69793010d1c70277d96f1fb648c8428d812cc450","unresolved":false,"context_lines":[{"line_number":969,"context_line":"        src_part_id \u003d self._extract_specific_provider_location("},{"line_number":970,"context_line":"            src_vref[\u0027provider_location\u0027], \u0027partition_id\u0027)"},{"line_number":971,"context_line":""},{"line_number":972,"context_line":"        if src_part_id \u003d\u003d \u0027None\u0027:"},{"line_number":973,"context_line":"            src_part_id \u003d self._get_part_id(volume_id)"},{"line_number":974,"context_line":""},{"line_number":975,"context_line":"        @lockutils.synchronized("}],"source_content_type":"text/x-python","patch_set":12,"id":"7a016987_64610d05","line":972,"in_reply_to":"7a016987_d3609bd1","updated":"2015-05-20 07:27:07.000000000","message":"Done","commit_id":"141899d9a98b0e0b3e48f839081f616d0f1cb5fe"},{"author":{"_account_id":14428,"name":"Bharat Kumar Kobagana","email":"bharath.kobagana@gmail.com","username":"bharatkk"},"change_message_id":"1a95d9188e69eaa7feca7513040ab947ad9d9080","unresolved":false,"context_lines":[{"line_number":1191,"context_line":""},{"line_number":1192,"context_line":"        if snapshot_id is None:"},{"line_number":1193,"context_line":"            msg \u003d _(\u0027Failed to get Snapshot ID \u0027"},{"line_number":1194,"context_line":"                    \u0027by snapshot: %(snapshot_id)s\u0027) % {"},{"line_number":1195,"context_line":"                        \u0027snapshot_id\u0027: snapshot[\u0027id\u0027]}"},{"line_number":1196,"context_line":"            LOG.error(msg)"},{"line_number":1197,"context_line":"            raise exception.InfortrendAPIException(err\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a016987_93d2235b","line":1194,"updated":"2015-05-19 12:31:42.000000000","message":"I don\u0027t really understand the difference between snapshot_id and snapshot[\u0027id\u0027].","commit_id":"141899d9a98b0e0b3e48f839081f616d0f1cb5fe"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"69793010d1c70277d96f1fb648c8428d812cc450","unresolved":false,"context_lines":[{"line_number":1191,"context_line":""},{"line_number":1192,"context_line":"        if snapshot_id is None:"},{"line_number":1193,"context_line":"            msg \u003d _(\u0027Failed to get Snapshot ID \u0027"},{"line_number":1194,"context_line":"                    \u0027by snapshot: %(snapshot_id)s\u0027) % {"},{"line_number":1195,"context_line":"                        \u0027snapshot_id\u0027: snapshot[\u0027id\u0027]}"},{"line_number":1196,"context_line":"            LOG.error(msg)"},{"line_number":1197,"context_line":"            raise exception.InfortrendAPIException(err\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a016987_df764ea3","line":1194,"in_reply_to":"7a016987_93d2235b","updated":"2015-05-20 07:27:07.000000000","message":"snapshot_id is created by raid, the real id in the raid. I store it in provider_location for recording.\n\nsnapshot[\u0027id\u0027] is created by cinder. It stores in DB for cinder usage.\n\nThanks for point out. I would change the name to be clear.","commit_id":"141899d9a98b0e0b3e48f839081f616d0f1cb5fe"},{"author":{"_account_id":14428,"name":"Bharat Kumar Kobagana","email":"bharath.kobagana@gmail.com","username":"bharatkk"},"change_message_id":"1a95d9188e69eaa7feca7513040ab947ad9d9080","unresolved":false,"context_lines":[{"line_number":1200,"context_line":"            volume, snapshot_id, \u0027Snapshot\u0027)"},{"line_number":1201,"context_line":""},{"line_number":1202,"context_line":"        LOG.info(_LI("},{"line_number":1203,"context_line":"            \u0027Create Volume %(volume_id)s form \u0027"},{"line_number":1204,"context_line":"            \u0027snapshot %(snapshot_id)s done\u0027), {"},{"line_number":1205,"context_line":"                \u0027volume_id\u0027: volume[\u0027id\u0027],"},{"line_number":1206,"context_line":"                \u0027snapshot_id\u0027: snapshot[\u0027id\u0027]})"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a016987_b38bdf67","line":1203,"updated":"2015-05-19 12:31:42.000000000","message":"s/form/from","commit_id":"141899d9a98b0e0b3e48f839081f616d0f1cb5fe"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"69793010d1c70277d96f1fb648c8428d812cc450","unresolved":false,"context_lines":[{"line_number":1200,"context_line":"            volume, snapshot_id, \u0027Snapshot\u0027)"},{"line_number":1201,"context_line":""},{"line_number":1202,"context_line":"        LOG.info(_LI("},{"line_number":1203,"context_line":"            \u0027Create Volume %(volume_id)s form \u0027"},{"line_number":1204,"context_line":"            \u0027snapshot %(snapshot_id)s done\u0027), {"},{"line_number":1205,"context_line":"                \u0027volume_id\u0027: volume[\u0027id\u0027],"},{"line_number":1206,"context_line":"                \u0027snapshot_id\u0027: snapshot[\u0027id\u0027]})"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a016987_bf7b928b","line":1203,"in_reply_to":"7a016987_b38bdf67","updated":"2015-05-20 07:27:07.000000000","message":"Done","commit_id":"141899d9a98b0e0b3e48f839081f616d0f1cb5fe"},{"author":{"_account_id":14428,"name":"Bharat Kumar Kobagana","email":"bharath.kobagana@gmail.com","username":"bharatkk"},"change_message_id":"1a95d9188e69eaa7feca7513040ab947ad9d9080","unresolved":false,"context_lines":[{"line_number":1271,"context_line":"            volume[\u0027provider_location\u0027])"},{"line_number":1272,"context_line":"        part_id \u003d partition_data[\u0027partition_id\u0027]"},{"line_number":1273,"context_line":""},{"line_number":1274,"context_line":"        if part_id \u003d\u003d \u0027None\u0027:"},{"line_number":1275,"context_line":"            part_id \u003d self._get_part_id(volume_id)"},{"line_number":1276,"context_line":""},{"line_number":1277,"context_line":"        wwpn_list, wwpn_channel_info \u003d self._get_wwpn_list()"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a016987_f3715777","line":1274,"updated":"2015-05-19 12:31:42.000000000","message":"Here also once check whether it is None or \u0027None\u0027:","commit_id":"141899d9a98b0e0b3e48f839081f616d0f1cb5fe"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"69793010d1c70277d96f1fb648c8428d812cc450","unresolved":false,"context_lines":[{"line_number":1271,"context_line":"            volume[\u0027provider_location\u0027])"},{"line_number":1272,"context_line":"        part_id \u003d partition_data[\u0027partition_id\u0027]"},{"line_number":1273,"context_line":""},{"line_number":1274,"context_line":"        if part_id \u003d\u003d \u0027None\u0027:"},{"line_number":1275,"context_line":"            part_id \u003d self._get_part_id(volume_id)"},{"line_number":1276,"context_line":""},{"line_number":1277,"context_line":"        wwpn_list, wwpn_channel_info \u003d self._get_wwpn_list()"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a016987_da4f7c69","line":1274,"in_reply_to":"7a016987_f3715777","updated":"2015-05-20 07:27:07.000000000","message":"Done","commit_id":"141899d9a98b0e0b3e48f839081f616d0f1cb5fe"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"13b3f3ddf76cc852b4431c84ad0af157e06def1e","unresolved":false,"context_lines":[{"line_number":562,"context_line":"        if extraspecs_dict:"},{"line_number":563,"context_line":"            cmd \u003d self._create_part_parameters_str(extraspecs_dict)"},{"line_number":564,"context_line":""},{"line_number":565,"context_line":"        self._create_part(pool_id, volume_id, \u0027size\u003d%s\u0027 % volume_size, cmd)"},{"line_number":566,"context_line":""},{"line_number":567,"context_line":"    def _create_part_parameters_str(self, extraspecs_dict):"},{"line_number":568,"context_line":"        parameters_list \u003d []"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a016987_b9cd9967","line":565,"updated":"2015-05-24 23:21:26.000000000","message":"One caveat with using the volume ID for the volume identifier on the backend is that after a retype with migrate the database has the original ID but the backend has the new volume identifier.\n\nYou will need to update the identifier so the volume can still be located on the backend after the retype/migrate. Something along the lines of here:\n\nhttps://github.com/openstack/cinder/blob/master/cinder/volume/drivers/dell/dell_storagecenter_common.py#L352","commit_id":"ff03b70a66f5c591b124929b85a10d10edf77533"},{"author":{"_account_id":14448,"name":"James.Tsai","email":"jameslovee10@gmail.com","username":"James.Tsai"},"change_message_id":"a7ec81cce80767ccaeb6b6a1622598b514b35d66","unresolved":false,"context_lines":[{"line_number":562,"context_line":"        if extraspecs_dict:"},{"line_number":563,"context_line":"            cmd \u003d self._create_part_parameters_str(extraspecs_dict)"},{"line_number":564,"context_line":""},{"line_number":565,"context_line":"        self._create_part(pool_id, volume_id, \u0027size\u003d%s\u0027 % volume_size, cmd)"},{"line_number":566,"context_line":""},{"line_number":567,"context_line":"    def _create_part_parameters_str(self, extraspecs_dict):"},{"line_number":568,"context_line":"        parameters_list \u003d []"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a016987_bfa6990c","line":565,"in_reply_to":"7a016987_b9cd9967","updated":"2015-05-25 03:59:35.000000000","message":"We have noticed this update a couple days ago. We will submit another patch to support this function. Thanks for your information.","commit_id":"ff03b70a66f5c591b124929b85a10d10edf77533"},{"author":{"_account_id":14428,"name":"Bharat Kumar Kobagana","email":"bharath.kobagana@gmail.com","username":"bharatkk"},"change_message_id":"7a32fdc2427939a8d62de192de256d7c1a2c5201","unresolved":false,"context_lines":[{"line_number":697,"context_line":"        for entry in device_info:"},{"line_number":698,"context_line":"            if system_ip \u003d\u003d entry[\u0027Connected-IP\u0027]:"},{"line_number":699,"context_line":"                return str(int(entry[\u0027ID\u0027], 16))"},{"line_number":700,"context_line":"        return None"},{"line_number":701,"context_line":""},{"line_number":702,"context_line":"    @log_func"},{"line_number":703,"context_line":"    def _get_lun_id(self, ch_id, controller\u003d\u0027slot_a\u0027):"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a016987_316ceb07","line":700,"updated":"2015-05-26 19:08:34.000000000","message":"No need to return None value. Simply \"return\" statement will automatically return None value.","commit_id":"ff03b70a66f5c591b124929b85a10d10edf77533"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"8b43e767e0f898b36423c888b728de3d844c5ebd","unresolved":false,"context_lines":[{"line_number":697,"context_line":"        for entry in device_info:"},{"line_number":698,"context_line":"            if system_ip \u003d\u003d entry[\u0027Connected-IP\u0027]:"},{"line_number":699,"context_line":"                return str(int(entry[\u0027ID\u0027], 16))"},{"line_number":700,"context_line":"        return None"},{"line_number":701,"context_line":""},{"line_number":702,"context_line":"    @log_func"},{"line_number":703,"context_line":"    def _get_lun_id(self, ch_id, controller\u003d\u0027slot_a\u0027):"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a016987_876c7209","line":700,"in_reply_to":"7a016987_316ceb07","updated":"2015-05-28 06:23:40.000000000","message":"Done","commit_id":"ff03b70a66f5c591b124929b85a10d10edf77533"},{"author":{"_account_id":14428,"name":"Bharat Kumar Kobagana","email":"bharath.kobagana@gmail.com","username":"bharatkk"},"change_message_id":"7a32fdc2427939a8d62de192de256d7c1a2c5201","unresolved":false,"context_lines":[{"line_number":1184,"context_line":"            else:"},{"line_number":1185,"context_line":"                if entry[\u0027Name\u0027] \u003d\u003d volume_id and entry[\u0027LV-ID\u0027] \u003d\u003d pool_id:"},{"line_number":1186,"context_line":"                    return entry[\u0027ID\u0027]"},{"line_number":1187,"context_line":"        return None"},{"line_number":1188,"context_line":""},{"line_number":1189,"context_line":"    def create_volume_from_snapshot(self, volume, snapshot):"},{"line_number":1190,"context_line":"        raid_snapshot_id \u003d self._get_raid_snapshot_id(snapshot)"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a016987_f17653d7","line":1187,"updated":"2015-05-26 19:08:34.000000000","message":"Same as above.","commit_id":"ff03b70a66f5c591b124929b85a10d10edf77533"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"8b43e767e0f898b36423c888b728de3d844c5ebd","unresolved":false,"context_lines":[{"line_number":1184,"context_line":"            else:"},{"line_number":1185,"context_line":"                if entry[\u0027Name\u0027] \u003d\u003d volume_id and entry[\u0027LV-ID\u0027] \u003d\u003d pool_id:"},{"line_number":1186,"context_line":"                    return entry[\u0027ID\u0027]"},{"line_number":1187,"context_line":"        return None"},{"line_number":1188,"context_line":""},{"line_number":1189,"context_line":"    def create_volume_from_snapshot(self, volume, snapshot):"},{"line_number":1190,"context_line":"        raid_snapshot_id \u003d self._get_raid_snapshot_id(snapshot)"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a016987_e7a68652","line":1187,"in_reply_to":"7a016987_f17653d7","updated":"2015-05-28 06:23:40.000000000","message":"Done","commit_id":"ff03b70a66f5c591b124929b85a10d10edf77533"},{"author":{"_account_id":14428,"name":"Bharat Kumar Kobagana","email":"bharath.kobagana@gmail.com","username":"bharatkk"},"change_message_id":"7a32fdc2427939a8d62de192de256d7c1a2c5201","unresolved":false,"context_lines":[{"line_number":1458,"context_line":"        for entry in net_list:"},{"line_number":1459,"context_line":"            if entry[\u0027ID\u0027] \u003d\u003d channel_id and entry[\u0027Slot\u0027] \u003d\u003d slot_name:"},{"line_number":1460,"context_line":"                return entry[\u0027IPv4\u0027]"},{"line_number":1461,"context_line":"        return None"},{"line_number":1462,"context_line":""},{"line_number":1463,"context_line":"    def _get_wwpn_by_channel("},{"line_number":1464,"context_line":"            self, channel_id, wwn_list, controller\u003d\u0027slot_a\u0027):"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a016987_b180db8c","line":1461,"updated":"2015-05-26 19:08:34.000000000","message":"Same as above.","commit_id":"ff03b70a66f5c591b124929b85a10d10edf77533"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"8b43e767e0f898b36423c888b728de3d844c5ebd","unresolved":false,"context_lines":[{"line_number":1458,"context_line":"        for entry in net_list:"},{"line_number":1459,"context_line":"            if entry[\u0027ID\u0027] \u003d\u003d channel_id and entry[\u0027Slot\u0027] \u003d\u003d slot_name:"},{"line_number":1460,"context_line":"                return entry[\u0027IPv4\u0027]"},{"line_number":1461,"context_line":"        return None"},{"line_number":1462,"context_line":""},{"line_number":1463,"context_line":"    def _get_wwpn_by_channel("},{"line_number":1464,"context_line":"            self, channel_id, wwn_list, controller\u003d\u0027slot_a\u0027):"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a016987_c7626a16","line":1461,"in_reply_to":"7a016987_b180db8c","updated":"2015-05-28 06:23:40.000000000","message":"Done","commit_id":"ff03b70a66f5c591b124929b85a10d10edf77533"},{"author":{"_account_id":14428,"name":"Bharat Kumar Kobagana","email":"bharath.kobagana@gmail.com","username":"bharatkk"},"change_message_id":"7a32fdc2427939a8d62de192de256d7c1a2c5201","unresolved":false,"context_lines":[{"line_number":1471,"context_line":"        for entry in wwn_list:"},{"line_number":1472,"context_line":"            if entry[\u0027CH\u0027] \u003d\u003d channel_id and entry[\u0027ID\u0027] \u003d\u003d slot_name:"},{"line_number":1473,"context_line":"                return entry[\u0027WWPN\u0027]"},{"line_number":1474,"context_line":"        return None"},{"line_number":1475,"context_line":""},{"line_number":1476,"context_line":"    def _get_wwpn_list(self):"},{"line_number":1477,"context_line":"        rc, wwn_list \u003d self._show_wwn()"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a016987_514e4797","line":1474,"updated":"2015-05-26 19:08:34.000000000","message":"Same as above.","commit_id":"ff03b70a66f5c591b124929b85a10d10edf77533"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"8b43e767e0f898b36423c888b728de3d844c5ebd","unresolved":false,"context_lines":[{"line_number":1471,"context_line":"        for entry in wwn_list:"},{"line_number":1472,"context_line":"            if entry[\u0027CH\u0027] \u003d\u003d channel_id and entry[\u0027ID\u0027] \u003d\u003d slot_name:"},{"line_number":1473,"context_line":"                return entry[\u0027WWPN\u0027]"},{"line_number":1474,"context_line":"        return None"},{"line_number":1475,"context_line":""},{"line_number":1476,"context_line":"    def _get_wwpn_list(self):"},{"line_number":1477,"context_line":"        rc, wwn_list \u003d self._show_wwn()"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a016987_a7676e24","line":1474,"in_reply_to":"7a016987_514e4797","updated":"2015-05-28 06:23:40.000000000","message":"Done","commit_id":"ff03b70a66f5c591b124929b85a10d10edf77533"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"13b3f3ddf76cc852b4431c84ad0af157e06def1e","unresolved":false,"context_lines":[{"line_number":1792,"context_line":""},{"line_number":1793,"context_line":"        return timestamps"},{"line_number":1794,"context_line":""},{"line_number":1795,"context_line":"    def retype(self, ctxt, volume, new_type, diff, host):"},{"line_number":1796,"context_line":"        \"\"\"Convert the volume to be of the new type.\"\"\""},{"line_number":1797,"context_line":""},{"line_number":1798,"context_line":"        provisoing_diff \u003d self._diff_between_types("}],"source_content_type":"text/x-python","patch_set":14,"id":"7a016987_39b9a9cc","line":1795,"updated":"2015-05-24 23:21:26.000000000","message":"It looks like all you are doing here is checking if the new type is different than the old one and failing if it is. If it\u0027s not different it just returns success. I don\u0027t see any actual retype happening. Am I missing something?","commit_id":"ff03b70a66f5c591b124929b85a10d10edf77533"},{"author":{"_account_id":14448,"name":"James.Tsai","email":"jameslovee10@gmail.com","username":"James.Tsai"},"change_message_id":"a7ec81cce80767ccaeb6b6a1622598b514b35d66","unresolved":false,"context_lines":[{"line_number":1792,"context_line":""},{"line_number":1793,"context_line":"        return timestamps"},{"line_number":1794,"context_line":""},{"line_number":1795,"context_line":"    def retype(self, ctxt, volume, new_type, diff, host):"},{"line_number":1796,"context_line":"        \"\"\"Convert the volume to be of the new type.\"\"\""},{"line_number":1797,"context_line":""},{"line_number":1798,"context_line":"        provisoing_diff \u003d self._diff_between_types("}],"source_content_type":"text/x-python","patch_set":14,"id":"7a016987_1f77eda0","line":1795,"in_reply_to":"7a016987_39b9a9cc","updated":"2015-05-25 03:59:35.000000000","message":"You\u0027re right. It\u0027s only used for preventing users from trying to retype infortrend_provisoing. In addition, we are going to summit another patch to implement migrate volume in retype function. Thanks for your notice.","commit_id":"ff03b70a66f5c591b124929b85a10d10edf77533"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"d50922479902d1d4bc1be5cff101ccb43483145e","unresolved":false,"context_lines":[{"line_number":41,"context_line":"               \u0027It is separated with comma.\u0027),"},{"line_number":42,"context_line":"    cfg.StrOpt(\u0027infortrend_cli_path\u0027,"},{"line_number":43,"context_line":"               default\u003d\u0027/opt/bin/Infortrend/raidcmd_ESDS10.jar\u0027,"},{"line_number":44,"context_line":"               help\u003d\u0027The Infortrend CLI absolute path\u0027"},{"line_number":45,"context_line":"               \u0027By default, it is at \u0027"},{"line_number":46,"context_line":"               \u0027/opt/bin/Infortrend/raidcmd_ESDS10.jar\u0027),"},{"line_number":47,"context_line":"    cfg.IntOpt(\u0027infortrend_cli_max_retries\u0027,"}],"source_content_type":"text/x-python","patch_set":20,"id":"5afe65bd_b8f04f68","line":44,"updated":"2015-06-04 16:42:09.000000000","message":"Need \". \" at the end, otherwise this gets merged with the next line as pathBy.","commit_id":"5fcb34edc273b2fe3460686feaf31860f3552454"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"5815300dec57252f2ddc260ce1dde45bec976049","unresolved":false,"context_lines":[{"line_number":41,"context_line":"               \u0027It is separated with comma.\u0027),"},{"line_number":42,"context_line":"    cfg.StrOpt(\u0027infortrend_cli_path\u0027,"},{"line_number":43,"context_line":"               default\u003d\u0027/opt/bin/Infortrend/raidcmd_ESDS10.jar\u0027,"},{"line_number":44,"context_line":"               help\u003d\u0027The Infortrend CLI absolute path\u0027"},{"line_number":45,"context_line":"               \u0027By default, it is at \u0027"},{"line_number":46,"context_line":"               \u0027/opt/bin/Infortrend/raidcmd_ESDS10.jar\u0027),"},{"line_number":47,"context_line":"    cfg.IntOpt(\u0027infortrend_cli_max_retries\u0027,"}],"source_content_type":"text/x-python","patch_set":20,"id":"5afe65bd_4ff86e7b","line":44,"in_reply_to":"5afe65bd_b8f04f68","updated":"2015-06-04 17:14:08.000000000","message":"Done","commit_id":"5fcb34edc273b2fe3460686feaf31860f3552454"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"d50922479902d1d4bc1be5cff101ccb43483145e","unresolved":false,"context_lines":[{"line_number":56,"context_line":"    cfg.StrOpt(\u0027infortrend_slots_a_channels_id\u0027,"},{"line_number":57,"context_line":"               default\u003d\u00270,1,2,3,4,5,6,7\u0027,"},{"line_number":58,"context_line":"               help\u003d\u0027Infortrend raid channel ID list on Slot A \u0027"},{"line_number":59,"context_line":"               \u0027for openstack usage. It is separated with comma.\u0027"},{"line_number":60,"context_line":"               \u0027By default, it is the channel 0~7\u0027),"},{"line_number":61,"context_line":"    cfg.StrOpt(\u0027infortrend_slots_b_channels_id\u0027,"},{"line_number":62,"context_line":"               default\u003d\u00270,1,2,3,4,5,6,7\u0027,"}],"source_content_type":"text/x-python","patch_set":20,"id":"5afe65bd_789d3709","line":59,"updated":"2015-06-04 16:42:09.000000000","message":"Need trailing space in string so it doesn\u0027t merge with the next line.","commit_id":"5fcb34edc273b2fe3460686feaf31860f3552454"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"5815300dec57252f2ddc260ce1dde45bec976049","unresolved":false,"context_lines":[{"line_number":56,"context_line":"    cfg.StrOpt(\u0027infortrend_slots_a_channels_id\u0027,"},{"line_number":57,"context_line":"               default\u003d\u00270,1,2,3,4,5,6,7\u0027,"},{"line_number":58,"context_line":"               help\u003d\u0027Infortrend raid channel ID list on Slot A \u0027"},{"line_number":59,"context_line":"               \u0027for openstack usage. It is separated with comma.\u0027"},{"line_number":60,"context_line":"               \u0027By default, it is the channel 0~7\u0027),"},{"line_number":61,"context_line":"    cfg.StrOpt(\u0027infortrend_slots_b_channels_id\u0027,"},{"line_number":62,"context_line":"               default\u003d\u00270,1,2,3,4,5,6,7\u0027,"}],"source_content_type":"text/x-python","patch_set":20,"id":"5afe65bd_2ff1b295","line":59,"in_reply_to":"5afe65bd_789d3709","updated":"2015-06-04 17:14:08.000000000","message":"Done","commit_id":"5fcb34edc273b2fe3460686feaf31860f3552454"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"d50922479902d1d4bc1be5cff101ccb43483145e","unresolved":false,"context_lines":[{"line_number":61,"context_line":"    cfg.StrOpt(\u0027infortrend_slots_b_channels_id\u0027,"},{"line_number":62,"context_line":"               default\u003d\u00270,1,2,3,4,5,6,7\u0027,"},{"line_number":63,"context_line":"               help\u003d\u0027Infortrend raid channel ID list on Slot B \u0027"},{"line_number":64,"context_line":"               \u0027for openstack usage. It is separated with comma.\u0027"},{"line_number":65,"context_line":"               \u0027By default, it is the channel 0~7\u0027),"},{"line_number":66,"context_line":"]"},{"line_number":67,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"5afe65bd_388c5fd9","line":64,"updated":"2015-06-04 16:42:09.000000000","message":"Trailing space.","commit_id":"5fcb34edc273b2fe3460686feaf31860f3552454"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"5815300dec57252f2ddc260ce1dde45bec976049","unresolved":false,"context_lines":[{"line_number":61,"context_line":"    cfg.StrOpt(\u0027infortrend_slots_b_channels_id\u0027,"},{"line_number":62,"context_line":"               default\u003d\u00270,1,2,3,4,5,6,7\u0027,"},{"line_number":63,"context_line":"               help\u003d\u0027Infortrend raid channel ID list on Slot B \u0027"},{"line_number":64,"context_line":"               \u0027for openstack usage. It is separated with comma.\u0027"},{"line_number":65,"context_line":"               \u0027By default, it is the channel 0~7\u0027),"},{"line_number":66,"context_line":"]"},{"line_number":67,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"5afe65bd_0feef6b3","line":64,"in_reply_to":"5afe65bd_388c5fd9","updated":"2015-06-04 17:14:08.000000000","message":"Done","commit_id":"5fcb34edc273b2fe3460686feaf31860f3552454"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"d50922479902d1d4bc1be5cff101ccb43483145e","unresolved":false,"context_lines":[{"line_number":68,"context_line":"infortrend_esds_extra_opts \u003d ["},{"line_number":69,"context_line":"    cfg.StrOpt(\u0027infortrend_provisioning\u0027,"},{"line_number":70,"context_line":"               default\u003d\u0027full\u0027,"},{"line_number":71,"context_line":"               help\u003d\u0027Let the volume use specific provisioning.\u0027"},{"line_number":72,"context_line":"               \u0027By default, it is the full provisioning\u0027),"},{"line_number":73,"context_line":"    cfg.StrOpt(\u0027infortrend_tiering\u0027,"},{"line_number":74,"context_line":"               default\u003d\u00270\u0027,"}],"source_content_type":"text/x-python","patch_set":20,"id":"5afe65bd_d88e6bcf","line":71,"updated":"2015-06-04 16:42:09.000000000","message":"Trailing space.","commit_id":"5fcb34edc273b2fe3460686feaf31860f3552454"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"5815300dec57252f2ddc260ce1dde45bec976049","unresolved":false,"context_lines":[{"line_number":68,"context_line":"infortrend_esds_extra_opts \u003d ["},{"line_number":69,"context_line":"    cfg.StrOpt(\u0027infortrend_provisioning\u0027,"},{"line_number":70,"context_line":"               default\u003d\u0027full\u0027,"},{"line_number":71,"context_line":"               help\u003d\u0027Let the volume use specific provisioning.\u0027"},{"line_number":72,"context_line":"               \u0027By default, it is the full provisioning\u0027),"},{"line_number":73,"context_line":"    cfg.StrOpt(\u0027infortrend_tiering\u0027,"},{"line_number":74,"context_line":"               default\u003d\u00270\u0027,"}],"source_content_type":"text/x-python","patch_set":20,"id":"5afe65bd_cf321e5f","line":71,"in_reply_to":"5afe65bd_d88e6bcf","updated":"2015-06-04 17:14:08.000000000","message":"Done","commit_id":"5fcb34edc273b2fe3460686feaf31860f3552454"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"d50922479902d1d4bc1be5cff101ccb43483145e","unresolved":false,"context_lines":[{"line_number":72,"context_line":"               \u0027By default, it is the full provisioning\u0027),"},{"line_number":73,"context_line":"    cfg.StrOpt(\u0027infortrend_tiering\u0027,"},{"line_number":74,"context_line":"               default\u003d\u00270\u0027,"},{"line_number":75,"context_line":"               help\u003d\u0027Let the volume use specific tiering level.\u0027"},{"line_number":76,"context_line":"               \u0027By default, it is the level 0.\u0027),"},{"line_number":77,"context_line":"]"},{"line_number":78,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"5afe65bd_38b33f9a","line":75,"updated":"2015-06-04 16:42:09.000000000","message":"Trailing space.","commit_id":"5fcb34edc273b2fe3460686feaf31860f3552454"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"5815300dec57252f2ddc260ce1dde45bec976049","unresolved":false,"context_lines":[{"line_number":72,"context_line":"               \u0027By default, it is the full provisioning\u0027),"},{"line_number":73,"context_line":"    cfg.StrOpt(\u0027infortrend_tiering\u0027,"},{"line_number":74,"context_line":"               default\u003d\u00270\u0027,"},{"line_number":75,"context_line":"               help\u003d\u0027Let the volume use specific tiering level.\u0027"},{"line_number":76,"context_line":"               \u0027By default, it is the level 0.\u0027),"},{"line_number":77,"context_line":"]"},{"line_number":78,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"5afe65bd_8f38a63e","line":75,"in_reply_to":"5afe65bd_38b33f9a","updated":"2015-06-04 17:14:08.000000000","message":"Done","commit_id":"5fcb34edc273b2fe3460686feaf31860f3552454"},{"author":{"_account_id":14377,"name":"Apoorva","email":"apps.desh@gmail.com","username":"apoorvad"},"change_message_id":"ae99f17fe0a779d7c11f457e60c52b92c0b6f22a","unresolved":false,"context_lines":[{"line_number":137,"context_line":"                LOG.error(msg)"},{"line_number":138,"context_line":"                raise exception.InfortrendCliException("},{"line_number":139,"context_line":"                    err\u003dmsg, param\u003dargs, rc\u003drc, out\u003dout)"},{"line_number":140,"context_line":"        return rc, out"},{"line_number":141,"context_line":"    return inner"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"3afb71cf_1570a571","line":140,"updated":"2015-06-06 20:17:45.000000000","message":"Do you log warning if RC is not part of \"warning\" dictionary?","commit_id":"6d84c045049d5fe34a2d2d3a8824a7c7b37383f0"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"08a9e60e463b3efc7a49ec56e299ed58b4535b8e","unresolved":false,"context_lines":[{"line_number":137,"context_line":"                LOG.error(msg)"},{"line_number":138,"context_line":"                raise exception.InfortrendCliException("},{"line_number":139,"context_line":"                    err\u003dmsg, param\u003dargs, rc\u003drc, out\u003dout)"},{"line_number":140,"context_line":"        return rc, out"},{"line_number":141,"context_line":"    return inner"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"3afb71cf_16f421f0","line":140,"in_reply_to":"3afb71cf_1570a571","updated":"2015-06-08 09:45:11.000000000","message":"It is already logging every CLI\u0027s output and rc status in retry_cli function (Please see line 33 in cli_factory.py )\n\nI just handle special case(warning but it\u0027s ok) and error case here and I think it is not necessary to log successful CLI.","commit_id":"6d84c045049d5fe34a2d2d3a8824a7c7b37383f0"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"1f9e57795de4842356a0d604c4288709d6146e87","unresolved":false,"context_lines":[{"line_number":270,"context_line":"        return self._execute_command(\u0027ExecuteCommand\u0027, *args, **kwargs)"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"    @return_code_handler"},{"line_number":273,"context_line":"    def _create_part(self, *args):"},{"line_number":274,"context_line":"        return self._execute_command(\u0027CreatePartition\u0027, *args)"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"    @return_code_handler"}],"source_content_type":"text/x-python","patch_set":21,"id":"3afb71cf_8d396944","line":273,"updated":"2015-06-04 20:42:36.000000000","message":"One more part of Java-style code. It\u0027s very hard to read such similar ~100 lines of code","commit_id":"6d84c045049d5fe34a2d2d3a8824a7c7b37383f0"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"08a9e60e463b3efc7a49ec56e299ed58b4535b8e","unresolved":false,"context_lines":[{"line_number":270,"context_line":"        return self._execute_command(\u0027ExecuteCommand\u0027, *args, **kwargs)"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"    @return_code_handler"},{"line_number":273,"context_line":"    def _create_part(self, *args):"},{"line_number":274,"context_line":"        return self._execute_command(\u0027CreatePartition\u0027, *args)"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"    @return_code_handler"}],"source_content_type":"text/x-python","patch_set":21,"id":"3afb71cf_411bee1b","line":273,"in_reply_to":"3afb71cf_8d396944","updated":"2015-06-08 09:45:11.000000000","message":"Ok, I will unwrap the function. Just use _execute_command.\n\nThanks for suggestion.","commit_id":"6d84c045049d5fe34a2d2d3a8824a7c7b37383f0"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"79d57c9a31c7200a8293b970545f689ebb72fb64","unresolved":false,"context_lines":[{"line_number":658,"context_line":"            else:"},{"line_number":659,"context_line":"                value \u003d self.configuration.infortrend_provisioning.lower()"},{"line_number":660,"context_line":"        elif key \u003d\u003d \u0027tiering\u0027:"},{"line_number":661,"context_line":"                value \u003d self.configuration.infortrend_tiering"},{"line_number":662,"context_line":"        return value"},{"line_number":663,"context_line":""},{"line_number":664,"context_line":"    def _select_most_free_capacity_pool_id(self, lv_info):"}],"source_content_type":"text/x-python","patch_set":21,"id":"3afb71cf_985c05ef","line":661,"updated":"2015-06-04 21:09:17.000000000","message":"Indentation is wrong here.","commit_id":"6d84c045049d5fe34a2d2d3a8824a7c7b37383f0"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"08a9e60e463b3efc7a49ec56e299ed58b4535b8e","unresolved":false,"context_lines":[{"line_number":658,"context_line":"            else:"},{"line_number":659,"context_line":"                value \u003d self.configuration.infortrend_provisioning.lower()"},{"line_number":660,"context_line":"        elif key \u003d\u003d \u0027tiering\u0027:"},{"line_number":661,"context_line":"                value \u003d self.configuration.infortrend_tiering"},{"line_number":662,"context_line":"        return value"},{"line_number":663,"context_line":""},{"line_number":664,"context_line":"    def _select_most_free_capacity_pool_id(self, lv_info):"}],"source_content_type":"text/x-python","patch_set":21,"id":"3afb71cf_f3ebd776","line":661,"in_reply_to":"3afb71cf_985c05ef","updated":"2015-06-08 09:45:11.000000000","message":"Done","commit_id":"6d84c045049d5fe34a2d2d3a8824a7c7b37383f0"},{"author":{"_account_id":14377,"name":"Apoorva","email":"apps.desh@gmail.com","username":"apoorvad"},"change_message_id":"ae99f17fe0a779d7c11f457e60c52b92c0b6f22a","unresolved":false,"context_lines":[{"line_number":1710,"context_line":"            volume_id, pool_id\u003ddst_pool_id)"},{"line_number":1711,"context_line":""},{"line_number":1712,"context_line":"        if dst_part_id is None:"},{"line_number":1713,"context_line":"            msg \u003d _(\u0027Fail to get new part id in new pool: %(pool_id)s\u0027) % {"},{"line_number":1714,"context_line":"                \u0027pool_id\u0027: dst_pool_id}"},{"line_number":1715,"context_line":"            LOG.error(msg)"},{"line_number":1716,"context_line":"            raise exception.InfortrendDriverException(err\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":21,"id":"3afb71cf_1549c531","line":1713,"updated":"2015-06-06 20:17:45.000000000","message":"\"Failed\" to get new part id ...","commit_id":"6d84c045049d5fe34a2d2d3a8824a7c7b37383f0"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"08a9e60e463b3efc7a49ec56e299ed58b4535b8e","unresolved":false,"context_lines":[{"line_number":1710,"context_line":"            volume_id, pool_id\u003ddst_pool_id)"},{"line_number":1711,"context_line":""},{"line_number":1712,"context_line":"        if dst_part_id is None:"},{"line_number":1713,"context_line":"            msg \u003d _(\u0027Fail to get new part id in new pool: %(pool_id)s\u0027) % {"},{"line_number":1714,"context_line":"                \u0027pool_id\u0027: dst_pool_id}"},{"line_number":1715,"context_line":"            LOG.error(msg)"},{"line_number":1716,"context_line":"            raise exception.InfortrendDriverException(err\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":21,"id":"3afb71cf_53962bf1","line":1713,"in_reply_to":"3afb71cf_1549c531","updated":"2015-06-08 09:45:11.000000000","message":"Done","commit_id":"6d84c045049d5fe34a2d2d3a8824a7c7b37383f0"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"0eb7f109e6b733053cc68ef5c68a41f6fc8804c4","unresolved":false,"context_lines":[{"line_number":56,"context_line":"    cfg.StrOpt(\u0027infortrend_slots_a_channels_id\u0027,"},{"line_number":57,"context_line":"               default\u003d\u00270,1,2,3,4,5,6,7\u0027,"},{"line_number":58,"context_line":"               help\u003d\u0027Infortrend raid channel ID list on Slot A \u0027"},{"line_number":59,"context_line":"               \u0027for openstack usage. It is separated with comma. \u0027"},{"line_number":60,"context_line":"               \u0027By default, it is the channel 0~7\u0027),"},{"line_number":61,"context_line":"    cfg.StrOpt(\u0027infortrend_slots_b_channels_id\u0027,"},{"line_number":62,"context_line":"               default\u003d\u00270,1,2,3,4,5,6,7\u0027,"}],"source_content_type":"text/x-python","patch_set":24,"id":"3afb71cf_24565cce","line":59,"updated":"2015-06-10 04:45:03.000000000","message":"OpenStack","commit_id":"c4d0818d1c26191fed581b8f7918f870cd63b7c1"},{"author":{"_account_id":14448,"name":"James.Tsai","email":"jameslovee10@gmail.com","username":"James.Tsai"},"change_message_id":"e8f8e89b9f57eace618c5a1b9529334eb7c09c37","unresolved":false,"context_lines":[{"line_number":56,"context_line":"    cfg.StrOpt(\u0027infortrend_slots_a_channels_id\u0027,"},{"line_number":57,"context_line":"               default\u003d\u00270,1,2,3,4,5,6,7\u0027,"},{"line_number":58,"context_line":"               help\u003d\u0027Infortrend raid channel ID list on Slot A \u0027"},{"line_number":59,"context_line":"               \u0027for openstack usage. It is separated with comma. \u0027"},{"line_number":60,"context_line":"               \u0027By default, it is the channel 0~7\u0027),"},{"line_number":61,"context_line":"    cfg.StrOpt(\u0027infortrend_slots_b_channels_id\u0027,"},{"line_number":62,"context_line":"               default\u003d\u00270,1,2,3,4,5,6,7\u0027,"}],"source_content_type":"text/x-python","patch_set":24,"id":"3afb71cf_b6439741","line":59,"in_reply_to":"3afb71cf_24565cce","updated":"2015-06-11 00:55:53.000000000","message":"Done","commit_id":"c4d0818d1c26191fed581b8f7918f870cd63b7c1"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"0eb7f109e6b733053cc68ef5c68a41f6fc8804c4","unresolved":false,"context_lines":[{"line_number":61,"context_line":"    cfg.StrOpt(\u0027infortrend_slots_b_channels_id\u0027,"},{"line_number":62,"context_line":"               default\u003d\u00270,1,2,3,4,5,6,7\u0027,"},{"line_number":63,"context_line":"               help\u003d\u0027Infortrend raid channel ID list on Slot B \u0027"},{"line_number":64,"context_line":"               \u0027for openstack usage. It is separated with comma. \u0027"},{"line_number":65,"context_line":"               \u0027By default, it is the channel 0~7\u0027),"},{"line_number":66,"context_line":"]"},{"line_number":67,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"3afb71cf_c471c877","line":64,"updated":"2015-06-10 04:45:03.000000000","message":"OpenStack","commit_id":"c4d0818d1c26191fed581b8f7918f870cd63b7c1"},{"author":{"_account_id":14448,"name":"James.Tsai","email":"jameslovee10@gmail.com","username":"James.Tsai"},"change_message_id":"e8f8e89b9f57eace618c5a1b9529334eb7c09c37","unresolved":false,"context_lines":[{"line_number":61,"context_line":"    cfg.StrOpt(\u0027infortrend_slots_b_channels_id\u0027,"},{"line_number":62,"context_line":"               default\u003d\u00270,1,2,3,4,5,6,7\u0027,"},{"line_number":63,"context_line":"               help\u003d\u0027Infortrend raid channel ID list on Slot B \u0027"},{"line_number":64,"context_line":"               \u0027for openstack usage. It is separated with comma. \u0027"},{"line_number":65,"context_line":"               \u0027By default, it is the channel 0~7\u0027),"},{"line_number":66,"context_line":"]"},{"line_number":67,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"3afb71cf_5646a34f","line":64,"in_reply_to":"3afb71cf_c471c877","updated":"2015-06-11 00:55:53.000000000","message":"Done","commit_id":"c4d0818d1c26191fed581b8f7918f870cd63b7c1"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"0eb7f109e6b733053cc68ef5c68a41f6fc8804c4","unresolved":false,"context_lines":[{"line_number":68,"context_line":"infortrend_esds_extra_opts \u003d ["},{"line_number":69,"context_line":"    cfg.StrOpt(\u0027infortrend_provisioning\u0027,"},{"line_number":70,"context_line":"               default\u003d\u0027full\u0027,"},{"line_number":71,"context_line":"               help\u003d\u0027Let the volume use specific provisioning. \u0027"},{"line_number":72,"context_line":"               \u0027By default, it is the full provisioning\u0027),"},{"line_number":73,"context_line":"    cfg.StrOpt(\u0027infortrend_tiering\u0027,"},{"line_number":74,"context_line":"               default\u003d\u00270\u0027,"}],"source_content_type":"text/x-python","patch_set":24,"id":"3afb71cf_24241c5e","line":71,"updated":"2015-06-10 04:45:03.000000000","message":"Can you provide all the options here?","commit_id":"c4d0818d1c26191fed581b8f7918f870cd63b7c1"},{"author":{"_account_id":14448,"name":"James.Tsai","email":"jameslovee10@gmail.com","username":"James.Tsai"},"change_message_id":"e8f8e89b9f57eace618c5a1b9529334eb7c09c37","unresolved":false,"context_lines":[{"line_number":68,"context_line":"infortrend_esds_extra_opts \u003d ["},{"line_number":69,"context_line":"    cfg.StrOpt(\u0027infortrend_provisioning\u0027,"},{"line_number":70,"context_line":"               default\u003d\u0027full\u0027,"},{"line_number":71,"context_line":"               help\u003d\u0027Let the volume use specific provisioning. \u0027"},{"line_number":72,"context_line":"               \u0027By default, it is the full provisioning\u0027),"},{"line_number":73,"context_line":"    cfg.StrOpt(\u0027infortrend_tiering\u0027,"},{"line_number":74,"context_line":"               default\u003d\u00270\u0027,"}],"source_content_type":"text/x-python","patch_set":24,"id":"3afb71cf_167b8b8d","line":71,"in_reply_to":"3afb71cf_24241c5e","updated":"2015-06-11 00:55:53.000000000","message":"Done","commit_id":"c4d0818d1c26191fed581b8f7918f870cd63b7c1"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"0eb7f109e6b733053cc68ef5c68a41f6fc8804c4","unresolved":false,"context_lines":[{"line_number":72,"context_line":"               \u0027By default, it is the full provisioning\u0027),"},{"line_number":73,"context_line":"    cfg.StrOpt(\u0027infortrend_tiering\u0027,"},{"line_number":74,"context_line":"               default\u003d\u00270\u0027,"},{"line_number":75,"context_line":"               help\u003d\u0027Let the volume use specific tiering level. \u0027"},{"line_number":76,"context_line":"               \u0027By default, it is the level 0.\u0027),"},{"line_number":77,"context_line":"]"},{"line_number":78,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"3afb71cf_c41f8806","line":75,"updated":"2015-06-10 04:45:03.000000000","message":"Can you list the supported levels?","commit_id":"c4d0818d1c26191fed581b8f7918f870cd63b7c1"},{"author":{"_account_id":14448,"name":"James.Tsai","email":"jameslovee10@gmail.com","username":"James.Tsai"},"change_message_id":"e8f8e89b9f57eace618c5a1b9529334eb7c09c37","unresolved":false,"context_lines":[{"line_number":72,"context_line":"               \u0027By default, it is the full provisioning\u0027),"},{"line_number":73,"context_line":"    cfg.StrOpt(\u0027infortrend_tiering\u0027,"},{"line_number":74,"context_line":"               default\u003d\u00270\u0027,"},{"line_number":75,"context_line":"               help\u003d\u0027Let the volume use specific tiering level. \u0027"},{"line_number":76,"context_line":"               \u0027By default, it is the level 0.\u0027),"},{"line_number":77,"context_line":"]"},{"line_number":78,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"3afb71cf_d67053a6","line":75,"in_reply_to":"3afb71cf_c41f8806","updated":"2015-06-11 00:55:53.000000000","message":"Done","commit_id":"c4d0818d1c26191fed581b8f7918f870cd63b7c1"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"0eb7f109e6b733053cc68ef5c68a41f6fc8804c4","unresolved":false,"context_lines":[{"line_number":342,"context_line":"    def _update_mcs_dict(self, channel_id, mcs_id, controller):"},{"line_number":343,"context_line":"        \"\"\"Record the iSCSI MCS topology"},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"        # R model with mcs, but it not working with iscsi multipath"},{"line_number":346,"context_line":"        mcs_dict \u003d {"},{"line_number":347,"context_line":"            \u0027slot_a\u0027: {"},{"line_number":348,"context_line":"                \u00270\u0027: [\u00270\u0027, \u00271\u0027],"}],"source_content_type":"text/x-python","patch_set":24,"id":"3afb71cf_e4972446","line":345,"updated":"2015-06-10 04:45:03.000000000","message":"iSCSI","commit_id":"c4d0818d1c26191fed581b8f7918f870cd63b7c1"},{"author":{"_account_id":14448,"name":"James.Tsai","email":"jameslovee10@gmail.com","username":"James.Tsai"},"change_message_id":"e8f8e89b9f57eace618c5a1b9529334eb7c09c37","unresolved":false,"context_lines":[{"line_number":342,"context_line":"    def _update_mcs_dict(self, channel_id, mcs_id, controller):"},{"line_number":343,"context_line":"        \"\"\"Record the iSCSI MCS topology"},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"        # R model with mcs, but it not working with iscsi multipath"},{"line_number":346,"context_line":"        mcs_dict \u003d {"},{"line_number":347,"context_line":"            \u0027slot_a\u0027: {"},{"line_number":348,"context_line":"                \u00270\u0027: [\u00270\u0027, \u00271\u0027],"}],"source_content_type":"text/x-python","patch_set":24,"id":"3afb71cf_3684475c","line":345,"in_reply_to":"3afb71cf_e4972446","updated":"2015-06-11 00:55:53.000000000","message":"Done","commit_id":"c4d0818d1c26191fed581b8f7918f870cd63b7c1"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"0eb7f109e6b733053cc68ef5c68a41f6fc8804c4","unresolved":false,"context_lines":[{"line_number":980,"context_line":"            if pool[\u0027Name\u0027] in self.pool_list:"},{"line_number":981,"context_line":"                total_space \u003d float(pool[\u0027Size\u0027].split(\u0027 \u0027, 1)[0])"},{"line_number":982,"context_line":"                available_space \u003d float(pool[\u0027Available\u0027].split(\u0027 \u0027, 1)[0])"},{"line_number":983,"context_line":"                provisioning_space \u003d total_space - available_space"},{"line_number":984,"context_line":""},{"line_number":985,"context_line":"                total_capacity_gb \u003d round(mi_to_gi(total_space), 2)"},{"line_number":986,"context_line":"                free_capacity_gb \u003d round(mi_to_gi(available_space), 2)"}],"source_content_type":"text/x-python","patch_set":24,"id":"3afb71cf_84d630ef","line":983,"updated":"2015-06-10 04:45:03.000000000","message":"If your provisioning_space is always equal to (total_space - available_space), you are treating everything as full provisioning. For thin provisioning, your provisioning_space could be bigger than total_space.  For example, if your total\u003d10GB and max_over_subscription_ratio\u003d20, your provisioning_space could be up to 200GB.  Is there a way for you to retrieve this information from your array?","commit_id":"c4d0818d1c26191fed581b8f7918f870cd63b7c1"},{"author":{"_account_id":14448,"name":"James.Tsai","email":"jameslovee10@gmail.com","username":"James.Tsai"},"change_message_id":"e8f8e89b9f57eace618c5a1b9529334eb7c09c37","unresolved":false,"context_lines":[{"line_number":980,"context_line":"            if pool[\u0027Name\u0027] in self.pool_list:"},{"line_number":981,"context_line":"                total_space \u003d float(pool[\u0027Size\u0027].split(\u0027 \u0027, 1)[0])"},{"line_number":982,"context_line":"                available_space \u003d float(pool[\u0027Available\u0027].split(\u0027 \u0027, 1)[0])"},{"line_number":983,"context_line":"                provisioning_space \u003d total_space - available_space"},{"line_number":984,"context_line":""},{"line_number":985,"context_line":"                total_capacity_gb \u003d round(mi_to_gi(total_space), 2)"},{"line_number":986,"context_line":"                free_capacity_gb \u003d round(mi_to_gi(available_space), 2)"}],"source_content_type":"text/x-python","patch_set":24,"id":"3afb71cf_7fd053c9","line":983,"updated":"2015-06-11 00:55:53.000000000","message":"Thanks for your suggestion. \"provisioning_space\" definition has been updated.","commit_id":"c4d0818d1c26191fed581b8f7918f870cd63b7c1"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c6ccd9bd585ce3e92261dca44ca53ae817a5ccab","unresolved":false,"context_lines":[{"line_number":987,"context_line":"                free_capacity_gb \u003d round(mi_to_gi(available_space), 2)"},{"line_number":988,"context_line":"                provisioning_factor \u003d self.configuration.safe_get("},{"line_number":989,"context_line":"                    \u0027max_over_subscription_ratio\u0027)"},{"line_number":990,"context_line":"                provisioning_space \u003d total_space * provisioning_factor"},{"line_number":991,"context_line":"                provisioned_capacity_gb \u003d round("},{"line_number":992,"context_line":"                    mi_to_gi(provisioning_space), 2)"},{"line_number":993,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"3afb71cf_91d3f45f","line":990,"updated":"2015-06-10 15:29:44.000000000","message":"I think I didn\u0027t make my previous comments clear. Sorry about the confusion. If you calculate like this \"provisioning_space \u003d total_space * provisioning_factor\", you won\u0027t be able to do any thin provisioning any more because this is the maximum thin provisioning you could do.\n\nSuppose you have 10GB total, you have created 5 volumes, each is 1GB. Assume these are all the volumes you have created on this array. It means now your provisioned_capacity\u003d5GB.  Out of this 5GB, you may only have written data to 3GB.  So your used capacity is 3GB and your free_capacity\u003d7GB. Note total, free_capacity, and used capacity are all real physical capacity here. Provisioned_capacity is virtual capacity.\n\nSee how provisioned_capacity is calculated in the LVM driver for thin provisioning:\nhttps://github.com/openstack/cinder/blob/master/cinder/volume/drivers/lvm.py#L205\nFor full provisioning, the calculation is similar to what you have before:\nhttps://github.com/openstack/cinder/blob/master/cinder/volume/drivers/lvm.py#L210\n\nI would assume you should be able to find the provisioned_capacity through CLI from your array.  Can you check?","commit_id":"b9cf02c8fc869240ee4c9257ade5ca3b1c5469bf"},{"author":{"_account_id":14448,"name":"James.Tsai","email":"jameslovee10@gmail.com","username":"James.Tsai"},"change_message_id":"fb7e2f65323d236de5a1beb63914672bf5259c9c","unresolved":false,"context_lines":[{"line_number":987,"context_line":"                free_capacity_gb \u003d round(mi_to_gi(available_space), 2)"},{"line_number":988,"context_line":"                provisioning_factor \u003d self.configuration.safe_get("},{"line_number":989,"context_line":"                    \u0027max_over_subscription_ratio\u0027)"},{"line_number":990,"context_line":"                provisioning_space \u003d total_space * provisioning_factor"},{"line_number":991,"context_line":"                provisioned_capacity_gb \u003d round("},{"line_number":992,"context_line":"                    mi_to_gi(provisioning_space), 2)"},{"line_number":993,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"3afb71cf_11e6c7e7","line":990,"in_reply_to":"3afb71cf_91d3f45f","updated":"2015-06-11 05:27:01.000000000","message":"Thanks for your clarification. It\u0027s finished.","commit_id":"b9cf02c8fc869240ee4c9257ade5ca3b1c5469bf"},{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"f206be6214468f8e0ff97986bd1741f880b24ac7","unresolved":false,"context_lines":[{"line_number":1583,"context_line":"            initiator_target_map, target_wwpns \u003d ("},{"line_number":1584,"context_line":"                self._build_initiator_target_map(connector, wwpn_list)"},{"line_number":1585,"context_line":"            )"},{"line_number":1586,"context_line":"            conn_info[\u0027data\u0027][\u0027initiator_target_map\u0027] \u003d initiator_target_map"},{"line_number":1587,"context_line":""},{"line_number":1588,"context_line":"        LOG.info(_LI("},{"line_number":1589,"context_line":"            \u0027Successfully terminated connection for volume %(volume_id)s\u0027), {"}],"source_content_type":"text/x-python","patch_set":27,"id":"1af86dd1_92a3c24f","line":1586,"updated":"2015-06-12 00:24:49.000000000","message":"I might be missing something, but do you always want to remove that zone? If the initiator had more than one volume attached the zone should probably stay there.","commit_id":"d7661f48d27a73dce0dde17f5a07709b83d43e9b"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9e40f1d21cee426a49a6f4e2df1f628200fc8095","unresolved":false,"context_lines":[{"line_number":1583,"context_line":"            initiator_target_map, target_wwpns \u003d ("},{"line_number":1584,"context_line":"                self._build_initiator_target_map(connector, wwpn_list)"},{"line_number":1585,"context_line":"            )"},{"line_number":1586,"context_line":"            conn_info[\u0027data\u0027][\u0027initiator_target_map\u0027] \u003d initiator_target_map"},{"line_number":1587,"context_line":""},{"line_number":1588,"context_line":"        LOG.info(_LI("},{"line_number":1589,"context_line":"            \u0027Successfully terminated connection for volume %(volume_id)s\u0027), {"}],"source_content_type":"text/x-python","patch_set":27,"id":"1af86dd1_c2aa8785","line":1586,"in_reply_to":"1af86dd1_92a3c24f","updated":"2015-06-12 04:04:31.000000000","message":"That\u0027s a good point. I don\u0027t see any code checking whether if there are still volumes attached. You should only populate initiator_target_map if there are no volumes attached. See example here: \nhttps://github.com/openstack/cinder/blob/master/cinder/volume/drivers/emc/xtremio.py#L654","commit_id":"d7661f48d27a73dce0dde17f5a07709b83d43e9b"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"468114e4536c023c5c0f95987784b8d50db4df74","unresolved":false,"context_lines":[{"line_number":1583,"context_line":"            initiator_target_map, target_wwpns \u003d ("},{"line_number":1584,"context_line":"                self._build_initiator_target_map(connector, wwpn_list)"},{"line_number":1585,"context_line":"            )"},{"line_number":1586,"context_line":"            conn_info[\u0027data\u0027][\u0027initiator_target_map\u0027] \u003d initiator_target_map"},{"line_number":1587,"context_line":""},{"line_number":1588,"context_line":"        LOG.info(_LI("},{"line_number":1589,"context_line":"            \u0027Successfully terminated connection for volume %(volume_id)s\u0027), {"}],"source_content_type":"text/x-python","patch_set":27,"id":"1af86dd1_205ef3e9","line":1586,"in_reply_to":"1af86dd1_c2aa8785","updated":"2015-06-12 05:33:28.000000000","message":"It\u0027s my mistake. Thanks  for your catching!  I would update later.","commit_id":"d7661f48d27a73dce0dde17f5a07709b83d43e9b"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"d2710914eddff9c253dfb6114a90fd626d07290a","unresolved":false,"context_lines":[{"line_number":877,"context_line":"                    LOG.error(msg)"},{"line_number":878,"context_line":"                    raise exception.VolumeDriverException(message\u003dmsg)"},{"line_number":879,"context_line":""},{"line_number":880,"context_line":"                self._execute(\u0027DeleteSnapshot\u0027, snapshot[\u0027SI-ID\u0027], \u0027-y\u0027)"},{"line_number":881,"context_line":""},{"line_number":882,"context_line":"            rc, map_info \u003d self._execute(\u0027ShowMap\u0027, \u0027part\u003d%s\u0027 % part_id)"},{"line_number":883,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"1af86dd1_f3d1b7fc","line":880,"updated":"2015-06-12 19:32:52.000000000","message":"I assume these are snapshots on the array, but not managed by Cinder?\n\nHow do you differentiate between the snapshots that are managed by Cinder and those are not managed by Cinder?\n\nIs it possible to delete a Cinder managed snapshot from the array without telling Cinder by running this \u0027DeleteSnapshot\u0027 operation here?","commit_id":"2c5a137df10d78445e25c37c824832bee611e89e"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"3c4b675a3b44bf94edd5cf688cac3df27f734b77","unresolved":false,"context_lines":[{"line_number":877,"context_line":"                    LOG.error(msg)"},{"line_number":878,"context_line":"                    raise exception.VolumeDriverException(message\u003dmsg)"},{"line_number":879,"context_line":""},{"line_number":880,"context_line":"                self._execute(\u0027DeleteSnapshot\u0027, snapshot[\u0027SI-ID\u0027], \u0027-y\u0027)"},{"line_number":881,"context_line":""},{"line_number":882,"context_line":"            rc, map_info \u003d self._execute(\u0027ShowMap\u0027, \u0027part\u003d%s\u0027 % part_id)"},{"line_number":883,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"fa32b979_a690d5ed","line":880,"in_reply_to":"1af86dd1_f3d1b7fc","updated":"2015-06-15 03:07:45.000000000","message":"In my test, I cannot delete the volume which has snapshots. \n\nSo I think the cinder managed snapshots would be deleted before  calling driver method.\nThe existing snapshot is not managed by Cinder here.\n\nShould we handle the situation which volume still has Cinder managed snapshots?\n\nIf we need to handle the situation, we need to record Cinder managed snapshots with specific name and than raise exception in this situation.","commit_id":"2c5a137df10d78445e25c37c824832bee611e89e"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"110aee14297b1b26f7315760cd4ee4a40d35948e","unresolved":false,"context_lines":[{"line_number":877,"context_line":"                    LOG.error(msg)"},{"line_number":878,"context_line":"                    raise exception.VolumeDriverException(message\u003dmsg)"},{"line_number":879,"context_line":""},{"line_number":880,"context_line":"                self._execute(\u0027DeleteSnapshot\u0027, snapshot[\u0027SI-ID\u0027], \u0027-y\u0027)"},{"line_number":881,"context_line":""},{"line_number":882,"context_line":"            rc, map_info \u003d self._execute(\u0027ShowMap\u0027, \u0027part\u003d%s\u0027 % part_id)"},{"line_number":883,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"fa32b979_c1962394","line":880,"in_reply_to":"fa32b979_a690d5ed","updated":"2015-06-15 03:17:09.000000000","message":"Ya, I think you are fine.  Cinder delete volume API checks if a volume still has snapshots.  If it has, the delete volume request will fail at the API level and the driver won\u0027t even get the request.  So when you get the delete volume request here, you should not have Cinder managed snapshots associated with the volume any more.","commit_id":"2c5a137df10d78445e25c37c824832bee611e89e"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"94670e114ed40da4d17d1f81dab728eef6d1bfd7","unresolved":false,"context_lines":[{"line_number":1584,"context_line":"        map_info \u003d self._update_map_info(multipath)"},{"line_number":1585,"context_line":""},{"line_number":1586,"context_line":"        lun_map_exist \u003d self._check_initiator_has_lun_map("},{"line_number":1587,"context_line":"            connector[\u0027wwpns\u0027], map_info)"},{"line_number":1588,"context_line":""},{"line_number":1589,"context_line":"        if (self.protocol \u003d\u003d \u0027FC\u0027 and"},{"line_number":1590,"context_line":"                self.fc_lookup_service and not lun_map_exist):"}],"source_content_type":"text/x-python","patch_set":29,"id":"fa32b979_4141b00a","line":1587,"updated":"2015-06-15 06:27:52.000000000","message":"In iSCSI, it would be failed here because iSCSI did not have wwpns. It\u0027s my fault. I would move into line 1591 in next patch set.","commit_id":"2c5a137df10d78445e25c37c824832bee611e89e"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"2bb4337658c42f843f0411ad68e124ea0ff0818d","unresolved":false,"context_lines":[{"line_number":126,"context_line":""},{"line_number":127,"context_line":"def log_func(func):"},{"line_number":128,"context_line":"    def inner(self, *args, **kwargs):"},{"line_number":129,"context_line":"        LOG.debug(\u0027Enter %(method)s\u0027, {\u0027method\u0027: func.__name__})"},{"line_number":130,"context_line":"        start \u003d timeutils.utcnow()"},{"line_number":131,"context_line":"        ret \u003d func(self, *args, **kwargs)"},{"line_number":132,"context_line":"        end \u003d timeutils.utcnow()"}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_78d4571f","line":129,"updated":"2015-06-16 18:12:10.000000000","message":"\u0027Enter %(method)s ...\"","commit_id":"9d6cdb555ce292d17a644c1d5b9110519cd52734"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"24143903921844f7ea5562e484be09d545af3d27","unresolved":false,"context_lines":[{"line_number":126,"context_line":""},{"line_number":127,"context_line":"def log_func(func):"},{"line_number":128,"context_line":"    def inner(self, *args, **kwargs):"},{"line_number":129,"context_line":"        LOG.debug(\u0027Enter %(method)s\u0027, {\u0027method\u0027: func.__name__})"},{"line_number":130,"context_line":"        start \u003d timeutils.utcnow()"},{"line_number":131,"context_line":"        ret \u003d func(self, *args, **kwargs)"},{"line_number":132,"context_line":"        end \u003d timeutils.utcnow()"}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_7239bda3","line":129,"in_reply_to":"fa32b979_78d4571f","updated":"2015-06-17 03:48:47.000000000","message":"Done","commit_id":"9d6cdb555ce292d17a644c1d5b9110519cd52734"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"2bb4337658c42f843f0411ad68e124ea0ff0818d","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        LOG.debug("},{"line_number":134,"context_line":"            \u0027Leave %(method)s \u0027"},{"line_number":135,"context_line":"            \u0027Spent %(time)s sec \u0027"},{"line_number":136,"context_line":"            \u0027Return %(ret)s\u0027, {"},{"line_number":137,"context_line":"                \u0027method\u0027: func.__name__,"},{"line_number":138,"context_line":"                \u0027time\u0027: timeutils.delta_seconds(start, end),"},{"line_number":139,"context_line":"                \u0027ret\u0027: ret})"}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_d8ed63f0","line":136,"updated":"2015-06-16 18:12:10.000000000","message":"Leave:\nSpent:\nReturn:","commit_id":"9d6cdb555ce292d17a644c1d5b9110519cd52734"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"24143903921844f7ea5562e484be09d545af3d27","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        LOG.debug("},{"line_number":134,"context_line":"            \u0027Leave %(method)s \u0027"},{"line_number":135,"context_line":"            \u0027Spent %(time)s sec \u0027"},{"line_number":136,"context_line":"            \u0027Return %(ret)s\u0027, {"},{"line_number":137,"context_line":"                \u0027method\u0027: func.__name__,"},{"line_number":138,"context_line":"                \u0027time\u0027: timeutils.delta_seconds(start, end),"},{"line_number":139,"context_line":"                \u0027ret\u0027: ret})"}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_923ec18a","line":136,"in_reply_to":"fa32b979_d8ed63f0","updated":"2015-06-17 03:48:47.000000000","message":"Done","commit_id":"9d6cdb555ce292d17a644c1d5b9110519cd52734"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"2bb4337658c42f843f0411ad68e124ea0ff0818d","unresolved":false,"context_lines":[{"line_number":176,"context_line":"        self.configuration.append_config_values(infortrend_esds_opts)"},{"line_number":177,"context_line":"        self.configuration.append_config_values(infortrend_esds_extra_opts)"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"        self.iscsi_multipath \u003d self.configuration.use_multipath_for_image_xfer"},{"line_number":180,"context_line":"        self.path \u003d self.configuration.infortrend_cli_path"},{"line_number":181,"context_line":"        self.password \u003d self.configuration.san_password"},{"line_number":182,"context_line":"        self.ip \u003d self.configuration.san_ip"}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_3836cf52","line":179,"updated":"2015-06-16 18:12:10.000000000","message":"I am not comfortable with overloading the multipath_for_image_xfer option here to indicate whether you want to use multipath.  We really should have a shared san_enable_multipath option.  Will need to fix that elsewhere.  Recommend creating a infotrend_multipath_enabled option for now.  Can work on fixing this option in the future.","commit_id":"9d6cdb555ce292d17a644c1d5b9110519cd52734"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"476b5391b39f8cfb45cb239f03dfd00b23f62f29","unresolved":false,"context_lines":[{"line_number":176,"context_line":"        self.configuration.append_config_values(infortrend_esds_opts)"},{"line_number":177,"context_line":"        self.configuration.append_config_values(infortrend_esds_extra_opts)"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"        self.iscsi_multipath \u003d self.configuration.use_multipath_for_image_xfer"},{"line_number":180,"context_line":"        self.path \u003d self.configuration.infortrend_cli_path"},{"line_number":181,"context_line":"        self.password \u003d self.configuration.san_password"},{"line_number":182,"context_line":"        self.ip \u003d self.configuration.san_ip"}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_2d68b6b8","line":179,"in_reply_to":"fa32b979_327a5578","updated":"2015-06-17 04:02:24.000000000","message":"If there\u0027s already a common flag, why creating another one?  We have been asking people not to create their own options if there\u0027s already a common option in cinder.conf.\n\nIf you use multipath, you have to set set _multipath_for_image_xfer to True any way. I really don\u0027t see a need to create a new flag.","commit_id":"9d6cdb555ce292d17a644c1d5b9110519cd52734"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"24143903921844f7ea5562e484be09d545af3d27","unresolved":false,"context_lines":[{"line_number":176,"context_line":"        self.configuration.append_config_values(infortrend_esds_opts)"},{"line_number":177,"context_line":"        self.configuration.append_config_values(infortrend_esds_extra_opts)"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"        self.iscsi_multipath \u003d self.configuration.use_multipath_for_image_xfer"},{"line_number":180,"context_line":"        self.path \u003d self.configuration.infortrend_cli_path"},{"line_number":181,"context_line":"        self.password \u003d self.configuration.san_password"},{"line_number":182,"context_line":"        self.ip \u003d self.configuration.san_ip"}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_327a5578","line":179,"in_reply_to":"fa32b979_3836cf52","updated":"2015-06-17 03:48:47.000000000","message":"In patch set #7. xing-yang suggest use the existing multipath flags.\n\nhttps://review.openstack.org/#/c/177113/30/cinder/volume/drivers/infortrend/eonstor_ds_cli/common_cli.py\n\nFor me, it is more flexible if I use infotrend_multipath_enabled. \n\nWhich plan should I follow? exist flags or customize flags?","commit_id":"9d6cdb555ce292d17a644c1d5b9110519cd52734"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"2bb4337658c42f843f0411ad68e124ea0ff0818d","unresolved":false,"context_lines":[{"line_number":255,"context_line":"        return command(self.cli_conf).execute(*args, **kwargs)"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"    def _execute(self, cli_type, *args, **kwargs):"},{"line_number":258,"context_line":"        LOG.debug(\u0027Enter %(method)s\u0027, {\u0027method\u0027: cli_type})"},{"line_number":259,"context_line":""},{"line_number":260,"context_line":"        rc, out \u003d self._execute_command(cli_type, *args, **kwargs)"},{"line_number":261,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_9e3b439c","line":258,"updated":"2015-06-16 18:12:10.000000000","message":"Enter %(method)s ...","commit_id":"9d6cdb555ce292d17a644c1d5b9110519cd52734"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"24143903921844f7ea5562e484be09d545af3d27","unresolved":false,"context_lines":[{"line_number":255,"context_line":"        return command(self.cli_conf).execute(*args, **kwargs)"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"    def _execute(self, cli_type, *args, **kwargs):"},{"line_number":258,"context_line":"        LOG.debug(\u0027Enter %(method)s\u0027, {\u0027method\u0027: cli_type})"},{"line_number":259,"context_line":""},{"line_number":260,"context_line":"        rc, out \u003d self._execute_command(cli_type, *args, **kwargs)"},{"line_number":261,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_d2b9a916","line":258,"in_reply_to":"fa32b979_9e3b439c","updated":"2015-06-17 03:48:47.000000000","message":"Done","commit_id":"9d6cdb555ce292d17a644c1d5b9110519cd52734"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"2bb4337658c42f843f0411ad68e124ea0ff0818d","unresolved":false,"context_lines":[{"line_number":265,"context_line":"                LOG.warning(CLI_RC_FILTER[cli_type][\u0027warning\u0027][rc])"},{"line_number":266,"context_line":"            else:"},{"line_number":267,"context_line":"                msg \u003d CLI_RC_FILTER[cli_type][\u0027error\u0027]"},{"line_number":268,"context_line":"                LOG.error(msg)"},{"line_number":269,"context_line":"                raise exception.InfortrendCliException("},{"line_number":270,"context_line":"                    err\u003dmsg, param\u003dargs, rc\u003drc, out\u003dout)"},{"line_number":271,"context_line":"        return rc, out"}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_7e067fcf","line":268,"updated":"2015-06-16 18:12:10.000000000","message":"Can\u0027t we just collapse this down into one line?","commit_id":"9d6cdb555ce292d17a644c1d5b9110519cd52734"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"24143903921844f7ea5562e484be09d545af3d27","unresolved":false,"context_lines":[{"line_number":265,"context_line":"                LOG.warning(CLI_RC_FILTER[cli_type][\u0027warning\u0027][rc])"},{"line_number":266,"context_line":"            else:"},{"line_number":267,"context_line":"                msg \u003d CLI_RC_FILTER[cli_type][\u0027error\u0027]"},{"line_number":268,"context_line":"                LOG.error(msg)"},{"line_number":269,"context_line":"                raise exception.InfortrendCliException("},{"line_number":270,"context_line":"                    err\u003dmsg, param\u003dargs, rc\u003drc, out\u003dout)"},{"line_number":271,"context_line":"        return rc, out"}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_72ebfd13","line":268,"in_reply_to":"fa32b979_7e067fcf","updated":"2015-06-17 03:48:47.000000000","message":"msg would be used on next line for raising exception.","commit_id":"9d6cdb555ce292d17a644c1d5b9110519cd52734"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"2bb4337658c42f843f0411ad68e124ea0ff0818d","unresolved":false,"context_lines":[{"line_number":478,"context_line":"        model_update \u003d {"},{"line_number":479,"context_line":"            \"provider_location\": self._concat_provider_location(model_dict),"},{"line_number":480,"context_line":"        }"},{"line_number":481,"context_line":"        LOG.info(_LI(\u0027Create Volume %(volume_id)s done\u0027), {"},{"line_number":482,"context_line":"            \u0027volume_id\u0027: volume_id})"},{"line_number":483,"context_line":"        return model_update"},{"line_number":484,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_be4ac7c3","line":481,"updated":"2015-06-16 18:12:10.000000000","message":"Suggest:  \"Create Volume %(volume_id)s completed.\"","commit_id":"9d6cdb555ce292d17a644c1d5b9110519cd52734"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"24143903921844f7ea5562e484be09d545af3d27","unresolved":false,"context_lines":[{"line_number":478,"context_line":"        model_update \u003d {"},{"line_number":479,"context_line":"            \"provider_location\": self._concat_provider_location(model_dict),"},{"line_number":480,"context_line":"        }"},{"line_number":481,"context_line":"        LOG.info(_LI(\u0027Create Volume %(volume_id)s done\u0027), {"},{"line_number":482,"context_line":"            \u0027volume_id\u0027: volume_id})"},{"line_number":483,"context_line":"        return model_update"},{"line_number":484,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_d26769b5","line":481,"in_reply_to":"fa32b979_be4ac7c3","updated":"2015-06-17 03:48:47.000000000","message":"Done","commit_id":"9d6cdb555ce292d17a644c1d5b9110519cd52734"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"2bb4337658c42f843f0411ad68e124ea0ff0818d","unresolved":false,"context_lines":[{"line_number":546,"context_line":"                if len(tier_levels) \u003d\u003d 0:"},{"line_number":547,"context_line":"                    break"},{"line_number":548,"context_line":"        if len(tier_levels) !\u003d 0:"},{"line_number":549,"context_line":"            msg \u003d _(\u0027Have not created %(tier_levels)s tier(s)\u0027) % {"},{"line_number":550,"context_line":"                \u0027tier_levels\u0027: tier_levels}"},{"line_number":551,"context_line":"            LOG.error(msg)"},{"line_number":552,"context_line":"            raise exception.VolumeDriverException(message\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_fe6e0f2e","line":549,"updated":"2015-06-16 18:12:10.000000000","message":"\u0027.\u0027 at EOL","commit_id":"9d6cdb555ce292d17a644c1d5b9110519cd52734"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"24143903921844f7ea5562e484be09d545af3d27","unresolved":false,"context_lines":[{"line_number":546,"context_line":"                if len(tier_levels) \u003d\u003d 0:"},{"line_number":547,"context_line":"                    break"},{"line_number":548,"context_line":"        if len(tier_levels) !\u003d 0:"},{"line_number":549,"context_line":"            msg \u003d _(\u0027Have not created %(tier_levels)s tier(s)\u0027) % {"},{"line_number":550,"context_line":"                \u0027tier_levels\u0027: tier_levels}"},{"line_number":551,"context_line":"            LOG.error(msg)"},{"line_number":552,"context_line":"            raise exception.VolumeDriverException(message\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_d2fe89ad","line":549,"in_reply_to":"fa32b979_fe6e0f2e","updated":"2015-06-17 03:48:47.000000000","message":"Done","commit_id":"9d6cdb555ce292d17a644c1d5b9110519cd52734"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"2bb4337658c42f843f0411ad68e124ea0ff0818d","unresolved":false,"context_lines":[{"line_number":585,"context_line":"                break"},{"line_number":586,"context_line":""},{"line_number":587,"context_line":"        if map_channel_id is None:"},{"line_number":588,"context_line":"            msg \u003d _(\u0027Failed to create map on mcs, no channel can map\u0027)"},{"line_number":589,"context_line":"            LOG.error(msg)"},{"line_number":590,"context_line":"            raise exception.VolumeDriverException(message\u003dmsg)"},{"line_number":591,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_5ed5bbb6","line":588,"updated":"2015-06-16 18:12:10.000000000","message":"\u0027.\u0027 at EOL","commit_id":"9d6cdb555ce292d17a644c1d5b9110519cd52734"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"24143903921844f7ea5562e484be09d545af3d27","unresolved":false,"context_lines":[{"line_number":585,"context_line":"                break"},{"line_number":586,"context_line":""},{"line_number":587,"context_line":"        if map_channel_id is None:"},{"line_number":588,"context_line":"            msg \u003d _(\u0027Failed to create map on mcs, no channel can map\u0027)"},{"line_number":589,"context_line":"            LOG.error(msg)"},{"line_number":590,"context_line":"            raise exception.VolumeDriverException(message\u003dmsg)"},{"line_number":591,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_3224955e","line":588,"in_reply_to":"fa32b979_5ed5bbb6","updated":"2015-06-17 03:48:47.000000000","message":"Done","commit_id":"9d6cdb555ce292d17a644c1d5b9110519cd52734"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"2bb4337658c42f843f0411ad68e124ea0ff0818d","unresolved":false,"context_lines":[{"line_number":647,"context_line":"            pool_id \u003d self._select_most_free_capacity_pool_id(lv_info)"},{"line_number":648,"context_line":""},{"line_number":649,"context_line":"        if pool_id is None:"},{"line_number":650,"context_line":"            msg \u003d _(\u0027Failed to get pool id with volume %(volume_id)s\u0027) % {"},{"line_number":651,"context_line":"                \u0027volume_id\u0027: volume[\u0027id\u0027]}"},{"line_number":652,"context_line":"            LOG.error(msg)"},{"line_number":653,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_7e643f21","line":650,"updated":"2015-06-16 18:12:10.000000000","message":"\u0027.\u0027 at EOL","commit_id":"9d6cdb555ce292d17a644c1d5b9110519cd52734"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"24143903921844f7ea5562e484be09d545af3d27","unresolved":false,"context_lines":[{"line_number":647,"context_line":"            pool_id \u003d self._select_most_free_capacity_pool_id(lv_info)"},{"line_number":648,"context_line":""},{"line_number":649,"context_line":"        if pool_id is None:"},{"line_number":650,"context_line":"            msg \u003d _(\u0027Failed to get pool id with volume %(volume_id)s\u0027) % {"},{"line_number":651,"context_line":"                \u0027volume_id\u0027: volume[\u0027id\u0027]}"},{"line_number":652,"context_line":"            LOG.error(msg)"},{"line_number":653,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_f222ad51","line":650,"in_reply_to":"fa32b979_7e643f21","updated":"2015-06-17 03:48:47.000000000","message":"Done","commit_id":"9d6cdb555ce292d17a644c1d5b9110519cd52734"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"2bb4337658c42f843f0411ad68e124ea0ff0818d","unresolved":false,"context_lines":[{"line_number":780,"context_line":"                empty_lun_num \u003d len(value)"},{"line_number":781,"context_line":""},{"line_number":782,"context_line":"        if int(min_map_chl) \u003c 0:"},{"line_number":783,"context_line":"            msg \u003d _(\u0027LUN map overflow on every channel\u0027)"},{"line_number":784,"context_line":"            LOG.error(msg)"},{"line_number":785,"context_line":"            raise exception.VolumeDriverException(message\u003dmsg)"},{"line_number":786,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_7e199f87","line":783,"updated":"2015-06-16 18:12:10.000000000","message":"\u0027.\u0027 at EOL","commit_id":"9d6cdb555ce292d17a644c1d5b9110519cd52734"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"24143903921844f7ea5562e484be09d545af3d27","unresolved":false,"context_lines":[{"line_number":780,"context_line":"                empty_lun_num \u003d len(value)"},{"line_number":781,"context_line":""},{"line_number":782,"context_line":"        if int(min_map_chl) \u003c 0:"},{"line_number":783,"context_line":"            msg \u003d _(\u0027LUN map overflow on every channel\u0027)"},{"line_number":784,"context_line":"            LOG.error(msg)"},{"line_number":785,"context_line":"            raise exception.VolumeDriverException(message\u003dmsg)"},{"line_number":786,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_72d53d1a","line":783,"in_reply_to":"fa32b979_7e199f87","updated":"2015-06-17 03:48:47.000000000","message":"Done","commit_id":"9d6cdb555ce292d17a644c1d5b9110519cd52734"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"2bb4337658c42f843f0411ad68e124ea0ff0818d","unresolved":false,"context_lines":[{"line_number":812,"context_line":"                break"},{"line_number":813,"context_line":""},{"line_number":814,"context_line":"        if mcs_id is None:"},{"line_number":815,"context_line":"            msg \u003d _(\u0027Cannot get mcs_id by channel id\u003d%(channel_id)s\u0027) % {"},{"line_number":816,"context_line":"                \u0027channel_id\u0027: channel_id}"},{"line_number":817,"context_line":"            LOG.error(msg)"},{"line_number":818,"context_line":"            raise exception.VolumeDriverException(message\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_7900d901","line":815,"updated":"2015-06-16 18:12:10.000000000","message":"\u0027.\u0027 at EOL","commit_id":"9d6cdb555ce292d17a644c1d5b9110519cd52734"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"24143903921844f7ea5562e484be09d545af3d27","unresolved":false,"context_lines":[{"line_number":812,"context_line":"                break"},{"line_number":813,"context_line":""},{"line_number":814,"context_line":"        if mcs_id is None:"},{"line_number":815,"context_line":"            msg \u003d _(\u0027Cannot get mcs_id by channel id\u003d%(channel_id)s\u0027) % {"},{"line_number":816,"context_line":"                \u0027channel_id\u0027: channel_id}"},{"line_number":817,"context_line":"            LOG.error(msg)"},{"line_number":818,"context_line":"            raise exception.VolumeDriverException(message\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_32db3551","line":815,"in_reply_to":"fa32b979_7900d901","updated":"2015-06-17 03:48:47.000000000","message":"Done","commit_id":"9d6cdb555ce292d17a644c1d5b9110519cd52734"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"2bb4337658c42f843f0411ad68e124ea0ff0818d","unresolved":false,"context_lines":[{"line_number":837,"context_line":"        )"},{"line_number":838,"context_line":""},{"line_number":839,"context_line":"        if not check_exist:"},{"line_number":840,"context_line":"            LOG.warning(_LW(\u0027Volume %(volume_id)s already deleted\u0027), {"},{"line_number":841,"context_line":"                \u0027volume_id\u0027: volume_id})"},{"line_number":842,"context_line":"            return"},{"line_number":843,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_3927b165","line":840,"updated":"2015-06-16 18:12:10.000000000","message":"\u0027.\u0027 at EOL","commit_id":"9d6cdb555ce292d17a644c1d5b9110519cd52734"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"24143903921844f7ea5562e484be09d545af3d27","unresolved":false,"context_lines":[{"line_number":837,"context_line":"        )"},{"line_number":838,"context_line":""},{"line_number":839,"context_line":"        if not check_exist:"},{"line_number":840,"context_line":"            LOG.warning(_LW(\u0027Volume %(volume_id)s already deleted\u0027), {"},{"line_number":841,"context_line":"                \u0027volume_id\u0027: volume_id})"},{"line_number":842,"context_line":"            return"},{"line_number":843,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_12e71112","line":840,"in_reply_to":"fa32b979_3927b165","updated":"2015-06-17 03:48:47.000000000","message":"Done","commit_id":"9d6cdb555ce292d17a644c1d5b9110519cd52734"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"2bb4337658c42f843f0411ad68e124ea0ff0818d","unresolved":false,"context_lines":[{"line_number":886,"context_line":""},{"line_number":887,"context_line":"            self._execute(\u0027DeletePartition\u0027, part_id, \u0027-y\u0027)"},{"line_number":888,"context_line":""},{"line_number":889,"context_line":"            LOG.info(_LI(\u0027Delete Volume %(volume_id)s done\u0027), {"},{"line_number":890,"context_line":"                \u0027volume_id\u0027: volume_id})"},{"line_number":891,"context_line":"        else:"},{"line_number":892,"context_line":"            msg \u003d _(\u0027Failed to delete volume \u0027"}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_99d4bd47","line":889,"updated":"2015-06-16 18:12:10.000000000","message":"\u0027Delete Volume %(volume_id)s completed.\u0027","commit_id":"9d6cdb555ce292d17a644c1d5b9110519cd52734"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"24143903921844f7ea5562e484be09d545af3d27","unresolved":false,"context_lines":[{"line_number":886,"context_line":""},{"line_number":887,"context_line":"            self._execute(\u0027DeletePartition\u0027, part_id, \u0027-y\u0027)"},{"line_number":888,"context_line":""},{"line_number":889,"context_line":"            LOG.info(_LI(\u0027Delete Volume %(volume_id)s done\u0027), {"},{"line_number":890,"context_line":"                \u0027volume_id\u0027: volume_id})"},{"line_number":891,"context_line":"        else:"},{"line_number":892,"context_line":"            msg \u003d _(\u0027Failed to delete volume \u0027"}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_32b25507","line":889,"in_reply_to":"fa32b979_99d4bd47","updated":"2015-06-17 03:48:47.000000000","message":"Done","commit_id":"9d6cdb555ce292d17a644c1d5b9110519cd52734"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"2bb4337658c42f843f0411ad68e124ea0ff0818d","unresolved":false,"context_lines":[{"line_number":938,"context_line":""},{"line_number":939,"context_line":"        model_update \u003d self._create_volume_from_volume(volume, src_part_id)"},{"line_number":940,"context_line":""},{"line_number":941,"context_line":"        LOG.info(_LI(\u0027Create Cloned Volume %(volume_id)s done\u0027), {"},{"line_number":942,"context_line":"            \u0027volume_id\u0027: volume[\u0027id\u0027]})"},{"line_number":943,"context_line":"        return model_update"},{"line_number":944,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_f94ce943","line":941,"updated":"2015-06-16 18:12:10.000000000","message":"\u0027Create Cloned Volume %(volume_id)s completed.\u0027","commit_id":"9d6cdb555ce292d17a644c1d5b9110519cd52734"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"24143903921844f7ea5562e484be09d545af3d27","unresolved":false,"context_lines":[{"line_number":938,"context_line":""},{"line_number":939,"context_line":"        model_update \u003d self._create_volume_from_volume(volume, src_part_id)"},{"line_number":940,"context_line":""},{"line_number":941,"context_line":"        LOG.info(_LI(\u0027Create Cloned Volume %(volume_id)s done\u0027), {"},{"line_number":942,"context_line":"            \u0027volume_id\u0027: volume[\u0027id\u0027]})"},{"line_number":943,"context_line":"        return model_update"},{"line_number":944,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_b2c66566","line":941,"in_reply_to":"fa32b979_f94ce943","updated":"2015-06-17 03:48:47.000000000","message":"Done","commit_id":"9d6cdb555ce292d17a644c1d5b9110519cd52734"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"2bb4337658c42f843f0411ad68e124ea0ff0818d","unresolved":false,"context_lines":[{"line_number":990,"context_line":"    def create_export(self, context, volume):"},{"line_number":991,"context_line":"        model_update \u003d volume[\u0027provider_location\u0027]"},{"line_number":992,"context_line":""},{"line_number":993,"context_line":"        LOG.info(_LI(\u0027Create export done from Volume %(volume_id)s\u0027), {"},{"line_number":994,"context_line":"            \u0027volume_id\u0027: volume[\u0027id\u0027]})"},{"line_number":995,"context_line":""},{"line_number":996,"context_line":"        return {\u0027provider_location\u0027: model_update}"}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_99627dac","line":993,"updated":"2015-06-16 18:12:10.000000000","message":"\u0027.\u0027 at EOL","commit_id":"9d6cdb555ce292d17a644c1d5b9110519cd52734"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"24143903921844f7ea5562e484be09d545af3d27","unresolved":false,"context_lines":[{"line_number":990,"context_line":"    def create_export(self, context, volume):"},{"line_number":991,"context_line":"        model_update \u003d volume[\u0027provider_location\u0027]"},{"line_number":992,"context_line":""},{"line_number":993,"context_line":"        LOG.info(_LI(\u0027Create export done from Volume %(volume_id)s\u0027), {"},{"line_number":994,"context_line":"            \u0027volume_id\u0027: volume[\u0027id\u0027]})"},{"line_number":995,"context_line":""},{"line_number":996,"context_line":"        return {\u0027provider_location\u0027: model_update}"}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_d2c3e955","line":993,"in_reply_to":"fa32b979_99627dac","updated":"2015-06-17 03:48:47.000000000","message":"Done","commit_id":"9d6cdb555ce292d17a644c1d5b9110519cd52734"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"2bb4337658c42f843f0411ad68e124ea0ff0818d","unresolved":false,"context_lines":[{"line_number":1081,"context_line":"        snapshot_id \u003d snapshot[\u0027id\u0027].replace(\u0027-\u0027, \u0027\u0027)"},{"line_number":1082,"context_line":"        volume_id \u003d snapshot[\u0027volume_id\u0027].replace(\u0027-\u0027, \u0027\u0027)"},{"line_number":1083,"context_line":""},{"line_number":1084,"context_line":"        LOG.debug(\u0027Create Snapshot %(snapshot)s volume %(volume)s\u0027,"},{"line_number":1085,"context_line":"                  {\u0027snapshot\u0027: snapshot_id, \u0027volume\u0027: volume_id})"},{"line_number":1086,"context_line":""},{"line_number":1087,"context_line":"        model_update \u003d {}"}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_b96d019a","line":1084,"updated":"2015-06-16 18:12:10.000000000","message":"\u0027Create Snapshot %(snapshot)s for volume %(volume)s.\u0027","commit_id":"9d6cdb555ce292d17a644c1d5b9110519cd52734"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"24143903921844f7ea5562e484be09d545af3d27","unresolved":false,"context_lines":[{"line_number":1081,"context_line":"        snapshot_id \u003d snapshot[\u0027id\u0027].replace(\u0027-\u0027, \u0027\u0027)"},{"line_number":1082,"context_line":"        volume_id \u003d snapshot[\u0027volume_id\u0027].replace(\u0027-\u0027, \u0027\u0027)"},{"line_number":1083,"context_line":""},{"line_number":1084,"context_line":"        LOG.debug(\u0027Create Snapshot %(snapshot)s volume %(volume)s\u0027,"},{"line_number":1085,"context_line":"                  {\u0027snapshot\u0027: snapshot_id, \u0027volume\u0027: volume_id})"},{"line_number":1086,"context_line":""},{"line_number":1087,"context_line":"        model_update \u003d {}"}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_f2970d46","line":1084,"in_reply_to":"fa32b979_b96d019a","updated":"2015-06-17 03:48:47.000000000","message":"Done","commit_id":"9d6cdb555ce292d17a644c1d5b9110519cd52734"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"2bb4337658c42f843f0411ad68e124ea0ff0818d","unresolved":false,"context_lines":[{"line_number":1155,"context_line":"        if \u0027provider_location\u0027 not in snapshot:"},{"line_number":1156,"context_line":"            LOG.warning(_LW("},{"line_number":1157,"context_line":"                \u0027Failed to get Raid Snapshot ID and \u0027"},{"line_number":1158,"context_line":"                \u0027did not store in snapshot\u0027))"},{"line_number":1159,"context_line":"            return"},{"line_number":1160,"context_line":"        return snapshot[\u0027provider_location\u0027]"},{"line_number":1161,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_b9a0a1a0","line":1158,"updated":"2015-06-16 18:12:10.000000000","message":"\u0027.\u0027 at EOL","commit_id":"9d6cdb555ce292d17a644c1d5b9110519cd52734"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"24143903921844f7ea5562e484be09d545af3d27","unresolved":false,"context_lines":[{"line_number":1155,"context_line":"        if \u0027provider_location\u0027 not in snapshot:"},{"line_number":1156,"context_line":"            LOG.warning(_LW("},{"line_number":1157,"context_line":"                \u0027Failed to get Raid Snapshot ID and \u0027"},{"line_number":1158,"context_line":"                \u0027did not store in snapshot\u0027))"},{"line_number":1159,"context_line":"            return"},{"line_number":1160,"context_line":"        return snapshot[\u0027provider_location\u0027]"},{"line_number":1161,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_52859904","line":1158,"in_reply_to":"fa32b979_b9a0a1a0","updated":"2015-06-17 03:48:47.000000000","message":"Done","commit_id":"9d6cdb555ce292d17a644c1d5b9110519cd52734"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"2bb4337658c42f843f0411ad68e124ea0ff0818d","unresolved":false,"context_lines":[{"line_number":1202,"context_line":""},{"line_number":1203,"context_line":"        LOG.info(_LI("},{"line_number":1204,"context_line":"            \u0027Create Volume %(volume_id)s from \u0027"},{"line_number":1205,"context_line":"            \u0027snapshot %(snapshot_id)s done\u0027), {"},{"line_number":1206,"context_line":"                \u0027volume_id\u0027: volume[\u0027id\u0027],"},{"line_number":1207,"context_line":"                \u0027snapshot_id\u0027: snapshot[\u0027id\u0027]})"},{"line_number":1208,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_19c74d46","line":1205,"updated":"2015-06-16 18:12:10.000000000","message":"done-\u003e completed.","commit_id":"9d6cdb555ce292d17a644c1d5b9110519cd52734"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"24143903921844f7ea5562e484be09d545af3d27","unresolved":false,"context_lines":[{"line_number":1202,"context_line":""},{"line_number":1203,"context_line":"        LOG.info(_LI("},{"line_number":1204,"context_line":"            \u0027Create Volume %(volume_id)s from \u0027"},{"line_number":1205,"context_line":"            \u0027snapshot %(snapshot_id)s done\u0027), {"},{"line_number":1206,"context_line":"                \u0027volume_id\u0027: volume[\u0027id\u0027],"},{"line_number":1207,"context_line":"                \u0027snapshot_id\u0027: snapshot[\u0027id\u0027]})"},{"line_number":1208,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_92e481e1","line":1205,"in_reply_to":"fa32b979_19c74d46","updated":"2015-06-17 03:48:47.000000000","message":"Done","commit_id":"9d6cdb555ce292d17a644c1d5b9110519cd52734"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"2bb4337658c42f843f0411ad68e124ea0ff0818d","unresolved":false,"context_lines":[{"line_number":1261,"context_line":"            return self._initialize_connection_fc("},{"line_number":1262,"context_line":"                volume, connector)"},{"line_number":1263,"context_line":"        else:"},{"line_number":1264,"context_line":"            msg \u003d _(\u0027Unknown protocol\u0027)"},{"line_number":1265,"context_line":"            LOG.error(msg)"},{"line_number":1266,"context_line":"            raise exception.VolumeDriverException(message\u003dmsg)"},{"line_number":1267,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_f9270910","line":1264,"updated":"2015-06-16 18:12:10.000000000","message":"Suggest \u0027Unknown protocol: %s\u0027 % self.protocol.\n\nWill aid in debug if some just fat fingered the entry or something like that.","commit_id":"9d6cdb555ce292d17a644c1d5b9110519cd52734"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"24143903921844f7ea5562e484be09d545af3d27","unresolved":false,"context_lines":[{"line_number":1261,"context_line":"            return self._initialize_connection_fc("},{"line_number":1262,"context_line":"                volume, connector)"},{"line_number":1263,"context_line":"        else:"},{"line_number":1264,"context_line":"            msg \u003d _(\u0027Unknown protocol\u0027)"},{"line_number":1265,"context_line":"            LOG.error(msg)"},{"line_number":1266,"context_line":"            raise exception.VolumeDriverException(message\u003dmsg)"},{"line_number":1267,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_72069d87","line":1264,"in_reply_to":"fa32b979_f9270910","updated":"2015-06-17 03:48:47.000000000","message":"Done","commit_id":"9d6cdb555ce292d17a644c1d5b9110519cd52734"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"2bb4337658c42f843f0411ad68e124ea0ff0818d","unresolved":false,"context_lines":[{"line_number":1276,"context_line":"        properties \u003d self._generate_fc_connection_properties("},{"line_number":1277,"context_line":"            map_lun, target_wwpns, initiator_target_map)"},{"line_number":1278,"context_line":""},{"line_number":1279,"context_line":"        LOG.info(_LI(\u0027Successfully initialize connection \u0027"},{"line_number":1280,"context_line":"                     \u0027target_wwn: %(target_wwn)s \u0027"},{"line_number":1281,"context_line":"                     \u0027initiator_target_map: %(initiator_target_map)s \u0027"},{"line_number":1282,"context_line":"                     \u0027lun: %(target_lun)s \u0027), properties[\u0027data\u0027])"}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_997d9de9","line":1279,"updated":"2015-06-16 18:12:10.000000000","message":"initialize -\u003e initialized","commit_id":"9d6cdb555ce292d17a644c1d5b9110519cd52734"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"24143903921844f7ea5562e484be09d545af3d27","unresolved":false,"context_lines":[{"line_number":1276,"context_line":"        properties \u003d self._generate_fc_connection_properties("},{"line_number":1277,"context_line":"            map_lun, target_wwpns, initiator_target_map)"},{"line_number":1278,"context_line":""},{"line_number":1279,"context_line":"        LOG.info(_LI(\u0027Successfully initialize connection \u0027"},{"line_number":1280,"context_line":"                     \u0027target_wwn: %(target_wwn)s \u0027"},{"line_number":1281,"context_line":"                     \u0027initiator_target_map: %(initiator_target_map)s \u0027"},{"line_number":1282,"context_line":"                     \u0027lun: %(target_lun)s \u0027), properties[\u0027data\u0027])"}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_32fc9571","line":1279,"in_reply_to":"fa32b979_997d9de9","updated":"2015-06-17 03:48:47.000000000","message":"Done","commit_id":"9d6cdb555ce292d17a644c1d5b9110519cd52734"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"2bb4337658c42f843f0411ad68e124ea0ff0818d","unresolved":false,"context_lines":[{"line_number":1384,"context_line":"        if ip is None:"},{"line_number":1385,"context_line":"            msg \u003d _("},{"line_number":1386,"context_line":"                \u0027Failed to get ip on Channel %(channel_id)s \u0027"},{"line_number":1387,"context_line":"                \u0027with volume_id %(volume_id)s\u0027) % {"},{"line_number":1388,"context_line":"                    \u0027channel_id\u0027: channel_id, \u0027volume_id\u0027: volume_id}"},{"line_number":1389,"context_line":"            LOG.error(msg)"},{"line_number":1390,"context_line":"            raise exception.VolumeDriverException(message\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_19ff4d35","line":1387,"updated":"2015-06-16 18:12:10.000000000","message":"\u0027.\u0027 at EOL","commit_id":"9d6cdb555ce292d17a644c1d5b9110519cd52734"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"24143903921844f7ea5562e484be09d545af3d27","unresolved":false,"context_lines":[{"line_number":1384,"context_line":"        if ip is None:"},{"line_number":1385,"context_line":"            msg \u003d _("},{"line_number":1386,"context_line":"                \u0027Failed to get ip on Channel %(channel_id)s \u0027"},{"line_number":1387,"context_line":"                \u0027with volume_id %(volume_id)s\u0027) % {"},{"line_number":1388,"context_line":"                    \u0027channel_id\u0027: channel_id, \u0027volume_id\u0027: volume_id}"},{"line_number":1389,"context_line":"            LOG.error(msg)"},{"line_number":1390,"context_line":"            raise exception.VolumeDriverException(message\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_b2f0a592","line":1387,"in_reply_to":"fa32b979_19ff4d35","updated":"2015-06-17 03:48:47.000000000","message":"Done","commit_id":"9d6cdb555ce292d17a644c1d5b9110519cd52734"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"2bb4337658c42f843f0411ad68e124ea0ff0818d","unresolved":false,"context_lines":[{"line_number":1401,"context_line":""},{"line_number":1402,"context_line":"        properties \u003d self._generate_iscsi_connection_properties("},{"line_number":1403,"context_line":"            property_value, volume)"},{"line_number":1404,"context_line":"        LOG.info(_LI(\u0027Successfully initialize connection \u0027"},{"line_number":1405,"context_line":"                     \u0027volume: %(volume_id)s\u0027), properties[\u0027data\u0027])"},{"line_number":1406,"context_line":"        return properties"},{"line_number":1407,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_d98fa5ca","line":1404,"updated":"2015-06-16 18:12:10.000000000","message":"initialize -\u003e initialized and \u0027.\u0027 at EOL","commit_id":"9d6cdb555ce292d17a644c1d5b9110519cd52734"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"24143903921844f7ea5562e484be09d545af3d27","unresolved":false,"context_lines":[{"line_number":1401,"context_line":""},{"line_number":1402,"context_line":"        properties \u003d self._generate_iscsi_connection_properties("},{"line_number":1403,"context_line":"            property_value, volume)"},{"line_number":1404,"context_line":"        LOG.info(_LI(\u0027Successfully initialize connection \u0027"},{"line_number":1405,"context_line":"                     \u0027volume: %(volume_id)s\u0027), properties[\u0027data\u0027])"},{"line_number":1406,"context_line":"        return properties"},{"line_number":1407,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_12f8717a","line":1404,"in_reply_to":"fa32b979_d98fa5ca","updated":"2015-06-17 03:48:47.000000000","message":"Done","commit_id":"9d6cdb555ce292d17a644c1d5b9110519cd52734"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"2bb4337658c42f843f0411ad68e124ea0ff0818d","unresolved":false,"context_lines":[{"line_number":1499,"context_line":"            discovery_exist \u003d True"},{"line_number":1500,"context_line":""},{"line_number":1501,"context_line":"        if not discovery_exist:"},{"line_number":1502,"context_line":"            msg \u003d _(\u0027Could not find iSCSI target for %(volume_id)s\u0027) % {"},{"line_number":1503,"context_line":"                \u0027volume_id\u0027: volume[\u0027id\u0027]}"},{"line_number":1504,"context_line":"            LOG.error(msg)"},{"line_number":1505,"context_line":"            raise exception.VolumeDriverException(message\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_8b51c010","line":1502,"updated":"2015-06-16 18:12:10.000000000","message":"\u0027.\u0027 at EOL","commit_id":"9d6cdb555ce292d17a644c1d5b9110519cd52734"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"24143903921844f7ea5562e484be09d545af3d27","unresolved":false,"context_lines":[{"line_number":1499,"context_line":"            discovery_exist \u003d True"},{"line_number":1500,"context_line":""},{"line_number":1501,"context_line":"        if not discovery_exist:"},{"line_number":1502,"context_line":"            msg \u003d _(\u0027Could not find iSCSI target for %(volume_id)s\u0027) % {"},{"line_number":1503,"context_line":"                \u0027volume_id\u0027: volume[\u0027id\u0027]}"},{"line_number":1504,"context_line":"            LOG.error(msg)"},{"line_number":1505,"context_line":"            raise exception.VolumeDriverException(message\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_320a557a","line":1502,"in_reply_to":"fa32b979_8b51c010","updated":"2015-06-17 03:48:47.000000000","message":"Done","commit_id":"9d6cdb555ce292d17a644c1d5b9110519cd52734"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"2bb4337658c42f843f0411ad68e124ea0ff0818d","unresolved":false,"context_lines":[{"line_number":1531,"context_line":""},{"line_number":1532,"context_line":"        if rc !\u003d 0:"},{"line_number":1533,"context_line":"            LOG.error(_LE("},{"line_number":1534,"context_line":"                \u0027Can not discovery in %(target_ip)s with %(target_iqn)s\u0027), {"},{"line_number":1535,"context_line":"                    \u0027target_ip\u0027: target_ip, \u0027target_iqn\u0027: target_iqn})"},{"line_number":1536,"context_line":"            return False"},{"line_number":1537,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_0b3e10b8","line":1534,"updated":"2015-06-16 18:12:10.000000000","message":"\u0027.\u0027 at EOL","commit_id":"9d6cdb555ce292d17a644c1d5b9110519cd52734"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"24143903921844f7ea5562e484be09d545af3d27","unresolved":false,"context_lines":[{"line_number":1531,"context_line":""},{"line_number":1532,"context_line":"        if rc !\u003d 0:"},{"line_number":1533,"context_line":"            LOG.error(_LE("},{"line_number":1534,"context_line":"                \u0027Can not discovery in %(target_ip)s with %(target_iqn)s\u0027), {"},{"line_number":1535,"context_line":"                    \u0027target_ip\u0027: target_ip, \u0027target_iqn\u0027: target_iqn})"},{"line_number":1536,"context_line":"            return False"},{"line_number":1537,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_520fd987","line":1534,"in_reply_to":"fa32b979_0b3e10b8","updated":"2015-06-17 03:48:47.000000000","message":"Done","commit_id":"9d6cdb555ce292d17a644c1d5b9110519cd52734"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"2bb4337658c42f843f0411ad68e124ea0ff0818d","unresolved":false,"context_lines":[{"line_number":1560,"context_line":"        self._execute(\u0027SetPartition\u0027, \u0027expand\u0027, part_id, expand_command)"},{"line_number":1561,"context_line":""},{"line_number":1562,"context_line":"        LOG.info(_LI("},{"line_number":1563,"context_line":"            \u0027Successfully extended volume %(volume_id)s \u0027"},{"line_number":1564,"context_line":"            \u0027size %(size)s\u0027), {"},{"line_number":1565,"context_line":"                \u0027volume_id\u0027: volume[\u0027id\u0027], \u0027size\u0027: new_size})"},{"line_number":1566,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_0b65b0df","line":1563,"updated":"2015-06-16 18:12:10.000000000","message":"Successfully extended volume %(volume_id)s to size %(size)s .\"","commit_id":"9d6cdb555ce292d17a644c1d5b9110519cd52734"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"24143903921844f7ea5562e484be09d545af3d27","unresolved":false,"context_lines":[{"line_number":1560,"context_line":"        self._execute(\u0027SetPartition\u0027, \u0027expand\u0027, part_id, expand_command)"},{"line_number":1561,"context_line":""},{"line_number":1562,"context_line":"        LOG.info(_LI("},{"line_number":1563,"context_line":"            \u0027Successfully extended volume %(volume_id)s \u0027"},{"line_number":1564,"context_line":"            \u0027size %(size)s\u0027), {"},{"line_number":1565,"context_line":"                \u0027volume_id\u0027: volume[\u0027id\u0027], \u0027size\u0027: new_size})"},{"line_number":1566,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_d21be9c8","line":1563,"in_reply_to":"fa32b979_0b65b0df","updated":"2015-06-17 03:48:47.000000000","message":"Done","commit_id":"9d6cdb555ce292d17a644c1d5b9110519cd52734"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"2bb4337658c42f843f0411ad68e124ea0ff0818d","unresolved":false,"context_lines":[{"line_number":1597,"context_line":"                conn_info[\u0027data\u0027][\u0027initiator_target_map\u0027] \u003d init_target_map"},{"line_number":1598,"context_line":""},{"line_number":1599,"context_line":"        LOG.info(_LI("},{"line_number":1600,"context_line":"            \u0027Successfully terminated connection for volume %(volume_id)s\u0027), {"},{"line_number":1601,"context_line":"                \u0027volume_id\u0027: volume[\u0027id\u0027]})"},{"line_number":1602,"context_line":""},{"line_number":1603,"context_line":"        return conn_info"}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_6b831c57","line":1600,"updated":"2015-06-16 18:12:10.000000000","message":"\u0027.\u0027 at EOL","commit_id":"9d6cdb555ce292d17a644c1d5b9110519cd52734"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"24143903921844f7ea5562e484be09d545af3d27","unresolved":false,"context_lines":[{"line_number":1597,"context_line":"                conn_info[\u0027data\u0027][\u0027initiator_target_map\u0027] \u003d init_target_map"},{"line_number":1598,"context_line":""},{"line_number":1599,"context_line":"        LOG.info(_LI("},{"line_number":1600,"context_line":"            \u0027Successfully terminated connection for volume %(volume_id)s\u0027), {"},{"line_number":1601,"context_line":"                \u0027volume_id\u0027: volume[\u0027id\u0027]})"},{"line_number":1602,"context_line":""},{"line_number":1603,"context_line":"        return conn_info"}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_12b07189","line":1600,"in_reply_to":"fa32b979_6b831c57","updated":"2015-06-17 03:48:47.000000000","message":"Done","commit_id":"9d6cdb555ce292d17a644c1d5b9110519cd52734"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"2bb4337658c42f843f0411ad68e124ea0ff0818d","unresolved":false,"context_lines":[{"line_number":1616,"context_line":"            \"provider_location\": self._concat_provider_location(model_dict),"},{"line_number":1617,"context_line":"        }"},{"line_number":1618,"context_line":""},{"line_number":1619,"context_line":"        LOG.info(_LI(\u0027Migrate Volume %(volume_id)s done\u0027), {"},{"line_number":1620,"context_line":"            \u0027volume_id\u0027: volume[\u0027id\u0027]})"},{"line_number":1621,"context_line":""},{"line_number":1622,"context_line":"        return (True, model_update)"}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_0bda9078","line":1619,"updated":"2015-06-16 18:12:10.000000000","message":"done -\u003e completed.","commit_id":"9d6cdb555ce292d17a644c1d5b9110519cd52734"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"24143903921844f7ea5562e484be09d545af3d27","unresolved":false,"context_lines":[{"line_number":1616,"context_line":"            \"provider_location\": self._concat_provider_location(model_dict),"},{"line_number":1617,"context_line":"        }"},{"line_number":1618,"context_line":""},{"line_number":1619,"context_line":"        LOG.info(_LI(\u0027Migrate Volume %(volume_id)s done\u0027), {"},{"line_number":1620,"context_line":"            \u0027volume_id\u0027: volume[\u0027id\u0027]})"},{"line_number":1621,"context_line":""},{"line_number":1622,"context_line":"        return (True, model_update)"}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_d2720911","line":1619,"in_reply_to":"fa32b979_0bda9078","updated":"2015-06-17 03:48:47.000000000","message":"Done","commit_id":"9d6cdb555ce292d17a644c1d5b9110519cd52734"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"2bb4337658c42f843f0411ad68e124ea0ff0818d","unresolved":false,"context_lines":[{"line_number":1623,"context_line":""},{"line_number":1624,"context_line":"    def _is_valid_for_storage_assisted_migration(self, host):"},{"line_number":1625,"context_line":"        if \u0027pool_id\u0027 not in host[\u0027capabilities\u0027]:"},{"line_number":1626,"context_line":"            LOG.warning(_LW(\u0027Failed to get target pool id\u0027))"},{"line_number":1627,"context_line":"            return (False, None)"},{"line_number":1628,"context_line":""},{"line_number":1629,"context_line":"        dst_pool_id \u003d host[\u0027capabilities\u0027][\u0027pool_id\u0027]"}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_cbe34832","line":1626,"updated":"2015-06-16 18:12:10.000000000","message":"\u0027.\u0027 at EOL","commit_id":"9d6cdb555ce292d17a644c1d5b9110519cd52734"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"24143903921844f7ea5562e484be09d545af3d27","unresolved":false,"context_lines":[{"line_number":1623,"context_line":""},{"line_number":1624,"context_line":"    def _is_valid_for_storage_assisted_migration(self, host):"},{"line_number":1625,"context_line":"        if \u0027pool_id\u0027 not in host[\u0027capabilities\u0027]:"},{"line_number":1626,"context_line":"            LOG.warning(_LW(\u0027Failed to get target pool id\u0027))"},{"line_number":1627,"context_line":"            return (False, None)"},{"line_number":1628,"context_line":""},{"line_number":1629,"context_line":"        dst_pool_id \u003d host[\u0027capabilities\u0027][\u0027pool_id\u0027]"}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_9267a14c","line":1626,"in_reply_to":"fa32b979_cbe34832","updated":"2015-06-17 03:48:47.000000000","message":"Done","commit_id":"9d6cdb555ce292d17a644c1d5b9110519cd52734"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"2bb4337658c42f843f0411ad68e124ea0ff0818d","unresolved":false,"context_lines":[{"line_number":1696,"context_line":"                raise loopingcall.LoopingCallDone()"},{"line_number":1697,"context_line":""},{"line_number":1698,"context_line":"            if int(time.time()) - start_time \u003e timeout:"},{"line_number":1699,"context_line":"                msg \u003d (_(\u0027Wait replica complete timeout\u0027))"},{"line_number":1700,"context_line":"                LOG.error(msg)"},{"line_number":1701,"context_line":"                raise exception.VolumeDriverException(message\u003dmsg)"},{"line_number":1702,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_2b42f410","line":1699,"updated":"2015-06-16 18:12:10.000000000","message":"\u0027.\u0027 at EOL","commit_id":"9d6cdb555ce292d17a644c1d5b9110519cd52734"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"24143903921844f7ea5562e484be09d545af3d27","unresolved":false,"context_lines":[{"line_number":1696,"context_line":"                raise loopingcall.LoopingCallDone()"},{"line_number":1697,"context_line":""},{"line_number":1698,"context_line":"            if int(time.time()) - start_time \u003e timeout:"},{"line_number":1699,"context_line":"                msg \u003d (_(\u0027Wait replica complete timeout\u0027))"},{"line_number":1700,"context_line":"                LOG.error(msg)"},{"line_number":1701,"context_line":"                raise exception.VolumeDriverException(message\u003dmsg)"},{"line_number":1702,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_3258158a","line":1699,"in_reply_to":"fa32b979_2b42f410","updated":"2015-06-17 03:48:47.000000000","message":"Done","commit_id":"9d6cdb555ce292d17a644c1d5b9110519cd52734"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"2bb4337658c42f843f0411ad68e124ea0ff0818d","unresolved":false,"context_lines":[{"line_number":1757,"context_line":""},{"line_number":1758,"context_line":"        self._execute(\u0027SetPartition\u0027, part_entry[\u0027ID\u0027], \u0027name\u003d%s\u0027 % volume_id)"},{"line_number":1759,"context_line":""},{"line_number":1760,"context_line":"        LOG.info(_LI(\u0027Rename Volume %(volume_id)s done\u0027), {"},{"line_number":1761,"context_line":"            \u0027volume_id\u0027: volume[\u0027id\u0027]})"},{"line_number":1762,"context_line":""},{"line_number":1763,"context_line":"    def unmanage(self, volume):"}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_ab6da499","line":1760,"updated":"2015-06-16 18:12:10.000000000","message":"done -\u003e completed.","commit_id":"9d6cdb555ce292d17a644c1d5b9110519cd52734"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"24143903921844f7ea5562e484be09d545af3d27","unresolved":false,"context_lines":[{"line_number":1757,"context_line":""},{"line_number":1758,"context_line":"        self._execute(\u0027SetPartition\u0027, part_entry[\u0027ID\u0027], \u0027name\u003d%s\u0027 % volume_id)"},{"line_number":1759,"context_line":""},{"line_number":1760,"context_line":"        LOG.info(_LI(\u0027Rename Volume %(volume_id)s done\u0027), {"},{"line_number":1761,"context_line":"            \u0027volume_id\u0027: volume[\u0027id\u0027]})"},{"line_number":1762,"context_line":""},{"line_number":1763,"context_line":"    def unmanage(self, volume):"}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_f2562d5b","line":1760,"in_reply_to":"fa32b979_ab6da499","updated":"2015-06-17 03:48:47.000000000","message":"Done","commit_id":"9d6cdb555ce292d17a644c1d5b9110519cd52734"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"2bb4337658c42f843f0411ad68e124ea0ff0818d","unresolved":false,"context_lines":[{"line_number":1771,"context_line":"        commands \u003d (part_id, \u0027name\u003dcinder-unmanaged-%s\u0027 % volume_id[:-17])"},{"line_number":1772,"context_line":"        self._execute(\u0027SetPartition\u0027, *commands)"},{"line_number":1773,"context_line":""},{"line_number":1774,"context_line":"        LOG.info(_LI(\u0027Unmanage volume %(volume_id)s done.\u0027), {"},{"line_number":1775,"context_line":"            \u0027volume_id\u0027: volume_id})"},{"line_number":1776,"context_line":""},{"line_number":1777,"context_line":"    def _get_specific_volume_dict(self, volume_id):"}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_4b13b80d","line":1774,"updated":"2015-06-16 18:12:10.000000000","message":"done. -\u003e completed.","commit_id":"9d6cdb555ce292d17a644c1d5b9110519cd52734"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"24143903921844f7ea5562e484be09d545af3d27","unresolved":false,"context_lines":[{"line_number":1771,"context_line":"        commands \u003d (part_id, \u0027name\u003dcinder-unmanaged-%s\u0027 % volume_id[:-17])"},{"line_number":1772,"context_line":"        self._execute(\u0027SetPartition\u0027, *commands)"},{"line_number":1773,"context_line":""},{"line_number":1774,"context_line":"        LOG.info(_LI(\u0027Unmanage volume %(volume_id)s done.\u0027), {"},{"line_number":1775,"context_line":"            \u0027volume_id\u0027: volume_id})"},{"line_number":1776,"context_line":""},{"line_number":1777,"context_line":"    def _get_specific_volume_dict(self, volume_id):"}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_72c9bd25","line":1774,"in_reply_to":"fa32b979_4b13b80d","updated":"2015-06-17 03:48:47.000000000","message":"Done","commit_id":"9d6cdb555ce292d17a644c1d5b9110519cd52734"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"2bb4337658c42f843f0411ad68e124ea0ff0818d","unresolved":false,"context_lines":[{"line_number":1851,"context_line":""},{"line_number":1852,"context_line":"            if rc:"},{"line_number":1853,"context_line":"                LOG.info(_LI("},{"line_number":1854,"context_line":"                    \u0027Retype Volume %(volume_id)s is done. \u0027"},{"line_number":1855,"context_line":"                    \u0027and migrate to pool %(pool_id)s\u0027), {"},{"line_number":1856,"context_line":"                        \u0027volume_id\u0027: volume[\u0027id\u0027],"},{"line_number":1857,"context_line":"                        \u0027pool_id\u0027: host[\u0027capabilities\u0027][\u0027pool_id\u0027]})"}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_eb216c4e","line":1854,"updated":"2015-06-16 18:12:10.000000000","message":"remove \u0027.\u0027 at EOL","commit_id":"9d6cdb555ce292d17a644c1d5b9110519cd52734"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"24143903921844f7ea5562e484be09d545af3d27","unresolved":false,"context_lines":[{"line_number":1851,"context_line":""},{"line_number":1852,"context_line":"            if rc:"},{"line_number":1853,"context_line":"                LOG.info(_LI("},{"line_number":1854,"context_line":"                    \u0027Retype Volume %(volume_id)s is done. \u0027"},{"line_number":1855,"context_line":"                    \u0027and migrate to pool %(pool_id)s\u0027), {"},{"line_number":1856,"context_line":"                        \u0027volume_id\u0027: volume[\u0027id\u0027],"},{"line_number":1857,"context_line":"                        \u0027pool_id\u0027: host[\u0027capabilities\u0027][\u0027pool_id\u0027]})"}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_52d4b9bb","line":1854,"in_reply_to":"fa32b979_eb216c4e","updated":"2015-06-17 03:48:47.000000000","message":"Done","commit_id":"9d6cdb555ce292d17a644c1d5b9110519cd52734"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"2bb4337658c42f843f0411ad68e124ea0ff0818d","unresolved":false,"context_lines":[{"line_number":1852,"context_line":"            if rc:"},{"line_number":1853,"context_line":"                LOG.info(_LI("},{"line_number":1854,"context_line":"                    \u0027Retype Volume %(volume_id)s is done. \u0027"},{"line_number":1855,"context_line":"                    \u0027and migrate to pool %(pool_id)s\u0027), {"},{"line_number":1856,"context_line":"                        \u0027volume_id\u0027: volume[\u0027id\u0027],"},{"line_number":1857,"context_line":"                        \u0027pool_id\u0027: host[\u0027capabilities\u0027][\u0027pool_id\u0027]})"},{"line_number":1858,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_2bde743f","line":1855,"updated":"2015-06-16 18:12:10.000000000","message":"migrate -\u003e migrated\n\u0027.\u0027 at EOL here","commit_id":"9d6cdb555ce292d17a644c1d5b9110519cd52734"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"24143903921844f7ea5562e484be09d545af3d27","unresolved":false,"context_lines":[{"line_number":1852,"context_line":"            if rc:"},{"line_number":1853,"context_line":"                LOG.info(_LI("},{"line_number":1854,"context_line":"                    \u0027Retype Volume %(volume_id)s is done. \u0027"},{"line_number":1855,"context_line":"                    \u0027and migrate to pool %(pool_id)s\u0027), {"},{"line_number":1856,"context_line":"                        \u0027volume_id\u0027: volume[\u0027id\u0027],"},{"line_number":1857,"context_line":"                        \u0027pool_id\u0027: host[\u0027capabilities\u0027][\u0027pool_id\u0027]})"},{"line_number":1858,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_f2ddcde0","line":1855,"in_reply_to":"fa32b979_2bde743f","updated":"2015-06-17 03:48:47.000000000","message":"Done","commit_id":"9d6cdb555ce292d17a644c1d5b9110519cd52734"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"2bb4337658c42f843f0411ad68e124ea0ff0818d","unresolved":false,"context_lines":[{"line_number":1869,"context_line":"                            diff[\u0027extra_specs\u0027][\u0027infortrend_provisioning\u0027][1]})"},{"line_number":1870,"context_line":"                return False"},{"line_number":1871,"context_line":""},{"line_number":1872,"context_line":"            LOG.info(_LI(\u0027Retype Volume %(volume_id)s is done\u0027), {"},{"line_number":1873,"context_line":"                \u0027volume_id\u0027: volume[\u0027id\u0027]})"},{"line_number":1874,"context_line":"            return True"},{"line_number":1875,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_4baf3894","line":1872,"updated":"2015-06-16 18:12:10.000000000","message":"is done-\u003e completed.","commit_id":"9d6cdb555ce292d17a644c1d5b9110519cd52734"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"24143903921844f7ea5562e484be09d545af3d27","unresolved":false,"context_lines":[{"line_number":1869,"context_line":"                            diff[\u0027extra_specs\u0027][\u0027infortrend_provisioning\u0027][1]})"},{"line_number":1870,"context_line":"                return False"},{"line_number":1871,"context_line":""},{"line_number":1872,"context_line":"            LOG.info(_LI(\u0027Retype Volume %(volume_id)s is done\u0027), {"},{"line_number":1873,"context_line":"                \u0027volume_id\u0027: volume[\u0027id\u0027]})"},{"line_number":1874,"context_line":"            return True"},{"line_number":1875,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_d2e0c998","line":1872,"in_reply_to":"fa32b979_4baf3894","updated":"2015-06-17 03:48:47.000000000","message":"Done","commit_id":"9d6cdb555ce292d17a644c1d5b9110519cd52734"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"2bb4337658c42f843f0411ad68e124ea0ff0818d","unresolved":false,"context_lines":[{"line_number":1886,"context_line":""},{"line_number":1887,"context_line":"        LOG.debug("},{"line_number":1888,"context_line":"            \u0027Rename partition %(part_id)s \u0027"},{"line_number":1889,"context_line":"            \u0027into new volume %(new_volume)s\u0027, {"},{"line_number":1890,"context_line":"                \u0027part_id\u0027: part_id, \u0027new_volume\u0027: dst_volume_id})"},{"line_number":1891,"context_line":""},{"line_number":1892,"context_line":"        self._execute(\u0027SetPartition\u0027, part_id, \u0027name\u003d%s\u0027 % src_volume_id)"}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_eb7dec1c","line":1889,"updated":"2015-06-16 18:12:10.000000000","message":"\u0027.\u0027 at EOL","commit_id":"9d6cdb555ce292d17a644c1d5b9110519cd52734"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"24143903921844f7ea5562e484be09d545af3d27","unresolved":false,"context_lines":[{"line_number":1886,"context_line":""},{"line_number":1887,"context_line":"        LOG.debug("},{"line_number":1888,"context_line":"            \u0027Rename partition %(part_id)s \u0027"},{"line_number":1889,"context_line":"            \u0027into new volume %(new_volume)s\u0027, {"},{"line_number":1890,"context_line":"                \u0027part_id\u0027: part_id, \u0027new_volume\u0027: dst_volume_id})"},{"line_number":1891,"context_line":""},{"line_number":1892,"context_line":"        self._execute(\u0027SetPartition\u0027, part_id, \u0027name\u003d%s\u0027 % src_volume_id)"}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_32e6d5b0","line":1889,"in_reply_to":"fa32b979_eb7dec1c","updated":"2015-06-17 03:48:47.000000000","message":"Done","commit_id":"9d6cdb555ce292d17a644c1d5b9110519cd52734"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"2bb4337658c42f843f0411ad68e124ea0ff0818d","unresolved":false,"context_lines":[{"line_number":1891,"context_line":""},{"line_number":1892,"context_line":"        self._execute(\u0027SetPartition\u0027, part_id, \u0027name\u003d%s\u0027 % src_volume_id)"},{"line_number":1893,"context_line":""},{"line_number":1894,"context_line":"        LOG.info(_LI(\u0027Update migrated volume %(new_volume)s done\u0027), {"},{"line_number":1895,"context_line":"            \u0027new_volume\u0027: new_volume[\u0027id\u0027]})"},{"line_number":1896,"context_line":""},{"line_number":1897,"context_line":"        model_update \u003d {"}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_6b89dc25","line":1894,"updated":"2015-06-16 18:12:10.000000000","message":"done -\u003e completed.","commit_id":"9d6cdb555ce292d17a644c1d5b9110519cd52734"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"24143903921844f7ea5562e484be09d545af3d27","unresolved":false,"context_lines":[{"line_number":1891,"context_line":""},{"line_number":1892,"context_line":"        self._execute(\u0027SetPartition\u0027, part_id, \u0027name\u003d%s\u0027 % src_volume_id)"},{"line_number":1893,"context_line":""},{"line_number":1894,"context_line":"        LOG.info(_LI(\u0027Update migrated volume %(new_volume)s done\u0027), {"},{"line_number":1895,"context_line":"            \u0027new_volume\u0027: new_volume[\u0027id\u0027]})"},{"line_number":1896,"context_line":""},{"line_number":1897,"context_line":"        model_update \u003d {"}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_92f56158","line":1894,"in_reply_to":"fa32b979_6b89dc25","updated":"2015-06-17 03:48:47.000000000","message":"Done","commit_id":"9d6cdb555ce292d17a644c1d5b9110519cd52734"}],"cinder/volume/drivers/infortrend/infortrend_fc_cli.py":[{"author":{"_account_id":6043,"name":"Kurt Martin","email":"kurt.f.martin@hpe.com","username":"kurt-f-martin"},"change_message_id":"58987017fa181ac12e8ce66407e898787e53df40","unresolved":false,"context_lines":[{"line_number":181,"context_line":"                \u0027volume_id\u0027: volume[\u0027id\u0027],"},{"line_number":182,"context_line":"                \u0027initiator\u0027: connector[\u0027initiator\u0027]})"},{"line_number":183,"context_line":"        return self.common.initialize_connection(volume, connector)"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"    def terminate_connection(self, volume, connector, **kwargs):"},{"line_number":186,"context_line":"        \"\"\"Disallow connection from connector\"\"\""},{"line_number":187,"context_line":"        LOG.info(_LI(\u0027terminate_connection volume id\u003d%s\u0027) % ("}],"source_content_type":"text/x-python","patch_set":3,"id":"bab921fb_d1af8628","line":184,"updated":"2015-04-24 23:04:02.000000000","message":"Same here you should look into the the @fczm_utils.RemoveFCZone,","commit_id":"456fe18e13bb91f5a16cdf25b0d9a28e21ac6bcb"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"6f4695c9154bd767618490f4a5192e115d6706a8","unresolved":false,"context_lines":[{"line_number":40,"context_line":"            \u0027FC\u0027, configuration\u003dself.configuration)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def check_for_setup_error(self):"},{"line_number":43,"context_line":"        LOG.debug(_LI(\u0027check_for_setup_error start\u0027))"},{"line_number":44,"context_line":"        self.common.check_for_setup_error()"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def create_volume(self, volume):"}],"source_content_type":"text/x-python","patch_set":5,"id":"7ad32947_ee3fae23","line":43,"updated":"2015-04-28 03:30:26.000000000","message":"LOG.debug doesn\u0027t need _LI","commit_id":"4e21f0d0b065bbd13c717740c6fcda52f05b1b3d"},{"author":{"_account_id":14448,"name":"James.Tsai","email":"jameslovee10@gmail.com","username":"James.Tsai"},"change_message_id":"119996adb5c0c8459b15b4e8eb61ef1788bf9da0","unresolved":false,"context_lines":[{"line_number":40,"context_line":"            \u0027FC\u0027, configuration\u003dself.configuration)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def check_for_setup_error(self):"},{"line_number":43,"context_line":"        LOG.debug(_LI(\u0027check_for_setup_error start\u0027))"},{"line_number":44,"context_line":"        self.common.check_for_setup_error()"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def create_volume(self, volume):"}],"source_content_type":"text/x-python","patch_set":5,"id":"5ad0253b_b841ff3b","line":43,"in_reply_to":"7ad32947_ee3fae23","updated":"2015-04-29 08:22:33.000000000","message":"Done","commit_id":"4e21f0d0b065bbd13c717740c6fcda52f05b1b3d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"6f4695c9154bd767618490f4a5192e115d6706a8","unresolved":false,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def create_volume(self, volume):"},{"line_number":47,"context_line":"        \"\"\"Creates a volume. Can optionally return a Dictionary of"},{"line_number":48,"context_line":"        changes to the volume object to be persisted."},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"        If volume_type extra specs includes"},{"line_number":51,"context_line":"        \u0027capabilities:replication \u003cis\u003e True\u0027 the driver"}],"source_content_type":"text/x-python","patch_set":5,"id":"7ad32947_ae49b6d2","line":48,"updated":"2015-04-28 03:30:26.000000000","message":"See comments on docstring in infortrend_iscsi_cli.py.","commit_id":"4e21f0d0b065bbd13c717740c6fcda52f05b1b3d"},{"author":{"_account_id":14448,"name":"James.Tsai","email":"jameslovee10@gmail.com","username":"James.Tsai"},"change_message_id":"119996adb5c0c8459b15b4e8eb61ef1788bf9da0","unresolved":false,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def create_volume(self, volume):"},{"line_number":47,"context_line":"        \"\"\"Creates a volume. Can optionally return a Dictionary of"},{"line_number":48,"context_line":"        changes to the volume object to be persisted."},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"        If volume_type extra specs includes"},{"line_number":51,"context_line":"        \u0027capabilities:replication \u003cis\u003e True\u0027 the driver"}],"source_content_type":"text/x-python","patch_set":5,"id":"5ad0253b_588d4b7a","line":48,"in_reply_to":"7ad32947_ae49b6d2","updated":"2015-04-29 08:22:33.000000000","message":"Done","commit_id":"4e21f0d0b065bbd13c717740c6fcda52f05b1b3d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"6f4695c9154bd767618490f4a5192e115d6706a8","unresolved":false,"context_lines":[{"line_number":49,"context_line":""},{"line_number":50,"context_line":"        If volume_type extra specs includes"},{"line_number":51,"context_line":"        \u0027capabilities:replication \u003cis\u003e True\u0027 the driver"},{"line_number":52,"context_line":"        needs to create a volume replica (secondary), and setup replication"},{"line_number":53,"context_line":"        between the newly created volume and the secondary volume."},{"line_number":54,"context_line":"        Returned dictionary should include:"},{"line_number":55,"context_line":"            volume[\u0027replication_status\u0027] \u003d \u0027copying\u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"7ad32947_4e7ea2e5","line":52,"updated":"2015-04-28 03:30:26.000000000","message":"See my comments regarding replication in infortrend_iscsi_cli.py.","commit_id":"4e21f0d0b065bbd13c717740c6fcda52f05b1b3d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"6f4695c9154bd767618490f4a5192e115d6706a8","unresolved":false,"context_lines":[{"line_number":63,"context_line":"    def create_volume_from_snapshot(self, volume, snapshot):"},{"line_number":64,"context_line":"        \"\"\"Creates a volume from a snapshot."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        If volume_type extra specs includes \u0027replication: \u003cis\u003e True\u0027"},{"line_number":67,"context_line":"        the driver needs to create a volume replica (secondary),"},{"line_number":68,"context_line":"        and setup replication between the newly created volume and"},{"line_number":69,"context_line":"        the secondary volume."}],"source_content_type":"text/x-python","patch_set":5,"id":"7ad32947_0e88aae6","line":66,"updated":"2015-04-28 03:30:26.000000000","message":"Same here","commit_id":"4e21f0d0b065bbd13c717740c6fcda52f05b1b3d"},{"author":{"_account_id":14448,"name":"James.Tsai","email":"jameslovee10@gmail.com","username":"James.Tsai"},"change_message_id":"119996adb5c0c8459b15b4e8eb61ef1788bf9da0","unresolved":false,"context_lines":[{"line_number":63,"context_line":"    def create_volume_from_snapshot(self, volume, snapshot):"},{"line_number":64,"context_line":"        \"\"\"Creates a volume from a snapshot."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        If volume_type extra specs includes \u0027replication: \u003cis\u003e True\u0027"},{"line_number":67,"context_line":"        the driver needs to create a volume replica (secondary),"},{"line_number":68,"context_line":"        and setup replication between the newly created volume and"},{"line_number":69,"context_line":"        the secondary volume."}],"source_content_type":"text/x-python","patch_set":5,"id":"5ad0253b_38e96f1b","line":66,"in_reply_to":"7ad32947_0e88aae6","updated":"2015-04-29 08:22:33.000000000","message":"Done","commit_id":"4e21f0d0b065bbd13c717740c6fcda52f05b1b3d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"6f4695c9154bd767618490f4a5192e115d6706a8","unresolved":false,"context_lines":[{"line_number":77,"context_line":"    def create_cloned_volume(self, volume, src_vref):"},{"line_number":78,"context_line":"        \"\"\"Creates a clone of the specified volume."},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"        If volume_type extra specs includes \u0027replication: \u003cis\u003e True\u0027 the"},{"line_number":81,"context_line":"        driver needs to create a volume replica (secondary)"},{"line_number":82,"context_line":"        and setup replication between the newly created volume"},{"line_number":83,"context_line":"        and the secondary volume."}],"source_content_type":"text/x-python","patch_set":5,"id":"7ad32947_ce519264","line":80,"updated":"2015-04-28 03:30:26.000000000","message":"Here","commit_id":"4e21f0d0b065bbd13c717740c6fcda52f05b1b3d"},{"author":{"_account_id":14448,"name":"James.Tsai","email":"jameslovee10@gmail.com","username":"James.Tsai"},"change_message_id":"119996adb5c0c8459b15b4e8eb61ef1788bf9da0","unresolved":false,"context_lines":[{"line_number":77,"context_line":"    def create_cloned_volume(self, volume, src_vref):"},{"line_number":78,"context_line":"        \"\"\"Creates a clone of the specified volume."},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"        If volume_type extra specs includes \u0027replication: \u003cis\u003e True\u0027 the"},{"line_number":81,"context_line":"        driver needs to create a volume replica (secondary)"},{"line_number":82,"context_line":"        and setup replication between the newly created volume"},{"line_number":83,"context_line":"        and the secondary volume."}],"source_content_type":"text/x-python","patch_set":5,"id":"5ad0253b_18eeb322","line":80,"in_reply_to":"7ad32947_ce519264","updated":"2015-04-29 08:22:33.000000000","message":"Done","commit_id":"4e21f0d0b065bbd13c717740c6fcda52f05b1b3d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"6f4695c9154bd767618490f4a5192e115d6706a8","unresolved":false,"context_lines":[{"line_number":99,"context_line":"    def delete_volume(self, volume):"},{"line_number":100,"context_line":"        \"\"\"Deletes a volume."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        If volume_type extra specs includes \u0027replication: \u003cis\u003e True\u0027"},{"line_number":103,"context_line":"        then the driver needs to delete the volume replica too."},{"line_number":104,"context_line":"        \"\"\""},{"line_number":105,"context_line":"        LOG.info(_LI(\u0027delete_volume volume id\u003d%s\u0027), volume[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":5,"id":"7ad32947_8e4b9ab0","line":102,"updated":"2015-04-28 03:30:26.000000000","message":"Here","commit_id":"4e21f0d0b065bbd13c717740c6fcda52f05b1b3d"},{"author":{"_account_id":14448,"name":"James.Tsai","email":"jameslovee10@gmail.com","username":"James.Tsai"},"change_message_id":"119996adb5c0c8459b15b4e8eb61ef1788bf9da0","unresolved":false,"context_lines":[{"line_number":99,"context_line":"    def delete_volume(self, volume):"},{"line_number":100,"context_line":"        \"\"\"Deletes a volume."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        If volume_type extra specs includes \u0027replication: \u003cis\u003e True\u0027"},{"line_number":103,"context_line":"        then the driver needs to delete the volume replica too."},{"line_number":104,"context_line":"        \"\"\""},{"line_number":105,"context_line":"        LOG.info(_LI(\u0027delete_volume volume id\u003d%s\u0027), volume[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":5,"id":"5ad0253b_f8f2d705","line":102,"in_reply_to":"7ad32947_8e4b9ab0","updated":"2015-04-29 08:22:33.000000000","message":"Done","commit_id":"4e21f0d0b065bbd13c717740c6fcda52f05b1b3d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"6f4695c9154bd767618490f4a5192e115d6706a8","unresolved":false,"context_lines":[{"line_number":157,"context_line":"        \"\"\"Removes an export for a volume.\"\"\""},{"line_number":158,"context_line":"        pass"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    def initialize_connection(self, volume, connector):"},{"line_number":161,"context_line":"        \"\"\"Initializes the connection and returns connection info."},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"        The iscsi driver returns a driver_volume_type of \u0027iscsi\u0027."}],"source_content_type":"text/x-python","patch_set":5,"id":"7ad32947_4e658243","line":160,"updated":"2015-04-28 03:30:26.000000000","message":"Need to add AddFCZone decorator","commit_id":"4e21f0d0b065bbd13c717740c6fcda52f05b1b3d"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"1830a3497fdfbf2b5d6c3432745daf418a4281d1","unresolved":false,"context_lines":[{"line_number":157,"context_line":"        \"\"\"Removes an export for a volume.\"\"\""},{"line_number":158,"context_line":"        pass"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    def initialize_connection(self, volume, connector):"},{"line_number":161,"context_line":"        \"\"\"Initializes the connection and returns connection info."},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"        The iscsi driver returns a driver_volume_type of \u0027iscsi\u0027."}],"source_content_type":"text/x-python","patch_set":5,"id":"5ad0253b_562637bb","line":160,"in_reply_to":"5ad0253b_23a028f4","updated":"2015-04-29 08:32:19.000000000","message":"Hi Kurt \u0026 xing-yang,\n\nOK, I would add in this patch. It would be on patchset #7. Thanks for your suggestion.","commit_id":"4e21f0d0b065bbd13c717740c6fcda52f05b1b3d"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"d63b066d3dd58149f0f3a5766986647e9e9dc9b0","unresolved":false,"context_lines":[{"line_number":157,"context_line":"        \"\"\"Removes an export for a volume.\"\"\""},{"line_number":158,"context_line":"        pass"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    def initialize_connection(self, volume, connector):"},{"line_number":161,"context_line":"        \"\"\"Initializes the connection and returns connection info."},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"        The iscsi driver returns a driver_volume_type of \u0027iscsi\u0027."}],"source_content_type":"text/x-python","patch_set":5,"id":"3acd31a7_1d23f006","line":160,"in_reply_to":"5ad0253b_562637bb","updated":"2015-05-04 06:40:49.000000000","message":"Hi Kurt \u0026 xing-yang,\n\nThe patchset #7 support FC auto zoning. Please help to review.\nMany thanks.","commit_id":"4e21f0d0b065bbd13c717740c6fcda52f05b1b3d"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"767b6c42b4dcda9645f51bf77ced3bfe763e0078","unresolved":false,"context_lines":[{"line_number":157,"context_line":"        \"\"\"Removes an export for a volume.\"\"\""},{"line_number":158,"context_line":"        pass"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    def initialize_connection(self, volume, connector):"},{"line_number":161,"context_line":"        \"\"\"Initializes the connection and returns connection info."},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"        The iscsi driver returns a driver_volume_type of \u0027iscsi\u0027."}],"source_content_type":"text/x-python","patch_set":5,"id":"7ad32947_ef067d1f","line":160,"in_reply_to":"7ad32947_4e658243","updated":"2015-04-28 12:01:46.000000000","message":"Hi xing-yang,\n\nThanks for your comments. Could we add this function in next bp? For some reason, we decided not to implement AutoZoning function now. If it is necessary function, please tell me.\n\nMany thanks.","commit_id":"4e21f0d0b065bbd13c717740c6fcda52f05b1b3d"},{"author":{"_account_id":6043,"name":"Kurt Martin","email":"kurt.f.martin@hpe.com","username":"kurt-f-martin"},"change_message_id":"eb1937353b57081abfe45bccdbc27b191e33a404","unresolved":false,"context_lines":[{"line_number":157,"context_line":"        \"\"\"Removes an export for a volume.\"\"\""},{"line_number":158,"context_line":"        pass"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    def initialize_connection(self, volume, connector):"},{"line_number":161,"context_line":"        \"\"\"Initializes the connection and returns connection info."},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"        The iscsi driver returns a driver_volume_type of \u0027iscsi\u0027."}],"source_content_type":"text/x-python","patch_set":5,"id":"5ad0253b_23a028f4","line":160,"in_reply_to":"7ad32947_6bcb7754","updated":"2015-04-28 21:38:05.000000000","message":"I agree with Xing, this should be added in this patch. I believe I suggested this back in patch set #3","commit_id":"4e21f0d0b065bbd13c717740c6fcda52f05b1b3d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e864070121d47d704db6c5427c96df216380baaa","unresolved":false,"context_lines":[{"line_number":157,"context_line":"        \"\"\"Removes an export for a volume.\"\"\""},{"line_number":158,"context_line":"        pass"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    def initialize_connection(self, volume, connector):"},{"line_number":161,"context_line":"        \"\"\"Initializes the connection and returns connection info."},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"        The iscsi driver returns a driver_volume_type of \u0027iscsi\u0027."}],"source_content_type":"text/x-python","patch_set":5,"id":"7ad32947_6bcb7754","line":160,"in_reply_to":"7ad32947_ef067d1f","updated":"2015-04-28 15:08:06.000000000","message":"Hi Jessy,\n\nWe do ask each FC driver to add this decorator.  Thanks.","commit_id":"4e21f0d0b065bbd13c717740c6fcda52f05b1b3d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"6f4695c9154bd767618490f4a5192e115d6706a8","unresolved":false,"context_lines":[{"line_number":182,"context_line":"                \u0027initiator\u0027: connector[\u0027initiator\u0027]})"},{"line_number":183,"context_line":"        return self.common.initialize_connection(volume, connector)"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"    def terminate_connection(self, volume, connector, **kwargs):"},{"line_number":186,"context_line":"        \"\"\"Disallow connection from connector\"\"\""},{"line_number":187,"context_line":"        LOG.info(_LI(\u0027terminate_connection volume id\u003d%s\u0027) % ("},{"line_number":188,"context_line":"            volume[\u0027id\u0027]))"}],"source_content_type":"text/x-python","patch_set":5,"id":"7ad32947_2e5a4684","line":185,"updated":"2015-04-28 03:30:26.000000000","message":"Need to add RemoveFCZone decorator","commit_id":"4e21f0d0b065bbd13c717740c6fcda52f05b1b3d"},{"author":{"_account_id":6043,"name":"Kurt Martin","email":"kurt.f.martin@hpe.com","username":"kurt-f-martin"},"change_message_id":"eb1937353b57081abfe45bccdbc27b191e33a404","unresolved":false,"context_lines":[{"line_number":182,"context_line":"                \u0027initiator\u0027: connector[\u0027initiator\u0027]})"},{"line_number":183,"context_line":"        return self.common.initialize_connection(volume, connector)"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"    def terminate_connection(self, volume, connector, **kwargs):"},{"line_number":186,"context_line":"        \"\"\"Disallow connection from connector\"\"\""},{"line_number":187,"context_line":"        LOG.info(_LI(\u0027terminate_connection volume id\u003d%s\u0027) % ("},{"line_number":188,"context_line":"            volume[\u0027id\u0027]))"}],"source_content_type":"text/x-python","patch_set":5,"id":"5ad0253b_c3af34e2","line":185,"in_reply_to":"7ad32947_2e5a4684","updated":"2015-04-28 21:38:05.000000000","message":"I agree with Xing, this should be added in this patch. I believe I suggested this back in patch set #3","commit_id":"4e21f0d0b065bbd13c717740c6fcda52f05b1b3d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"6f4695c9154bd767618490f4a5192e115d6706a8","unresolved":false,"context_lines":[{"line_number":235,"context_line":"        A tuple (retyped, model_update) where retyped is a boolean"},{"line_number":236,"context_line":"        indicating if the retype occurred, and the model_update includes"},{"line_number":237,"context_line":"        changes for the volume db."},{"line_number":238,"context_line":"        if diff[\u0027extra_specs\u0027] includes \u0027replication\u0027 then:"},{"line_number":239,"context_line":"            if  (\u0027True\u0027, _ ) then replication should be disabled:"},{"line_number":240,"context_line":"                Volume replica should be deleted"},{"line_number":241,"context_line":"                volume[\u0027replication_status\u0027] should be changed to \u0027disabled\u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"7ad32947_2ed126ce","line":238,"updated":"2015-04-28 03:30:26.000000000","message":"Here","commit_id":"4e21f0d0b065bbd13c717740c6fcda52f05b1b3d"},{"author":{"_account_id":14448,"name":"James.Tsai","email":"jameslovee10@gmail.com","username":"James.Tsai"},"change_message_id":"119996adb5c0c8459b15b4e8eb61ef1788bf9da0","unresolved":false,"context_lines":[{"line_number":235,"context_line":"        A tuple (retyped, model_update) where retyped is a boolean"},{"line_number":236,"context_line":"        indicating if the retype occurred, and the model_update includes"},{"line_number":237,"context_line":"        changes for the volume db."},{"line_number":238,"context_line":"        if diff[\u0027extra_specs\u0027] includes \u0027replication\u0027 then:"},{"line_number":239,"context_line":"            if  (\u0027True\u0027, _ ) then replication should be disabled:"},{"line_number":240,"context_line":"                Volume replica should be deleted"},{"line_number":241,"context_line":"                volume[\u0027replication_status\u0027] should be changed to \u0027disabled\u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"5ad0253b_78e7e740","line":238,"in_reply_to":"7ad32947_2ed126ce","updated":"2015-04-29 08:22:33.000000000","message":"Done","commit_id":"4e21f0d0b065bbd13c717740c6fcda52f05b1b3d"},{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"4c1fbad2546e142eab6ea3ed6422bb3e09982ff5","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        Can optionally return a Dictionary of changes"},{"line_number":51,"context_line":"        to the volume object to be persisted."},{"line_number":52,"context_line":"        \"\"\""},{"line_number":53,"context_line":"        LOG.info(_LI(\u0027create_volume volume id\u003d%s\u0027), volume[\u0027id\u0027])"},{"line_number":54,"context_line":"        return self.common.create_volume(volume)"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def create_volume_from_snapshot(self, volume, snapshot):"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a016987_8f6ca49d","line":53,"updated":"2015-05-14 15:22:07.000000000","message":"Try to keep consistency with other code, something like \"Creating volume %(vol_id)s\"","commit_id":"2e29892ce1d541fe1e6adb11264305d6efd03213"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"40cf25b11951da4b9c84ed48fc5c927dec7b4aac","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        Can optionally return a Dictionary of changes"},{"line_number":51,"context_line":"        to the volume object to be persisted."},{"line_number":52,"context_line":"        \"\"\""},{"line_number":53,"context_line":"        LOG.info(_LI(\u0027create_volume volume id\u003d%s\u0027), volume[\u0027id\u0027])"},{"line_number":54,"context_line":"        return self.common.create_volume(volume)"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def create_volume_from_snapshot(self, volume, snapshot):"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a016987_92091de0","line":53,"in_reply_to":"7a016987_8f6ca49d","updated":"2015-05-18 06:09:49.000000000","message":"Ok, I would check the LOG format. Thanks for suggestion.","commit_id":"2e29892ce1d541fe1e6adb11264305d6efd03213"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"4b4740e08d5d3f5e9cd45225388e901b73d1c8ed","unresolved":false,"context_lines":[{"line_number":163,"context_line":"    @zm_utils.RemoveFCZone"},{"line_number":164,"context_line":"    def terminate_connection(self, volume, connector, **kwargs):"},{"line_number":165,"context_line":"        \"\"\"Disallow connection from connector\"\"\""},{"line_number":166,"context_line":"        LOG.info(_LI(\u0027terminate_connection volume id\u003d%s\u0027) % ("},{"line_number":167,"context_line":"            volume[\u0027id\u0027]))"},{"line_number":168,"context_line":"        self.common.terminate_connection(volume, connector)"},{"line_number":169,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"7a016987_5ee9c419","line":166,"updated":"2015-05-14 14:27:49.000000000","message":"% \u003d\u003e ,","commit_id":"2e29892ce1d541fe1e6adb11264305d6efd03213"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"40cf25b11951da4b9c84ed48fc5c927dec7b4aac","unresolved":false,"context_lines":[{"line_number":163,"context_line":"    @zm_utils.RemoveFCZone"},{"line_number":164,"context_line":"    def terminate_connection(self, volume, connector, **kwargs):"},{"line_number":165,"context_line":"        \"\"\"Disallow connection from connector\"\"\""},{"line_number":166,"context_line":"        LOG.info(_LI(\u0027terminate_connection volume id\u003d%s\u0027) % ("},{"line_number":167,"context_line":"            volume[\u0027id\u0027]))"},{"line_number":168,"context_line":"        self.common.terminate_connection(volume, connector)"},{"line_number":169,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"7a016987_d2e31532","line":166,"in_reply_to":"7a016987_5ee9c419","updated":"2015-05-18 06:09:49.000000000","message":"Done","commit_id":"2e29892ce1d541fe1e6adb11264305d6efd03213"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"60eebddb12affaa61727b6bb4da955641be500e1","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        Can optionally return a Dictionary of changes"},{"line_number":51,"context_line":"        to the volume object to be persisted."},{"line_number":52,"context_line":"        \"\"\""},{"line_number":53,"context_line":"        LOG.info(_LI(\u0027create_volume volume id\u003d%(volume_id)s\u0027), {"},{"line_number":54,"context_line":"            \u0027volume_id\u0027: volume[\u0027id\u0027]})"},{"line_number":55,"context_line":"        return self.common.create_volume(volume)"},{"line_number":56,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"7a016987_9f6be81d","line":53,"updated":"2015-05-23 04:36:51.000000000","message":"These and other info messages below looks more appropriate as a debug. It is would not be informational to a normal user reading it.  Are they even necessary?","commit_id":"ff03b70a66f5c591b124929b85a10d10edf77533"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"8b43e767e0f898b36423c888b728de3d844c5ebd","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        Can optionally return a Dictionary of changes"},{"line_number":51,"context_line":"        to the volume object to be persisted."},{"line_number":52,"context_line":"        \"\"\""},{"line_number":53,"context_line":"        LOG.info(_LI(\u0027create_volume volume id\u003d%(volume_id)s\u0027), {"},{"line_number":54,"context_line":"            \u0027volume_id\u0027: volume[\u0027id\u0027]})"},{"line_number":55,"context_line":"        return self.common.create_volume(volume)"},{"line_number":56,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"7a016987_87afd27c","line":53,"in_reply_to":"7a016987_9f6be81d","updated":"2015-05-28 06:23:40.000000000","message":"You\u0027re right. I would move into debug information.","commit_id":"ff03b70a66f5c591b124929b85a10d10edf77533"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"d26e7a1741ef7a9ad15698b25bdcce56bebb0abd","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from cinder.volume import driver"},{"line_number":23,"context_line":"from cinder.volume.drivers.infortrend.eonstor_ds_cli import common_cli"},{"line_number":24,"context_line":"from cinder.zonemanager import utils as zm_utils"},{"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":18,"id":"5afe65bd_8b4b1a87","line":24,"updated":"2015-06-04 01:59:27.000000000","message":"It\u0027s not a standard, but most other FC drivers call this fczm_utils.  It would be nice to use the same alias name as others.","commit_id":"faf21f8d6f2868c500a1038d86d3c76a08a8c9b5"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"55766416df00fd6b42abce5df5e029a14dd5c949","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from cinder.volume import driver"},{"line_number":23,"context_line":"from cinder.volume.drivers.infortrend.eonstor_ds_cli import common_cli"},{"line_number":24,"context_line":"from cinder.zonemanager import utils as zm_utils"},{"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":18,"id":"5afe65bd_bebf36fa","line":24,"in_reply_to":"5afe65bd_8b4b1a87","updated":"2015-06-04 02:20:36.000000000","message":"Ok. I would use fczm_utils alias name and also on common_cli.py","commit_id":"faf21f8d6f2868c500a1038d86d3c76a08a8c9b5"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"d26e7a1741ef7a9ad15698b25bdcce56bebb0abd","unresolved":false,"context_lines":[{"line_number":26,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class InfortrendCLIFCDriver(driver.FibreChannelDriver):"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    \"\"\"Infortrend Fibre Channel Driver for Eonstor DS using CLI"},{"line_number":32,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"5afe65bd_5e51620d","line":29,"updated":"2015-06-04 01:59:27.000000000","message":"You are also missing get_volume_stats().\n\nYou also are missing the VERSION member var.","commit_id":"faf21f8d6f2868c500a1038d86d3c76a08a8c9b5"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"55766416df00fd6b42abce5df5e029a14dd5c949","unresolved":false,"context_lines":[{"line_number":26,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class InfortrendCLIFCDriver(driver.FibreChannelDriver):"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    \"\"\"Infortrend Fibre Channel Driver for Eonstor DS using CLI"},{"line_number":32,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"5afe65bd_def552cb","line":29,"in_reply_to":"5afe65bd_5e51620d","updated":"2015-06-04 02:20:36.000000000","message":"get_volume_stats() was on line 172. Do I miss any implementation?\n\nGood catch! I miss VERSION. I would add VERSION from common_cli. Thanks.","commit_id":"faf21f8d6f2868c500a1038d86d3c76a08a8c9b5"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"d26e7a1741ef7a9ad15698b25bdcce56bebb0abd","unresolved":false,"context_lines":[{"line_number":160,"context_line":"            \u0027connector initiator\u003d%(initiator)s\u0027, {"},{"line_number":161,"context_line":"                \u0027volume_id\u0027: volume[\u0027id\u0027],"},{"line_number":162,"context_line":"                \u0027initiator\u0027: connector[\u0027initiator\u0027]})"},{"line_number":163,"context_line":"        return self.common.initialize_connection(volume, connector)"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"    @zm_utils.RemoveFCZone"},{"line_number":166,"context_line":"    def terminate_connection(self, volume, connector, **kwargs):"}],"source_content_type":"text/x-python","patch_set":18,"id":"5afe65bd_5e2a827f","line":163,"updated":"2015-06-04 01:59:27.000000000","message":"You need to return the initiator_target_map in order to use the fczm_utils.AddFCZone.   AddFCZone will automatically create the FC Zone on the configured fabrics (switches), if and only if you return the initiator_target_map.\n\nAlso, you want to use the FCZM lookup service to find what mappings of initiator WWNS and target WWNS can actually see each other.\n\nTake a look at the 3PAR FC driver here:\n\nhttps://github.com/openstack/cinder/blob/master/cinder/volume/drivers/san/hp/hp_3par_fc.py#L228-L247","commit_id":"faf21f8d6f2868c500a1038d86d3c76a08a8c9b5"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"55766416df00fd6b42abce5df5e029a14dd5c949","unresolved":false,"context_lines":[{"line_number":160,"context_line":"            \u0027connector initiator\u003d%(initiator)s\u0027, {"},{"line_number":161,"context_line":"                \u0027volume_id\u0027: volume[\u0027id\u0027],"},{"line_number":162,"context_line":"                \u0027initiator\u0027: connector[\u0027initiator\u0027]})"},{"line_number":163,"context_line":"        return self.common.initialize_connection(volume, connector)"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"    @zm_utils.RemoveFCZone"},{"line_number":166,"context_line":"    def terminate_connection(self, volume, connector, **kwargs):"}],"source_content_type":"text/x-python","patch_set":18,"id":"5afe65bd_9ed7daec","line":163,"in_reply_to":"5afe65bd_5e2a827f","updated":"2015-06-04 02:20:36.000000000","message":"Thanks for suggestion.\n\nI implement this on common_cli.py.\nyou can see on line 1344-1380\n\nhttps://review.openstack.org/#/c/177113/18/cinder/volume/drivers/infortrend/eonstor_ds_cli/common_cli.py\n\nor on github \n\nhttps://github.com/infortrend-openstack/eonstor-ds-cinder-driver/blob/develop/src/eonstor_ds_cli/common_cli.py#L1344-L1380\n\nIf it has any missing implementation, please let me know. many thanks.","commit_id":"faf21f8d6f2868c500a1038d86d3c76a08a8c9b5"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"d26e7a1741ef7a9ad15698b25bdcce56bebb0abd","unresolved":false,"context_lines":[{"line_number":167,"context_line":"        \"\"\"Disallow connection from connector\"\"\""},{"line_number":168,"context_line":"        LOG.debug(\u0027terminate_connection volume id\u003d%(volume_id)s\u0027, {"},{"line_number":169,"context_line":"            \u0027volume_id\u0027: volume[\u0027id\u0027]})"},{"line_number":170,"context_line":"        self.common.terminate_connection(volume, connector)"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"    def get_volume_stats(self, refresh\u003dFalse):"},{"line_number":173,"context_line":"        \"\"\"Get volume stats."}],"source_content_type":"text/x-python","patch_set":18,"id":"5afe65bd_4b3c02e2","line":170,"updated":"2015-06-04 01:59:27.000000000","message":"This method needs to return something.   \n\nin order to use the fczm_utils.RemoveFCZone, you need to return the initiator_target_map in a data dictionary when the last volume has been removed for a host.   This is done to remove the FC zone on the configured FC fabrics.   \n\nOnly return the initiator_target_map if there are no more volumes attached to the host.","commit_id":"faf21f8d6f2868c500a1038d86d3c76a08a8c9b5"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"55766416df00fd6b42abce5df5e029a14dd5c949","unresolved":false,"context_lines":[{"line_number":167,"context_line":"        \"\"\"Disallow connection from connector\"\"\""},{"line_number":168,"context_line":"        LOG.debug(\u0027terminate_connection volume id\u003d%(volume_id)s\u0027, {"},{"line_number":169,"context_line":"            \u0027volume_id\u0027: volume[\u0027id\u0027]})"},{"line_number":170,"context_line":"        self.common.terminate_connection(volume, connector)"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"    def get_volume_stats(self, refresh\u003dFalse):"},{"line_number":173,"context_line":"        \"\"\"Get volume stats."}],"source_content_type":"text/x-python","patch_set":18,"id":"5afe65bd_7e2c1e02","line":170,"in_reply_to":"5afe65bd_4b3c02e2","updated":"2015-06-04 02:20:36.000000000","message":"Ok, I miss that. I would update on next patchset. Thanks.","commit_id":"faf21f8d6f2868c500a1038d86d3c76a08a8c9b5"},{"author":{"_account_id":14377,"name":"Apoorva","email":"apps.desh@gmail.com","username":"apoorvad"},"change_message_id":"ae99f17fe0a779d7c11f457e60c52b92c0b6f22a","unresolved":false,"context_lines":[{"line_number":96,"context_line":"                     host[\u0027host\u0027] is its name, and host[\u0027capabilities\u0027] is a"},{"line_number":97,"context_line":"                     dictionary of its reported capabilities."},{"line_number":98,"context_line":"        \"\"\""},{"line_number":99,"context_line":"        LOG.debug(\u0027migrate_volume volime id\u003d%(volume_id)s host\u003d%(host)s\u0027, {"},{"line_number":100,"context_line":"            \u0027volume_id\u0027: volume[\u0027id\u0027], \u0027host\u0027: host[\u0027host\u0027]})"},{"line_number":101,"context_line":"        return self.common.migrate_volume(volume, host)"},{"line_number":102,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"3afb71cf_b53791af","line":99,"updated":"2015-06-06 20:17:45.000000000","message":"typo: volime","commit_id":"6d84c045049d5fe34a2d2d3a8824a7c7b37383f0"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"08a9e60e463b3efc7a49ec56e299ed58b4535b8e","unresolved":false,"context_lines":[{"line_number":96,"context_line":"                     host[\u0027host\u0027] is its name, and host[\u0027capabilities\u0027] is a"},{"line_number":97,"context_line":"                     dictionary of its reported capabilities."},{"line_number":98,"context_line":"        \"\"\""},{"line_number":99,"context_line":"        LOG.debug(\u0027migrate_volume volime id\u003d%(volume_id)s host\u003d%(host)s\u0027, {"},{"line_number":100,"context_line":"            \u0027volume_id\u0027: volume[\u0027id\u0027], \u0027host\u0027: host[\u0027host\u0027]})"},{"line_number":101,"context_line":"        return self.common.migrate_volume(volume, host)"},{"line_number":102,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"3afb71cf_49ef9e87","line":99,"in_reply_to":"3afb71cf_b53791af","updated":"2015-06-08 09:45:11.000000000","message":"Done","commit_id":"6d84c045049d5fe34a2d2d3a8824a7c7b37383f0"},{"author":{"_account_id":14377,"name":"Apoorva","email":"apps.desh@gmail.com","username":"apoorvad"},"change_message_id":"ae99f17fe0a779d7c11f457e60c52b92c0b6f22a","unresolved":false,"context_lines":[{"line_number":179,"context_line":"            \u0027refresh\u0027: refresh})"},{"line_number":180,"context_line":"        return self.common.get_volume_stats(refresh)"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    def manage_existing(self, volume, existing_ref):"},{"line_number":183,"context_line":"        \"\"\"Manage an existing lun in the array."},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        The lun should be in a manageable pool backend, otherwise"}],"source_content_type":"text/x-python","patch_set":21,"id":"3afb71cf_d569ed8c","line":182,"updated":"2015-06-06 20:17:45.000000000","message":"Would you also like to add \"unmanage\" function and perform cleanup?","commit_id":"6d84c045049d5fe34a2d2d3a8824a7c7b37383f0"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"08a9e60e463b3efc7a49ec56e299ed58b4535b8e","unresolved":false,"context_lines":[{"line_number":179,"context_line":"            \u0027refresh\u0027: refresh})"},{"line_number":180,"context_line":"        return self.common.get_volume_stats(refresh)"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    def manage_existing(self, volume, existing_ref):"},{"line_number":183,"context_line":"        \"\"\"Manage an existing lun in the array."},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        The lun should be in a manageable pool backend, otherwise"}],"source_content_type":"text/x-python","patch_set":21,"id":"3afb71cf_215112d9","line":182,"in_reply_to":"3afb71cf_d569ed8c","updated":"2015-06-08 09:45:11.000000000","message":"Ok, I think it should rename and log \"doing unmanage\" in unmanage function.\n\nThanks for suggestion.","commit_id":"6d84c045049d5fe34a2d2d3a8824a7c7b37383f0"},{"author":{"_account_id":13203,"name":"Wilson Liu","email":"295988511@qq.com","username":"Bob-OpenStack"},"change_message_id":"7af8bb254e1d108a585530921cfed03c7975d3a6","unresolved":false,"context_lines":[{"line_number":165,"context_line":""},{"line_number":166,"context_line":"    @fczm_utils.RemoveFCZone"},{"line_number":167,"context_line":"    def terminate_connection(self, volume, connector, **kwargs):"},{"line_number":168,"context_line":"        \"\"\"Disallow connection from connector\"\"\""},{"line_number":169,"context_line":"        LOG.debug(\u0027terminate_connection volume id\u003d%(volume_id)s\u0027, {"},{"line_number":170,"context_line":"            \u0027volume_id\u0027: volume[\u0027id\u0027]})"},{"line_number":171,"context_line":"        return self.common.terminate_connection(volume, connector)"}],"source_content_type":"text/x-python","patch_set":24,"id":"3afb71cf_1405f944","line":168,"updated":"2015-06-09 11:43:00.000000000","message":"Need a period by the end of the comment:\n\"\"\"Disallow connection from connector\"\"\"-\u003e\"\"\"Disallow connection from connector.\"\"\"","commit_id":"c4d0818d1c26191fed581b8f7918f870cd63b7c1"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"2845f463a93d00ddfdaa0f5fb5da74a8975c1d40","unresolved":false,"context_lines":[{"line_number":165,"context_line":""},{"line_number":166,"context_line":"    @fczm_utils.RemoveFCZone"},{"line_number":167,"context_line":"    def terminate_connection(self, volume, connector, **kwargs):"},{"line_number":168,"context_line":"        \"\"\"Disallow connection from connector\"\"\""},{"line_number":169,"context_line":"        LOG.debug(\u0027terminate_connection volume id\u003d%(volume_id)s\u0027, {"},{"line_number":170,"context_line":"            \u0027volume_id\u0027: volume[\u0027id\u0027]})"},{"line_number":171,"context_line":"        return self.common.terminate_connection(volume, connector)"}],"source_content_type":"text/x-python","patch_set":24,"id":"3afb71cf_9b944643","line":168,"in_reply_to":"3afb71cf_1405f944","updated":"2015-06-10 10:54:26.000000000","message":"Done","commit_id":"c4d0818d1c26191fed581b8f7918f870cd63b7c1"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"2bb4337658c42f843f0411ad68e124ea0ff0818d","unresolved":false,"context_lines":[{"line_number":141,"context_line":"    def initialize_connection(self, volume, connector):"},{"line_number":142,"context_line":"        \"\"\"Initializes the connection and returns connection information."},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        The iscsi driver returns a driver_volume_type of \u0027iscsi\u0027."},{"line_number":145,"context_line":"        The format of the driver data is defined in _get_iscsi_properties."},{"line_number":146,"context_line":"        Example return value::"},{"line_number":147,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_eb6e4c2e","line":144,"updated":"2015-06-16 18:12:10.000000000","message":"This comment doesn\u0027t seem right at all given that we are in the FC code.","commit_id":"9d6cdb555ce292d17a644c1d5b9110519cd52734"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"24143903921844f7ea5562e484be09d545af3d27","unresolved":false,"context_lines":[{"line_number":141,"context_line":"    def initialize_connection(self, volume, connector):"},{"line_number":142,"context_line":"        \"\"\"Initializes the connection and returns connection information."},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        The iscsi driver returns a driver_volume_type of \u0027iscsi\u0027."},{"line_number":145,"context_line":"        The format of the driver data is defined in _get_iscsi_properties."},{"line_number":146,"context_line":"        Example return value::"},{"line_number":147,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_ef4166aa","line":144,"in_reply_to":"fa32b979_eb6e4c2e","updated":"2015-06-17 03:48:47.000000000","message":"Done","commit_id":"9d6cdb555ce292d17a644c1d5b9110519cd52734"}],"cinder/volume/drivers/infortrend/infortrend_iscsi_cli.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"92a390427874a3fd437103a197565a0a070ee677","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    \"\"\""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":37,"context_line":"        LOG.info(_LI(\u0027__init__\u0027))"},{"line_number":38,"context_line":"        super(InfortrendCLIISCSIDriver, self).__init__(*args, **kwargs)"},{"line_number":39,"context_line":"        self.common \u003d common_cli.InfortrendCommon("},{"line_number":40,"context_line":"            \u0027iSCSI\u0027, configuration\u003dself.configuration)"}],"source_content_type":"text/x-python","patch_set":3,"id":"bab921fb_71f44cf1","line":37,"updated":"2015-04-24 15:02:22.000000000","message":"This seems unnecessary.","commit_id":"456fe18e13bb91f5a16cdf25b0d9a28e21ac6bcb"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"451209206929ff47bb83b4a97010e0c575b531c2","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    \"\"\""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":37,"context_line":"        LOG.info(_LI(\u0027__init__\u0027))"},{"line_number":38,"context_line":"        super(InfortrendCLIISCSIDriver, self).__init__(*args, **kwargs)"},{"line_number":39,"context_line":"        self.common \u003d common_cli.InfortrendCommon("},{"line_number":40,"context_line":"            \u0027iSCSI\u0027, configuration\u003dself.configuration)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9abe1de1_bd0ea7e3","line":37,"in_reply_to":"bab921fb_71f44cf1","updated":"2015-04-27 09:21:18.000000000","message":"Done","commit_id":"456fe18e13bb91f5a16cdf25b0d9a28e21ac6bcb"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"92a390427874a3fd437103a197565a0a070ee677","unresolved":false,"context_lines":[{"line_number":40,"context_line":"            \u0027iSCSI\u0027, configuration\u003dself.configuration)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def check_for_setup_error(self):"},{"line_number":43,"context_line":"        LOG.info(_LI(\u0027check_for_setup_error start\u0027))"},{"line_number":44,"context_line":"        self.common.check_for_setup_error()"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def create_volume(self, volume):"}],"source_content_type":"text/x-python","patch_set":3,"id":"bab921fb_51cee8b4","line":43,"updated":"2015-04-24 15:02:22.000000000","message":"I would at least make this a debug level log message.","commit_id":"456fe18e13bb91f5a16cdf25b0d9a28e21ac6bcb"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"451209206929ff47bb83b4a97010e0c575b531c2","unresolved":false,"context_lines":[{"line_number":40,"context_line":"            \u0027iSCSI\u0027, configuration\u003dself.configuration)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def check_for_setup_error(self):"},{"line_number":43,"context_line":"        LOG.info(_LI(\u0027check_for_setup_error start\u0027))"},{"line_number":44,"context_line":"        self.common.check_for_setup_error()"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def create_volume(self, volume):"}],"source_content_type":"text/x-python","patch_set":3,"id":"9abe1de1_9d13e30d","line":43,"in_reply_to":"bab921fb_51cee8b4","updated":"2015-04-27 09:21:18.000000000","message":"Done","commit_id":"456fe18e13bb91f5a16cdf25b0d9a28e21ac6bcb"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"92a390427874a3fd437103a197565a0a070ee677","unresolved":false,"context_lines":[{"line_number":149,"context_line":"        Can optionally return a Dictionary of changes"},{"line_number":150,"context_line":"        to the volume object to be persisted."},{"line_number":151,"context_line":"        \"\"\""},{"line_number":152,"context_line":"        LOG.info(_LI(\u0027create_export volume provider_location\u003d%s\u0027) % ("},{"line_number":153,"context_line":"            volume[\u0027provider_location\u0027]))"},{"line_number":154,"context_line":"        return self.common.create_export(context, volume)"},{"line_number":155,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"bab921fb_f1561cd1","line":152,"updated":"2015-04-24 15:02:22.000000000","message":"% \u003d\u003e ,","commit_id":"456fe18e13bb91f5a16cdf25b0d9a28e21ac6bcb"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"451209206929ff47bb83b4a97010e0c575b531c2","unresolved":false,"context_lines":[{"line_number":149,"context_line":"        Can optionally return a Dictionary of changes"},{"line_number":150,"context_line":"        to the volume object to be persisted."},{"line_number":151,"context_line":"        \"\"\""},{"line_number":152,"context_line":"        LOG.info(_LI(\u0027create_export volume provider_location\u003d%s\u0027) % ("},{"line_number":153,"context_line":"            volume[\u0027provider_location\u0027]))"},{"line_number":154,"context_line":"        return self.common.create_export(context, volume)"},{"line_number":155,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9abe1de1_7df92fc8","line":152,"in_reply_to":"bab921fb_f1561cd1","updated":"2015-04-27 09:21:18.000000000","message":"Done","commit_id":"456fe18e13bb91f5a16cdf25b0d9a28e21ac6bcb"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"92a390427874a3fd437103a197565a0a070ee677","unresolved":false,"context_lines":[{"line_number":229,"context_line":"        return self.common.manage_existing_get_size(volume, existing_ref)"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"    def retype(self, ctxt, volume, new_type, diff, host):"},{"line_number":232,"context_line":"        \"\"\"Convert the volume to be of the new type."},{"line_number":233,"context_line":"            Returns either:"},{"line_number":234,"context_line":"        A boolean indicating whether the retype occurred, or"},{"line_number":235,"context_line":"        A tuple (retyped, model_update) where retyped is a boolean"}],"source_content_type":"text/x-python","patch_set":3,"id":"bab921fb_d168b889","line":232,"updated":"2015-04-24 15:02:22.000000000","message":"Need a blank line after the first line.","commit_id":"456fe18e13bb91f5a16cdf25b0d9a28e21ac6bcb"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"451209206929ff47bb83b4a97010e0c575b531c2","unresolved":false,"context_lines":[{"line_number":229,"context_line":"        return self.common.manage_existing_get_size(volume, existing_ref)"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"    def retype(self, ctxt, volume, new_type, diff, host):"},{"line_number":232,"context_line":"        \"\"\"Convert the volume to be of the new type."},{"line_number":233,"context_line":"            Returns either:"},{"line_number":234,"context_line":"        A boolean indicating whether the retype occurred, or"},{"line_number":235,"context_line":"        A tuple (retyped, model_update) where retyped is a boolean"}],"source_content_type":"text/x-python","patch_set":3,"id":"9abe1de1_5df66bd8","line":232,"in_reply_to":"bab921fb_d168b889","updated":"2015-04-27 09:21:18.000000000","message":"Done","commit_id":"456fe18e13bb91f5a16cdf25b0d9a28e21ac6bcb"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"6f4695c9154bd767618490f4a5192e115d6706a8","unresolved":false,"context_lines":[{"line_number":39,"context_line":"            \u0027iSCSI\u0027, configuration\u003dself.configuration)"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def check_for_setup_error(self):"},{"line_number":42,"context_line":"        LOG.debug(_LI(\u0027check_for_setup_error start\u0027))"},{"line_number":43,"context_line":"        self.common.check_for_setup_error()"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def create_volume(self, volume):"}],"source_content_type":"text/x-python","patch_set":5,"id":"7ad32947_0e878a10","line":42,"updated":"2015-04-28 03:30:26.000000000","message":"LOG.debug doesn\u0027t need _LI.","commit_id":"4e21f0d0b065bbd13c717740c6fcda52f05b1b3d"},{"author":{"_account_id":14448,"name":"James.Tsai","email":"jameslovee10@gmail.com","username":"James.Tsai"},"change_message_id":"119996adb5c0c8459b15b4e8eb61ef1788bf9da0","unresolved":false,"context_lines":[{"line_number":39,"context_line":"            \u0027iSCSI\u0027, configuration\u003dself.configuration)"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def check_for_setup_error(self):"},{"line_number":42,"context_line":"        LOG.debug(_LI(\u0027check_for_setup_error start\u0027))"},{"line_number":43,"context_line":"        self.common.check_for_setup_error()"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def create_volume(self, volume):"}],"source_content_type":"text/x-python","patch_set":5,"id":"5ad0253b_58e42b3a","line":42,"in_reply_to":"7ad32947_0e878a10","updated":"2015-04-29 08:22:33.000000000","message":"Done","commit_id":"4e21f0d0b065bbd13c717740c6fcda52f05b1b3d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"6f4695c9154bd767618490f4a5192e115d6706a8","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        self.common.check_for_setup_error()"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def create_volume(self, volume):"},{"line_number":46,"context_line":"        \"\"\"Creates a volume. Can optionally return a Dictionary of"},{"line_number":47,"context_line":"        changes to the volume object to be persisted."},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        If volume_type extra specs includes"}],"source_content_type":"text/x-python","patch_set":5,"id":"7ad32947_0eb54acc","line":46,"updated":"2015-04-28 03:30:26.000000000","message":"http://docs.openstack.org/developer/hacking/#docstrings\n\nA multi line docstring has a one-line summary, less than 80 characters.","commit_id":"4e21f0d0b065bbd13c717740c6fcda52f05b1b3d"},{"author":{"_account_id":14448,"name":"James.Tsai","email":"jameslovee10@gmail.com","username":"James.Tsai"},"change_message_id":"119996adb5c0c8459b15b4e8eb61ef1788bf9da0","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        self.common.check_for_setup_error()"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def create_volume(self, volume):"},{"line_number":46,"context_line":"        \"\"\"Creates a volume. Can optionally return a Dictionary of"},{"line_number":47,"context_line":"        changes to the volume object to be persisted."},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        If volume_type extra specs includes"}],"source_content_type":"text/x-python","patch_set":5,"id":"5ad0253b_38d04f53","line":46,"in_reply_to":"7ad32947_0eb54acc","updated":"2015-04-29 08:22:33.000000000","message":"Done","commit_id":"4e21f0d0b065bbd13c717740c6fcda52f05b1b3d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"6f4695c9154bd767618490f4a5192e115d6706a8","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        changes to the volume object to be persisted."},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        If volume_type extra specs includes"},{"line_number":50,"context_line":"        \u0027capabilities:replication \u003cis\u003e True\u0027 the driver"},{"line_number":51,"context_line":"        needs to create a volume replica (secondary), and setup replication"},{"line_number":52,"context_line":"        between the newly created volume and the secondary volume."},{"line_number":53,"context_line":"        Returned dictionary should include:"}],"source_content_type":"text/x-python","patch_set":5,"id":"7ad32947_8eaa7a6f","line":50,"updated":"2015-04-28 03:30:26.000000000","message":"Do you really intend to support replication? I don\u0027t see replication API\u0027s, i.e., promote_replica, reenable_replica, implemented in this driver.   Also there is on-going work on replication version 2 design, you should wait until that is complete to add replication support to your driver.\n\nhttps://review.openstack.org/#/c/155644/","commit_id":"4e21f0d0b065bbd13c717740c6fcda52f05b1b3d"},{"author":{"_account_id":14448,"name":"James.Tsai","email":"jameslovee10@gmail.com","username":"James.Tsai"},"change_message_id":"119996adb5c0c8459b15b4e8eb61ef1788bf9da0","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        changes to the volume object to be persisted."},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        If volume_type extra specs includes"},{"line_number":50,"context_line":"        \u0027capabilities:replication \u003cis\u003e True\u0027 the driver"},{"line_number":51,"context_line":"        needs to create a volume replica (secondary), and setup replication"},{"line_number":52,"context_line":"        between the newly created volume and the secondary volume."},{"line_number":53,"context_line":"        Returned dictionary should include:"}],"source_content_type":"text/x-python","patch_set":5,"id":"5ad0253b_d8cefbb3","line":50,"in_reply_to":"7ad32947_8eaa7a6f","updated":"2015-04-29 08:22:33.000000000","message":"Done","commit_id":"4e21f0d0b065bbd13c717740c6fcda52f05b1b3d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"6f4695c9154bd767618490f4a5192e115d6706a8","unresolved":false,"context_lines":[{"line_number":62,"context_line":"    def create_volume_from_snapshot(self, volume, snapshot):"},{"line_number":63,"context_line":"        \"\"\"Creates a volume from a snapshot."},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        If volume_type extra specs includes \u0027replication: \u003cis\u003e True\u0027"},{"line_number":66,"context_line":"        the driver needs to create a volume replica (secondary),"},{"line_number":67,"context_line":"        and setup replication between the newly created volume and"},{"line_number":68,"context_line":"        the secondary volume."}],"source_content_type":"text/x-python","patch_set":5,"id":"7ad32947_4ee222d7","line":65,"updated":"2015-04-28 03:30:26.000000000","message":"Same comment as above.","commit_id":"4e21f0d0b065bbd13c717740c6fcda52f05b1b3d"},{"author":{"_account_id":14448,"name":"James.Tsai","email":"jameslovee10@gmail.com","username":"James.Tsai"},"change_message_id":"119996adb5c0c8459b15b4e8eb61ef1788bf9da0","unresolved":false,"context_lines":[{"line_number":62,"context_line":"    def create_volume_from_snapshot(self, volume, snapshot):"},{"line_number":63,"context_line":"        \"\"\"Creates a volume from a snapshot."},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        If volume_type extra specs includes \u0027replication: \u003cis\u003e True\u0027"},{"line_number":66,"context_line":"        the driver needs to create a volume replica (secondary),"},{"line_number":67,"context_line":"        and setup replication between the newly created volume and"},{"line_number":68,"context_line":"        the secondary volume."}],"source_content_type":"text/x-python","patch_set":5,"id":"5ad0253b_58bb0b0f","line":65,"in_reply_to":"7ad32947_4ee222d7","updated":"2015-04-29 08:22:33.000000000","message":"Done","commit_id":"4e21f0d0b065bbd13c717740c6fcda52f05b1b3d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"6f4695c9154bd767618490f4a5192e115d6706a8","unresolved":false,"context_lines":[{"line_number":76,"context_line":"    def create_cloned_volume(self, volume, src_vref):"},{"line_number":77,"context_line":"        \"\"\"Creates a clone of the specified volume."},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"        If volume_type extra specs includes \u0027replication: \u003cis\u003e True\u0027 the"},{"line_number":80,"context_line":"        driver needs to create a volume replica (secondary)"},{"line_number":81,"context_line":"        and setup replication between the newly created volume"},{"line_number":82,"context_line":"        and the secondary volume."}],"source_content_type":"text/x-python","patch_set":5,"id":"7ad32947_eed1eefc","line":79,"updated":"2015-04-28 03:30:26.000000000","message":"Here too.","commit_id":"4e21f0d0b065bbd13c717740c6fcda52f05b1b3d"},{"author":{"_account_id":14448,"name":"James.Tsai","email":"jameslovee10@gmail.com","username":"James.Tsai"},"change_message_id":"119996adb5c0c8459b15b4e8eb61ef1788bf9da0","unresolved":false,"context_lines":[{"line_number":76,"context_line":"    def create_cloned_volume(self, volume, src_vref):"},{"line_number":77,"context_line":"        \"\"\"Creates a clone of the specified volume."},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"        If volume_type extra specs includes \u0027replication: \u003cis\u003e True\u0027 the"},{"line_number":80,"context_line":"        driver needs to create a volume replica (secondary)"},{"line_number":81,"context_line":"        and setup replication between the newly created volume"},{"line_number":82,"context_line":"        and the secondary volume."}],"source_content_type":"text/x-python","patch_set":5,"id":"5ad0253b_38372fb2","line":79,"in_reply_to":"7ad32947_eed1eefc","updated":"2015-04-29 08:22:33.000000000","message":"Done","commit_id":"4e21f0d0b065bbd13c717740c6fcda52f05b1b3d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"6f4695c9154bd767618490f4a5192e115d6706a8","unresolved":false,"context_lines":[{"line_number":98,"context_line":"    def delete_volume(self, volume):"},{"line_number":99,"context_line":"        \"\"\"Deletes a volume."},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        If volume_type extra specs includes \u0027replication: \u003cis\u003e True\u0027"},{"line_number":102,"context_line":"        then the driver needs to delete the volume replica too."},{"line_number":103,"context_line":"        \"\"\""},{"line_number":104,"context_line":"        LOG.info(_LI(\u0027delete_volume volume id\u003d%s\u0027), volume[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":5,"id":"7ad32947_6e04be7d","line":101,"updated":"2015-04-28 03:30:26.000000000","message":"Here too.","commit_id":"4e21f0d0b065bbd13c717740c6fcda52f05b1b3d"},{"author":{"_account_id":14448,"name":"James.Tsai","email":"jameslovee10@gmail.com","username":"James.Tsai"},"change_message_id":"119996adb5c0c8459b15b4e8eb61ef1788bf9da0","unresolved":false,"context_lines":[{"line_number":98,"context_line":"    def delete_volume(self, volume):"},{"line_number":99,"context_line":"        \"\"\"Deletes a volume."},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        If volume_type extra specs includes \u0027replication: \u003cis\u003e True\u0027"},{"line_number":102,"context_line":"        then the driver needs to delete the volume replica too."},{"line_number":103,"context_line":"        \"\"\""},{"line_number":104,"context_line":"        LOG.info(_LI(\u0027delete_volume volume id\u003d%s\u0027), volume[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":5,"id":"5ad0253b_f8409709","line":101,"in_reply_to":"7ad32947_6e04be7d","updated":"2015-04-29 08:22:33.000000000","message":"Done","commit_id":"4e21f0d0b065bbd13c717740c6fcda52f05b1b3d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"6f4695c9154bd767618490f4a5192e115d6706a8","unresolved":false,"context_lines":[{"line_number":235,"context_line":"        A tuple (retyped, model_update) where retyped is a boolean"},{"line_number":236,"context_line":"        indicating if the retype occurred, and the model_update includes"},{"line_number":237,"context_line":"        changes for the volume db."},{"line_number":238,"context_line":"        if diff[\u0027extra_specs\u0027] includes \u0027replication\u0027 then:"},{"line_number":239,"context_line":"            if  (\u0027True\u0027, _ ) then replication should be disabled:"},{"line_number":240,"context_line":"                Volume replica should be deleted"},{"line_number":241,"context_line":"                volume[\u0027replication_status\u0027] should be changed to \u0027disabled\u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"7ad32947_8eef1ab0","line":238,"updated":"2015-04-28 03:30:26.000000000","message":"Here","commit_id":"4e21f0d0b065bbd13c717740c6fcda52f05b1b3d"},{"author":{"_account_id":14448,"name":"James.Tsai","email":"jameslovee10@gmail.com","username":"James.Tsai"},"change_message_id":"119996adb5c0c8459b15b4e8eb61ef1788bf9da0","unresolved":false,"context_lines":[{"line_number":235,"context_line":"        A tuple (retyped, model_update) where retyped is a boolean"},{"line_number":236,"context_line":"        indicating if the retype occurred, and the model_update includes"},{"line_number":237,"context_line":"        changes for the volume db."},{"line_number":238,"context_line":"        if diff[\u0027extra_specs\u0027] includes \u0027replication\u0027 then:"},{"line_number":239,"context_line":"            if  (\u0027True\u0027, _ ) then replication should be disabled:"},{"line_number":240,"context_line":"                Volume replica should be deleted"},{"line_number":241,"context_line":"                volume[\u0027replication_status\u0027] should be changed to \u0027disabled\u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"5ad0253b_b84b3f2b","line":238,"in_reply_to":"7ad32947_8eef1ab0","updated":"2015-04-29 08:22:33.000000000","message":"Done","commit_id":"4e21f0d0b065bbd13c717740c6fcda52f05b1b3d"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"60eebddb12affaa61727b6bb4da955641be500e1","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        Can optionally return a Dictionary of changes"},{"line_number":49,"context_line":"        to the volume object to be persisted."},{"line_number":50,"context_line":"        \"\"\""},{"line_number":51,"context_line":"        LOG.info(_LI(\u0027create_volume volume id\u003d%(volume_id)s\u0027), {"},{"line_number":52,"context_line":"            \u0027volume_id\u0027: volume[\u0027id\u0027]})"},{"line_number":53,"context_line":"        return self.common.create_volume(volume)"},{"line_number":54,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"7a016987_bf70e40b","line":51,"updated":"2015-05-23 04:36:51.000000000","message":"These and other info messages below  looks more appropriate as a debug.  It is would not be informational to a normal user reading it.  Are they even necessary?","commit_id":"ff03b70a66f5c591b124929b85a10d10edf77533"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"8b43e767e0f898b36423c888b728de3d844c5ebd","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        Can optionally return a Dictionary of changes"},{"line_number":49,"context_line":"        to the volume object to be persisted."},{"line_number":50,"context_line":"        \"\"\""},{"line_number":51,"context_line":"        LOG.info(_LI(\u0027create_volume volume id\u003d%(volume_id)s\u0027), {"},{"line_number":52,"context_line":"            \u0027volume_id\u0027: volume[\u0027id\u0027]})"},{"line_number":53,"context_line":"        return self.common.create_volume(volume)"},{"line_number":54,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"7a016987_27c7fe46","line":51,"in_reply_to":"7a016987_bf70e40b","updated":"2015-05-28 06:23:40.000000000","message":"Done","commit_id":"ff03b70a66f5c591b124929b85a10d10edf77533"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"79d57c9a31c7200a8293b970545f689ebb72fb64","unresolved":false,"context_lines":[{"line_number":94,"context_line":"                     host[\u0027host\u0027] is its name, and host[\u0027capabilities\u0027] is a"},{"line_number":95,"context_line":"                     dictionary of its reported capabilities."},{"line_number":96,"context_line":"        \"\"\""},{"line_number":97,"context_line":"        LOG.debug(\u0027migrate_volume volime id\u003d%(volume_id)s host\u003d%(host)s\u0027, {"},{"line_number":98,"context_line":"            \u0027volume_id\u0027: volume[\u0027id\u0027], \u0027host\u0027: host[\u0027host\u0027]})"},{"line_number":99,"context_line":"        return self.common.migrate_volume(volume, host)"},{"line_number":100,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"3afb71cf_18eff5b1","line":97,"updated":"2015-06-04 21:09:17.000000000","message":"Typo \"volime\".","commit_id":"6d84c045049d5fe34a2d2d3a8824a7c7b37383f0"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"08a9e60e463b3efc7a49ec56e299ed58b4535b8e","unresolved":false,"context_lines":[{"line_number":94,"context_line":"                     host[\u0027host\u0027] is its name, and host[\u0027capabilities\u0027] is a"},{"line_number":95,"context_line":"                     dictionary of its reported capabilities."},{"line_number":96,"context_line":"        \"\"\""},{"line_number":97,"context_line":"        LOG.debug(\u0027migrate_volume volime id\u003d%(volume_id)s host\u003d%(host)s\u0027, {"},{"line_number":98,"context_line":"            \u0027volume_id\u0027: volume[\u0027id\u0027], \u0027host\u0027: host[\u0027host\u0027]})"},{"line_number":99,"context_line":"        return self.common.migrate_volume(volume, host)"},{"line_number":100,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"3afb71cf_015f36e6","line":97,"in_reply_to":"3afb71cf_18eff5b1","updated":"2015-06-08 09:45:11.000000000","message":"Done","commit_id":"6d84c045049d5fe34a2d2d3a8824a7c7b37383f0"},{"author":{"_account_id":14377,"name":"Apoorva","email":"apps.desh@gmail.com","username":"apoorvad"},"change_message_id":"ae99f17fe0a779d7c11f457e60c52b92c0b6f22a","unresolved":false,"context_lines":[{"line_number":175,"context_line":"            \u0027refresh\u0027: refresh})"},{"line_number":176,"context_line":"        return self.common.get_volume_stats(refresh)"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"    def manage_existing(self, volume, existing_ref):"},{"line_number":179,"context_line":"        \"\"\"Manage an existing lun in the array."},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        The lun should be in a manageable pool backend, otherwise"}],"source_content_type":"text/x-python","patch_set":21,"id":"3afb71cf_f56ce99d","line":178,"updated":"2015-06-06 20:17:45.000000000","message":"Would you also like to add \"unmanage\" function?","commit_id":"6d84c045049d5fe34a2d2d3a8824a7c7b37383f0"},{"author":{"_account_id":15653,"name":"Jessy Lee","email":"jessy1092@gmail.com","username":"JessyLee"},"change_message_id":"08a9e60e463b3efc7a49ec56e299ed58b4535b8e","unresolved":false,"context_lines":[{"line_number":175,"context_line":"            \u0027refresh\u0027: refresh})"},{"line_number":176,"context_line":"        return self.common.get_volume_stats(refresh)"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"    def manage_existing(self, volume, existing_ref):"},{"line_number":179,"context_line":"        \"\"\"Manage an existing lun in the array."},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        The lun should be in a manageable pool backend, otherwise"}],"source_content_type":"text/x-python","patch_set":21,"id":"3afb71cf_c1823e00","line":178,"in_reply_to":"3afb71cf_f56ce99d","updated":"2015-06-08 09:45:11.000000000","message":"Same as Fiber","commit_id":"6d84c045049d5fe34a2d2d3a8824a7c7b37383f0"}]}
